Reports of Code's Death Are Greatly Exaggerated
Steve Krouse just dropped one of the best essays I've read on the "vibe coding" debate. His thesis: English specifications feel precise until you actually try to make them precise. Code isn't dead — it's just getting started.
Here's why this matters for anyone building with AI.
The Vibe Coding Illusion
Krouse starts with a brilliant observation: English specifications intuitively feel precise until you learn better from bitter experience. As Bertrand Russell put it:
"Everything is vague to a degree you do not realize till you have tried to make it precise."
This is exactly what "vibe coding" exploits. You stay at the level of English-level vibes while AI creates artifacts that help you sharpen your thinking. Move the button here. Make it bluer. Ship it.
But vibe coding gives the illusion that your vibes are precise abstractions. They feel precise right up until they leak — which happens when you add enough features or get enough scale.
The Dan Shipper Example
Krouse points to Dan Shipper's experience when his vibe-coded text editor app went viral, then went down. The culprit? "Live collaboration is just insanely hard."
Live collaboration feels like a perfectly precise specification. We've all used Google Docs and Notion. It feels obvious. But it's actually a nightmare of complexity hidden behind a simple interface.
The only way to know this? Experience. Krouse tried to add collaborative text editing to a product 10 years ago. It was an unexpected nightmare. He doesn't remember exactly what was hard about it — that's part of the problem. Complexity can be boring, unpleasant to think about, and hard to remember.
Why Code Still Matters
The Real Purpose of Abstraction
"The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise." — Edsger Dijkstra
Humans can only think about 7 things (plus or minus 2) at a time. The only way to think about more? Compression. That's abstraction. We can do it recursively, indefinitely, which is why humans can master unlimited complexity.
The best part of programming is coming up with increasingly good abstractions to master complexity. ReactJS did this for UI. TailwindCSS did it for styling. These aren't just tools — they're ways of thinking.
The AGI Take
Here's where Krouse gets interesting. If you had 100 Karpathy-level geniuses for $1,000/month, why would you use them to ship more slop?
"If you told me that I had access to that level of intelligence, there is zero part of me that is going to use it to ship more slop. Are you freaking kidding me??"
The confusion comes from thinking code is only for the software it produces. It's not. The code itself is a centrally important artifact. When done right, it's poetry.
Krouse makes a brilliant analogy to writing: nobody is talking about "vibe writing." We're not confused about writing because there's nothing mystical about syntactically correct sentences. Nobody claims ChatGPT is putting great novelists out of a job.
The same is true for coding. AI produces (increasingly less) shitty code. We work around this limitation. But when we have AGI, we'll use it to make better abstractions, better libraries, better understanding.
What This Means for Builders
It seems like 99% of society has agreed that code is dead. Krouse heard Sam Harris confidently talking about how everyone agrees coding is dead and nobody should learn to code anymore.
This is sad. It's like thinking storytelling died with the printing press. Code is just getting started.
Key takeaways for indie hackers:
- Vibe coding has limits. It works until you hit edge cases, scale, or features that interact in unexpected ways.
- Code is thinking tool. Writing code helps you understand problems better. Skipping this step means missing insights.
- Abstractions compound. Good abstractions let you build more complex things. Bad abstractions create debt.
- AI should help you write better code. Not just more code.
The Bottom Line
Vibe coding is great for prototypes, experiments, and simple projects. But when you're building something real — something that needs to scale, handle edge cases, and grow over time — you still need to understand what's happening under the hood.
AI isn't killing programming. It's making it more accessible while simultaneously raising the ceiling for what's possible. The developers who thrive will be the ones who use AI to understand complexity better, not the ones who use it to avoid understanding entirely.