LmCast :: Stay tuned in

Reports of code's death are greatly exaggerated

Recorded: March 22, 2026, 10 p.m.

Original Summarized

Reports of code's death are greatly exaggerated← Steve Krouseview sourceReports of code's death are greatly exaggerated
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.
The only reason that I personally know otherwise is that I tried to add a
collaborative text editor to a product I was working on 10 years ago, and it was
an unexpected nightmare of complexity.
What was hard about it? I don't remember! That's part of the problem! Complexity
can be incredibly boring, unpleasant to think about, and hard to remember all
the details and edge cases. For example, the classic flowchart of how Slack
decides when to send you a notification:

But, this isn't the end of the story either. We are blessed with an extremely
powerful tool to master complexity.
Abstraction
There is a fundamental limit in the human brain. We can only think of 7 (plus or
minus 2) things at a time. So the only way to think about more than 7 things
is to compress multiple things into a single thing. Happily, we can do this
recursively, indefinitely, which is why humans can master unlimited complexity.
That compression step is called 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

For example, Sophie Alpert used clever abstraction to
refactor the Slack diagram to this much simpler one:

This is the best part of programming: coming up with increasingly good
abstractions to help us master complexities. My favorite examples of this are
functional programming concepts, like functional reactive programming, which
I wrote a wonderful essay on.
So yes, collaborative text editors are fundamentally complex, but that just
means that we're continually in search of better abstractions to help us master
complexities, like ReactJS or TailwindCSS did in their respective domains.
AGI
But let's play this out 1, 2, 5, 10, 100 years. AI is getting
better/faster/cheaper at incredible rates, but regardless of when, unless you
believe in magic, it's only a matter of time until we reach the point at which
machine intelligence is indistinguishable from human intelligence. We call that
point AGI.
It may seem like an AGI world is a vibe world. If anyone can afford 100
Karpathy-level geniuses for $1000 / month, why ever trouble yourself with any
troublesome details? Just have your army of Karpathys handle them for you.
This is such a joke to me. This is clearly only something you'd think in the
abstract, before this technology arrived.
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?? Of course not.
I think we're confused because we (incorrectly) think that code is only for the
software it produces. It's only partly about that. The code itself is also a
centrally important artifact. When done right, it's poetry. And I'm not just
saying this because I have Stockholmn Syndrome or a vested interest in it – like
a horse jockey might in the face of cars being invented.
I think this is a lot clearer if you make an analogy to writing. Isn't it
fucking telling that nobody is talking about "vibe writing"?
We're not confused with writing because there's nothing mystical about
syntactically correct sentences in the same way there is about running code.
Nobody is out there claiming that ChatGPT is putting the great novelists or
journalists out of jobs. We all know that's nonsense.
Until we get AGI. Then, by definition, machines will write amazing non-slop and
it'll be glorious.
The same exact situation is true for coding. AI produces (increasingly less)
shitty code. We all know this. We all work around this limitation. We use AI
in spite of the bad code.
As Simon Willison says,
AI should help us produce better code.
And when we have AGI this will be easy.
When we have AGI, the very first things we will use it on will be our hardest
abstraction problems. We will use it to help us make better abstractions so that
we can better understand and master complexity.
You might think the need for good code goes away as AIs get smarter, but that's
like using ChatGPT to write more slop. When we get AGI, we will use them to make
better abstractions, better collaborative text editor libraries, etc.
For example, my favorite success story with Opus 4.6 was that it helped
me with my dream full-stack react framework for Val Town. It one-shot solved
my list of unsolved problems
that I had with getting React Router 7 to work full-stack in Val Town. The
result is my nascent vtrr framework.
I'm particularly proud of this 50 line full-stack react app demo in
a single file:

If you know of any other snippet of code that can master all that complexity as
beautifully, I'd love to see it.
Reports of code's death are greatly exaggerated
It seems like 99% of society has agreed that code is dead. Just yesterday I was
listening to podcaster Sam Harris of all people confidently talking about how everyone agrees
coding is dead, and that nobody should learn to code anymore.
This is so sad. It's the same as thinking storytelling is dead at the invention
of the printing press. No you dummies, code is just getting started. AI is going
to be such a boon for coding.
I have so much more to say on this topic, but this essay is already 3x longer
than I wanted it to be. I'll stop here and leave you with some of my favorite
quotes on formalism.

Instead of regarding the obligation to use formal symbols as a burden, we
should regard the convenience of using them as a privilege: thanks to them,
school children can learn to do what in earlier days only genius could
achieve.
When all is said and told, the "naturalness" with which we use our native
tongues boils down to the ease with which we can use them for making
statements the nonsense of which is not obvious.
– Edsger W.Dijkstra,
On the foolishness of "natural language programming"

There are two ways of constructing a software design: One way is to make it so
simple that there are obviously no deficiencies, and the other way is to make
it so complicated that there are no obvious deficiencies.

Tony Hoare,
h/t Paul Buchheit

The quantity of meaning compressed into a small space by algebraic signs, is
another circumstance that facilitates the reasonings we are accustomed to
carry on by their aid."
– Charles Babbage, quoted in Iverson's Turing Award Lecture, quoted in
Succinctness is Power by Paul Graham
precision · abstraction · ai · coding

Steve Krouse’s essay, “Reports of Code’s Death Are Greatly Exaggerated,” presents a compelling argument against the widespread notion that coding is becoming obsolete, particularly in the face of advancements in Artificial Intelligence. Krouse contends that code, and the process of its creation, remains fundamentally vital, arguing that it’s not simply about producing software, but about mastering complexity through abstraction—a skill that will be increasingly crucial with the rise of AGI.

The core of Krouse’s argument hinges on the tension between intuitive specifications and precise code. He illustrates this with Bertrand Russell’s observation that “everything is vague to a degree you do not realize until you have tried to make it precise,” highlighting the inherent difficulty in translating abstract ideas into executable code. This struggle is exemplified by the “vibe coding” phenomenon—a tendency to rely on imprecise, intuitive vibes when working with AI-generated code—which inevitably leads to unexpected errors as complexity escalates. The author draws upon Dan Shipper’s experience with his viral, then-failed, text editor to demonstrate the risks of overly simplistic, vibe-driven development.

However, Krouse posits that the very challenges of code creation are a strength. He emphasizes the importance of abstraction, citing Edsger Dijkstra’s assertion that “the purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.” Through abstraction, humans can manage complexity by creating layers of simplified representations, enabling them to think about a system at a higher level of detail. Sophie Alpert’s refactoring of the Slack diagram serves as a prime example of this process.

Krouse further anticipates the arrival of Artificial General Intelligence (AGI), arguing that it will not render coding obsolete, but instead, shift its focus. He suggests that AGI will be instrumental in helping us to create even more sophisticated abstractions, allowing us to tackle increasingly complex problems. He playfully dismisses the notion that AGI will simply produce flawless code, likening it to assuming novelists will be replaced by AI, advocating instead for a collaborative approach where humans and machines work together to refine abstractions.

The essay champions a pragmatic approach to coding, illustrating it with examples like the Opus 4.6 framework that solved Krouse’s challenges with React Router 7 in Val Town. This single-file, fifty-line React app demo underscores the benefit of focusing on well-defined abstractions to streamline development. Krouse draws on quotes from Edsger W.Dijkstra and Tony Hoare to emphasize the importance of simplicity and logical design, advocating for a deliberate, thoughtful approach to coding. The use of formal symbols, as highlighted by Charles Babbage, and the value of succinctness, as articulated by Paul Graham, further underscore the necessity of precision and rigorous thought.

Ultimately, Krouse’s argument is a testament to the enduring value of code’s ability to represent and manipulate complexity. He asserts that code’s utility will not diminish with the rise of AGI, but will instead evolve to become a cornerstone of a new era of intelligent systems, driven by our continued need to master complexity through ever-more-refined abstractions.