Don't Treat AI Like a Wish Well — It's Your Intern
Most vibe coding habitually falls apart because you treat AI as a wish well: a one-line ask, zero context, then blame it for being slow.
Many people when they first pick up vibe coding expect it to mean "throw the requirement at AI and code materializes." That impression comes from Karpathy's late-2024 remark about fully handing over control of the code—but that was a joke.karpathy-vibe People who actually code that way break on day one: AI uses Next.js today and Vue tomorrow, styles clash inside the same project, and fixing one file quietly breaks another. Almost none of that is the model being dumb. It's that you treated AI like a wish well.
After reading, you should be able to answer:
- Why does the same sentence produce inconsistent style every time?
- What is wrong with the phrase "blame AI for being dumb"?
- What closes the gap between using AI properly and a reliable intern?
It's really a gifted intern
Think of AI as a bright, fast intern who knows nothing about your project and tends to make its own calls. Everything it does starts to line up:
- Bright: it writes good code when given steps—especially scaffolds, tests, and docs, the pattern-heavy stuff.
- Fast: it edits dozens of files to your one, and it's not shy about multi-file changes.
- Doesn't know your project: it has no idea about your directory layout, naming conventions, or business rules, unless you tell it.
- Oversteps: same requirement,
fetchthis time,axiosnext, because nobody set the rules.
You wouldn't tell a new intern who knows nothing about you "build me a user system" and walk away. You'd hand them a manual, reference material, a task list, and review the work. Vibe coding changes only one thing: this intern works so fast you need several times more management to keep up.anthropic-sdlc
Failure is missing management, not a bad model
Translate "AI keeps messing up" into management terms, and it's three things left undone:
| Symptom | Missing management | Fix |
|---|---|---|
| Conflicting style, churning dependencies | No conventions | A project rules file (AGENTS/CLAUDE) pins structure, naming, and API contracts |
| Changing A breaks B | No context | Make it read the relevant files before it edits |
| Logic falls apart mid-way | Task too big | Break it into steps small enough to verify |
Your old habit was "I write it myself": the requirement lives in your head, you type the code, you fix your own mistakes. For vibe coding, switch to "I manage the intern": write the requirement down, feed context, split the task, review the output. Miss any one of these and AI's "brightness" just becomes fuel for faster breakage copilot-cost.
Review is acceptance, not nitpicking
The final review you'd do with an intern is the same thing as running pnpm check or the test suite: acceptance. Don't skip it. Skipping review and saying "good enough" is shipping code you never looked at.
Set the acceptance bar before you start, not after. Put "what counts as done" into your prompt or your project rules: tests green, artifacts present, clean diff. Accept against those visible results, which is far more reliable than gut-feeling "this looks fine." That's why chapter 7 of this section is dedicated to verification and catching fake fixes.
Calibrate your role
One line to sum it up: you don't race AI at writing code; you set rules, give context, split tasks, and define acceptance. The stronger the AI, the more this management seat is worth—because what's shippable grows, and the people who can read structure, hold quality, and spot bad code become rarer. Getting good at treating AI as an intern is the foundation for every other chapter in this section.
To continue, see Four Modes, Where Do You Land and check which one you're on right now.
