It runs the business, the people who wrote it are gone, and nobody wants to be the one who changes it.
The framework or language version is out of support, which security, compliance and hosting all know about. The upgrade has been postponed for years. This is the normal state of the web, not an outlier: W3Techs data shows 37.9% of PHP powered sites still running PHP 7 or older, all of them past end of security support, and Statcounter puts 28.1% of Windows desktops still on Windows 10 months after Microsoft stopped supporting it.
The people who know that stack are retiring or expensive, and the pool gets smaller every year.
Modernization goes wrong in a predictable way: someone starts changing code before anyone wrote down what the system actually does. The documentation is stale, the original team is gone, and the only reliable specification is the behavior itself.
Before touching anything, we analyze the stack and build the baseline: the suite that captures how the system behaves today, including the quirks your business depends on, with its coverage measured and recorded. That baseline becomes the contract. Then the work ships in phases, and every phase has to prove the same behavior on the new platform. A phase that cannot prove it does not ship.
Coverage can rise during the modernization, never drop. On work that runs for months, that rule keeps testing from being cut to save time and the project from ending up half done and unverified.
The suite stays with you, protecting every change made after us. Software QA Automation →
The AI reads the codebase and we map what it does, what depends on what, and where the risk concentrates. You get the map even if you stop here.
The behavior suite gets written and goes green against the current system.
Each slice moves to the new platform and has to pass the suite before it ships. Old and new run in parallel while the slices move.
The modernized system runs, with the suite, the recovered documentation and the repository, all yours.
The modernized system, on mainstream, supported technology.
The behavior suite that proved the equivalence. Green before, green after, and yours to keep.
Your repository, documented, including the specification recovered from the code itself: what the system actually does, written down.
The phase record: what moved in each phase, and what it was verified against.
Done means: every phase passed the same suite that was green on the old system, and coverage never went down.
It depends on the size of the system, and anyone answering before looking is guessing. What we can scope quickly is the first phase.
Scoped after the assessment. We do not quote before reading the system.
Yes. Slices move one at a time and old and new run in parallel.
It does not ship. The suite tells us before your users do.
You do: the system, the suite, the recovered specification and the repository.
One working session: we look at the system together and map the risk, the phases and what the safety net would have to cover. You leave knowing whether it is an upgrade, a migration or surgery, and what each would take.
Modernization leaves your system with recovered specs and a living suite, which is also what makes it ready for AI agents to work in. AI-Ready Codebase →