When we replaced our finance system, the credit limits of about three thousand business customers moved across with everything else. In the old system the limit field held small numbers: twenty five, forty, a hundred and fifty. The screens multiplied them by a thousand before showing them, a convention set up in 1998 when storage was dear, and nobody who used the system had ever seen the raw value.
The new system stores limits in pounds. The migration copied the numbers exactly as they were. A limit of forty thousand pounds became, depending on which way you read the documentation, forty pounds or forty million, and the implementation partner had configured the field so that the screens showed forty million.
Nothing went wrong that anyone could see. Not a single customer was anywhere near a limit of tens of millions, so every order passed its credit check. The reconciliation report signed off at go live showed a one hundred percent match, because it compared the number in the old field with the number in the new one, and they were identical.
Four months later a builders' merchant that had been one of our steadier accounts went into administration owing us three hundred and ten thousand pounds. Its real limit had been forty thousand, and the old system would have held its orders in the spring. Our credit insurance covered the forty thousand it had agreed to, and nothing above it.
Nobody had made a careless mistake. The person who wrote the migration had copied a number faithfully. The people who checked it had checked that the numbers matched. The meaning of the number lived in a line of screen code in the old system, and that line was the one thing we did not migrate.
Every numeric field in a migration now has its unit written down beside it, and the data owner signs that off, not just the values. Reconciliation includes a set of business cases checked in both systems: would this order have been held, would this invoice have been flagged. And a weekly report lists every customer whose limit exceeds the cover our insurer has agreed, which would have shown the problem on the first day.
A number without its unit is half a fact. Our migration moved the half we knew how to check.
– Serguey Shinder
Top comments (0)