Modernize legacy software without a rewrite
“The software the business depends on is years out of date, and everyone is afraid to touch it.”
Legacy software modernization means bringing an old but essential application up to date, with supported language versions, frameworks, and interfaces, while it keeps running the business. Done well, customers never notice anything except that it gets faster and safer.
The instinct is often to rewrite from scratch. That usually trades known problems for unknown ones and throws away years of business rules nobody wrote down. I prefer staged upgrades on the existing codebase, with AI tools doing the tedious tracing and people making the judgment calls.
How the work goes
Map before you move
I index the codebase into a graph of functions, classes, and dependencies, so the risky areas are visible before the first change.
Pin the behavior
The business rules that matter get tests or recorded outputs, so a regression shows up as a failed check instead of a customer complaint.
Upgrade in stages
Each step ships to production on its own. No big-bang cutover, and every stage can be rolled back.
Retire the old parts last
Legacy code comes out only after its replacement has proven itself in production.
Where I've done this
Upgraded Ops Insights, a large production PHP application, from PHP 7.4 through 8.3 to 8.5 on Yii2, in stages, while customers kept using it. See more
Built a code knowledge graph (Neo4j with GraphRAG tooling) so AI agents and people can trace dependencies across a very large codebase before changing it. See more
Leading the Ops Insights front-end move from jQuery and Bootstrap 3 to Vue, TypeScript, and Tailwind with a written design system. See more
Related case studies
Common questions
Should we rewrite instead?
Sometimes, but rarely first. A rewrite is justified when the platform itself is a dead end. Otherwise staged modernization keeps the business rules you already paid for and delivers value sooner.
How does AI help with modernization?
It's very good at the tracing and repetitive changes: finding every caller of a function, spotting deprecated patterns, drafting mechanical updates. People still review the changes and decide what's safe.
Will customers see downtime?
The goal is no. Each stage is deployed like a normal release, tested against pinned behavior, and can be rolled back.
Tell me what's slowing the business down.
Describe the problem in plain terms. I read every message myself and reply when there's something I can genuinely help with.
Start a conversation