Services · Legacy system migration
Replacing a legacy system without taking production down
An old system still runs the business and cannot go down. I model the replacement, write the migration that carries the records across with their validation intact, and keep the legacy estate read-only while it happens.
Who it is for
The teams this suits
- Teams replacing a system that has run the business for years and cannot go offline for the switch
- Products whose records carry validation rules, per-customer mappings, and corrections that live in spreadsheets
- Engineering leads who need a migration they can re-run and explain, not a one-shot script
Deliverables
What you get
- A target data model for the replacement — JSONB where shapes genuinely vary per tenant, real columns where you filter
- A migration tool that maps legacy records field by field, validates them, and folds in the corrections customers send
- A cutover plan that keeps the old system read-only, so there is always one source of truth
- Import output the new system can load, and load again, while the mapping is still changing
Proof
Where I have done it
See the migration approach used on a 38-database compliance system
Building RAG over twenty years of grant compliance
How I built retrieval-augmented answers over a multi-tenant compliance platform — tenant-scoped retrieval, record-shaped chunks, pgvector plus Elasticsearch, Cohere reranking on Bedrock, and citations that are checked before they are shown.
What a JSONB form engine cost us
Notes on backing a multi-tenant form engine with PostgreSQL JSONB — where it bought configuration without deployments, and where it quietly bought a sequential scan.
Boundaries
What this is not
- General staff augmentation or open-ended long-term support
- Pure front-end work
- Work with no agreed target at the end of it
Questions
Before you write
Does the old system have to go offline?
No. On the Balio replacement the legacy V1 stays in production, read-only, while records move across. That is the default plan.
What if the legacy data is messy?
It always is. The migration validates each record — budgets, required fields — and client corrections from Excel are folded into the pipeline rather than patched by hand, so a re-run gives the same answer.
How big a record can it carry?
The Balio tool carries 200–500-field records across per-jurisdiction mappings, out of an estate of 38 databases and 142K compliance and expense reports.
Next
Tell me what is under strain
The system, the problem, and the constraints. I read everything and reply myself, usually within a day.