Trust your experience

Simon Willison has become a SME darling for AI in software engineering. He wrote a blog post about how he feels that “vibe coding” and “agentic engineering” are blurring in his usage of AI, but I think the most interesting part of his post is this:

“And now I’ve got that feeling of guilt: if I haven’t reviewed the code, is it really responsible for me to use this in production?”

As a hobby, I play fighting games a bit more deeply than the average person: I go to tournaments, review my own gameplay, and seek counsel from better players on how to improve. I may not have 25 years taking fighting games seriously like Simon has developing software, but I’ve spent far longer than the average software developer doing so.

Some time ago, I sought the advice of a well-known player on how to handle opponents of a certain skill level with antsy or anxious playstyles. We reviewed a match I had against such a player, and he noted that when I chose aggression versus my knocked-down opponent, I would get the strike I sorely needed in order to win, but fail to turn it into another knockdown or a knock-out.

He expanded on that by saying while I was paying attention to the game, I wasn’t focused on the outcome of my aggression in those moments. I had already done the hard part of getting the information about my opponent’s behavior when they’re knocked down, but I was on autopilot: in those aggression situations, I had failed either to trust in my experience or not process the prior interaction at all.

I think AI tools are useful. I’ve grown fond of being able to block out larger tasks into smaller ones and hand them off to an agent while I review code, do research, or work on a more complex task. I like the notion of finally being able to delegate small fixes and other codebase improvements to a little genie in a terminal.

I also think that developers often forget that AI tools are tools. A coding agent is not conscious. A coding agent does not have prior experience. A coding agent has never experienced losing a game because it failed to block an opponent’s “get up” attack. A coding agent has never wrestled with the age old task of “how do I use this modern functionality in this older system?”

The prompts we provide to agents provide them with the experience we’ve gained over the years as developers. That experience doesn’t just come from the corpus of publicly available code, but from the experiences we have interacting with other people.

We navigate debates and strong opinions in pull request comments, meetings with teammates too passive or argumentative, the anxieties of team leads and product owners, the “just one more change” requests from a business-side team.

We wait patiently for other developers to reply to our messages about code they previously worked on. We wrestle with the decisions made by maintainers of third-party libraries and how we can write good code with what we’re given.

The result of all these interactions become our guidelines for the code we write: past, present, and future. An agent writing the code based on a prompt you wrote is the result of your natural language and your understanding made manifest.

It is an extension of yourself, which makes it your responsibility. If you don’t review that code, you are on autopilot: you are not focused on the outcome of your prompts.

You’ve done a lot of hard work over the years to accrue the experience you have. Don’t go on autopilot now.