by Serguey Shinder
Version two of our public interface shipped in 2021. It was better in every respect, we were proud of it, and we announced that version one would be withdrawn in twelve months. That felt generous. It was the longest notice anybody in the company had given for anything.
The first attempt at the cut-off lasted forty minutes. We turned it off at nine, three customers were broken by twenty past, and it was back on before ten. None of them had responded to a single one of the eleven emails we had sent over the year, because those emails went to the address on the account, and in each case that address belonged to somebody who had left the company that owned it.
The second attempt came eighteen months later and was far more professional. We had per-client usage telemetry by then, so instead of guessing we had a list, and the list had four names on it. We phoned them. Two migrated within the quarter. One asked for a date and then missed it twice. The fourth turned out not to be a customer at all. It was our own internal reporting tool, written by a team that had since been reorganised out of existence, calling our public interface over the open internet because in 2019 that had been the quickest way to get the numbers.
The third attempt worked. It happened a little over four years after the twelve-month notice, and the final obstacle was a version of our mobile application that a few hundred people were still running and could not be persuaded to update.
The thing I took from all of this is not about deprecation policy. It is that the lifetime of anything you publish is not set by you. It is set by your least motivated user, and that user has no budget for migration, no memory of having integrated in the first place, and quite possibly no employee left who knows the integration exists.
I used to think about a system's future as the things we would add to it. Most of a system's future is the things it cannot stop doing. Capacity to change is the inverse of the surface you have already published, and that surface only ever grows, because every new one is cheap on the day it is created and is priced for the following decade.
So we ship fewer public surfaces now, on purpose, and each one arrives with usage telemetry on day one, a contact that is a role rather than a person, and a stated support window written at launch rather than at withdrawal. You cannot retire what you cannot measure, and you cannot measure what you did not instrument while you still cared.
Everything we expose this quarter is a decision about what we will still be running in 2035.
– Serguey Asael Shinder
Leave a Reply