4. Timeline: How Long Does a Migration Take?
2024-09-01
The short answer: faster than you think, slower than you hope.
In practice, most full migrations we’ve done take between 2 to 6 months. The lower bound comes from focused projects with modern stacks and aligned teams. The upper bound usually reflects not technical blockers, but organizational ones: distractions, ownership confusion, and systems that nobody fully understands.
In one case, we moved a 6-service AI product from MVP to fully running on AWS in under 2 months — including its web app, APIs, background jobs, databases, queues, and external integrations. It was fast because the stack was clean, team was on board, and decisions were made quickly.
In another case, the same scope took over 6 months. Not because the app was harder, but because nothing was containerized, infra knowledge was scattered, and people were simply too busy. Build scripts were tangled, configs were inconsistent, and "just ship it" had left behind years of entropy.
Architecture complexity: tightly coupled monoliths and shared DBs are slower to untangle
Containerization readiness: if you can't package it, you can't move it easily
Team capacity: if engineers are stretched thin, migration stalls constantly
Stakeholder count: too many voices = decision paralysis
App statefulness: workloads that can’t handle multiple replicas slow down rollout
Monolith databases: schema lock-in or unclear ownership often blocks parallelization
Political drag: some teams resist change or cling to "their" systems
Overengineering: complex systems owned by single "experts" are harder to replace
Surprisingly, infra tooling isn’t the delay. Setup and coordination is. Alignment takes time. Migration multiplies that by every service you touch.
Run a fast assessment of infra, teams, and delivery maturity
Define an MVP migration target (e.g., background jobs or stateless services)
Group services by risk and complexity so parallel work can begin
Avoid databases early on unless they’re clean and well-owned
Start with something self-contained with clear business value
Run the new infra in parallel to prove parity and gain confidence
We don’t build out all tooling before starting. Instead, we iterate quickly. Terraform modules evolve alongside workloads. What matters is reducing idle time and making wins visible fast.
We also avoid keeping two environments running too long. Parallel infra is expensive and creates more places for bugs to hide. Migrations are cheapest when they move fast.
"Setup took longer than the move itself." Planning VPCs, IAM, CI/CD, and SSO often eats weeks before a single container moves.
"It was never 100%." Like moving apartments, there are always a few boxes left in the hallway. Migrations leave behind cronjobs, reporting tools, random scripts, or old integrations that resurface a month later.
Teams also underestimate incidents. You will hit snags. Having rollback options and redundancy plans isn’t paranoia — it’s insurance.
And most surprisingly: velocity usually improves before the migration is done. Just fixing deploy flows, introducing observability, and aligning teams on ownership gives developers more confidence and autonomy. You don’t need to finish the migration to start seeing returns.
Are you migrating the right things first?
Can you show progress every 2 weeks?
Is your team learning as they go, or waiting for perfection?
Migrations that feel fast are those that generate momentum. Migrations that stall are those that try to be complete before they start.
There is no magic number. But with the right scope, alignment, and attitude, most teams can make meaningful progress in weeks — and wrap core migrations in 2–6 months.
If you're not shipping something within the first 30 days, you're not migrating. You're just preparing. And that’s where time slips away.