The migration nobody finishes. Four I have rescued.
I have walked into four enterprise migrations stuck at 60% completion for years. Same pattern every time. Here is what the last 40% actually looks like.
Pattern·Stalled migration debtWhy migrations stall at 60% completion
Four rescued migrations. Same curve every time.
Easy 60%
- New services
- Stateless workloads
- Greenfield apps
Hard 30%
- Stateful systems
- Undocumented integrations
- Compliance-bound paths
Stuck zone
- Original architect left
- New CTO new priorities
- Competing projects
Treat the last 40% as a separate project. Replan or rescue.
I have walked into four enterprise migration projects stuck at 60% completion. One had been stuck for 18 months. One for two years. One for three. One for four. They all had the same pattern. They all had different leadership teams. They all had the same set of reasons that the next quarter would be the one that finished it.
The migrations were different in scope. One was on-prem to cloud. One was a monolith to microservices. One was a database modernisation. One was a tooling consolidation. The pattern was the same in all four.
The first 60% of a migration is the easy 60%. The last 40% is a different project. Teams keep trying to finish it as if it is a continuation. It is not.
Here is what happens. The first 60% is the services that were already candidates for change. New work goes onto the new platform. Stateless services move easily. The team celebrates a series of small wins. Leadership reports good progress for two or three quarters.
Then the migration hits the stateful workloads. The undocumented integrations. The systems that two engineers wrote and one of them has left. The compliance-bound services. The pricing-critical paths. Each of these is not just harder. It is a different category of work. It requires investigation, archaeology, and judgement calls about what the old behaviour even was.
At the same time, the leadership team changes. The new CTO has new priorities. The original architect has been promoted or has left. The migration becomes a thing the company is doing rather than a thing the company is committed to. New projects compete for the same engineers. The migration becomes the project that is always almost done.
Here is what actually unblocks it.
- Treat the last 40% as a separate project with its own budget, sponsor, and architecture decisions. Stop reporting against the original plan. Replan from where you are.
- Accept that some workloads will not migrate. Add a cost to keep them on the old platform indefinitely. Make the cost visible. Either justify it or move them.
- Stop staffing the migration with whoever is free. Staff it with the engineers who understand the systems that have not moved. They are not free. They are doing the work that has to be unblocked.
- Treat the legacy platform as the deprecated platform. Stop adding to it. Stop investing in its tools. Make the operational cost of staying visible to the teams that have not moved.
All four migrations I have rescued used a version of this. In every case, the unblock was as much organisational as technical. The technical work was real but tractable. The organisational treatment of the migration as still-in-progress was the actual blocker.
Migrations stall at 60% because the project has changed and the plan has not. If you are still tracking against the original architecture, the migration is being measured against a system that no longer matches reality. Replan or rescue.
Get the next one in your inbox
One short, opinionated field note per fortnight on platform engineering, cloud, and making AI work in production. No spam. Unsubscribe anytime.
