The feeling of building anything

One vague sentence into a coding agent, a working application back in minutes. Construction really is close to free now, and that half is permanent. But a vague prompt holds no definition of done, and software that can't visibly fail can't be engineered.

A while ago I typed one vague sentence into a coding agent and got a working application back in minutes. I want to be honest about what I felt, because it’s the same thing everyone feels: I can build anything now. I’ve built software in telecom, banking, retail and agriculture, and I know exactly how much work sits between an idea and running software. That distance had just collapsed to a sentence. I’ve been trying to work out ever since why I don’t trust that feeling, even though the application ran.

The feeling has a name now, vibe coding. A vague prompt produces something, the something works, the loop repeats. Millions of people who never wrote code are shipping software this way, and the promise underneath is intoxicating: construction is free, so building is for everyone.

Half of that promise is true. Construction really is close to free, and I think that’s permanent. That half deserves no mourning. The gatekeeping essay, where a veteran explains that real software requires suffering, would be wrong, and I’m not writing it.

Here’s the half that’s false, and it hides in a phrase we use without hearing it. When someone vibes an app into existence and it doesn’t do what they wanted, we say they missed the point. I mean that literally. A vague prompt contains no definition of done. No written intent, no statement of what the software must do, must never do, and must survive. So there’s nothing to verify the output against. Software with no point to check against can’t fail in any way you can see, and a thing that can’t visibly fail can’t be engineered. The vibe coder is doing construction, only construction, and the point, the actual point, was never written down anywhere outside their own head.

This holds up fine, right until the software meets what software always meets: a change, another user, an edge case, time. Then something goes wrong, and the builder discovers the real cost. The app isn’t broken in the normal sense, it’s undiagnosable. Nobody decided what correct meant, so nobody can say what’s incorrect. Every fix is another vague sentence, another something, another round of the same bet. I’ve watched the cycle up close, and the tell is always the same: the fix prompt gets longer each round, because the missing spec is being paid for in installments.

So the promise splits in two, and the split is where I think this settles long term. There’s software nobody has to answer for: sketches, prototypes, one-evening tools, things you use once and throw away. Vibe coding is a gift there, and it keeps that ground forever. I sketch that way myself now. And there’s software someone has to answer for: the kind other people rely on, the kind that must survive change, the kind where “it doesn’t work” arrives as a phone call. That software needs a written point, someone who verifies against it, and a person whose name is on the answer. No amount of construction, however free, supplies any of those.

The feeling of building anything is real, and it’s the feeling of holding the notation and believing it’s the job. That confusion was harmless when the notation was expensive, because learning it forced you through the rest of the job on the way. Now the notation is free, and for the first time you can hold it without ever touching the job. What vibe coding will teach a generation of builders, one undiagnosable app at a time, is the oldest lesson in this profession: the point was always the point, and the software was only ever the notation.

§  The list

Essays in your inbox

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