Article
The full rewrite is attractive because it promises a clean end state. It fails because the old system keeps changing while the new one is being built, and the switchover risk concentrates at a single point in time.
Strangle, don't replace
Put a routing layer in front of the legacy application, then move capability behind it one bounded area at a time.
- Choose the first slice by risk, not by ambition
- Keep a single source of truth per entity during the transition
- Instrument both paths so you can compare behaviour
- Delete legacy code as each slice completes — otherwise you now run two systems
