Problem
A logistics company depended on an aging internal .NET application: no API, manual deployments, and a database schema nobody dared touch.
Solution
Instead of a rewrite, we ran a phased strangler migration: a documented REST API layered over the legacy core, containerized deployments, and incremental extraction of the highest-churn modules into modern services.
Architecture
An API gateway in front of the legacy monolith, new .NET services in Docker on AWS, PostgreSQL for extracted modules, and CI/CD with automated database migrations.
Challenges
The system could never stop running. Every phase shipped behind feature flags with a tested rollback path before any traffic moved.
Results
Deployments went from a monthly manual event to a daily non-event, and new integrations now build against a documented API instead of the legacy database.