Coffee Mug · Dossier No. 02
Practices / 02 · Legacy Migration
Compiled May 2026
File 02 / 05 · Practice dossier

Legacy
Migration

Read time · 10 min · Field-tested since 2016

On the careful software work between the system that still runs the business and the platform everyone wishes had already replaced it.

§ 01

The problem migration teams keep hitting.

Most legacy systems are not broken. They are worse: they work. They invoice customers, move data, run reports, and encode ten years of business exceptions that nobody wrote down.

The risk is rarely the old code alone. It is the invisible contract between the old code, the database, the operators, the nightly jobs, and the downstream systems that quietly depend on all of it.

§ 02

What we actually build, in order.

We usually start by making the legacy system observable. Logs, data flows, job schedules, failure modes, user paths, and integration points need to be visible before they can be replaced.

Then we isolate one bounded slice. An API, a workflow, a reporting module, a data pipeline, or a frontend shell. We migrate by cutting load-bearing pieces one at a time, not by promising a clean rewrite.

§ 03

What we don't do.

We do not sell big-bang rewrites. We do not call a system legacy just because it uses an old framework. We do not replace stable software without understanding why it survived.

We also do not take migration work where the plan is mainly theatre: new architecture diagrams, no cutover path, no operator buy-in, and no budget for the difficult middle.

● Widget · What we build

Five things, in this order.

Legacy migration is not one rewrite. It is a sequence of safe moves that reduce risk without stopping the business.

01

System mapping & discovery

Code, databases, jobs, integrations, users, reports, hidden dependencies, and operational failure modes.

02

Migration architecture

Strangler seams, API facades, parallel run, data sync, rollback plans, and phased cutover paths.

03

Data migration & reconciliation

Schema redesign, ETL, historical data, validation, dual-write checks, audit trails, and reporting parity.

04

Modern application rebuilds

Replacing selected modules with maintainable services, web apps, APIs, and internal tools.

05

Operational handover

Dashboards, alerts, runbooks, release process, ownership transfer, and post-cutover support.

● Margin note
The brief was: replace the system without making the business notice. Nine months later, the old app was handling less than 20 percent of traffic.
— CTO, B2B platform · interviewed February 2026
● Widget · How we engage

Three phases, no surprises.

Phase 01

We map the risk.

We inspect the code, data, integrations, release process, operator workflows, and the places where everyone says: do not touch this.

Phase 02

We cut one seam.

We choose a bounded slice of the system and move it safely: behind a facade, beside the old app, or through a controlled parallel run.

Phase 03

We retire the old path.

Every migration has an exit: traffic shifted, data reconciled, runbooks written, ownership transferred, and the legacy surface reduced.

● Appendix A — capabilities

What sits under the practice.

DISC
Legacy discovery
Code review, system maps, data flows, dependency graphs, risk registers.
ARCH
Migration architecture
Strangler pattern, facades, modularization, phased cutovers, rollback design.
DATA
Data migration
ETL, schema mapping, validation, reconciliation, audit, historical imports.
REPL
Application replacement
Modern APIs, services, admin panels, internal tools, frontend rebuilds.
OPS
Cutover operations
Observability, runbooks, release automation, incident support, ownership handover.