Downtime during migration
Zero
Deploy frequency
Monthly to daily
Delivery
Phased, fixed-scope sprints

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.