I get sent at least one of these a week. Always a screenshot, always with some version of "any idea what this means?" attached. Most developers can tell you what the three lifetimes are for. One instance forever, one per request, a new one every time. Far fewer can tell you why those three can't be…
The vouch A while back I reviewed a pull request that nobody on the team could explain, including the author. Two hundred odd files. "Copilot generated most of it," he said. "It compiles and the tests pass." It merged the next day. I've written about it before as a story about understanding, and it…
Three copies of one schema The other day a team I work with wrote the same Snowplow schema three times. They own several vendor integrations, each one its own domain in the platform, and they needed a schema for a new data structure. One copy per vendor, identical apart from the namespace, all…
Sixty milliseconds I had a read endpoint taking about 60ms to respond, and most of that made no sense. It sits on a cache, so there was no slow query to blame and no network hop to chase. The work between the cached data and the response should have been close to nothing, and 60ms is not close to…
Northumberland I'm camping in Northumberland, which is farm country, in a field ringed by other fields, and for days now I've watched the tractors. They start early. One goes up and down towing a sprayer, the next one over drags a cultivator, boom out wide, doing the thing tractors have done since…
The car park Three weeks ago a colleague approved a production deployment from a Tesco car park. The GitHub notification arrived on their phone. They tapped "Review pending deployments", ticked the production environment, typed "lgtm" in the comment box, and hit approve. They had not looked at the…
The cap A developer I know hit his monthly token ceiling on the 11th. Not the soft warning email. The hard cap, the one finance set after the last invoice landed and someone senior asked what exactly we were getting for the money. For the rest of the month he had to write code the way he did in…
The setup We spent a few weeks wiring up what is, on paper, one of the strongest behavioural data stacks you can put together. Snowplow for collection. Snowflake as the warehouse. dbt in the middle. Core system data (orders, accounts, subscriptions) landing alongside every click, scroll and route…
The premise Some version of this message lands in my DMs about once a fortnight. The package name changes, the exception sometimes changes, the shape doesn't. A green Dependabot PR went in overnight, someone senior approved it, and production now has a stack trace nobody recognises. Monorepos in…
The premise I use three AI tools in a normal week. Claude in the terminal as a daily driver. Copilot inside JetBrains for line-by-line autocomplete. ChatGPT for one-shot questions where I can't be bothered to open anything else. Each of them has its own version of skills , markdown files that teach…
In 2025 I reviewed a 200 file pull request that nobody on the team could explain, including the author. "Copilot generated most of it," he said. "It compiles and the tests pass." It merged the next day. That was the year in one sentence. Scaffolding, refactors, async conversions, test generation,…
Background I was asked in a review why I'd used the Result pattern on a project, and why there was so little exception handling in it. The question came from someone who'd spent the last two years in a codebase where exceptions were the control flow, and it's a fair question. Most of what we argue…
I spent a day "Vibe Programming" with Cursor. The rule I set myself was that I wasn't allowed to write any code, only prompt my way to the end. I did it because I hadn't given AI tooling a fair crack. I'd used it here and there, and mostly concluded that I was faster on my own and that it pushed me…
Four libraries that half the .NET codebases I've worked on depend on changed their licence terms inside a year. Fluent Assertions, MediatR, AutoMapper, MassTransit. None of them did anything wrong. Maintainers are allowed to get paid, and after a decade of unpaid support I'd have done the same. But…
Let's talk Full-stack developer conjures up a tech superbro. One person juggling front end, back end, data storage in three flavours, DevOps, CI/CD and a bit of machine learning on the side. What the job description is actually describing is a jack of all trades, and we all know how that one…
Background I'm using Contentful to drive UIs, allowing non-technical stakeholders to change what customers see. Nothing groundbreaking here. However, there is an interesting problem to solve which Contentful introduces by having a highly flexible workflow. Contentful works by allowing pieces of…
Premise I've never wrestled much with "that's the way we do it". I can usually think my way through why something is the way it is and either accept it because the reasons hold up, or write it off and refactor until it's good. On a recent project something in my heart started arguing with my head,…
At home you would delete an app that wasted ten minutes of your day. You would switch bank, switch provider, switch phone, and think nothing of any of it. At work the same person will use a system that wastes ten minutes of everyone's day, every day, for four years, and never once say so out loud.…