AI Projects · Lesson L02
Vibe Coding vs Real Coding in 2026: Which One Should You Use?
Vibe coding is for prototypes you'll throw away. Real coding is for anything that has to keep working. Here's the 2x2 framework for picking which one to use, and when to switch from one to the other mid-project.
Last tested and updated: June 2026
Vibe coding: you describe what you want, the AI writes it, you click run, it works. You feel like a wizard — until you try to ship. The thing breaks in three places at once. You can’t reproduce the bug. The AI keeps “fixing” it with hallucinated APIs. $40 gone. No test runner ever opened.
Welcome to vibe coding, the practice Andrej Karpathy named in early 2025 that has now swallowed half the internet. Vibe coding is the fastest way to build software that’s never supposed to ship, and the slowest way to build software that is. This lesson is the boundary.
This lesson is the matching “when” — when vibe coding is the right tool, when it isn’t, and how the two styles combine. See L01 — Coding with Claude Code for the harness.
The hook
Name the failure mode of each and the difference is obvious.
Vibe coding fails when you ask the AI for a drag-handler. It produces a drag-handler that looks right. The drop event never fires because nobody specified the drop target. You spend four rounds of “no, the other way.” The AI is reasoning about the wrong model of the problem.
Real coding fails when you spend 8 hours reviewing a 200-line diff for a UI button. The prototype was thrown out the next morning. You were right that the code would have bugs. You were wrong that the bugs mattered.
The trade is verification cost, not AI vs no AI. Verification is what costs you time. Vibe coding is verification-free by design. Real coding is verification-rich by design. The mistake isn’t picking one. The mistake is using one in the wrong quadrant.
The mental model
The diagram you need is a 2x2. The x-axis is how seriously you intend to ship — from “throwaway” on the left to “long-lived production” on the right. The y-axis is how strict the quality bar is — from “looks right” at the bottom to “reviewed and tested” at the top.
The two diagonals on the diagram are the two spectrums most projects actually move along. The “ship the real thing” axis: throwaway script to production codebase with CI. The “kill it on Friday” axis runs the other way.
A few concrete examples to anchor the quadrants:
- Bottom-left, “throwaway + looks right”: a one-off script to rename 200 files, a personal cron, a quick HTML mockup. Vibe coding. Run it. Delete it.
- Bottom-right, “long-lived + light review”: an internal tool you’ll touch for a year. Hermes is excellent here — see Hermes L01 — What Is Hermes Agent?. Agent harness, scheduled job, light review of what it produced.
- Top-left, “shipped + tested”: a SaaS MVP you intend to charge money for. Claude Code or Kilo Code, with a real test suite, and you read every diff before merging.
- Top-right, “production + reviewed”: a long-lived web app, a mobile app, a data pipeline, a public library. Real coding, full stop.
Pick your tool
Two questions decide which tool to reach for:
- Will this code still be running in three months?
- Will anyone (including future-you) be debugging it at 2am?
If both answers are “no” — vibe coding. If either answer is “yes” — real coding. If the first answer flips during the project, switch mid-stream. That’s normal and covered below.
When to vibe code
Vibe coding is right when the cost of a bug is low and the cost of being slow is high. Concrete cases:
- Exploration. Trying 5 UI variants before picking one. Trying 3 database schemas. The point is to throw most of them away.
- One-off scripts. Rename 200 files, scrape a page, generate a CSV. Run once, delete.
- Throwaway demos. “Show the team what a Slack-integrated todo app could look like.” Will never see production.
For all of these, the cheapest path is vibe coding with a Tier 2 model. Use DeepSeek V4, Kimi K2.7, or a local Qwen. The speed wins. The quality is “good enough for code you’ll throw out.” Keep the expensive models in reserve for production.
When to real code
Real coding is right when the cost of a bug is high — including the cost of a bug you’ll find in three months when you’ve forgotten what you wrote. Concrete cases:
- Anything user-facing that ships. Web apps, mobile apps, public APIs, public libraries. Use Claude Code or Kilo Code (covered in L01) with a real test suite, a Git workflow, and code review.
- Anything that touches money or data. Payment flows, auth, anything that writes to a database you can’t easily roll back.
- Anything that has to keep working. Cron jobs, scheduled tasks, automations that have to wake you up when they break.
For all of these, the right tool is a coding harness — Claude Code, Kilo Code — and the right model tier is Sonnet-class or above. The harness gives you the loop. The tests give you the verification. The review gives you the catch on what the tests miss.
Combining both (the most common pattern)
Most production work in 2026 follows this pattern, in this order:
- Vibe code the prototype. Try 5 UI variants. Pick the best one. The whole job here is to find out what you actually want.
- Write a one-paragraph PRD. Inputs, outputs, edge cases. The PRD is the artifact that lets you switch from “AI proposes” to “I direct.”
- Switch to a coding harness. Open Claude Code or Kilo Code on the prototype. Tell it the PRD, point it at the code, let it write the production version with tests.
- Read every diff. You, not the harness. The harness proposes; you decide.
- Run the tests. If they fail, the harness iterates. If they pass, you merge.
This is the “vibe for exploration, real for production” pattern. The vibe phase is fast and loose. The real phase is slow and verified. The boundary between them is the PRD.
Common failure modes
Four ways this goes wrong, in order of how often beginners hit them:
- Vibe coding production code. Ship the prototype. It works for 80% of users and breaks for the other 20%. The fix is the combine pattern above.
- Real coding a prototype. Spend a day on test coverage for code you’re going to throw out. Fix: commit to vibe coding for exploration, switch to real coding after the PRD.
- Skipping the PRD. Vibe code, the AI fills in the gaps with assumptions, the result “looks right” but doesn’t match your actual intent, you spend four rounds fixing it. Fix: one paragraph is enough.
- Burning tokens on iteration. Ask the AI to fix a bug. The fix introduces a new bug. 20 iterations, $50 gone. A coding harness with a test suite catches the regression in round one.
Try it
Spend one hour on each, then compare.
The exercise
Pick a small project on your machine — a CLI tool, a single-page app, a script, anything that fits in an afternoon. Spend one hour vibe coding it. Don’t write a PRD. Don’t run the tests. Just describe what you want and ship it.
Then open Claude Code (or Kilo Code, from L01) on the same project. Spend one hour rebuilding it the “real coding” way: PRD first, harness writes code with tests, you read every diff, you run the test suite after each change.
At the end, write down in your own words:
- What was easier about the vibe-coding hour?
- What was easier about the real-coding hour?
- Which version would you actually ship?
- Where did the PRD change what the AI produced?
If your answer to question 3 is “the vibe-coded one” and you can articulate why, you’ve correctly identified a throwaway prototype. If your answer is “the real-coded one” and you can articulate why, you’ve correctly identified a thing that has to keep working. Either answer is fine. The point is to feel the difference.
Check your understanding
See the standalone quiz at /lessons/ai-projects/L02-vibe-coding-vs-real-coding/quiz.json (6 questions).
What’s next
- L01 — Coding with Claude Code — the coding harness.
- L03 — Building Real Projects with Hermes — the vibe-then-real pattern on a real project.
- Hermes L01 — What Is Hermes Agent? — agent harness for internal tools.