Skip to main content
Blog

Legacy System Modernization: Strangler Fig, Big Bang, or Incremental Migration?

Legacy system modernization compared: strangler fig vs big bang vs incremental migration, with risk and cost trade-offs and a decision framework.

Legacy System Modernization: Strangler Fig, Big Bang, or Incremental Migration?

Legacy system modernization is the disciplined process of replacing or re-engineering ageing software without breaking the business that depends on it, and the right approach is almost always incremental rather than a single dramatic cutover. The three patterns you will hear named are strangler fig, big bang, and incremental migration. For most enterprises, the strangler fig pattern is the safest default, big bang is a last resort, and a phased incremental plan is the engine that delivers either one.

That sounds tidy. In practice, the decision is rarely obvious. A 14-year-old monolith with no tests, a retiring vendor platform, and a board demanding cloud savings all push you in different directions. The wrong call can stall delivery for two years, blow a budget, and erode the trust you need to keep funding the work.

This guide gives you a decision framework rather than a fashion. We compare strangler fig, big bang, and incremental migration on risk, cost, and time. We walk a real-world example, lay out a phased roadmap, list the mistakes that quietly sink these programmes, and close with a clear build-versus-buy recommendation for senior technology buyers.

Key Takeaways

  • The strangler fig pattern, named by Martin Fowler, lets you grow a new system around the old one and retire legacy piece by piece, keeping both running until the last function is migrated [3].
  • Big bang rewrites carry the highest risk: a single cutover with no fallback, a multi-year window with no value delivered, and a moving target as the legacy system keeps changing underneath you.
  • Choose by coupling, risk tolerance, and seam quality. Tightly coupled systems with clear module boundaries suit incremental extraction; small, well-understood systems can sometimes justify a controlled big bang.
  • Legacy maintenance consumes a large share of most IT budgets (industry estimate), so the business case is usually about freeing future capacity, not just cutting current cost.
  • Modernization is a programme, not a project. Treat it in 90-day increments with measurable value at the end of each, or funding will evaporate before you finish.

What legacy modernization actually means

"Legacy" is not an age. A system is legacy when it costs more to keep alive than it returns, when the people who understand it are leaving, or when it actively blocks the changes the business needs. A clean ten-year-old service that ships features weekly is not legacy. A two-year-old tangle that nobody dares touch already is.

Modernization covers a spectrum, and the word is often used loosely. Gartner and others describe a range of options, but for decision-making it helps to collapse them into four practical moves.

The four modernization moves

  • Rehost (lift and shift). Move the system as-is to new infrastructure, usually cloud. Lowest effort, lowest reward. It buys time and changes the hosting bill but not the architecture.
  • Replatform. Move with minor changes: a managed database, a containerised runtime, a newer language version. Modest effort, modest gain.
  • Refactor or re-architect. Restructure the code and design, often decomposing a monolith into services or modules. This is where strangler fig and incremental migration live.
  • Replace or rebuild. Retire the old system entirely for new custom software or a commercial product. Big bang is the highest-risk version of this move.

The three patterns in this article's title sit mostly inside refactor and replace. Strangler fig and incremental migration are how you execute a refactor or rebuild safely. Big bang is how a replacement goes wrong when teams underestimate the system they are killing.

Strangler fig: grow the new around the old

Martin Fowler named the strangler fig pattern after the vine that germinates in a tree's canopy, sends roots to the ground, and gradually envelops its host until the original tree dies and the fig stands in its place [3]. Applied to software, you build new functionality around the edges of the legacy system, route traffic to the new code piece by piece, and shrink the old system until nothing is left to retire.

The mechanism is an interception layer. You place a facade, proxy, or routing layer in front of the legacy system. Each request is checked: if the function has been migrated, it goes to the new service, otherwise it falls through to the old one. Over months, you flip routes one at a time. Both systems run in parallel until the last route moves.

Why it works

  • Value lands continuously. Each migrated slice goes live and earns its keep. You never wait two years to see a benefit.
  • Risk is contained. If a slice fails, you flip its route back to the legacy system. The blast radius is one function, not the whole platform.
  • The team learns as it goes. Early slices teach you about the system's hidden behaviours before you bet the business on a full cutover.
  • The legacy system keeps working. No freeze on the old code is required, so the business keeps operating while you rebuild.

Where it gets hard

Strangler fig is not free. You run and pay for two systems at once, sometimes for a long time. The interception layer adds latency and a single point of failure if you build it carelessly. Shared data is the real test: when both old and new code read and write the same records, you need a clear strategy for synchronisation, dual writes, or change data capture. Without that, you corrupt data instead of migrating it.

The pattern also demands seams. If the legacy code has no clear boundaries between functions, you cannot intercept and route cleanly. Part of the early work is often carving seams into a monolith before any traffic moves. Teams like Mind Supernova that take on modernization work usually spend the first weeks finding and instrumenting those seams rather than writing new features.

Big bang: the single cutover

Big bang means building the replacement in full, then switching from old to new in one planned event. The appeal is obvious: one clean system, no awkward period of running two, no interception layer, and a clear finish line. For a small, well-understood system with a hard deadline (a vendor sunsetting a product, for example), a controlled big bang can be the right and even the cheapest call.

The danger is equally obvious once you have lived through one. You deliver no value until cutover day, which may be 18 to 30 months away. The legacy system keeps changing during the build, so you are aiming at a moving target. The cutover itself is all-or-nothing: if it fails, rollback may be impossible because data has already migrated and users have already switched. Many large public rewrites have failed precisely here.

When big bang is defensible

  • The system is small enough to rebuild and validate in months, not years.
  • The domain is well understood and stable, with low risk of mid-build requirement churn.
  • A hard external deadline (licence expiry, regulatory change) forces a clean break.
  • Running two systems in parallel is genuinely impossible, for example because the data model cannot be split.

If you cannot tick most of those boxes, big bang is a bet, not a plan. The honest question to ask the board is whether the organisation can survive a failed cutover. If the answer is no, the strangler fig pattern is the responsible choice even though it looks slower on the slide.

Incremental migration: the engine, not a rival

Incremental migration is often listed as the third option, but it is better understood as the delivery model that powers strangler fig and de-risks replacement. The idea is simple: break the work into small, independently shippable slices, each of which leaves the system working and delivers something measurable. Strangler fig is a specific incremental pattern; incremental migration is the broader discipline.

You can run incremental migration without a full strangler facade. Common variants include migrating by module (extract one bounded context at a time), by data domain (move customers, then orders, then billing), or by user segment (route 5% of traffic to the new system, then 20%, then 100%). The unifying principle is that every increment is reversible and verifiable.

Patterns that support incremental work

  • Branch by abstraction. Introduce an abstraction layer over the thing you want to replace, build the new implementation behind it, then switch the abstraction over. This avoids long-lived feature branches.
  • Parallel run. Run old and new logic side by side on the same input and compare outputs before trusting the new path. Essential for financial and calculation-heavy systems.
  • Change data capture (CDC). Stream changes from the legacy database to the new one so both stay consistent during the transition, using tools in the Kafka and Debezium family.
  • Feature flags and canary routing. Move traffic gradually and roll back instantly when a metric moves the wrong way.

Decision framework: which approach fits your system

Pattern choice should follow the system, not the other way around. The framework below scores a system on the factors that actually predict success. Score each factor, weight it, and let the totals point you toward strangler fig, incremental modular extraction, or (rarely) a controlled big bang.

Scoring factors

  • Coupling and seams (weight 25%). Can you isolate functions behind clean interfaces? High seam quality favours strangler fig; a tangled, seamless monolith forces seam-cutting work first.
  • System size and complexity (20%). Larger and more complex systems push hard toward incremental approaches; small systems open the door to big bang.
  • Risk tolerance and criticality (20%). Business-critical, always-on systems demand reversibility, which rules out big bang.
  • Data model separability (15%). If old and new can hold separate data or sync cleanly, incremental works. If the data is one indivisible blob, your options narrow.
  • Deadline pressure (10%). A hard external cutoff can justify a riskier, faster path.
  • Team knowledge of the legacy system (10%). Deep knowledge enables a confident rebuild; thin knowledge demands the learning that incremental delivery provides.
Figure 1. Strangler fig interception flow (described diagram).
                 +---------------------------+
   Client  --->  |   Routing / Facade Layer  |
   request       +-------------+-------------+
                               |
                 migrated?     |  yes -----> [ New Service ]  ---> [ New DB ]
                               |                                       ^
                               |  no  -----> [ Legacy Monolith ] ---> [ Legacy DB ]
                               |                                       |
                               +----- CDC sync keeps data consistent --+

   Over time, more routes flip from "no" to "yes" until the
   legacy monolith handles zero traffic and is decommissioned.

Approach comparison

DimensionStrangler FigBig BangIncremental (modular)
Risk profileLow: per-slice rollbackHigh: single point of failure at cutoverLow to medium: reversible slices
Time to first valueWeeks to a few monthsEnd of programme only (often 18 to 30 months)Weeks per slice
Total elapsed timeLonger (parallel running)Shortest if it succeeds, infinite if it failsModerate, predictable
Cost shapeHigher run cost (two systems)Lower run cost, higher risk costSteady, controllable
RollbackPer route, instantOften impossible after cutoverPer increment
Data handlingSync or CDC during transitionOne-time migration, high riskDomain-by-domain migration
Best forLarge, critical, tightly coupled systems with reachable seamsSmall, stable systems with hard deadlinesSystems with clear module boundaries
Worst forTiny systems where overhead exceeds benefitLarge, business-critical, evolving systemsSystems with no separable structure

Trade-off analysis

The core trade-off is speed of finish against safety of journey. Big bang optimises for a clean end state and the lowest steady-state cost, at the price of the highest risk and the longest wait for any value. Strangler fig inverts that: you accept higher running cost and a longer total timeline in exchange for continuous value, contained risk, and the ability to stop or change direction at any point.

There is a second trade-off that teams underestimate: cognitive load. Running two systems plus an interception layer plus data sync is more to operate and reason about than either system alone. That overhead is real and ongoing. The strangler fig pattern only pays off when the migration is large enough that the safety it buys outweighs the complexity it adds. For a genuinely small system, that overhead can exceed a careful big bang, which is exactly why size sits high in the framework.

A real-world example: incremental beats the rewrite

The most instructive lesson in this space is not a single famous project but a repeated pattern that Fowler and others have documented for two decades [3]. The strangler fig pattern itself grew out of observing that full rewrites of large systems failed often enough to be predictable, while teams that grew a new system around the old one shipped steadily and rarely collapsed.

A concrete architectural lesson comes from the cloud-native era. When teams over-decompose during modernization, they trade one problem for another. Amazon's Prime Video team famously moved an audio and video monitoring service from a distributed serverless and microservices design back toward a consolidated monolith in 2023, reporting a cost reduction of more than 90% for that workload. The lesson for modernization is direct: the goal is the right architecture for the workload, not the maximum number of services. Strangling a monolith into 200 microservices can recreate every problem you set out to solve, now distributed across a network.

Put the two lessons together. Migrate incrementally so you never bet the business on a single cutover, and target a pragmatic end state (a well-factored modular monolith or a small set of services) rather than maximal decomposition. For deeper architecture guidance on that target state, see the sibling article on web application architecture in 2026, and for the runtime foundation, cloud-native application development.

A phased modernization roadmap

A modernization programme that cannot show value every quarter will lose its funding before it finishes. Structure the work in 90-day increments, each ending with something measurable: a retired component, a migrated domain, a cost line that fell. The phases below assume a strangler fig or incremental approach, which is the right default for most enterprises.

Phase 0: Discovery and seams (weeks 1 to 6)

  • Map the legacy system: dependencies, data flows, integrations, and the functions that actually carry business value versus dead code.
  • Add observability. You cannot migrate behaviour you cannot see. Instrument the legacy system first.
  • Identify the seams. Where can you intercept traffic? Which module is the safest, highest-value first slice?
  • Build the business case in capacity terms: how much engineering time the legacy system consumes today.

Phase 1: Scaffold and first slice (weeks 7 to 16)

  • Stand up the interception layer (facade, proxy, or API gateway) and route 100% of traffic through it to the legacy system unchanged.
  • Migrate one low-risk, high-learning slice. A read-only reporting function is a classic first move.
  • Establish data sync or CDC if old and new will share data.
  • Prove the rollback path works before you need it.

Phase 2: Scale the migration (months 4 to 12+)

  • Migrate domains in priority order, highest value and lowest coupling first.
  • Use parallel runs for anything financial or calculation-heavy.
  • Decommission legacy components the moment their last route flips. Dead code left running is pure cost and risk.
  • Report retired components and capacity freed every increment.

Phase 3: Decommission and harden (final increments)

  • Move the last routes, confirm zero traffic to the legacy system, and turn it off.
  • Remove the interception layer if it was only a migration aid, or keep it as a permanent API gateway if it earns its place.
  • Capture the lessons and the new run cost to close the business case you opened in Phase 0.

Common mistakes that sink modernization programmes

Most failures are not technical surprises. They are predictable management and sequencing errors. These are the ones we see most often.

  • Choosing big bang to avoid running two systems. The parallel-running cost feels concrete and the cutover risk feels abstract, so teams pick the riskier path for the wrong reason. Price the risk, not just the run cost.
  • Rewriting instead of migrating. A blank-slate rewrite loses the thousands of edge cases the legacy system encodes. Those edge cases are the business. Migrate behaviour, do not reinvent it from memory.
  • Over-decomposing into microservices. The Prime Video lesson again: maximal services create a distributed monolith with worse latency, cost, and debuggability. Target the simplest architecture that meets the requirement.
  • No value until the end. Multi-year programmes with no quarterly deliverable die when budgets tighten. Ship something real every 90 days.
  • Ignoring data. Teams plan the code migration in detail and treat data as an afterthought. Data sync, dual writes, and reconciliation are usually the hardest part. Plan them first.
  • Freezing the legacy system. Telling the business "no changes during the migration" is rarely accepted and never honoured. Assume the old system keeps moving and design for it.
  • Modernizing for fashion. Moving to Kubernetes or microservices because they are current, not because the workload needs them, adds cost and operational load with no business return.

Cost considerations and the business case

Legacy maintenance consumes a large share of most enterprise IT budgets (industry estimate), which is why the strongest business case for modernization is usually about freeing future capacity rather than cutting today's bill. If your engineers spend 60% of their time keeping an old system alive, the prize is redirecting that time to revenue work, not a smaller hosting invoice.

The cost shapes differ sharply by approach. Big bang concentrates spend into a build phase and promises the lowest steady-state cost, but carries a large unpriced risk cost: the expected value of a failed cutover. Strangler fig spreads spend over a longer timeline and adds the running cost of two systems plus the interception layer, but its risk cost is far lower because each slice is reversible.

Indicative cost and risk profile by approach

Cost factorStrangler FigBig BangIncremental (modular)
Upfront build costModerate, spread over timeHigh, concentratedModerate, spread over time
Parallel running costHigh (two systems + facade)NoneLow to moderate
Risk cost (failure expectation)LowHighLow to medium
Time to cost recoveryGradual, starts earlyOnly after successful cutoverGradual, starts early
Funding profilePredictable, defensible quarterlyLarge lump, hard to defend if delayedPredictable
Hidden costOperational complexity of two systemsLost edge cases, rework after failureCoordination across slices

Whatever the approach, build the business case in capacity and risk terms the board understands, and revisit it at the end of every phase. A programme that reports "two more domains migrated, 1.5 engineers of capacity freed" each quarter keeps its funding. One that reports "still building" does not.

Build versus buy: rebuild, replace, or extend

Before committing to any custom modernization, test whether you should be writing code at all. The build-versus-buy decision for legacy systems has three real options, not two.

  • Buy (replace with a product). If the legacy system implements a commodity capability (generic CRM, standard ERP, payroll), a commercial or SaaS product is usually the right answer. Do not rebuild a solved problem. The migration is still incremental: run old and new in parallel, move users in waves.
  • Build (custom modernization). If the system encodes genuine competitive differentiation or fits no product cleanly, rebuild it, and use the strangler fig pattern to do so safely. This is where bespoke engineering earns its cost.
  • Extend (wrap and integrate). Sometimes the right move is neither: keep the legacy core, wrap it in modern APIs, and build new capabilities around it. This is a strangler fig that never fully strangles, and for stable back-office systems it can be the most economical choice for years.

On the build side, the bottleneck is rarely strategy. It is senior engineers who can read an undocumented legacy system, find its seams, and migrate it without breaking it. That scarce skill is why many enterprises bring in a software engineering partner for the heavy lifting. A team like Mind Supernova, a Vietnam-based engineering partner founded in 2023, can stand up senior engineers in 5 to 7 days with 4+ hours of daily UK overlap, working async-first against the increment-by-increment delivery model this work demands. Whether through staff augmentation to add capacity to your own team or a dedicated team owning a workstream, the model fits the phased, reversible nature of modernization. If you want to pressure-test your approach, you can schedule a call with our engineering team.

For the deeper technical playbook on a specific stack migration, the sibling article on PHP to Go migration walks through strangler fig in concrete code terms. For programmes where AI is part of the target state, the enterprise AI stack and the enterprise AI transformation roadmap show how modernization and AI adoption fit the same phased discipline.

Frequently asked questions

What is the strangler fig pattern in simple terms?

It is a way to replace a legacy system gradually. You put a routing layer in front of the old system, build new functionality alongside it, and flip traffic from old to new one piece at a time until nothing of the old system is left. Martin Fowler named it after the strangler fig vine [3].

Is big bang migration ever the right choice?

Occasionally. A controlled big bang can fit a small, stable, well-understood system facing a hard deadline, such as a vendor sunsetting a product, where running two systems in parallel is impossible. For large or business-critical systems, the lack of a rollback path makes it too risky to recommend as a default.

How long does legacy modernization take?

It depends on system size and approach, but plan for a programme measured in quarters and often years, not weeks. The key is to deliver measurable value every 90 days through incremental migration. A strangler fig programme runs longer in total than a big bang but starts returning value within the first few months.

What is the difference between incremental migration and strangler fig?

Incremental migration is the broad discipline of shipping the work in small, reversible slices. Strangler fig is a specific incremental pattern that uses an interception layer to route traffic between old and new systems. You can migrate incrementally by module, data domain, or user segment without a full strangler facade.

Should we rewrite from scratch or migrate?

Almost always migrate. A from-scratch rewrite discards the thousands of edge cases the legacy system has accumulated, and those edge cases are usually the actual business logic. Migrate behaviour incrementally and consider buying a product instead if the capability is a commodity rather than a differentiator.

Conclusion: choose safety of journey over speed of finish

Legacy modernization rewards patience and discipline. The strangler fig pattern is the safe default for large or critical systems because it contains risk, delivers value continuously, and lets you change direction at any point. Big bang is a narrow option for small, stable systems under a hard deadline. Incremental delivery is the engine underneath both. Use the decision framework to score your system on coupling, size, risk, data separability, deadline, and team knowledge, then let the result, not fashion, pick your path.

This quarter: map your legacy system, add observability, identify the seams, and price the business case in freed capacity rather than hosting savings. Next 90 days: stand up an interception layer, migrate one low-risk slice end to end, prove your rollback path, and report the capacity it frees. If you want senior engineers who can find the seams in an undocumented system and migrate it without breaking the business, talk to our engineering team.

References

  1. Martin Fowler. StranglerFigApplication and MonolithFirst. https://martinfowler.com/bliki/MonolithFirst.html [3]
  2. ThoughtWorks Technology Radar. Microservices and decomposition guidance. https://www.thoughtworks.com/radar/techniques/microservices
  3. Flexera. 2025 State of the Cloud Report (repatriation and cost). https://www.flexera.com/blog/finops/the-latest-cloud-computing-trends-flexera-2025-state-of-the-cloud-report/
  4. CNCF. Annual Survey 2025 (Kubernetes in production). https://www.cncf.io/reports/cncf-annual-survey-2025/
  5. Gartner. Worldwide public cloud and IT spending forecasts. https://www.gartner.com/en/newsroom/press-releases/2024-11-19-gartner-forecasts-worldwide-public-cloud-end-user-spending-to-total-723-billion-dollars-in-2025
Keep reading

Related articles.