March, 21 2026
A sufficiently detailed spec is code begins with this lovely comic:
There is a profound tension here: english specifications intuitively feel precise until you learn better from bitter experience. (It's all in that facial expression of the last frame.)
"Everything is vague to a degree you do not realize till you have tried to make it precise." – Bertrand Russel
Programming, like writing, is an activity, where one iteratively sharpens what they're doing as they do it. (You wouldn't believe how many drafts I've written of this essay.)
AI helps you with this, because it – increasingly instantly and well – turns English into running code. You can then react to it – "move the button there; make it bluer" – to get incrementally more precise about what you want.
This is why "vibe coding" is such a perfect phraseology: you stay operating at the level of your English-level vibes while reacting to the AI-created artifacts that help you sharpen your thinking.
But, vibe coding gives the illusion that your vibes are precise abstractions. They will feel this way right up until they leak, which will happen when you add enough features or get enough scale. Unexpected behaviors (bugs) that emerge from lower levels of abstraction that you don't understand will sneak up on you and wreck your whole day.
This was Dan Shipper's experience when his vibe-coded text-editor app went viral, and then went down. As it turns out, "live collaboration is just insanely hard."
"Live collaboration" intuitively feels like a perfectly precise specification. We've all used Google Docs, Notion, etc so it feels precisely spec'd. It's incredibly hard a priori to see what this is not the case.
... continue reading