The Strangler Fig Pattern for Legacy Application Modernization: Three Conditions Under Which It Quietly Fails
The strangler fig pattern is the most cited technique in legacy application modernization, and for good reason. It is elegant in theory: build the replacement alongside the existing system, intercept traffic at the boundary, reroute it piece by piece, and retire the old system when it is handling nothing. Martin Fowler described it clearly. Consultants recommend it routinely. And yet a significant number of strangler fig migrations stall, dragging on for years, leaving organisations paying for two systems while getting the full benefit of neither.
The pattern itself is not the problem. The problem is the gap between the conditions the pattern requires and the conditions most organisations find themselves in when they decide to use it. The technique is applied to systems it was not designed for, by teams operating under timelines it cannot meet, inside organisations that run out of patience before the old system is dead. The result is a migration that never quite finishes, and a legacy system that survives because nobody could bring themselves to cut the last wire.
This post examines the strangler fig honestly. What it requires to work. The three specific conditions under which it quietly fails. And the uncomfortable question the reader probably needs to sit with before committing budget to it.
What is the strangler fig pattern in legacy application modernization?
The name comes from the strangler fig tree, which germinates in the canopy of a host tree, grows roots down around it, and eventually surrounds the host entirely until the host dies. Martin Fowler documented the software application of this idea in 2004, drawing on a pattern he observed in practice. The core insight was simple: rather than trying to replace a complex running system in a single cutover, you place new functionality at the edges and let the old system shrink.
The appeal is real and the logic is sound, but only under a specific set of structural conditions. The pattern assumes that calls to the legacy system can be intercepted at a stable boundary. It assumes the system can be decomposed into discrete capabilities that can be migrated independently without breaking the ones left behind. And it assumes that the organisation has the appetite to sustain parallel operations for however long the migration takes, which is almost always longer than the original estimate.
What the pattern does not do is make an entangled system decomposable. It does not create a stable interface where none exists. It does not shorten the migration timeline if the domain is poorly understood. It is a delivery technique, not a problem-solving technique. The conditions have to be present before the technique can be applied. When they are not, the strangler fig becomes something else: a long, expensive holding pattern that never resolves.
When does the strangler fig pattern work?
Stability at the boundary is the first requirement. If all calls to the legacy system pass through a known, documented API or service layer, that boundary can be intercepted with a proxy or facade. New components can be placed behind that facade, and traffic can be rerouted to them without the calling systems needing to know anything has changed. This is the scenario the pattern was designed for.
A legacy system that is called directly at the database level by multiple other applications is a materially different problem. There is no clean boundary to intercept. Every calling application has implicit knowledge of the data model, often baked into SQL that has never been reviewed and cannot be fully inventoried. Placing a facade in that environment requires first creating the stable interface that should have been there to begin with, which is a substantial engineering effort before a single line of the replacement has been written.
Domain decomposability is the second requirement. The strangler fig moves capabilities one at a time. If those capabilities are genuinely independent, each migration delivers real value and reduces load on the legacy system. If the capabilities are entangled, moving one requires touching several others, and the apparent independence is an illusion. Many legacy systems are entangled not because they were poorly designed but because they absorbed business rules over decades that nobody ever wrote down, and those rules link parts of the system in ways that only become visible when you try to separate them.
Organisational patience is the third requirement and the most frequently underestimated. A strangler fig migration running over two to four years is not unusual for a system of meaningful complexity. The business case that funded the programme was written for 18 months. By month 24, the legacy system is still running, the new system is partly live, the team that designed the migration has changed, and the steering committee is asking whether it would have been cheaper to do a big-bang replacement. The pattern cannot defend itself against an organisation that runs out of patience before the work is done.
What are the three conditions under which the strangler fig pattern fails?
Failure condition one: no interceptable interface. This is the most technically decisive failure condition and the one that is easiest to diagnose before the work starts. If the legacy system exposes no stable API, no service boundary, no well-defined set of entry points, then the strangler fig has nowhere to attach. The options are to create that boundary first (significant preparatory cost, timeline extension, risk of disruption to a running system), to intercept at the database level (technically possible but fragile, and it means the new system is coupled to the old schema), or to admit that this system is not a strangler fig candidate and choose a different approach.
The diagnostic question is blunt: can someone on the current team point to the exact interface they will intercept on the first day of the migration? If the answer requires a list of caveats, the interface is not stable enough to build a multi-year programme around.
Failure condition two: entangled data. Even when the application interface is clean, the data model may not be. Many legacy systems accumulated data responsibilities that were never part of their original design. A financial system that also holds customer contact data. A product catalogue that doubles as the inventory record of truth. A claims system where the workflow state is encoded in a status field that means different things in different contexts and those meanings are only partially documented.
The strangler fig assumes that capabilities can be migrated independently, which requires that the data those capabilities operate on can be partitioned. When data is entangled, every migrated capability needs to read from or write to both the old schema and the new one simultaneously during the transition period. That synchronisation is expensive to build, expensive to maintain, and a constant source of inconsistency bugs. A data model that cannot be partitioned makes every parallel-running cost larger and every migration step harder than the original plan assumed.
The way to surface this risk before committing budget is to run a data ownership analysis on the legacy system: who reads each table, who writes it, and how many different capabilities touch the same rows. If the answer reveals a web of shared tables with no clear ownership, the data problem will slow the migration significantly.
Failure condition three: the migration that never finishes. This is the quietest and most common failure mode, and it is not a technical failure at all. The strangler fig is working as designed. Traffic is being rerouted. The new system is handling a growing percentage of the load. But the last 20 to 30 percent of the legacy system turns out to contain the most complex, most entangled, most undocumented functionality. The easy capabilities were migrated first because they were easy. What remains is the difficult core that nobody fully understands.
At this point the organisation faces a choice: invest heavily in understanding and migrating the difficult core, or accept the current state as "good enough" and move on. The business case did not budget for the difficult core. The steering committee has been living with this programme for three years. The temptation to call it done is very strong.
The result is two systems running in perpetuity, each handling part of the load, with integration between them that becomes its own maintenance burden. The strangler fig froze before the host tree died. The organisation is now paying for both.
How do you assess whether your legacy system is a strangler fig candidate?
The assessment is not long, but it is specific. It requires people who understand the system at a level of detail that the steering committee usually does not have direct access to, which means the assessment relies on the team that runs the current system being willing to describe its problems accurately. That is not always a comfortable dynamic when the same team may also be building the replacement.
Start with the interface inventory. Every entry point into the legacy system, documented. Every place where another system calls it, every place where a user interacts with it, every batch process and integration feed. This inventory does not need to be exhaustive to be useful. It needs to be honest about what is unknown. If the inventory reveals that 40 percent of the entry points are undocumented, that is itself a finding that changes the migration approach and the cost.
Then the data ownership map. Which tables are written by more than one capability? Where is the same business concept stored in multiple places with inconsistent definitions? This work surfaces the entanglement risk before the migration team discovers it at the worst possible moment, which is usually 18 months in when a critical capability turns out to share its core data table with five others that have not been migrated yet.
Then the business case stress test. Take the original timeline estimate and multiply it by two. Take the parallel-running cost and multiply it by that extended timeline. Does the business case still hold? If the answer is no, the organisation needs to decide whether to proceed anyway with eyes open, choose a different migration approach, or in some cases, leave the system alone if it is stable and the cost of running it is acceptable.
That last option is real. Some legacy systems should not be migrated. They are stable, they are cheap to run relative to the migration cost, and the business they support is not changing fast enough to justify the disruption. A system that processes a fixed set of transactions, has not needed a material change in five years, and runs without significant operational problems is not automatically a problem to be solved. It is infrastructure that is doing its job.
What is the realistic cost of running two systems in parallel?
This is where the financial case for a strangler fig migration most often falls apart, not dramatically and all at once, but slowly, in quarterly budget reviews where the legacy system's operational costs keep appearing alongside the new platform's costs and nobody is sure when the crossover will happen.
The costs of running the legacy system do not stop during the migration. Infrastructure costs continue. Licensing costs continue where they apply. Security patching continues, and may actually increase in urgency as the system approaches retirement because patching a system under active migration is riskier than patching a stable one. Support continues. And the team that understands the legacy system well enough to keep it running during the migration is not free, because those people are also the ones who know where the undocumented behaviour lives.
An honest business case for a strangler fig migration puts both systems' operating costs on the page for every year of the migration, and extends the forecast to cover the realistic worst-case timeline, not the plan. The figure that emerges is frequently larger than the one in the original presentation to the steering committee, because the original presentation was built around the new system's cost and treated the legacy system as a problem that would disappear on a fixed date.
Konnectedly's role in assessments like this is specifically to produce the honest figure before the commitment is made rather than after, without any interest in whether the answer leads to a migration, a retirement, or a decision to leave the system alone.
Frequently Asked Questions
What is the strangler fig pattern in legacy application modernization?
The strangler fig pattern is a migration approach where new functionality is built alongside an existing system rather than replacing it in one go. Traffic is gradually rerouted to the new components until the old system handles nothing and can be retired. It is named after the fig tree that grows around a host tree until the host dies.
When does the strangler fig pattern work best?
It works best when the legacy system has clear, stable interfaces that can be intercepted; when the business domain is well understood and can be decomposed into discrete capabilities; and when the organisation has the patience and budget to run two systems in parallel for an extended period, typically 18 months to several years.
What are the three main conditions under which the strangler fig pattern fails?
The strangler fig pattern tends to fail when the legacy system has no stable interface that can be intercepted, when the data model is so entangled that it cannot be cleanly partitioned between old and new, and when the organisation loses patience and cuts the migration short before the old system is retired, leaving two systems running indefinitely.
How long does a strangler fig migration typically take?
Timelines vary considerably by system complexity and organisational pace, but most honest assessments put the range at two to five years for a system of meaningful size. Projects that are planned for 18 months frequently run longer. The parallel-running period is almost always underestimated in the original business case.
What does it cost to run two systems in parallel during a strangler fig migration?
The parallel-running cost is the most consistently underestimated element. Organisations typically budget for the new build but not for the continued operation, support, and security patching of the legacy system during the transition. For large estates, that parallel cost can run to seven figures annually and persist for years beyond the original schedule.
Is the strangler fig pattern the right approach for every legacy system?
No. For systems with deeply entangled data, no interceptable interface, or a business domain that is poorly understood, a strangler fig migration will stall. Some systems are better candidates for retirement and replacement with a commercial package. Others should be left alone if they are stable and cheap to run.
How do you know if a legacy system has an interceptable interface?
An interceptable interface is one where all calls to the system pass through a known, stable boundary - an API, a service layer, or a well-defined set of entry points. If the system is called directly by other applications at the database level, or if the entry points are undocumented and numerous, meaningful interception is very difficult without significant preparatory work.
What is the difference between a strangler fig migration and a big-bang replacement?
A big-bang replacement retires the old system on a fixed date and switches all traffic to the new one simultaneously. A strangler fig migration moves traffic incrementally over time, with the old system handling progressively less. Big-bang carries higher risk and lower parallel cost. Strangler fig carries lower risk per release but higher sustained cost and a longer timeline.
An independent assessment of your legacy system's interface stability, data entanglement, and realistic migration timeline would put a defensible number on this decision before the board approves the budget.
Book a call →Questions
- What is the strangler fig pattern in legacy application modernization?
- The strangler fig pattern is a migration approach where new functionality is built alongside an existing system rather than replacing it in one go. Traffic is gradually rerouted to the new components until the old system handles nothing and can be retired. It is named after the fig tree that grows around a host tree until the host dies.
- When does the strangler fig pattern work best?
- It works best when the legacy system has clear, stable interfaces that can be intercepted; when the business domain is well understood and can be decomposed into discrete capabilities; and when the organisation has the patience and budget to run two systems in parallel for an extended period, typically 18 months to several years.
- What are the three main conditions under which the strangler fig pattern fails?
- The strangler fig pattern tends to fail when the legacy system has no stable interface that can be intercepted, when the data model is so entangled that it cannot be cleanly partitioned between old and new, and when the organisation loses patience and cuts the migration short before the old system is retired, leaving two systems running indefinitely.
- How long does a strangler fig migration typically take?
- Timelines vary considerably by system complexity and organisational pace, but most honest assessments put the range at two to five years for a system of meaningful size. Projects that are planned for 18 months frequently run longer. The parallel-running period is almost always underestimated in the original business case.
- What does it cost to run two systems in parallel during a strangler fig migration?
- The parallel-running cost is the most consistently underestimated element. Organisations typically budget for the new build but not for the continued operation, support, and security patching of the legacy system during the transition. For large estates, that parallel cost can run to seven figures annually and persist for years beyond the original schedule.
- Is the strangler fig pattern the right approach for every legacy system?
- No. For systems with deeply entangled data, no interceptable interface, or a business domain that is poorly understood, a strangler fig migration will stall. Some systems are better candidates for retirement and replacement with a commercial package. Others should be left alone if they are stable and cheap to run.
- How do you know if a legacy system has an interceptable interface?
- An interceptable interface is one where all calls to the system pass through a known, stable boundary - an API, a service layer, or a well-defined set of entry points. If the system is called directly by other applications at the database level, or if the entry points are undocumented and numerous, meaningful interception is very difficult without significant preparatory work.
- What is the difference between a strangler fig migration and a big-bang replacement?
- A big-bang replacement retires the old system on a fixed date and switches all traffic to the new one simultaneously. A strangler fig migration moves traffic incrementally over time, with the old system handling progressively less. Big-bang carries higher risk and lower parallel cost. Strangler fig carries lower risk per release but higher sustained cost and a longer timeline.