29 Oct 2026
A migration you can only run once is a migration you cannot test. Ours ran against live data as often as we liked and threw it all away afterwards, which is the only reason the real one was boring.
More …
27 Oct 2026
You cannot bring a ledger entry across until its account exists, because until then the account has no new identifier for the entry to point at. The foreign keys decide the running order, and then you write that order down once.
More …
25 Oct 2026
The obvious shortcut is to add a number to every identifier and call it done. Here is why that falls over, and what we used instead: more than forty tables whose only job was to remember what became what.
More …
23 Oct 2026
Every script in a migration needs to read the old system and write to the new one. Three-part names everywhere make that brittle and impossible to test. There is a tidier answer and it takes ten minutes.
More …
21 Oct 2026
Ten years of independent development meant one system had features the other had never heard of. You cannot map a table onto a table that does not exist, so a good part of a data migration project turned out to be ordinary feature development.
More …