Modernise Without Starting Over
Rewriting everything from scratch sounds appealing when you're dealing with a legacy codebase, but it's usually the wrong call. You lose months of work, you reintroduce old bugs, and you end up with a new codebase that has its own problems. I take a different approach: systematic, phased modernisation that keeps the product running throughout.
Understanding Before Changing
Before touching any code, I map the existing system thoroughly. What does it actually do — including the undocumented behaviour that everyone has forgotten about? Where are the boundaries? What's load-bearing and what's dead code? Without this, a migration will break things you didn't know existed.
Phased Approach
I migrate incrementally, starting with the parts of the system that will benefit most or that are causing the most pain. Each phase delivers something useful — a faster page, a more maintainable module, a reduced infrastructure cost — rather than spending six months with nothing to show for it.
Data Migration
Moving data between systems is often the most dangerous part of a migration. I plan and test data migrations carefully, with validation at every step and rollback procedures in place before I touch production.
Team Handover
At the end of a migration project, your team needs to understand the new system. I document what I built, why I made the decisions I made, and how to maintain and extend it going forward.
