Where the doubt can land

Two ways of building with an AI agent look identical until something breaks. Then only one of them can tell you why.

Two ways of building with an AI agent can look identical for days. Same prompts, same green tests, same sense of progress. Then something breaks, and the difference shows up all at once. One of them can tell you why. The other can’t.

The cost isn’t bad code

We talk about vibe coding as if the danger is sloppy code. Missing edge cases, the model guessing, functions that almost work. A capable model writes decent code most of the time, so the cost lives somewhere else.

The cost shows up later, when a symptom appears and you go looking for the cause. In vibe-coded work, the cause has no fixed address. You changed the approach three times while chasing the feeling of “it’s working now,” so the failure could trace back to any of them, or to the seam between two. The bug isn’t worse than anyone else’s. It’s just untraceable.

A spec is a gate, not a plan

Here’s what I found out running spec-driven work for real, across a long and stubborn rebuild. The spec’s value was never that it made me right the first time. It often didn’t. Its value was that every wrong idea hit a gate before it shipped, and the gate said why.

A wrong assumption about how two numbers compared got stopped at a check, with the exact reason exposed. It did not slip through to resurface a week later as a mystery with no return address. That’s the whole trade. A spec turns a silent failure into a loud one. It moves the moment of truth forward, to a place where you can still see what you were thinking when you made the call.

Most people sell specs as discipline, or as planning ahead. The real value is smaller and harder to see: a spec is a set of gates that catch the wrong thought while it’s still cheap to catch.

The seat you can’t review from

There’s a second discovery hiding in the first, and it surprised me more.

I ran the agent as the builder. I did not let it review its own work. I kept a separate reviewer in a separate seat. Not because that reviewer was smarter. Same model, same weights, the same thing on both sides of the table. The separation itself was doing the work.

The builder leans toward “make progress.” It carries its own half-formed theories, and it points its doubt at everything except its own best idea. That blind spot isn’t about knowledge. You can hand the builder every pattern it could ever need, and it will still wave its own recommendation through, because skepticism points away from the thing you’re invested in. The reviewer wasn’t right more often. It was just sitting somewhere the doubt could land.

The same move, twice

The spec and the second reviewer do the same job. Both sit outside the person doing the work. When I build, I lean toward finishing, and my doubt aims at everything except the idea I like best. A spec stops that at a gate. A separate reviewer catches it from a seat I can’t sit in while I’m still building. Neither is smarter than me. They are just somewhere else.

Vibe coding has no somewhere else. It is momentum and nothing standing apart from it. That holds until something breaks. Then every decision traces back to one person moving in one direction, and there is no angle left to see which decision was the wrong one.

That is the real split. Not plan against no plan. Whether anything is checking the work from outside the work.

§  The list

Essays in your inbox

New writing when the pattern is clear. No cadence, no filler.