Strangler Fig Migration
Replace a legacy system gradually: leave delivered work where it is, migrate only what's still relevant, and put every new use case on the new platform. The last rule is the one that actually shrinks the old system.
🌱 A rough idea, planted recently. Expect rough edges — it will grow.
On this page
Martin Fowler named it after a fig that grows around a host tree until the tree is no longer needed. Instead of a big-bang rewrite, you grow the new system around the old one until the old one only holds what isn’t worth moving.
Three buckets
- Delivered and stable: leave it. Migrating something that already works, and that nobody is changing, is cost and risk with no benefit to its users.
- Still relevant, still changing: migrate it. Prioritise by how often it changes and how much the old system hurts.
- Everything new: only on the new platform, from day one. This is the rule that actually shrinks the legacy system. Without it, the old one keeps growing while you migrate.
A routing or façade layer in front means callers don’t care which system serves them. Keep the old system maintainable but frozen: no new features there.
Measure it
Track the share of new work landing on the new platform, how many people the old system still needs to keep running, and the point at which switching it off becomes boring rather than scary.
Where I’ve used it
On a low-code network automation platform (Building a Low-Code BPMN Workflow Platform), long-lived automations, such as moving customers between network sites or automating infrastructure across whole regions, stayed on the legacy workflow engine once they were delivered. The ones still being changed were migrated, and every new use case went on the new platform. It’s the same instinct, at a much smaller scale, as an incremental build-tool migration (Progressive Overload and Incremental Migration).
- #migration
- #legacy
- #platform-engineering
- #architecture
- #strangler-fig
↩ Linked from (2)
…maps) stayed where they were; still-relevant ones were migrated; every new use case went on the new platform (Strangler Fig Migration). Streamed device output with server-sent events. Live polling logs and command output…
…ld staff (Growing a Platform: Breadth, Depth and Gear Shifting). Moving off the old layer happened gradually (Strangler Fig Migration).
↪ Links to (2)
Related by topic
- Seed
Anti-Corruption Layer
Backend - Seed
Agentic System Design Checklist
AI, machine learning - Seed
Contract-Driven Development
Platform engineering - Seed
Kubernetes
Platform engineering