Build beside the legacy code
Instead of rewriting everything at once, we built a well-structured layer over the old code and routed new requirements through it. New features ship from the clean side, and the legacy code can be switched off piece by piece, without customers noticing.
- New core separated from legacy code
- Refactoring and delivery happening in parallel
- A loosely-coupled design
- Easier, safer testing