
Choose the strangler fig pattern when the old system still earns money and cannot stop. You replace it piece by piece behind a routing layer. Choose a big-bang rewrite only when the system is small, well understood, or too broken to keep. For most live systems, the strangler fig wins.
Almost every CTO who inherits an aging system lands at the same fork. Rewrite it from scratch, or take it apart one piece at a time? The rewrite is always the more attractive pitch, because a clean slate feels like relief. The slow route is always a bit dull. Dull usually wins, and this post explains when it does not.
A big-bang rewrite builds the replacement next to the old system, in isolation, and switches everyone over on one date. Until that date the new system earns nothing. The strangler fig approach, named by Martin Fowler in 2004 after the rainforest figs of Queensland that grow around a host tree, puts a routing layer in front of the old system and moves one capability at a time to new code. The old system shrinks until you can turn it off.
Both end in the same place. What differs is when you find out you were wrong. In a rewrite you find out at cutover. In a strangler migration you find out with the first slice, when the damage is small.

Joel Spolsky argued in Things You Should Never Do, Part I back in 2000 that rewriting from scratch is one of the worst strategic mistakes a software company can make. He was writing about a shipped product, and the essay is old, but the reasoning carries over to internal systems. Four things tend to hurt:
None of this means rewrites never work. It means a rewrite has to earn its place, and the seven questions below are how we would test that.

The pitch for it usually skips the costs, so here they are:
We still lean toward the strangler fig for live systems. Just go in knowing that you are trading one big risk for a long list of smaller ones that you can actually manage.
Sometimes the right answer is neither. Check the cheaper options first:
If the pain is a dying server or a hosting bill, rehosting may be enough. If the pain is that every change takes weeks because everything is tangled together, moving house will not help. That is strangler or rewrite territory.
Answer these with your tech leads in the room, not alone. For each one, note which column your honest answer lands in.
| # | Question | Points to strangler fig | Points to a rewrite |
|---|---|---|---|
| 1 | Can the business pause or slow feature work during the migration? | No. It has to keep shipping. | Yes. A freeze is acceptable. |
| 2 | Does anyone still understand everything the system does? | Only partly. A lot lives in the code and in a few heads. | Yes. There is a current spec and decent tests. |
| 3 | Can you cut the system along clean seams, such as a module, a customer or an endpoint? | Yes, at least some seams exist. | No. Everything touches everything. |
| 4 | How much of the code is worth keeping? | Much of the business logic is sound. | Very little. The stack is unsupported or the foundations are unsafe. |
| 5 | How many integrations and downstream consumers depend on it? | Many, and they cannot all change at once. | Few, or a clean export exists. |
| 6 | Can you fund two systems running side by side? | Yes, for a year or more. | No. The budget covers one. |
| 7 | What does a failed cutover cost? | Severe: revenue, safety or a regulator. | Tolerable, and you can roll back cheaply. |
Five or more answers in one column settles it. A split, say four against three, usually points to a hybrid: strangle most of the system and rewrite the one module that is beyond saving. Hybrids are common.
Question 7 deserves a veto. If a botched cutover could hurt customers, patients or a regulator relationship, treat it as a strong vote for the incremental route, whatever the other six say.

A monolithic Java application was taking in more than 1 TB of data a day in batches that ran for six to eight hours. Insight was always half a working day old, and the fixed servers cost about $11,000 a month whether they were busy or idle. No single feature was the problem. Ingest, processing and reporting were fused together, so you could not scale or change one without touching the rest.
We re-architected it as an event-driven system on AWS. Insight now arrives in seconds, cost came down by about half, and releases use blue/green deployments so a bad one rolls back instantly. The full story is in the aviation data solution, and the thinking behind the design is on our event-driven and serverless page. The lesson for this decision: coupling, not age, was what was costing money, and that pointed to re-architecting rather than patching.

Taxi On Spot came to us with a part-built system that someone else had started. We audited it before touching anything, found security weaknesses in the foundations, and rewrote it. That is a rewrite done for the right reasons: the existing code was not an asset worth carrying forward. Read the Taxi On Spot case study for the detail.
Skylark's fleet dispatch had to keep running while it was consolidated into a single multi-tenant platform. Dispatch does not pause for a migration, so the work happened around live operations, not instead of them. That is questions 1 and 7 in practice. The Skylark case study has the details.
Data is where migrations actually fail, because you can swap code but you cannot swap history. This is the order we would work in:
If that sounds like database work as much as application work, it is. Our database engineering team is usually in the room from week one.

Every system is different, so read this as a shape, not a quote.
By day 90 you should have one real capability in production, a working rollback and a ranked list of the next slices. If you have a lovely architecture diagram and no production traffic, something has gone wrong. For how to ship these changes without downtime, see how DevOps coordination reduces downtime during critical deployments.

In a narrow band, and it is a useful one. AI tools are good at reading unfamiliar code, summarizing what a module does and drafting tests that pin down existing behavior before you change it. They are not good at deciding what a business rule should be, or when to cut over. Our own rules are simple: AI never touches production, a person reviews every line, and a client who wants none of it can have an AI-free contract. The details are on our engineering practices page.
A good answer is specific. A vague one tells you something too.
It is a migration approach where you put a routing layer in front of a legacy system and move one capability at a time to new code. Traffic shifts slice by slice until the old system handles nothing and can be switched off. Martin Fowler named the pattern in 2004.
Yes, when the system is small, the spec is current and tested, little of the code is worth keeping, or the foundations are unsafe, and the business can live with a feature freeze and a single cutover. Otherwise the risk usually outweighs the tidiness.
It depends on how many capabilities the system has and how tangled they are, so be wary of anyone who quotes a fixed finish date before reading the code. A reasonable target is a first slice in production within a quarter, with full retirement of the old system taking considerably longer.
It can cost more overall, because you run and maintain two systems for a while. The spending is spread out and value arrives early, though. A rewrite looks cheaper on paper but nothing is usable until the end.
Rehosting moves the system to new infrastructure unchanged. Refactoring cleans up the code without changing what it does. Re-architecting changes the structure, for example by splitting a monolith into services. A rewrite replaces the system outright.
Move it in waves, with one system owning writes for each record type at any moment. Compare old against new on the same inputs, keep an audit trail, and rehearse the rollback before each wave.
If you are stuck between the two paths, a short discovery call is the cheapest way to pressure-test the decision. Bring your answers to the seven questions and we will tell you where we disagree. Book a discovery call, or look at how we work with clients first.
We've built both. We'll tell you honestly which one fits.
From no-code MVPs validated in 6 weeks to enterprise AI platforms with 50,000+ users, we've built across the whole range. Book a consultation and we'll tell you honestly which approach fits your budget, your timeline, and your scale ambitions.