// software
Strangler fig pattern
The strangler fig pattern is a modernization strategy where new code is placed in front of a legacy system and takes over one slice of functionality at a time, while everything else keeps routing to the old one. Each release is small and reversible, the old system keeps working throughout, and there is no cutover weekend.
It matters because big-bang rewrites fail predictably: they ask you to rebuild behaviour accumulated over years while the old system must keep running — so you maintain two systems with one team until the new one ships late and over budget. The strangler fig route inverts the risk: value arrives from the first slice, the business is never hostage to a cutover date, and stopping halfway still leaves you better off — whereas a rewrite stopped halfway leaves you with nothing.
Concretely: put a routing layer in front of the old system — a proxy, a gateway, a facade — and send one flow, say password resets, to new code. Everything else falls through untouched. Then the next seam, then the next. Between the sides, an anti-corruption layer translates models so legacy vocabulary never infects the new code. Timelines run in quarters to years, proportional to the legacy system's size, with the old system as the specification: migrate behaviour, validated output by output, not structure.
Frequently asked questions
- How long does a strangler fig migration take?
- Honestly: quarters to years, proportional to the size of the legacy system. The difference from a rewrite is that every slice ships value, so progress is visible from the first weeks, and stopping halfway still leaves a working improvement. A rewrite stopped halfway leaves nothing.
- Which slice should we modernize first?
- Pick by value, not by shame: the most painful change, the riskiest manual step, the part the business most wants improved. Keep the first slice deliberately small — one flow, a few weeks — and choose a seam with few callers and simple inputs and outputs.
// go deeper
Full treatment in the guide: How to modernize a legacy system without rewriting it