Roughly 90% of enterprises now run some workload in the cloud, yet surveys keep finding that a third or more of migrations run over budget or stall halfway. The gap between “we moved it” and “it works better” is where most projects die. The steps below are the ones that separate a clean cutover from a six-month cleanup.
Start With a Brutal Inventory, Not a Vendor Demo
Almost every failed migration starts with a slide deck full of architecture diagrams and zero knowledge of what is actually running. Before anyone picks a cloud provider, someone has to answer: what servers exist, what talks to what, who owns each app, and which ones nobody has touched since 2019?
Automated discovery tools help, but they lie in predictable ways. They miss scheduled jobs that only fire on the last day of the quarter. They miss the Access database on a finance manager’s desktop that feeds a reporting server. They miss the cron job that emails a CSV to a partner.
Practical tip: run discovery for at least four weeks, ideally through a month-end close, so seasonal and batch workloads show up. Then interview the people who actually operate the systems. The application owner listed in the CMDB is often wrong; the person who gets paged at 2 a.m. is always right.
A useful output of this phase is a dependency map that distinguishes between hard dependencies (the app breaks immediately) and soft ones (it breaks slowly, or only during audits). That distinction drives everything that follows.
Build the Business Case Around One Number You Can Defend

Migration business cases fail when they promise vague “efficiency gains.” Pick a metric and commit to it: cost per transaction, deployment frequency, recovery time objective, or license spend retired. Then show the current baseline.
Be honest about the hidden costs. Egress fees, cross-region replication, new security tooling, and retraining all show up late in the budget. A workload that costs $2,000 a month on-premises often costs $2,600 in the cloud for the first year before optimization kicks in. Teams that plan for that bump survive; teams that don’t get their program cancelled.
This is also the moment to decide who owns cloud spend. The FinOps Foundation publishes a discipline around exactly this problem, and its core idea is simple: cost accountability has to sit with engineering teams, not a central finance group that sees the bill three months late.
Choose a Migration Strategy Per Workload, Not Per Company
The 7 Rs framework (retire, retain, rehost, relocate, replatform, repurchase, refactor) gets attributed to Gartner analyst Richard Watson around 2011 and was later popularized by AWS. The important thing is not the taxonomy but the discipline of applying it workload by workload.
| Strategy | Effort | Typical Use | Watch Out For |
|---|---|---|---|
| Retire | Low | Duplicate or unused apps | Political resistance from app owners |
| Retain | Low | Regulated or latency-bound systems | Drift and forgotten hybrid sprawl |
| Rehost (lift and shift) | Low-medium | Legacy apps with no clear owner | Lifting technical debt at full price |
| Replatform | Medium | Databases, middleware | Silent behavior changes in managed services |
| Repurchase | Medium | CRM, HR, email | Data migration and contract overlap |
| Refactor | High | Differentiators, high-traffic services | Scope creep and rewrite paralysis |
Rehosting gets a bad reputation, but for a first wave it is often the right call: it gets teams familiar with cloud operations without simultaneously rewriting code. The mistake is rehosting everything and calling it a strategy. If you are weighing providers, a side-by-side of AWS vs Azure vs Google Cloud in 2026 is worth reading before you lock in, because switching later is far more expensive than choosing carefully now. (Cloud computing)
Design the Landing Zone Before the First Server Moves
A landing zone is the pre-built foundation: accounts or subscriptions, network topology, identity, logging, guardrails, and tagging standards. Skipping it is the single most common cause of rework.
Get these right up front:
- Account structure. Separate production, non-production, and shared services. Use organizational units or management groups so policy applies by inheritance.
- Identity. Federate to your existing directory. Never let teams create local admin accounts as a shortcut.
- Network. Decide on hub-and-spoke or a flatter model, and size CIDR ranges generously. Running out of IP space mid-migration is a genuinely painful problem.
- Logging and monitoring. Centralize logs in a dedicated account before workload one. Retrofitting this later means weeks of re-plumbing.
- Guardrails. Policy-as-code that blocks public storage buckets and unapproved regions. Blocking beats alerting.
- Tagging. Enforce a minimum schema (owner, cost center, environment, data classification) at deploy time, not in a spreadsheet.
One trap worth naming: teams often build a beautiful landing zone and then let the first three applications bypass it “just to get moving.” Those three applications become the reason the landing zone never gets adopted.
Pilot With Something Real but Not Critical
The pilot should be a genuine production workload with real users, real data, and a real rollback plan. It should not be the CEO’s pet project, and it should not be a toy internal tool that nobody would notice if it vanished.
Choose a workload that touches most of your shared services: identity, networking, logging, backup. That way the pilot tests the platform, not just the application. Define success criteria in advance: latency percentiles, error rates, cost per unit, and time-to-restore. Then measure against the on-premises baseline.
The pilot’s real job is to break your assumptions cheaply. If the team discovers that the database needs 40% more IOPS than the discovery data suggested, that is a win, because it happened on a system with two users instead of twenty thousand.
Migrate in Waves, Not a Big Bang
Waves should be grouped by dependency and business risk, not by department. A wave typically contains five to fifteen applications that share infrastructure and can be validated together.
Each wave follows the same loop:
- Freeze and snapshot. Record the exact state of the source system.
- Replicate. Use continuous replication where possible so cutover windows shrink from hours to minutes.
- Test in isolation. Run functional, performance, and security tests against the migrated copy while the source still serves traffic.
- Cut over. Redirect traffic during a low-traffic window with a named rollback decision-maker and a hard deadline for calling it.
- Hypercare. Two weeks of heightened monitoring with the original team on call.
- Decommission. Shut down the source system on a scheduled date. This step gets skipped constantly, and it is where the savings actually come from.
For teams running containerized workloads, the platform upgrade path matters as much as the migration itself; a botched control-plane upgrade mid-migration compounds badly, so plan your EKS cluster upgrade to Kubernetes 1.37 as a separate, well-tested workstream rather than folding it into a migration wave. (What is Cloud Migration?)
Treat Security as a Migration Workstream, Not a Gate
Security teams that get consulted at the end become blockers, and rightly so. Bring them in during landing zone design and give them policy authorship.
Key moves:
- Map every data store to a classification level before it moves, and confirm the target region meets residency requirements.
- Rebuild firewall rules from intent rather than porting a decade of accumulated exceptions. Migration is the one chance to delete rules nobody understands.
- Extend detection coverage to the new environment before cutover. Cloud audit logs are rich but noisy; a SIEM tuned for on-premises will drown. A structured approach to detecting php2shell-style web attacks with Wazuh SIEM shows how much tuning detection rules need when the telemetry source changes.
- Test restore, not just backup. A backup that has never been restored is a hope, not a control.
Validate, Optimize, Then Decommission
Cutover is the midpoint, not the finish line. Post-migration validation should confirm that performance meets the baseline, that monitoring fires correctly, and that the disaster recovery plan has actually been exercised.
Then optimize. Right-size instances after four to six weeks of real usage data, buy commitments for steady-state workloads, and kill orphaned resources. Storage is a frequent offender: teams replicate everything “just in case” and then pay for it forever. Understanding the tradeoffs in cloud storage vs local storage helps teams decide what genuinely belongs in the cloud versus what should stay on a local NAS for cost or latency reasons.
Finally, decommission with a paper trail. Remove DNS entries, revoke credentials, cancel licenses, and update the CMDB. The savings from migration live in the shutdowns, not the launches.
Common Mistakes That Sink Migration Programs
- Migrating the org chart instead of the workloads. Department-by-department waves create dependency chaos.
- No rollback plan. Teams that cannot go back take far longer to go forward.
- Underestimating data gravity. Moving 50 TB is easy; moving it while keeping it in sync for a cutover is not.
- Skipping the runbook. Tribal knowledge does not survive a 3 a.m. cutover.
- Letting the migration team dissolve too early. Platform ownership needs a named home before the program ends.
Conclusion
Cloud migration is less a technology project than an exercise in sequencing and honesty. Inventory ruthlessly, pick a metric you can defend, apply a strategy per workload, build the landing zone before anything moves, pilot something real, and migrate in waves with a decommission date attached to every single one. The organizations that get this right are rarely the ones with the most advanced tooling; they are the ones that refused to skip the boring steps.
FAQ
How long does a typical cloud migration take?
For a mid-sized company with 100 to 300 workloads, a realistic timeline is 12 to 24 months from discovery to full decommission. Small, focused migrations of a handful of applications can complete in 8 to 12 weeks. The discovery and landing zone phases usually take longer than expected, while the actual move of each wave is often faster.
What is the difference between rehosting and replatforming?
Rehosting moves an application to the cloud with minimal changes, often called lift and shift. Replatforming makes targeted changes to take advantage of managed services, such as moving a self-managed database to a managed one. Rehosting is faster and lower risk; replatforming delivers more long-term benefit but requires more testing.
Do we need to refactor applications before migrating?
Usually not. Refactoring is the most expensive strategy and should be reserved for applications that are genuine business differentiators or that block scaling. Most portfolios benefit more from rehosting or replatforming first and refactoring selectively later, once the platform is stable.
What is a landing zone and why does it matter?
A landing zone is the pre-configured foundation for cloud workloads: accounts, networking, identity, logging, and policy guardrails. It matters because retrofitting security and governance onto workloads that are already running is slow, expensive, and frequently incomplete. Build it first, then let applications land on it.
How do we control cloud costs during migration?
Enforce tagging at deploy time, give engineering teams visibility into their own spend, right-size after collecting real usage data, and commit to reserved capacity only for steady-state workloads. Most importantly, decommission source systems on schedule. Double-running on-premises and cloud infrastructure is the largest avoidable cost in any migration.
What should the first migration wave contain?
Pick five to fifteen applications that share infrastructure, have clear ownership, and are important but not business-critical. The wave should exercise identity, networking, logging, and backup so it tests the platform. Avoid starting with the most complex system or the CEO’s favorite project.


