The "right way" to vibe code (engineers, please watch)
Based on Theo - t3․gg's video on YouTube. If you like this content, support the original creators by watching, liking and subscribing to their content.
“Vibe coding” is not one thing; it’s used to describe multiple workflows that differ in whether developers read and understand the generated code.
Briefing
Vibe coding isn’t a shortcut to skipping engineering—it’s a way to skip the parts of engineering you don’t need to keep. The core claim is that “vibe coding” works best when it’s used to generate throwaway, legacy, or low-stakes code (prototypes, one-off scripts, UI scaffolding, quick utilities) that solves a real problem without demanding deep ownership. When that same approach is applied to production-critical systems that require careful debugging and long-term maintenance, it predictably collapses—because copying code without reading it can’t replace engineering judgment.
A major obstacle is that people use incompatible definitions of “vibe coding.” Some mean plain-English prompting that writes code without developers reading it; others mean ignoring code entirely; others mean non-developers generating code via AI; and still others mean simple autocomplete inside an IDE. Those modes sit on different points of a spectrum: how much the user understands and how much they actually read the code. The transcript argues that most arguments about vibe coding fail because participants are talking past each other—criticizing “tab completion” while defending “agentic coding,” or dismissing “prompt-only” workflows while assuming they’re the same thing.
The speaker draws a sharp distinction between agentic coding and vibe coding. Agentic coding uses tools to inspect a codebase and propose changes, but vibe coding is defined as what happens when the developer doesn’t meaningfully read the resulting code afterward—copying error messages into a prompt box rather than tracing the underlying logic. Under this lens, the “right way” to vibe code is not to treat it as a replacement for engineers, but as a productivity tool for the large fraction of software work that is inherently disposable. For every line that ships, many more lines are written, tested, and deleted; vibe coding fits that reality.
Several examples illustrate the sweet spot: generating an SVG-to-PNG converter for video editing workflows, building small browser-based utilities, and creating quick tooling for content pipelines and benchmarks. The argument is that these tasks are often solvable with code, but not worth the time and attention required to design and maintain a polished solution. In those cases, vibe coding helps ship useful outcomes faster—without requiring the developer to become deeply invested in the generated implementation.
The transcript also tackles the “dependency” critique. It argues that developers who dislike package sprawl should not be surprised that vibe coding can reduce external dependencies by generating tailored solutions instead of installing generic libraries. Still, it concedes that vibe coding can create its own maintenance risks: if the generated code needs changes later, developers may have to rewrite or patch it anyway. That’s why the speaker insists vibe coding should not be used to compensate for not knowing how to code. The real danger is emotional: tools can make people feel unblocked without learning, creating a long-term skill gap.
Finally, the manifesto rejects two extremes. AI tools won’t eliminate the need for engineers; better tools can make the same experts more productive, not replace them. Likewise, dismissing AI as useless ignores the practical value of generating code you don’t want to read—especially when the goal is to solve small, annoying problems quickly and throw the result away when it stops being useful.
Cornell Notes
The transcript argues that “vibe coding” is most valuable when it’s used for throwaway or legacy-style code—prototypes, one-off scripts, and UI scaffolding—where the goal is to solve a problem quickly rather than to deeply own every line. A key reason debates go nowhere is that people use different definitions of vibe coding (prompt-only, non-dev AI coding, IDE autocomplete, or agentic coding), even though those modes differ in how much the user reads and understands the code. The speaker distinguishes agentic coding (tools inspect and propose changes) from vibe coding (the developer doesn’t meaningfully read the generated code afterward). The practical takeaway: vibe coding can speed up work that doesn’t need long-term maintenance, but it cannot replace learning how code works or debugging production-critical systems.
Why does the transcript say “vibe coding” debates often fail before they start?
What’s the difference between agentic coding and vibe coding in this framework?
When does vibe coding become genuinely useful according to the transcript?
What’s the transcript’s warning about using vibe coding incorrectly?
How does the transcript respond to the “vibe coding is dead weight when things break” critique?
What does the transcript claim about package dependencies and tools like Leftpad?
Review Questions
- Where does the transcript place “vibe coding” on the spectrum of how much a developer reads and understands code, and why does that matter for debugging?
- What conditions make generated code “safe” to treat as throwaway or legacy, and what conditions make it risky?
- How does the transcript’s distinction between agentic coding and vibe coding change the way you should evaluate claims that AI will replace engineers?
Key Points
- 1
“Vibe coding” is not one thing; it’s used to describe multiple workflows that differ in whether developers read and understand the generated code.
- 2
Agentic coding (tool-assisted codebase changes) is not the same as vibe coding (copying/pasting without meaningful review afterward).
- 3
Vibe coding is most effective for throwaway, legacy, or low-stakes code—prototypes, one-off scripts, and UI scaffolding—where long-term ownership isn’t the point.
- 4
The approach fails when applied to production-critical systems that require real debugging and maintenance, because copying code can’t replace engineering judgment.
- 5
AI tools can create a dangerous comfort with not knowing; the transcript warns against using them as a substitute for learning how code works.
- 6
Dependency complaints can be reframed: vibe coding can reduce external packages by generating tailored solutions instead of installing generic libraries.
- 7
Better AI tools don’t eliminate engineers; they can make skilled engineers more productive, similar to how improved farming tech increases output without turning everyone into a farmer.