Logistics · GCC

Legacy Monolith Migration for a Logistics Operator 

At a Glance

The result, up front

Challenge

A logistics operator needed to modernize a legacy .NET monolith without disrupting daily distribution operations.

Solution

We used the strangler-fig pattern with Azure Kubernetes Service, an API gateway, and real-time IoT tracking dashboards.

Outcomes

  • API response times cut by more than half
  • Cutover invisible to eighteen working warehouses
  • Monolith down to a scheduling stub in eleven months
The Client

Where this project started

The system running this operator's eighteen warehouses was a .NET Framework application first deployed in 2011. The two developers who understood it had both left. Nightly batch jobs were stretching toward morning, and the business wanted live shipment tracking that the old architecture simply couldn't host.

Management had been burned before by a big-bang replacement pitch from another vendor. What they asked us for was the opposite: change the engine without ever stopping the truck.

How It Went

The work, including the part that went sideways

We spent the first two weeks doing nothing but archaeology: reading code and tracing batch jobs until we knew which modules actually mattered. Then a team of seven began strangling the monolith one capability at a time, routing traffic through an API gateway so each new .NET 8 service on AKS could take over a slice while the old system kept serving the rest.

The ordering module nearly caught us out. Traffic diffing between old and new showed pricing mismatches on about one order in two hundred, and the culprit was an undocumented stored procedure handling contract-pricing edge cases that existed nowhere in the application code. We froze that cutover for three weeks, ported the logic with a test suite reproducing every case we'd seen in the diff, and only then flipped the switch. Nobody in the warehouses noticed either the freeze or the flip, which was the whole point.

Eleven months in, the monolith was down to a scheduling stub, API response times had dropped by more than half, and the live IoT tracking dashboards were running on the same event stream the new services already produced.

Stack.NET 8Azure Kubernetes ServiceAzure API ManagementSQL ServerRabbitMQSignalRGrafana

“Every vendor promised zero downtime. This is the first one that treated our undocumented stored procedures as their problem instead of our fault.”

IT Director, GCC logistics operator

Facing something similar in logistics?