The "Big Bang" Rewrite is a Trap: A Risk-Free Strategy for Legacy Modernization
Every successful software product eventually reaches a tipping point. The codebase that allowed you to launch fast five years ago is now the very thing slowing you down. Deployment times creep from minutes to hours. A small bug fix in the billing module breaks the user profile page. New developers spend weeks just trying to understand the code before they can write a single working line.
The temptation is to call for a "Big Bang" rewrite: stop development, freeze features, and rebuild the entire platform from scratch. In my experience, this is almost always a mistake. The "Big Bang" approach kills business momentum, freezes innovation for months (or years), and introduces massive risk.
There is a better way: The Strangler Fig Pattern.
The Strategy: Incremental Modernization
The "Strangler Fig" pattern (named after the vine that grows around a tree and eventually replaces it) is about gradually migrating functionality from a legacy monolith to a new microservices architecture — one piece at a time. This allows us to fix the plane while flying it.
Phase 1: The API Gateway Defense
The first step is not writing code, but changing traffic flow. We place an API Gateway (Nginx, Kong, or AWS API Gateway) in front of the existing legacy monolith. At first, it simply proxies 100% of traffic to the old system. Users notice nothing. But architecturally, we've gained control — a layer where routing decisions can be made based on URL paths.
Phase 2: Build New Features "Outside"
When the business requests a new feature — say, a new "Loyalty Rewards" program — we do not build it inside the old monolith. Instead, we spin up a pristine, standalone microservice (using NestJS or modern Node.js) that handles only the rewards logic.
This new service has its own database, its own CI/CD pipeline, and clean, typed code. It connects to the old system only via APIs, keeping the boundaries strict.
Phase 3: The Traffic Switch
Once the new service is ready, we update the API Gateway:
- Traffic to
/api/v1/users→ still goes to the Monolith - Traffic to
/api/v1/rewards→ routed to the new Microservice
We have successfully introduced modern architecture without touching the dangerous legacy code.
Phase 4: Strangle the Old Logic
We pick one isolated module from the monolith — say, "Invoicing" — and rewrite just that module as a new microservice. Once tested and ready, we flip the switch at the gateway level. The old invoicing code sits dormant in the monolith, effectively dead, while the new service takes over.
Repeat this process, module by module. Over time, the monolith shrinks until it disappears entirely.
Business Impact: Speed without Risk
- Zero Downtime: Migration happens entirely in the background
- Immediate Value: New features are built on modern, fast tech immediately
- Risk Mitigation: If a new microservice fails, switch the gateway route back to the old monolith in seconds
Modernization doesn't require a revolution. It requires a strategy. By decoupling the "new" from the "old," we can transform a legacy burden into a competitive advantage.
Originally published on LinkedIn
Related reading
- Monolith, Microservices, or Neither: An Honest Architecture Guide
- We Migrated a Legacy Java Backend to Node.js — Without a Single Day of Downtime. Here's How.
- The 'Context Window' Paradox: Why Fragmented Microservices Are Sabotaging Your AI Strategy
- Stop Polling, Start Reacting: Why Event-Driven Architecture Is Your Competitive Advantage
Not sure whether to split the monolith?
Tell me your user count, team size, and the part that hurts most. I will tell you whether your architecture is actually the problem — and I have talked plenty of founders out of a migration they did not need.




