Migrating legacy applications to the cloud: The complete guide for CTOs and engineering leaders
The usual suspects blocking your AI and automation projects are talent and budget. But in most cases, it’s your legacy infrastructure. According to industry analysis of Deloitte’s enterprise technology research, 60% of AI leaders named legacy system integration as their biggest barrier to putting AI into production.
Tech leaders used to frame legacy application migration to cloud as a cost-saving play. Now the trigger is different: it’s AI, and everything it needs that aging systems can’t deliver.
The old costs haven’t gone anywhere either. Legacy systems are still eating the product budget, releases are gated by downtime, and fewer engineers are willing to touch the old stack. And one cost keeps growing: an unpatched system is an open door, and the average US data breach now runs $10.22 million, according to IBM’s Cost of a Data Breach Report.
The invisible cost is your competitive position. The companies that migrated are now releasing features more quickly and can confidently plug in AI. With the legacy infrastructure, your teams could work nights and weekends and still not match a competitor’s release pace. Only migration can close that gap.
In this guide, we highlight what you need for legacy application migration to cloud: the 7Rs framework, real cost ranges, zero-downtime cutover techniques, the team model, and the benchmarks for success.
What is legacy application migration to the cloud?
When it comes to whether your application is “outdated,” don’t judge by the number of years. Diagnose the symptoms:
- The vendor has moved on and no longer supports your platform.
- Security holes no longer get fixed, leaving the system permanently exposed.
- There’s no API surface: legacy system integration with modern SaaS, data platforms, or AI tools needs a hand-built workaround every time.
- It fails audits under standards such as GDPR, HIPAA, SOC 2, or PCI-DSS.
These are the symptoms that define legacy systems, not age. A ten-year-old application with a maintained runtime and clean APIs isn’t legacy. A five-year-old system showing three of these symptoms is.
For years, companies running legacy systems have asked themselves whether to move to the cloud, but in 2026, it’s a top priority.
The first reason is stricter regulations. PCI-DSS v4.0, HIPAA, and GDPR now have tougher requirements. Legacy systems that used to pass these checks may now fail, and the penalties for non-compliance are much higher.
The second reason is AI infrastructure. McKinsey’s Superagency in the Workplace report found that 92% of companies plan to invest more in AI over the next three years. The real challenge isn’t the budget, but the underlying infrastructure. AI services need clean APIs and cloud-native data access, which legacy systems can’t offer.
Finally, the talent gap: fewer people can maintain old technologies like COBOL, Delphi, and older Java EE. You’re staffing against a market that’s leaving. Gartner puts 51% of enterprise IT spend in key segments on a public-cloud path, and vendors, tooling, and careers all follow the money.
Is your system a migration candidate? A self-assessment
Earlier, we looked at the question, “Is my system outdated?” If the symptoms fit, then it’s legacy. However, legacy software migration to cloud is not always the right choice. The system you are considering might be retired soon, and cloud migration has many moving parts – money, time, and risk. Go through this legacy application migration to cloud checklist below: if three or more points apply, it’s likely worth building a business case.
Maintenance eats more than 40% of your yearly IT budget. Patches, support contracts, and specialist hours crowd out everything new. Aging legacy systems get more expensive every year.
The vendor has announced end-of-life or end-of-support. From that date, every vulnerability is yours to patch, whether through your own workaround or paying extended-support contracts.
No REST API. Legacy systems can’t talk to modern tools like a CRM, a BI dashboard, an AI assistant without custom, fragile integrations.
You can’t ship without taking the system offline. Every update, fix, or new feature means a planned downtime window. When each release costs a negotiated outage, releases become rare and expensive.
Your only path to scalability is buying hardware. More users, transactions, or data means new servers and more data center space, on lead times of months, so you’re forecasting next year’s seasonal spike today.
The system has failed or been flagged in an audit. GDPR, SOC 2, HIPAA, or PCI-DSS findings traced back to it.
If your checklist is mostly checked, migrating your company’s legacy applications to the cloud is worth a serious business case . The next section shows exactly what that looks like, and what it’s worth.
The business case for legacy cloud migration
Companies don’t abandon cloud migration of legacy systems because of engineering complexity. They abandon it because the budget never gets approved.
Your technical team knows the value of modern architecture. Your CFO, on the other hand, has likely seen modernization budgets grow out of control. This section focuses on that challenge: what migration can actually deliver, what it costs to wait, and how to present the investment over five years.
Quantified benefits: What migration actually delivers
“How much does spending go down?” is your CFO’s first question. Let’s break it down.
Infrastructure spending: The cost of servers and data centers drops 30–50% within 24 months of completion, according to Gartner TCO benchmarks. No more fleet rebuys, no data center contract, and no buying capacity for the busiest hour of the year. In the cloud, capacity follows demand and scalability becomes automatic.
The speed of shipping to the market: On-prem teams ship updates once a month at best. The same teams on cloud ship 2–4× more often (weekly or bi-weekly) on automated cloud-native CI/CD pipelines. It’s the rate at which your product responds to the market.
The budget allocation: The cost of maintaining legacy systems (patches, support contracts, and firefighting) takes 75–80% of the IT budget in maintenance-heavy companies. For a legacy application portfolio, a well-executed migration brings that under 30% within 18 months. Same budget, opposite purpose: engineers spend far less time managing infrastructure, and that time is redirected to the roadmap.
Security built into the architecture: When you leave behind legacy systems that no longer get updates, old vulnerabilities disappear with them. Cloud setups include IAM, automated patching, and encryption for data both at rest and in transit. These features meet the basic requirements that GDPR, SOC 2, HIPAA, and PCI-DSS auditors expect.

The cost of inaction
At first, putting off moving legacy systems to cloud can seem like the easiest and cheapest option, but it just pushes the problem downstream.
On-premises servers of legacy systems need to be replaced every 5 to 7 years. It can cost anywhere from $50K to north of $500K. Moving to the cloud removes this expense completely.
Talent is another high cost. Many engineers familiar with legacy software and these old programming languages are retiring. Hiring replacements gets more expensive each year. Younger developers often leave because maintenance work neither builds new skills nor delivers new features.
The cost that never shows up in IT budgets at all is the competitive gap. Other companies using the cloud release updates every week, while your team waits for scheduled downtime. They test every release and learn from the market faster. The bill arrives later, as lost revenue you can’t recover.
Finally, unpatched security issues keep growing. Once vendor support ends, every vulnerability remains open and easy for hackers to find. At the same time, regulatory requirements increase each year, and fixing problems in old systems gets harder as specialists become harder to find and workarounds stack on top of workarounds. Waiting does not keep costs down; it only makes them go up.
The next step is putting a number on that cost: one your CFO can act on.
Building the ROI case for your CFO
Moving legacy systems to cloud is a capital investment, so it makes sense to present it that way. Lay out the investment year, the payback years, and a five-year total that includes costs often hidden in the on-premises budget. Here’s a simple way to approach the conversation:
Year 1. You make the main investment. It pays off faster than most people expect. Once you switch, you no longer have to pay for the next hardware upgrade, some of your data center expenses, or maintenance work. Without these costs, most mid-size companies see their infrastructure spending drop by 30 to 50 percent in the first year after migration.
Years 2-3. The returns start to surpass your initial savings. Once cloud-native pipelines become standard, two things usually happen: your teams release updates 2 to 3 times more often, and engineers recover much of the time once lost to maintenance. Both cloud migration benefits come from the same change: automated pipelines take over the manual work that once filled your release calendar and your engineers’ schedules.
Year 5+. Year to year, staying on-premises can look like the cheaper option. But many of its costs hide in plain sight and compound over time. Add them up, and moving to the cloud usually delivers a 5-year cost advantage worth 2 to 3 times the initial migration cost.
You’ll end up with two key numbers. One showing savings, like “we’ll save 30–50%,” and another showing returns, such as “this returns 2 to 3 times its cost in five years.” Start with the return figure. CFOs tend to discount savings projections, but strong return multiples are harder to argue with.
| Migration type | Typical cost range | ROI timeline | Key driver |
| Small app rehost (Lift & Shift) | $15K–$50K | 6–12 months | Immediate infra cost elimination; hardware refresh CapEx avoided |
| Mid-size replatform (Managed PaaS migration) | $50K–$200K | 12–18 months | Deployment velocity gains; Developer time reallocation from maintenance to product |
| Enterprise refactor (Re-architect / full modernization) | $200K–$1M+ | 24–36 months | Compounding 5-year TCO savings + AI/data infrastructure unlocked |
Choosing the right cloud migration strategy: The 7Rs framework
When companies think about how to migrate legacy applications to cloud, they usually default to lift-and-shift for the entire portfolio.
Yet applying it to legacy systems means old problems relocating to a new address. The 7Rs cloud migration framework replaces that with a decision per application, where the legacy application migration to cloud strategy breaks down into apps, each with its own treatment: retire, retain, rehost, replatform, repurchase, refactor, or relocate.
Retire. The framework’s first question is whether the legacy application should exist. If the answer is no, it gets permanently turned off.
Retain. The legacy application stays on-prem, because either something blocks the move (regulation, latency), or it simply isn’t worth touching this wave. The migration may be scheduled for when the conditions change.
Rehost (lift-and-shift). Move the application unchanged onto the cloud infrastructure. Legacy systems gain immediate cost savings but limited scalability while keeping their existing architecture.
Replatform (lift-tinker-and-shift). Make a targeted tech stack upgrade without a full rewrite. For instance, swapping the self-managed database for a managed service, containerizing the runtime, and adopting managed middleware.
Repurchase. Decommission your legacy application and subscribe to its cloud-native equivalent, for instance, on-prem CRM to Salesforce, self-hosted ERP to SAP S/4HANA Cloud.
Refactor / re-architect. Rebuild the legacy application’s internal structure, so it’s designed for the cloud, not merely running on it. The most expensive and slowest path, and the only one that fully unlocks scalability and the cloud’s capabilities. Reserved for business cases that justify it, like customer-facing apps, high change velocity, and AI on the roadmap.
Relocate. If you run applications inside virtual machines, take the entire VM fleet and slide it, unchanged, from your VMware onto the cloud’s hosted VMware. Fastest possible exit from a data center, especially when a lease or contract deadline is forcing the move.
The list you just read is a menu, not a ranking. Refactor isn’t “better” than rehost in all cases. It can be the right call for certain legacy systems and a death sentence for others.
Decision matrix: Which 7R strategy fits your application?
| Application characteristic | Recommended strategy | Typical use case |
| Stable, low-change internal tool | Rehost (Lift & Shift) | HR systems, internal reporting apps |
| Good business logic, outdated platform | Replatform | Java app moving to managed PaaS (AWS Elastic Beanstalk, Azure App Service) |
| Tightly coupled monolith, high change velocity | Refactor / Re-architect | Customer-facing apps, e-commerce, core banking |
| Off-the-shelf software (ERP, CRM) | Repurchase (SaaS) | On-prem Salesforce → Salesforce Cloud; SAP → SAP S/4HANA Cloud |
| End-of-life, low ROI, redundant functionality | Retire | Duplicate systems post-merger, shadow IT |
| Regulatory constraint prevents cloud | Retain (short-term) | Air-gapped systems, certain defense/healthcare workloads |
IaaS vs PaaS vs SaaS: Choosing your cloud service model
When migrating legacy applications to the cloud, decide what to do with each one. Then, you choose a service model based on how much of the tech stack you want to manage yourself. For legacy systems, the main difference between the three models boils down to who is responsible: the provider or you.
| Service model | Level of control | Best for (7R strategy) | Example services |
| IaaS Infrastructure as a Service | Maximum control: you manage OS, runtime, middleware, and app; provider manages physical hardware and virtualization. | Rehost (Lift & Shift) Replicates the on-prem environment in the cloud with minimal changes. Fastest path to cloud; best for stable, low-change workloads. | AWS EC2 Azure Virtual Machines GCP Compute Engine |
| PaaS Platform as a Service | Reduced operational overhead: provider manages OS, runtime, and infra; you manage application code and data. | Replatform (Lift & Tinker) Accelerates deployment by moving to managed services without rewriting core logic. Best for apps needing cloud-native deployment without full re-architect. | AWS Elastic Beanstalk Azure App Service GCP App Engine |
| SaaS Software as a Service | Fully managed: provider manages everything end-to-end (hardware, infra, platform, application); you configure and use. | Repurchase (Drop & Shop) Replaces a legacy on-prem application with a cloud-hosted equivalent. Focus shifts entirely to business value; no infrastructure responsibility. | Salesforce HubSpot SAP S/4HANA Cloud |
Your choice of cloud service model should follow your migration strategy, not the other way around. Decide the R first: rehost points to IaaS, replatform to PaaS, or repurchase to SaaS.
Phased migration vs. big-bang approach: Which to choose
The strategies above determine how to treat your legacy applications. When migrating your suite of legacy applications to cloud, the next decision is whether to move all at once or in waves.
| Approach | Description | Risk level | Best for |
| Big-Bang All at once | Entire application portfolio migrated in a single program. Old and new environments cut over simultaneously on a fixed go-live date. No incremental fallback once initiated. | HIGH Catastrophic if it fails | Small portfolios only: fewer than 5 applications, low business criticality, minimal regulatory exposure, and a team with proven cloud migration experience. Not recommended for legacy-heavy or regulated environments. |
| Phased Wave-Based Incremental groups | Applications are grouped into migration waves sequenced by risk and complexity. Each wave is independently validated before the next begins. Rollback scope is limited to the current wave only. | LOW–MEDIUM Controlled & reversible | Recommended for all mid-market and enterprise legacy migrations. Suitable for any portfolio size, compliance-sensitive workloads, 24/7 operational environments, and teams building cloud competency in parallel with execution. |
The wave approach to cloud migration is simple. In Wave 1, the team begins with 2-3 low-risk apps, which lets them learn on systems where mistakes are easier to handle. Wave 2 includes apps that are a bit more complex. By Wave 3 and beyond, the team tackles business-critical and regulation-sensitive systems, after the tools have been tested and the team has built up experience.
Phased is usually the best option for legacy application migration to cloud. The exception is a genuinely simple case: a handful of low-risk, loosely coupled apps with an experienced team. Everything else, especially environments that must stay available, have tightly connected systems, or a team is new to moving legacy systems to cloud, points to phased as the safest way to manage risk.
How to score and prioritize your legacy application portfolio
Scoring is the first step in cloud migration wave planning. It removes “gut feel” from the equation by assigning each legacy application a score for 5 factors, each ranging from 1 to 5.
- Business criticality: every app feels important to whoever owns it. So, don’t ask “is it important?” Ask: “how much damage would this app cause if it had a bad week?”
- Technical complexity: consider factors such as coupling, dependencies, and code age.
- Migration risk: what could go wrong during the move, and how big the impact would be.
- Cloud migration readiness: how little you need to change for the app to fare well in the cloud.
- Time sensitivity: end-of-life dates, lease expirations, or compliance deadlines.
A high readiness or time-sensitivity score pulls an app toward the early waves, whereas high criticality, complexity, or risk pushes it later, once the team has proven the approach. The combined score gives you the sequence.
Starting with quick wins in Wave 1 helps the team build confidence and test the tools before moving on to the most important systems. This is what makes legacy application migration to cloud planning consistent: the same scoring logic applies regardless of portfolio size or how many stakeholders are in the room.
How to migrate legacy applications to the cloud: 7-step process
These seven steps run once per wave, not once for the whole portfolio. Whatever your wave plan from the scoring step, each wave moves through the same sequence below.
Step 1. Legacy application portfolio discovery and inventory
Gather information on each legacy application for the scoring matrix, including the owner, dependencies, data flows, integration points, regulatory needs, and SLA commitments. This is also where forgotten legacy systems surface, such as duplicate systems from past mergers, or shadow IT a department spun up without telling anyone. It’s much easier to find them now in a spreadsheet than to deal with surprises during migration.
AWS Migration Hub and Azure Migrate can automatically map most dependencies. If anything is missing, team leads can usually help fill in the gaps. By the end, you’ll have a single inventory that lists every application, its readiness for legacy application migration to cloud, and its wave assignment.
Step 2. Cloud readiness and SWOT assessment
With the inventory from Step 1 in hand, assess how ready each asset actually is. Start with technical readiness: architecture, data volume, latency, and integration surface area. Then, look at organizational readiness, including skill gaps, staffing, your team’s ability to handle change, and whether everyone is aligned with leadership.
Once you know your readiness, focus on your most important apps. Run a SWOT analysis for each app you plan to migrate. While doing this, set your budget. Begin with a basic estimate and add a 15-25% contingency for hidden costs. Those costs come later in this guide. Reserve for them now.
Step 3. Define cloud migration strategy per application (7Rs)
To migrate legacy applications effectively, go through the decision matrix for each application, select the appropriate R, and record the reasoning. Use these notes along with the Step 2 scores to build your wave plan. Put simple rehosts in Wave 1, and save more complex refactors for Wave 3 or later.
Step 4. Cloud platform and architecture design
Once the wave plan is ready, design work depends on each app’s R. Rehosts need little to no design since they move as they are. For replatforms and refactors, this is where the main work happens: setting up containers with Docker or Kubernetes, designing the API gateway, and, for refactors, planning how to break up the monolith into microservices for independent scalability. Security architecture applies to every R in cloud migration, including IAM, VPC setup, data-at-rest and in-transit encryption, and logging and monitoring.
Design security in now. Retrofitting it onto a live system is far harder, rarely complete, and the exact failure this guide keeps warning against.
Step 5. Pilot migration (Proof of Concept)
When moving legacy applications to cloud, start by piloting a few Wave 1 apps individually as a proof of concept. This helps you check if your earlier estimates from Steps 1-4 were accurate. Make sure the app works as well as it did on-premises.
Stop at this point and carefully review the results with your stakeholders. Get their approval before you commit the full program budget. This way, if your assumptions are wrong, a few apps are affected, not the entire portfolio.
Step 6. Full migration execution
After you confirm the pilot works, use the cloud migration plan from Steps 3 and 4 to handle the rest of the waves. Check each wave with the same phase-gate process you used for the pilot. Review the results against your criteria before starting the next wave.
Keep the old and new environments running in parallel until each wave’s cutover is fully validated. Parallel running costs extra (as the hidden-costs section covers), so keep the window short, but it’s what lets you roll back if a wave goes wrong.
Zero-downtime migration techniques
Blue-green deployment. Two environments, blue and green, run at the same time. The blue one represents your current on-premises setup, while the green is for the new cloud version. Once green is validated, switch traffic over via a DNS or load balancer change. If anything breaks, route back to blue the same way. Users never see an outage.
Strangler fig pattern. You move one function at a time from the monolith to a cloud-native service until the old system can be retired.
Phased traffic. Route a small share of traffic to the new environment first, then increase it step by step: 5%, 25%, 50%, 100%. If errors climb or performance drops, roll back immediately.
Feature flags. Switches in your code that let you release new features to production, but keep them hidden from users until you choose to turn them on.
Data migration and legacy database modernization
Schema migration. Determine early whether you need to restructure your legacy application database schema before migration.
ETL pipeline design. Map each source field to its target, define transformation rules for all fields, and establish in advance how to handle malformed or null records, such as dropping, labeling, or rejecting them.
Checkpoints for data validation. Row counts and hash comparisons confirm that the data was migrated in full and uncorrupted. Referential integrity checks catch broken foreign keys that hash comparisons miss.
Handling live transactions. Implement a dual-write pattern by writing to both the legacy and new databases during the transition, accepting that minor inconsistencies may occur until the switch to the new system is finished.
For data transfer, use AWS Database Migration Service or Azure Database Migration Service. To manage and track schema changes, use Flyway or Liquibase during the migration.
Step 7. Post-migration
FinOps. When moving legacy systems to cloud, tag every resource from the first provision, so costs stay attributable later. Full cost-governance practices such as reserved-instance timing, anomaly alerts, and architecture reviews come after go-live, covered later in this guide.
Monitoring. Set up a cloud-native observability stack before users start using the system. Use CloudWatch for AWS, Azure Monitor for Azure, or Datadog if you need a cross-cloud option. If you cannot see what is happening, you cannot manage it.
Security. Focus on vulnerability scans, compliance checks, and access permissions. The IAM design from Step 4 often requires changes after deployment to production.

Can AI tools help you move faster during migration?
Yes, but only in some parts of the process. AI speeds up specific stages of migrating legacy applications to cloud. Here’s how they can help, and where they fall short.
For dependency mapping: AWS Migration Hub and Azure Migrate now use machine learning to discover dependencies. This can cut manual discovery time substantially in large environments.
For code analysis and refactoring: tools like GitHub Copilot can suggest refactors and translate older language patterns into modern equivalents.
AI tools can also generate automated regression test suites based on real production traffic patterns. This is important when migration timelines are tight and manual testing cannot keep pace.
Note that AI tools can speed up discovery and testing, but they cannot replace the architectural judgment a cloud migration requires: strategy selection, cutover planning, and regulatory validation.
The cost of legacy application migration to cloud
Legacy application migration to cloud costs can differ much more than most guides suggest. The difference between a $50K project and a $1M+ program usually depends on three things: legacy application architecture, data volume, and team model.
Migration cost ranges by complexity
| Migration scope | Typical cost range | Key variables |
| Small app rehost (lift & shift) | $15,000 – $50,000 | App size, data volume, testing requirements |
| Mid-size app replatform | $50,000 – $200,000 | Platform complexity, integration count, compliance |
| Enterprise refactor / re-architect | $200,000 – $1,000,000+ | Microservices scope, team size, timeline |
| Full portfolio migration (10+ apps) | $500,000 – $5,000,000+ | Wave planning, org change management, training |
These ranges are based on a mid-tier team model. Nearshore dedicated teams, discussed below, can reduce execution costs by 35% to 55% without changing what is delivered.
Hidden cloud migration costs that often go unmentioned
Most baseline estimates for moving legacy systems to cloud only include the obvious tasks. These six areas are what usually make the final cost much higher.
Data egress fees. Every time data leaves the cloud, the provider charges for it. It hides in plain sight: absent from your migration estimate, present on every cloud invoice from Year 2 onward. Budget $5K–$50K+ annually, depending on data volume.
Parallel running costs. During the transition (typically 4–12 weeks), both environments run simultaneously. On-prem doesn’t stop billing because the cloud started.
Team retraining and cloud certification. AWS and Azure certifications cost $2K–$8K per engineer, plus 20–40 hours of lost productive time per person. For a six-person team, that’s a real line-item vendor quote rarely includes.
Unexpected dependency scope. In legacy systems, undiscovered integrations push the problem downstream, adding 15–30% to the average refactoring scope.
Post-migration compliance audit. The first SOC 2, HIPAA, or PCI-DSS audit post-migration requires new documentation and tooling. Budget $15K–$60K, depending on the framework.
Rollback budget reserve. Hold back 10% of the total migration budget as a rollback provision. Phased cutover reduces the probability of needing it, not the need to have it.
Rule of thumb: add 15–25% contingency on top of any baseline estimate to cover these categories. If a vendor’s quote doesn’t mention contingency, ask why.
Comparing migration costs for onshore, nearshore, and offshore teams
The delivery model is the biggest factor you can influence in your migration budget. A six-person cloud engineering team with the same skills and experience can cost very different amounts depending on their location. Here’s a look at how the costs compare:
| Delivery model | Typical locations | Blended rate (Senior cloud engineer) | 6-person team: 6-month | Time zone overlap (US) | Compare to US onshoring |
| US onshore On-site / domestic | USA, Canada | $180–$250 / hr | $1.3M – $1.8M | Full overlap | Baseline Reference cost |
| Nearshore ★ Recommended | LATAM: time-zone aligned Colombia, Mexico, Argentina, Brazil | $85–$130 / hr | $600K – $950K | 4–8 hrs EST / CST | Save $350K–$1.2M 35–55% lower |
| Offshore Remote / async delivery | Eastern Europe, India, Southeast Asia | $40–$80 / hr | $290K – $580K | 0–4 hrs async-first | $720K–$1.5M 55–75% lower |
Savings shown vs. the US onshore midpoint; actual figures vary by team composition and project scope.
For most US projects, a nearshore cloud migration team is the most cost-effective option. The 4–8-hour EST/CST overlap enables real-time collaboration. In legacy migration, mid-wave decisions can’t wait for the next async reply. This is the model we operate under: same time zone, full-time collaboration, zero async guesswork.
An offshore cloud migration team costs less per hour. It works well for clearly scoped workloads. Legacy migration rarely stays that way, and undiscovered dependencies and mid-wave decisions are harder to manage across async time zones.
Who you need to execute a legacy cloud migration
Most legacy systems migration failures happen not from choosing the wrong cloud, but from a team that isn’t set up correctly. Here is what a complete cloud migration team should include and where gaps often show up.
Core migration team roles and responsibilities
| Role | Responsibility | Model |
| Cloud architect | Architecture design, platform selection, security model | Full-time for project duration |
| DevOps / SRE engineer | CI/CD pipelines, Kubernetes, IaC (Terraform/Pulumi) | Full-time for migration waves |
| Data engineer | Database migration, ETL pipelines, data validation | Full-time for data-heavy phases |
| Backend developer | Code refactoring, API redesign, microservices extraction | Full-time for refactor/rearchitect projects |
| QA / Test engineer | Migration testing, regression testing, performance benchmarking | Part-time to full-time depending on scope |
| Project / Delivery manager | Wave planning, stakeholder alignment, risk management | Part-time to full-time |
The role teams most often overlook in a legacy application project is that of the data engineer. Tasks like ETL and schema migration are usually assigned to the backend developer’s sprint, and teams only realize this mistake halfway through the project, when it becomes costly to fix.
Build vs. staff augmentation vs. dedicated team
Build in-house. You get the most control over your team and process, but it is slow to scale and costly to staff. Finding cloud architects and data engineers in today’s market can take months. This approach works for large enterprises with a cloud center of excellence, but it can be a big challenge for others.
Staff augmentation. This model adds engineers to your team to fill specific gaps, such as a cloud architect for platform design or a data engineer for ETL work. It’s quick to start and focused on your needs. It works best when your team can lead the migration and just needs extra skilled hands, not a full delivery team.
Dedicated nearshore team. This is a pre-assembled unit that includes a cloud architect, DevOps, data engineer, and QA. It gets up to speed faster than hiring and costs less than onshore cloud migration options. Since the team works in the same time zone as the US, you can collaborate in real time. This model is a good fit for mid-sized companies moving legacy systems to cloud for the first time without an internal cloud center of excellence.
Common challenges in legacy cloud migration and how to solve them
| Challenge | Root cause | Solution |
| Undocumented dependencies | Legacy system evolved without governance | AWS Migration Hub automated discovery + stakeholder dependency workshops |
| Data integrity during cutover | Live transactions, complex schemas, no downtime tolerance | Dual-write pattern + ETL with checkpointing + blue-green cutover |
| Compliance gaps | Regulated data placed in non-compliant architecture | Compliance-by-design from Day 1; AWS Security Hub / Azure Policy automated guardrails |
| Skill gaps in migration team | Legacy engineers lack cloud knowledge; cloud engineers lack legacy context | Dedicated nearshore team with cross-stack seniority assembled for the specific migration |
| Scope creep and budget overrun | Poor wave planning; undiscovered integrations | Fixed-scope discovery sprint; phased execution; 15–25% contingency from the outset |
| Performance regression post-migration | Cloud networking differences vs. on-prem; unoptimized lifted workloads | Right-size before migrating; post-migration load testing; CDN and caching configuration |
5 reasons legacy migrations fail and how to prevent them
Undiscovered dependencies. Discovery is treated as a pre-sales step rather than a billable phase: legacy systems’ dependencies surface mid-migration instead of before it. Run a mandatory discovery sprint with automated dependency mapping before any migration work begins. What you find during this step shapes everything that comes next.
Lift-and-shift applied to apps that need refactoring. Rushing to meet deadlines means skipping the 7Rs decision matrix. Moving legacy systems built as tightly coupled monoliths means technical debt with a new address and a cloud invoice attached.
Data migration scope is underestimated. ETL and schema migration get lumped into a backend developer’s sprint. Data migration needs its own engineer, timeline, and budget — teams that realize this mid-project end up paying for it twice.
Skill gaps discovered after the contract is signed. Nobody assessed what the team actually knew before work began. Run a cloud migration skill gap assessment in Week 1 of discovery: a nearshore team fills gaps faster and cheaper than retrofit hiring after the engagement has started.
No backup. Blue-green deployment is vital for business-critical systems. Reserve 10% of the migration budget for rollback and build the exit beforehand.
After the migration: optimization, management, and AI readiness
Organizations that get the most from legacy application migration to cloud plan for post-migration governance and AI readiness from the start.
How to measure migration success: 6 post-migration KPIs
Infrastructure cost change. Try to cut legacy systems’ infrastructure spending by at least 30% within a year after migration. Use your last full month of on-premises costs as your starting point.
Deployment frequency. Work toward releasing updates twice as often as you did before migrating. For example, if you released monthly, try moving to every two weeks. If you released every two weeks, aim for weekly. Increasing how often you deploy is usually the first sign of progress, with revenue gains coming later.
Uptime SLA. Set a goal of at least 99.9% uptime for your most important applications, measured over the first 90 days after migration. Falling below it signals a reliability problem to run down before it compounds.
Mean time to recovery (MTTR). Aim to recover from top-priority incidents in less than 1 hour. This means you need cloud-based monitoring, clear runbooks, and on-call processes set up in advance.
Developer time spent on infrastructure. Try to keep this below 15% of your engineering team’s time. If engineers are still spending about a third of their week on infrastructure after migration, the way you work hasn’t really changed, just the bill.
Time to first cloud feature. Track how long it takes to deliver your first new feature using cloud-native CI/CD. There is no set number, but it should happen within the first 90 days. This is the first sign that your speed improvements are real, not just expected.
FinOps and cost management
- Add tags to every resource on provisioning.
- Hold off on buying reserved instances for 90 days. Base your decisions on actual usage data, not just pre-migration estimates, because those often change after production starts.
- Set up AWS Cost Anomaly Detection or Azure Cost Management alerts at 20% above your expected daily spend. Catching anomalies within hours is much cheaper than finding them on your monthly bill.
- Review your architecture every three months. Adjust overprovisioned resources, remove anything unused, and move data to more affordable storage tiers.
Building an AI-ready infrastructure post-migration
API-first design. Every service must expose a clean, documented REST or GraphQL API. A legacy service with no API surface is invisible to every AI initiative on your roadmap.
Containerization (Kubernetes). Containers are the deployment unit for ML models as much as app code. Building on Kubernetes from the start means AI workloads slot into the same scalable infrastructure your legacy application already runs on.
Data pipeline modernization. Batch pipelines move data in scheduled chunks, insufficient for AI inference that needs to react in real time. Event-driven architecture (Apache Kafka, AWS Kinesis) is what most GenAI use cases actually require.
Managed AI services. AWS Bedrock, Azure OpenAI Service, and Google Vertex AI all require cloud-native infrastructure and API-accessible data. A well-executed migration produces both, making these services available the day cutover completes.
Vector database planning. If RAG, semantic search, or AI personalization is on the roadmap, plan the data storage architecture now. Retrofitting a vector database into a live production environment is a project in its own right.
Companies that migrate legacy systems without planning for AI will face a second, more expensive transformation within 18–24 months. Planning the migration of your legacy application to cloud infrastructure with AI in mind from the very start avoids that second project entirely.
Ready to migrate your legacy applications?
Legacy application migration to cloud demands source knowledge, clean data pipelines, and a team that holds together under cutover pressure. nCube assembles dedicated engineering teams with hands-on experience across the full stack, from legacy Oracle, DB2, and COBOL environments to AWS, Azure, and GCP.
- Receive initial engineer profiles within 48 hours.
- Deploy a full team within 2 to 6 weeks, aligned to your time zone.
- Our developers have an average tenure of 3.5 years, so the engineers who learn your systems stay on them.
- We offer a free replacement within 30 days if a team member is not the right fit.
During the discovery call, we map your legacy environment to a practical cloud migration strategy, including team composition, location, timeline, and cost estimate. Let’s talk.
FAQ
Frequently asked questions about migrating legacy applications to the cloud
What is the difference between legacy migration and modernization?
Migration means moving legacy systems to cloud infrastructure, rather than keeping them on-premises servers. Modernization changes how the legacy application is built, including its architecture, integrations, and deployment model. These two approaches can overlap, but they are not the same. For example, a rehost only migrates without modernizing, while a refactor does both. The right cloud migration question isn’t which approach to choose, but which applications need which combination.
How long does it take to migrate an application to the cloud?
The timeline to migrate legacy applications depends on your strategy. A simple rehost usually takes a few weeks. A mid-size replatform can take 2 to 4 months. Refactoring a complex legacy application may take 6 to 12 months or more. If you are migrating a group of applications, the total time depends on how many there are, how complex they are, and the size of your team.
What is the fastest way to migrate to the cloud?
Rehosting, also known as lift-and-shift, is the quickest way to migrate to the cloud. The legacy application moves as-is to cloud infrastructure, usually within weeks. If you need to move a whole virtualized environment quickly, relocating the entire group of virtual machines is even faster. There’s a trade-off between speed and legacy software modernization: the fastest migrations involve the fewest changes. That’s why rehosting is best for stable systems that don’t need scalability improvements, but it leads to technical debt if used for every legacy application.
Can legacy applications be migrated without rewriting them?
Yes, migrating legacy applications to the cloud doesn’t require rewriting them. In fact, most legacy applications are migrated either through rehosting, which preserves the application unchanged, or through replatforming, which enables targeted infrastructure upgrades without touching the core code. Only refactor/re-architect requires a rewrite, and that strategy is reserved for applications where the business case justifies the investment. The majority of a typical portfolio migrates without a line of legacy application code changing. The result is a migration of your legacy application to the cloud, a model with enhanced scalability and security.
How do I migrate a monolithic application to the cloud?
When migrating legacy applications to the cloud, the approach depends on how much and how often your application changes. If you have a stable, low-traffic legacy application (monolith), you can usually move it to the cloud without making any changes. When migrating legacy applications to the cloud, a monolith that changes frequently and serves customers directly is better handled with the Strangler Fig pattern. This means you gradually move one service at a time to cloud-native solutions until the original monolith is gone. Trying to rewrite the whole monolith at once is the riskiest option and often fails before it is finished. The safe way to migrate legacy application to cloud, monolith or not, is incremental: one service at a time, validated as you go.
What is a cloud migration readiness assessment?
A cloud migration readiness assessment helps you figure out if your applications and organization are prepared to execute a cloud migration strategy. Technically, it reviews your system’s architecture, the amount of data you have, integration points, and regulatory requirements. On the organizational side, it looks for skill gaps, how your teams are set up, and whether leadership supports the move. The assessment provides a cloud migration readiness rating for each application, along with realistic estimates for scope, timeline, and budget. You’ll need this information to build a wave plan before legacy application migration to cloud begins.
What are the risks of cloud migration?
You should plan for six main risks of the legacy application migration to cloud: hidden dependencies of legacy systems that can expand your project, data integrity problems during the move, data management issues if sensitive data is stored incorrectly, performance problems with workloads that are not optimized, going over budget due to poor planning, and not having a rollback plan, which can make small problems much worse. Each one is avoidable: our guide covers how to successfully migrate your legacy applications to cloud while managing all six.
Is cloud migration worth it for small businesses?
In most cases, yes, but the calculation is different for small businesses. If you have just a couple of applications and no compliance concerns, migrating legacy applications to the cloud usually takes a few weeks and costs $15K to $50K and start saving on infrastructure costs within the first year. The return on investment is faster because the project is smaller, and scalability needs are simpler. However, if your legacy systems are stable, not very critical, and your current setup is already efficient, there is less urgency. In these cases, only consider migrating legacy applications to the cloud if there is a clear reason, like a vendor ending support, a new compliance rule, or an AI project that your current system cannot handle.
Recommended articles