Data migrations: 80% done, 80% left
Migrations stall for two reasons: gnarly models that resist translation and no clear way to prove the new system works like the old one. Without leverage, solving either becomes slow and expensive. The right tools, and the right kind of feedback loop, can turn âalmost doneâ into done.

You know the moment in a data migration when someone says, âWeâre basically done, just a few models left to validate.â But then two weeks go by, or maybe two months, and youâre decoding institutional memory, undocumented edge cases, and ghost logic from a system no one fully understands.
The last 20% of a data migration isnât spread evenly across the project. Youâre 80% done, but somehow still have 80% left. Timelines stretch and stakeholders start losing confidence. The migration goes from âalmost doneâ to âsomehow still not done.â
Weâve seen this play out across dozens of migration stories. Thereâs two reasons why this happens: the gnarly model problem, and the validation problem.Â
Where timelines break: The bottleneck model(s)
The first phase of a migration is intensive but largely defined. Youâre translating SQL, porting stored procedures, migrating schemas, and reworking transformation logic to fit a new platform.Â
Sure, itâs time-consuming and a little boring but the logic is mostly out in the open. You might be rewriting hundreds of models or stored procedures, but you can scope it, assign it, and Google it. You already know that most of the trouble will come from known quirks like null handling, casing mismatches, and collation differences, but these issues are solvable with the right experience and a strong bag of tricks. Thereâs a clear path that you (and your SQL translator) can reason through.
Then you hit that model, the one thatâs a deeply layered operational report with 15 intermediate steps and a half-dozen undocumented filters. Suddenly, youâre stuck.Â

The model that looked like a weekâs work is now a month of archaeology. It fans out into several new models; each one touches different source systems or teams. And the behavior of the legacy system isnât just complex but itâs wrong in ways people have come to depend on.Â
At this point, the migration isnât about SQL anymore but about reverse-engineering institutional memory.Â
Where confidence breaks: The validation problem
Letâs say you finally rewrite the gnarly model. Thatâs a win, right?Â
Not quite. Now you have to prove that the new system behaves the same as the old one. And thatâs where migrations hit the second wall: validation.
The legacy system had quirks: implicit sorting, undocumented filters, timezone assumptions baked into Excel models. You fix one thing, and another goes out of alignment. You rerun, retest, re-compare, write spot checks, stare at sample rows. But it never seems to satisfy the stakeholders, who ask: âAre we sure this matches production?â
This is the second reason migrations stall: you canât ship what you canât prove. And proving it, without the right tooling, turns into a slow, manual loop. Worse, itâs a loop with no clear definition of done. Even when the numbers match, confidence may not. If stakeholders donât trust the outputs, the legacy system never gets turned off.Â
Why this last stretch is so expensive
These two problems amplify each other. The gnarly models take forever to translate and rebuild â and also become the hardest to validate.Â
This is when âalmost doneâ turns into another quarter on the roadmap. The team isnât in execution mode, but stuck trying to show that things âwork the same wayâ even when thereâs no single source of truth that proves it. Youâre burning hours trying to reconstruct logic that was never fully written down in the first place.
Throwing more hours (and people) at the problem rarely helps. You can add more engineers, write more ad hoc tests, and re-run models for the tenth time. But without a structured way to validate data parity, youâre just hoping to stumble into confidence.
What helps is a system that:
- Confirms that new outputs match legacy behavior
- Traces mismatches to their root causes
- Clearly communicates what changed, what didnât, and why itâs safe to move forward
Thatâs not something you get from more effort. Thatâs something you get from applying leverage.
Leverage turns âalmost doneâ into done
What I mean by leverage is collapsing the cost of iteration. The loop (translate, test, validate, fix, repeat) has to be tight, structured, and fast. Thatâs how you shrink the hardest part of a migration down to something manageable.Â
Leverage means designing your tools and workflow to work with the problem, not around it. It means building context into your comparisons, aligning inputs before you diff outputs, and generating proof that scales across hundreds, or thousands, of models.Â
Getting help from an expert, or something like one
The Datafold Migration Agent (DMA) was built to support end-to-end migrations, and itâs the final 20%, where ambiguity, edgecases, and missing documentation stall progress where DMA becomes critical.Â
It starts by aligning source and target inputs so youâre diffing clean data. Then, it translates transformation logic, whether that is legacy SQL, nested GUI-based pipelines, or tool-specific abstractions, into modern testable code. In many cases, that means unpacking layers of logic before you even SQL.Â
DMA can handle it. Once translated, DMA runs row- and column-level diffs between systems to catch mismatches that would have been missed without custom tests for it (and you wonât have complete testing coverage since thereâll always be unknown unknowns).Â
If outputs donât match, DMA refines the translation, reruns the diff, and loops until youâve reached validated parity. When itâs done, you have a complete, validated record of what changed, what didnât, and why itâs safe to move forward.
See the feedback loop in action
Thatâs what real leverage looks like: the ability to prove parity with speed, confidence, and context. You get a tight feedback loop that builds trust without burning engineering hours on every pass.Â
Want to see how this kind of loop works in real migrations? Book a demo with our team. Weâll walk you through how DMA handles code translation, validation, and diffingâso âalmost doneâ finally means done.