Rebuild, not translate.
We keep what matters — business logic, data integrity, integrations and user behavior — and prove it with parity tests, in a new repository. Migration starts only after a delivered Assessment Report, an accepted Proposal and a signed Contract.
Two strategies. The Assessment chooses.
Incremental, behind a routing layer
A routing layer sends each request to the legacy application or the new one. Modules move one at a time, each verified by parity tests before the next. Legacy is retired only when acceptance criteria are met.
Fits: large or revenue-critical apps, many integrationsThe old system is the specification.
Before and during the build, we derive tests from what the legacy application actually does. Each milestone is accepted against those tests before it is invoiced.
Milestones and payment split are defined per contract.
One signature never implies another. Payment never authorizes anything.
- 01 · repository_readRead your codeBefore any access. Signed by whoever can grant it.
- 02 · code_processingAnalyze itBefore any analysis. AI is a separate sub-scope.
- 03 · new_repository_creationCreate the new repoOwner, access, IP assignment, transfer terms.
- 04 · production_cutoverTouch productionSigned by your contract signer and technical owner.
Each record names the signer, assets, permitted activities, time window and how to revoke it. A revoked record stops the related work at once.
Two rollback plans, written before the switch.
You leave with the system. We leave with nothing.
- Repository transferper contract
- Documentation & runbooksoperations-ready
- Our access revokedyou rotate credentials
- Warranty windowlength set in contract
- Working copies deleteddated deletion record