A humorous yet practical guide to AI-assisted development. DON'T PANIC.
View the Project on GitHub HermeticOrmus/hitchhikers-guide-to-vibe-engineering
“The Guide’s entry on Earth was originally one word: ‘Harmless.’ After extensive research, Ford Prefect updated it to ‘Mostly Harmless.’ This was considered a major upgrade.”
The same rating system applies to AI-generated code.
In February 2025, Andrej Karpathy coined the term “vibe coding”:
“There’s a new kind of coding I call ‘vibe coding’, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.”
He described a workflow where you:
This is liberating. This is powerful. This is also context-dependent.
Karpathy was building personal projects and prototypes. The stakes were low. The code was, in Guide terminology, Mostly Harmless.
But not all code is Mostly Harmless.
This Guide proposes a four-tier classification system for vibe coding risk:
Definition: If it breaks, nothing bad happens.
Examples:
Vibe Level: Full Karpathy. Accept All. Embrace the vibes.
Verification: Run it, see if it works, move on.
Definition: If it breaks, it’s annoying but recoverable.
Examples:
Vibe Level: Moderate vibing. Skim the diffs. Test the happy path.
Verification: Quick review, basic testing, have a rollback plan.
Definition: If it breaks, real problems occur.
Examples:
Vibe Level: Low vibing. Read every line. Question everything.
Verification: Code review, comprehensive testing, security audit, staged rollout.
Definition: If it breaks, catastrophic consequences.
Examples:
Vibe Level: No vibing. AI assists research only. Humans write and verify all code.
Verification: Multiple independent reviews, formal verification where possible, extensive testing, regulatory compliance.
As the Manning book Vibe Coding: Mistakes and Tradeoffs emphasizes, every vibe coding decision involves tradeoffs. Here’s how to think about them:
| Factor | Full Vibe | Careful Vibe | No Vibe |
|---|---|---|---|
| Speed | 🚀🚀🚀 | 🚀🚀 | 🚀 |
| Risk | ⚠️⚠️⚠️ | ⚠️⚠️ | ⚠️ |
| Learning | 📉 | 📊 | 📈 |
| Quality | 🎲 | 🎯 | ✅ |
| Fun | 😎 | 🙂 | 😐 |
There’s no universally correct position on this spectrum. The right choice depends on:
The Manning book’s core insight applies here: “Specific beats terrific. High-resolution context = high-precision code.”
When assessing risk, context is everything:
def calculate_total(items):
return sum(item.price for item in items)
This function is:
The code is identical. The context determines the risk.
Before you vibe code anything, ask:
“If this code is completely wrong, what’s the worst that happens?”
Before going full vibe on any code:
If you answered “yes” to any consequence question, or your scale is significant, reduce your vibe level accordingly.
Practical wisdom for risk-aware vibe coding:
When exploring:
"Build me a quick prototype of a user dashboard with
charts showing activity over time. Don't worry about
error handling—just get something visual working."
When shipping:
"Review this dashboard code for production. Check for:
- Proper error handling for API failures
- Input validation on all user inputs
- Performance with 10,000 data points
- Accessibility compliance"
Generate code freely, but integrate carefully:
Risk Level | Verification Effort
--------------+--------------------
🟢 Mostly Harmless | Run it
🟡 Caution | Test happy path
🟠 Danger | Test edge cases
🔴 Dragons | Prove correctness
The vibes will still be there tomorrow. If you’re unsure about the risk level, treat it as one level higher than you think.
After reading this chapter, do the following:
Audit your current projects - Classify each as Mostly Harmless, Caution, Danger, or Dragons
Adjust your workflow - Match your vibe level to the risk level of what you’re building
The original Hitchhiker’s Guide rated Earth as “Mostly Harmless” as a kind of cosmic dismissal—a planet of little significance in the grand scheme.
But “Mostly Harmless” is actually a profound compliment for code. It means:
The goal of good engineering isn’t to eliminate all risk. It’s to know what risks you’re taking and match your process to those risks.
Full vibe coding on a prototype? Excellent. Full vibe coding on a medical device? Reckless.
The wisdom is knowing the difference.
Earth: Mostly Harmless.
Your side project: Probably also Mostly Harmless.
Your production database migration: Definitely not Mostly Harmless. Read the diffs.