A Date Somebody Else Had Chosen
Most migrations start with a business case. This one started with a calendar. The hosting contract was ending, it was not being renewed, and after that date the machines holding every policy the business had ever written belonged to someone else. There was no version of this where the work slipped a quarter and nobody minded. That changes how you plan. You stop asking what the ideal end state looks like and start asking what has to be true on the last night, then work backwards from it.
Policy Data Does Not Summarise
It is tempting, on a job like this, to move what is live and archive the rest. Insurance will not let you. A claim can be settled years after the policy was sold, and settling it can turn on wording that was amended long before anyone thought about it again. The amendment matters as much as the policy. So the scope was not the current book. It was every record, every version of every record, and the documents attached to them, in a form somebody could still read and still trust once the old system was gone.
Moving It In Pieces
We moved it in stages rather than in one weekend. Each stage took a defined slice, ran it end to end into the new environment, and stopped. Nothing was deleted at the source. That is the part people skip when a deadline is close, and it is the part that makes the difference, because a stage that goes wrong is then a stage you run again rather than an incident you manage. Each one was rehearsed against a copy before it was run for real, and each had a written way back that we had actually tested rather than described.
Proving It Rather Than Believing It
The question that mattered at the end was not whether the migration finished. It was whether anyone could show that nothing had been lost. So reconciliation was built as part of the work instead of as a check afterwards. Counts and checksums were compared against the source per slice, mismatches were listed rather than tolerated, and every one of them was chased down to a reason. Some turned out to be duplicates that had been in the old system for years. Those were reported, not quietly dropped, because a number that changes without an explanation is the thing that costs you trust in an audit two years later.
Switching The Old One Off
The last step was the one nobody enjoys. The old environment stayed up, read only, until the reconciliation had been signed off and the business had worked a full cycle on the new one. Then it went off. Because the sequence had been agreed in writing at the start, the decommission was an afternoon and a checklist rather than an argument about whether it was safe. The insurer left the contract on the date it ended, and the record of every policy came with them.