RSSAmplifier

Blog

Matthew van Bird - Writing

Notes from Matthew van Bird - staff engineer writing on .NET, AWS, distributed systems, and pragmatic AI engineering.

mattvanbird.co.ukRSS feed ↗18 posts

Latest posts

There Are No Lifetimes

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…

Trust Me, I Prompted It

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…

Good, Says Who?

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…

The Death of Mapping Frameworks

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…

The Tractor Is Already Dead

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…

Automating the Rubber Stamp: What If an Agent Ran Your Deployment Gate?

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…

Recovering from AI Psychosis

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…

Snowplow + Snowflake: The Stack Is Fine, The People Are The Problem

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…

Pick Your Poison: NuGet's Quiet Wrong Versions vs npm's Loud Supply Chain

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…

Writing Skills for AI Coding Tools (And Why Most Shouldn't Exist)

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…

How AI Made Us Productive and Clueless: A 2025 Retrospective

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,…

Why You Should Avoid Using Exceptions for Normal Application Flow in C#

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…

The good, the bad and the ugly of Vibe Programming with Cursor

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…

The Hidden Cost of “Free” Open Source

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…

The Full-Stack Illusion

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…

Infinite References and Their Elegance

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…

Head vs Heart Engineering

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,…

The Corporate Conundrum: Why Employees Tolerate Inferior Tools, Processes and Systems

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.…