Legacy Modernization Without the Big Rewrite
Rewriting a working system from scratch is the most expensive way to modernise it. A staged approach that keeps the business running while PHP becomes Node.js and monoliths become services.
By David Kukharchuk
Tech Lead at Mirko

Why rewrites fail
A full rewrite freezes the product for a year, recreates every undocumented rule and ships with new bugs instead of old ones. Modernisation that works keeps the system live and replaces it in slices that each deliver value.
A staged plan
The sequence we follow
- Audit the stack, the data and the integrations. Document what actually runs.
- Stabilise: monitoring, backups, tests around the riskiest flows.
- Carve out the first slice behind an API, usually the part that changes most.
- Migrate data with a sync engine so both systems stay consistent.
- Repeat until the legacy core is empty, then retire it.
For a software company we planned the architecture, redesigned the database and migrated the legacy codebase from PHP to Node.js in six months while the product kept shipping. The client's feedback was about communication and availability, not about the migration, which is how it should be.
Choosing what to keep
Not everything needs replacing. Stable modules with low change rates can stay on the old stack behind a clean interface for years. Modernisation is a budget allocation decision, and the audit tells you where each unit of effort pays back most.





