Case study
Migrating legacy TMS/WMS to the cloud
A Memphis-based third-party logistics provider re-platformed an ageing on-prem TMS and WMS onto Microsoft Azure: a phased, minimal-downtime migration built for scale and peak-season resilience.
- Infrastructure cost
- ↓20%Infrastructure cost$210K → $168K a month
- Peak-season uptime
- 99.9%Peak-season uptimeSLA target met
- Elastic scale to peak
- 3×Elastic scale to peak
- Cutover downtime
- <4hCutover downtimeOne planned window
An ageing on-prem stack at breaking point
A Memphis, Tennessee-based third-party logistics provider runs its TMS and WMS across 12 distribution centers, handling around 40 million order lines a year. On end-of-life hardware with fixed capacity, four problems compounded every peak season. The engagement ran around ten months, phased, for the CIO and infrastructure team.
No room to scale. Fixed capacity meant provisioning (and paying) for peak year-round, yet still hitting ceilings.
Fragile at peak. Limited headroom and manual failover left the platform exposed to slowdowns when it mattered most.
Brittle integration. Point-to-point batch interfaces to carriers, ERPs and EDI partners were hard to change and slow to recover.
Growing risk. Ageing hardware meant rising maintenance, patching burden, and disaster-recovery gaps.
Paying more, wasting most of it, and still failing at peak
The status quo carried a real price: a heavy run-rate on hardware that sat mostly idle, yet still couldn't absorb the peak.
- $210K a month run-rate on ageing on-prem hardware.
- ~60% of that capacity idle off-peak: paid for, rarely used.
- 3× peak demand that still outstripped fixed capacity.
Only part of an on-prem bill is compute. The rest (refresh cycles, floor space, support contracts and the staff time to keep it patched) is what a re-platform actually addresses:
| Share of the $210K a month | What it paid for | After the move |
|---|---|---|
| 31% | Hardware and refresh: end-of-life servers, storage | Avoided |
| 24% | Data centre and facilities: space, power, cooling | Avoided |
| 18% | Support and patching: vendor contracts, ops time | Reduced |
| 15% | Licensing: OS, database, tooling | Reused |
| 12% | Network and connectivity | Carried over |
Roughly three-quarters of the bill sat in hardware, facilities and support, none of which scales down when the peak passes.
"Every peak season, we held our breath. The systems that run our warehouses and freight sat on hardware we couldn't scale, and one bad day in November could cost us a client."
— Chief Information Officer, Memphis-based 3PL
Mapping the estate, then the must-haves
We began with discovery: dependency mapping across the TMS, WMS and their integrations, plus a TCO business case built with Azure Migrate. That set a clear bar the target platform had to clear:
- Scale elastically to ~3× peak, on demand.
- Meet a 99.9% availability target through peak.
- Reduce the monthly infrastructure run-rate.
- Cut over with minimal downtime and a rollback path.
- Replace brittle batch interfaces with modern APIs.
- Geo-redundant DR with defined RTO/RPO and strong security.
One re-platform on Azure, built for peak
The target: re-platform the TMS and WMS onto Microsoft Azure, managed services and elastic autoscale in place of fixed on-prem capacity.
| Before · on-premises | After · Microsoft Azure |
|---|---|
| Legacy TMS and WMS on end-of-life servers | Re-platformed on Azure (AKS / App Service) |
| Fixed capacity, provisioned for peak | Managed data on Azure SQL; elastic autoscale |
| Point-to-point batch integrations | API-based integration layer |
| Manual failover, limited DR | Geo-redundant DR with defined RTO/RPO |
| ~$210K a month run-rate | ~$168K a month, managed and monitored |
Elastic scale. Autoscale for peak, pay for what you use, not standing peak capacity.
Resilience by design. Availability zones and Azure Site Recovery with defined RTO/RPO.
Cost control and FinOps. Cost Management, right-sizing and reserved capacity to lock in the run-rate.
Secure and integrated. Microsoft Entra identity, managed patching, and API-based integration.
Phased rollout, measurable change
Five phases kept the operation running throughout, and as workloads moved, the cost and resilience picture changed with them.
- Assess: discovery, dependency mapping and the TCO business case with Azure Migrate.
- Foundation: landing zone, networking, identity and security baseline, all as infrastructure-as-code.
- Re-platform: re-architect the TMS/WMS for Azure compute and managed databases.
- Migrate and cut over: data migration, a parallel run, and a minimal-downtime cutover with a tested rollback plan.
- Optimize: autoscale, disaster recovery, and FinOps cost controls to lock in the run-rate.
The migration was sequenced by dependency, not by convenience: the integration layer had to land before the WMS could move, and the TMS followed only once warehouse traffic was stable on Azure.
| Wave | Scope | Months |
|---|---|---|
| Landing zone | Network, identity | 1–2 |
| Integration layer | APIs, EDI | 2–4 |
| WMS | 4 sites, then 8 | 4–6 |
| TMS | After the WMS was stable | 6–8 |
| Cutover and DR test | Go-live weekend | 8 |
| Optimize | Autoscale, FinOps | 9–10 |
Peak season fell in months 11–12, and the plan deliberately finished cutover and DR testing before it started.
Cutover night, hour by hour. A rehearsed runbook with a hard rollback checkpoint: if validation had failed at 01:30, the old stack was still live and untouched:
| Time | Step |
|---|---|
| 22:00 | Freeze writes; last delta captured (old stack authoritative) |
| 22:40 | Final data sync to Azure SQL |
| 01:30 | Rollback checkpoint: go / no-go call |
| 01:45 | DNS and integration cutover (Azure authoritative) |
| 02:20 | Smoke tests: pick, ship, tender |
| 03:40 | Live on Azure; first shift receives |
Total service interruption was under four hours, inside one planned weekend window, with the previous environment kept warm for a further two weeks. Capacity now follows demand through peak instead of sitting fixed at it.
A platform that scales with the business
The provider moved from a fixed, ageing stack it had outgrown to an elastic platform that meets the peak, holds its SLA, and costs less to run, with headroom to add forecasting and analytics next. The systems that run the warehouses and the freight are no longer the thing to worry about in November.
| Result | |
|---|---|
| Infrastructure cost | ↓ 20% |
| Peak-season uptime | 99.9% |
| Elastic scale | 3× |
| Cutover window | Under 4 hours |
Built on Microsoft Azure.
Recognise any of this in your own estate?
Start with the problem rather than the technology, and we will tell you honestly whether it is ours to solve.
A supplier of electronic consumer products shipping 350+ orders a month
The quote took three days. The customer wanted to know where the van was.
A professional-services firm, a mid-sized legal and advisory practice
They rolled out Copilot to save time. It kept guessing wrong.
A tier-2 automotive-components supplier feeding just-in-time under IATF 16949
The parts passed inspection. The defects shipped anyway.
