by Serguey Shinder
Address lookup stopped working on a Monday morning. Not degraded, not slow. Every postcode we sent came back rejected, with a short message about an account being required.
The service had been free since we started using it in 2014. A public body published it, we called it around forty thousand times a month, and we had never signed anything, never paid anything and never appeared on any list of people who might need telling. There had been an announcement. It went out through channels meant for organisations with a relationship, and we did not have a relationship, because a relationship would have meant a contract, and the entire appeal of the thing had been that there was no contract.
We had built four features on it, including the one in the signup flow, which is to say we had put it on the path every new customer walks. Replacing it took eleven days and a commercial conversation nobody had budgeted for, and in the meantime new customers typed their addresses into a free text box our validation had never been written to trust.
The audit afterwards was the useful part. We went looking for every external thing we depended on and had no agreement with, and found nine. A currency rate file a helpful person at a bank published every morning. A font served from somebody else's domain. Two sets of mapping tiles. An open dataset of company registrations. A library one maintainer had been updating since 2016. None of it sat on a supplier list, none of it appeared in a budget, and therefore none of it was on any risk register, because risk registers are assembled out of things that cost money.
That is the part I think gets worse from here rather than better. A great deal of modern software stands on services that are free at the point of use, and free at the point of use always means somebody else is paying for a reason of their own. The reason might be marketing, or a grant, or a policy, or one person's enthusiasm. Reasons end. When the reason ends you are not a customer being given notice, you are a consumption figure on a slide about costs, and the slide is being read by somebody who has never heard of you.
Our register now lists everything we call, paid or not, with a named owner and an honest line about why it exists and who funds it. Anything on a customer path either has a contract or has a fallback we have actually tested. The daily data feeds are cached on our side, which cost almost nothing and buys weeks.
So the question I ask about a dependency is no longer how reliable it is. It is who pays for this, and what happens to me on the day they stop.
– Serguey Asael Shinder
Leave a Reply