The instinct facing a legacy system is tempting: ‘let's rewrite it from scratch and be done’. In my experience, that decision usually costs twice the time and puts the business at risk for months.
Phased, evolutionary modernisation
I prefer to isolate the legacy behind clear boundaries and replace pieces with business value at each step. Patterns like strangler fig, hexagonal and CQRS let old and new coexist without a risky big-bang.
- Start with observability: you can't modernise what you don't measure.
- Attack single points of failure and bottlenecks first.
- Introduce resilience (circuit breakers, graceful degradation) before scaling.
I did this at Enterticket, modernising a legacy architecture toward microservices and serverless, and at RD Station, unifying seven tools into a single editor. In both cases, the business never stopped running.



