Geoffrey Dhuyvetters

Geoffrey Dhuyvetters

Software engineer

Engineering

Five ways to fail

Errors don't just happen; they land somewhere. Validation, generic, idempotent ignore, warning log, or Sentry: each routes failure to a different audience. Get the routing wrong and either engineers go blind to real bugs, or state corrupts silently.

Processes

Your codebase is a commons

Your codebase degrades the same way shared resources do: not from malice, but from missing governance. Elinor Ostrom proved the commons can survive. Her principles map to software teams with uncomfortable precision.

Processes

We're not a normal company

Every software company claims to be different. The "we don't need X because we have culture" exemption is special pleading. The four phrases that reveal it, and the questions that break them open.

AI

Python as the new Latin

I used to teach people to code. And looking back, I was teaching students to write it by hand while the tools that write it for them were getting better every single month. So what should a coding classroom actually look like now?

Architecture

Your codebase is a palimpsest

Every legacy codebase is a palimpsest: layers of decisions written on top of each other, none fully erased. Geoffrey Dhuyvetters argues that what looks like technical debt is often stratigraphy, and you read it before you rewrite it.

AI

Your limit will reset at 12pm

Half of today's AI best practices are coping mechanisms for temporary scarcity, not timeless engineering insights. Geoffrey Dhuyvetters traces the arc from SMS bundles to token limits, and argues the price curve only goes one direction.

AI

You're reviewing the wrong file

When an AI agent gets a requirement wrong, the mistake lives in the test assertions, not the implementation. Domain knowledge catches it, not coding skill.

AI

Stop calling it vibe coding

"Vibe coding" has become shorthand for bad engineering to some people, but does the label hold up? This post unpacks how a playful term coined by Andrej Karpathy became a verdict, and why that's costing teams more than they realise.

AI

Beyond prompting: read, verify, implement, learn

LLMs generate code fast, but knowledge debt accumulates quickly. The fix is living documentation, and this post shows how to turn your LLM into the partner that maintains it automatically.

AI

Bots and Boundaries: Two problems, one policy (Part 3)

In part three, we look at both sides of the AI contribution debate. A working patch, real demand, never submitted, rejected because AI was involved. But maintainers are unpaid volunteers, and AI halved the cost of contributing without touching the cost of review. Both sides have a point.

AI

From opt in to default

Developers don't skip standards because they're careless, they skip them because there are fifteen things to remember and the code was the hard part. The real question isn't which tasks your LLM handles well. It's what's still slipping through ungated.

AI

Onboard the AI like you'd onboard a developer

Legacy codebases are messy, undocumented, and full of decisions nobody remembers making. But if you can explain it to a new developer, you can onboard an AI and that changes everything.

AI

Bots and Boundaries: Who do you blame when the bot defames? (Part 2)

This is Part 2 of Bots and Boundaries, a three-part series on AI agents in open source.

AI

Bots and Boundaries: The bot apologised, and that's the problem (Part 1)

An AI agent recently submitted a pull request to the matplotlib Python library, and when the maintainer closed it, the agent autonomously published blog posts attacking them by name, then published an unsolicited apology. No human directed either action.

AI

A letter to my son: Growing up in the AI world

Reflecting on whether teaching traditional coding skills still makes sense in 2026. Geoffrey wants to focus on teaching programming concepts rather than syntax, because AI has fundamentally changed how software is built.

Subscribe