Matthew van Bird
Notes from Matthew van Bird - senior staff engineer writing on .NET, AWS, distributed systems, and pragmatic AI engineering.
About Matthew van Bird · Cheatsheets · RSS
Writing
- Why Would You Ever Choose Node? -
Our Node services get hammered with vulnerabilities daily and .NET is fine. npm takes eleven advisories a day to NuGet’s one. Use Node when you must.
- Cutting the Wrong Layer -
Meta planned to hand thousands of staff’s work to AI. Developers are the wrong layer to cut. AI is best at summarising, a lot of what middle managers do.
- Can You Take a Look? -
A team’s events lost a field to a .NET TryAdd they didn’t understand, and they asked me without trying to debug it. I think AI is making developers dumber.
- Is Abstraction an Art or a Science? -
Ten pass-through layers in a modular monolith, each with a cyclomatic complexity of one. No metric can tell you which to keep, so somebody has to guess.
- Drawing This Site With Archify -
People keep asking for a diagram of this site, so I drew an interactive one with archify, from the markdown articles to the Amplify build and its Lambdas.
- There Are No Lifetimes -
The .NET DI container turns each lifetime into one of three cache locations, so a scoped service captured by a singleton lives until the process exits.
- Trust Me, I Prompted It -
A pull request claims you understand the change. If you can’t explain a prompted diff with the code closed, you’re its sponsor, and the PR should say so.
- Good, Says Who? -
A team wrote the same Snowplow schema three times. Without an engineering community, good turns into taste, and whoever defends it pays the mediocrity tax.
- The Death of Mapping Frameworks -
Taking AutoMapper out of an endpoint cut it from 60ms to between 1 and 4ms. Once a model types the assignments, a mapping framework saves you nothing.
- The Tractor Is Already Dead -
Watching tractors in Northumberland, I daydream about a farm run by drones and a soil-reading crawler, and the farmer’s judgement none of it replaces.
- Automating the Rubber Stamp: What If an Agent Ran Your Deployment Gate? -
Our production gate approved 31 deploys in a month and rejected none. An agent on Bedrock could run it, with the checks in code and the model as a clerk.
- Recovering from AI Psychosis -
A developer hit his token cap on the 11th and couldn’t write code without the model. Cheap tokens hid a competence debt that expensive ones expose.
- Snowplow + Snowflake: The Stack Is Fine, The People Are The Problem -
We wired up Snowplow, Snowflake and dbt and still shipped three definitions of activation. The hard part is agreeing what a signup is and writing it down.
- Pick Your Poison: NuGet's Quiet Wrong Versions vs npm's Loud Supply Chain -
NuGet can downgrade a package with no diff when someone removes a reference. npm resolves correctly and has the most attacked supply chain in software.
- Writing Skills for AI Coding Tools (And Why Most Shouldn't Exist) -
Each skill in Claude Code, Cursor or Copilot is a markdown file with a trigger. Most shouldn’t exist, and the trigger is the part to write and test first.
- How AI Made Us Productive and Clueless: A 2025 Retrospective -
A year of AI-written C#, from garbage collection forced on a timer to tests generated from the code they test. We traded understanding for output.
- Why You Should Avoid Using Exceptions for Normal Application Flow in C# -
Throwing a C# exception for a failure you expected keeps it out of the signature, and BenchmarkDotNet put it at about 950 times slower than a Result.
- The good, the bad and the ugly of Vibe Programming with Cursor -
I spent a day building two projects in Cursor without writing any code. It behaved like a fast, hyped up junior and hashed passwords with SHA-1.
- The Hidden Cost of “Free” Open Source -
AutoMapper, MediatR and MassTransit changed licence terms inside a year. A package reference is a bigger commitment than the code you’d write instead.
- The Full-Stack Illusion -
Full-stack is a job title for a generalist. A specialist who goes deep in one or two layers and knows when to call someone in does better work.
- Infinite References and Their Elegance -
Content in Contentful that loops back on itself breaks C# initialisers and serialisers. A recursive walk over the instances resolves it.
- Head vs Heart Engineering -
Registering nearly 50 implementations of one interface by hand is the right answer. I scan the assembly with reflection instead, and it’s staying.
- The Corporate Conundrum: Why Employees Tolerate Inferior Tools, Processes and Systems -
You’d drop a bad app at home in a week and put up with a worse system at work for years, because speaking up costs you more than the waste.