The Lego Brick and the Bus Stop
It is 9:47pm on a Monday and I am on my hands and knees in the living room, fishing a translucent pink unicorn out from under the sofa.
Next to it: half a Happy Meal robot, a deflated whoopee cushion that was funny for precisely eleven minutes back in August, and the obligatory rogue Lego brick lying brace-side up like a tiny landmine waiting for a bare foot.
I tip the lot into the toy box. The toy box does not close. It has not closed since roughly 2023.
I am, in this moment, the sole operator of a small, chaotic, badly governed plastics depot. And I work in public transport software. By day I help build the systems that nudge people out of cars and onto buses and trains, on the working assumption that the next generation deserves a world with cleaner air and fewer motorways through it. By night, apparently, I run a moulded-polymer landfill out of a hippo-shaped tub three feet from where my children sleep. The irony is doing some heavy lifting in this house. The cheap version of this blog post writes itself, and you have read it before, so I am not going to bother writing it. The version I am interested in is what the unicorn under the sofa has in common with a thing every engineer reading this has done at least once this year.
The Moment We All Know
You have had this moment. You are in a file you did not write (or, if you are really unlucky, you did), looking at a method that mostly works, and you can already see the shape of the decision in front of you. Route around it. Override it and leave the original sitting there like a fossil. Or stop, take a breath, and actually fix the thing.
There is a name for the thing you are looking at. It is technical debt, and the option where you actually fix it is the one we almost never pick, because the moment is always the wrong moment. There is a ticket on the board. There is a demo on Friday. Nobody has died. Add the override. Move on. Close the lid. The toy box will probably still shut.
It will not still shut. It never does. The numbers on this are not subtle. Stripe's Developer Coefficient report put it at roughly a third of every developer's working week spent wrestling with technical debt and the maintenance tail behind it. McKinsey, in their own work on the topic, estimate that tech debt amounts to somewhere between 20 and 40 percent of the value of an organisation's entire technology estate, and that around a third of CIOs they surveyed believe more than a fifth of their technical budget gets quietly diverted into wrestling with the old stuff instead of building the new. That is a third of your week and a meaningful chunk of your estate, sitting under the sofa, waiting to be stood on.
The reason it gets there is not laziness. It is a thousand individually reasonable Tuesday-afternoon decisions to add the override and move on. Each one made sense. The aggregate is the toy box that will not close.
The Bit the Unicorn Keeps Trying to Tell Me
The thing the unicorn keeps trying to tell me, mostly through the soles of my feet, is that the problem is never the thing on the floor. The problem is the absence of a rule about what comes in and what goes out. You can do a heroic Sunday-night sweep of the living room and feel virtuous about it, and by Wednesday the floor looks identical, because nothing about the inflow changed and nothing about the outflow exists. The sweep was theatre. The Lego brick is already back. It brought friends.
The fix is not heroism once a quarter. It is the boring, repeated discipline of treating tech debt as a first-class citizen on the board, not a thing you smuggle in under cover of a feature ticket and hope nobody notices in code review. Pick it up, name it, size it, and either pay it down now or write down honestly why you are choosing not to and when you will. "We will get to it" is not a plan. It is a toy box.
The good news, and the reason I am still doing this for a living after a long time, is that the people I work with mostly already operate this way. Stewardship is treated as part of the job rather than a guilty pleasure between sprints. Buses do not run on heroic Sunday-night sweeps. They run on small, repeated acts of looking after the thing, made by people who have decided the next person to open the file deserves better than what they got.
I cannot opt my children out of plastic any more than I can opt a city out of its road network overnight. Both problems have the same shape. Both got here through a thousand individually reasonable Tuesday-afternoon decisions. Both will only ever be unwound by the unglamorous, repeated discipline of being thoughtful about the next thing in and ruthless about the next thing out. The work I do in the day job is, in its small way, that discipline at city scale. Fewer party bags at home, more buses that turn up when they say they will at work, a quiet word with the grandparents about experiences over stuff, and a teenager in Inverness who knows whether she has time for a sausage roll before the 17 turns up. The toy box closes more weeks than it does not, which is the only honest measure of progress I trust any more, at home or at a keyboard or, for that matter, at a bus stop.
Now if you will excuse me, I have just stood on the Lego brick.