Vibe Coding Rules: A Practical Guide for Engineering Teams
Paul Graham sparked a debate. Here's how engineering teams are actually navigating it โ the norms, the boundaries, and the unspoken agreements that keep both code quality and engineers intact.
What Vibe Coding Actually Means
In February 2026, Paul Graham wrote an essay that split the engineering world in half. His term โ vibe coding โ described a new mode of software creation: describe what you want in plain language, let AI generate the code, iterate until it feels right. The goal isn't to write code. The goal is to produce working software that matches your intent.
The reactions were predictable and revealing. Senior engineers who spent a decade mastering their craft felt a pang of something between grief and recognition. Junior engineers saw it as permission. Managers saw a productivity lever. And the engineers actually doing it every day were somewhere in between โ knowing it felt different, not entirely sure if the difference was good or catastrophic.
This page is for the teams having that conversation right now. Not the abstract debate about whether vibe coding is "real programming." The practical question: when should you vibe code, when should you not, and how do you set team norms that don't kill momentum or destroy craft?
The Spectrum: Full Vibe to Full Manual
Vibe coding isn't binary. Engineers sit on a spectrum, and the best teams are intentional about where they operate at any given moment:
Describe the feature in plain language. Accept the first AI generation. Test it. Iterate with follow-up prompts. Ship it. You may never read the implementation deeply.
AI generates the implementation but you review every significant block, ask for alternatives on non-trivial decisions, and understand the data flow before testing.
You write the code but use AI for boilerplate, doc strings, test generation, and finding specific functions. The logic is yours. AI is the autocomplete.
No AI in the editor. You write every line. This is deliberate practice โ protecting the skills that AI would otherwise erode.
The best engineers move along this spectrum throughout a single day, depending on what they're building. The problem isn't where you sit on the spectrum. The problem is not knowing which mode you're in.
Rule 1: Know What You're Surrendering
Every time you vibe code, you're trading something. The question isn't whether the trade is worth it โ it's whether you know what you're trading. Here's the honest ledger:
- Speed on boilerplate, tests, glue code
- Access to patterns you haven't memorized
- Reduced tedium on well-defined tasks
- Iteration speed on UI/layout problems
- Confidence you're not missing a common solution
- Deep understanding of what you shipped
- The muscle memory that makes you fast at debugging
- The intuition that tells you where a bug likely lives
- The ability to modify code you don't fully understand
- The productive struggle that builds real expertise
Neither column is zero. The question your team needs to answer is: which column matters more for this particular piece of code?
Rule 2: Never Vibe Code What You Can't Debug
This is the single most important rule, and the one most frequently violated under deadline pressure. If you ship code that you don't understand well enough to debug, you're building a debt that will come due at the worst possible moment โ in production, at 2 AM, when something goes wrong in a code path you never deeply read.
The test is simple: when the on-call alert fires at 3 AM and the stack trace points to the AI-generated function, can you reason through what's happening? Or are you just hoping the next AI prompt will fix it?
If you're hoping for the AI fix, you've crossed a line. That isn't vibe coding. That's productivity theater โ looking like you're building while actually surrendering control to a system you can't operate.
The rule: You should be able to trace any piece of code you shipped, step through it mentally, identify where it touches external systems, and explain why each major decision was made. If you can't, you either need to understand it better before shipping, or write it yourself.
Rule 3: Set Explicit Team Agreements
The worst teams for vibe coding are the ones where everyone has a different implicit understanding of how much review is enough, what's okay to ship without deeply reading, and how to handle code you don't understand that your colleague wrote with AI.
The best teams have explicit agreements. These don't need to be lengthy policy documents. They need to be honest, specific, and agreed upon by everyone:
| Topic | The Question to Answer Together |
|---|---|
| Security code | Does this get vibe coded, or does it require manual authorship and review? |
| Tests | Can AI generate tests for AI-generated code? Who reviews the test quality? |
| On-call ownership | If you vibe coded it, are you still the right person for the on-call rotation for that code? |
| PR review bar | Does vibe-generated code get a higher review bar than manually-written code? |
| Skill protection | Do we have a policy on deliberate old-school sessions to prevent atrophy? |
| Junior engineers | Are there restrictions on when juniors vibe code vs. when they should write manually for learning purposes? |
These conversations are uncomfortable. Nobody wants to be the person saying "maybe we shouldn't use AI here." That's exactly why you need them before the situation forces them.
Rule 4: The Debugging Problem Is Fundamentally Different
When you write code, debugging is natural. You have a mental model of what you intended, and when the output is wrong, you reason backward from the bug to the likely cause. Your model of the code and the code itself are connected through the act of writing it.
When you vibe code, this connection is severed. The AI generated the implementation to match your description, not your mental model. And the description may have been imprecise, or the AI may have made choices you didn't anticipate, or both.
So when the vibe-coded code has a bug, you're debugging something that was never fully yours to begin with. Here's what experienced vibe coders actually do:
- Read the generated code before testing. Not perfectly โ just enough to build a rough mental model. "I told it to sort by date, I wonder if it handles timezone edge cases."
- Add assertions you wouldn't have thought to add manually. If the AI wrote the sort, you should think about what inputs would break it that you wouldn't have worried about in code you wrote yourself.
- Test the edges the AI probably didn't think about. Empty inputs, null values, extremely large datasets, concurrent access. The AI tends to generate the happy path.
- When you find a bug, understand it before prompting the fix. "Why did it get this wrong?" is a question that builds your model. "Fix this bug" is a question that doesn't.
The engineers who vibe code successfully long-term are the ones who treat debugging as a learning opportunity, not just a fix cycle. If every debug session ends with "I prompted it to fix the bug and it worked," you're not debugging. You're delegating.
Rule 5: Protect What You're Not Vibe Coding
The engineers who feel worst about their vibe coding practice are the ones who stopped doing anything without AI. They vibe coded their work code, their side projects, their learning experiments. A year later, they realize they can't write a sorting function from memory anymore, they can't reason through a race condition without running it, and they don't trust themselves in an interview that asks them to code on a whiteboard.
The countermeasure is deliberate separation:
- No-AI blocks: Time periods โ a morning, a day, a week โ where nothing gets AI assistance. Use these for learning, for practicing the hard things, for building the skills that feel rusty.
- Project-level choices: Some projects are vibe coding projects (experiments, MVPs, prototyping). Some projects are manual projects (learning a new language, building from scratch, rebuilding something you built five years ago).
- Weekly old-school sessions: One debug session a week without AI. One feature implementation without AI. Whatever feels like the biggest risk of atrophy โ that's what you protect.
The goal isn't to be equally good at vibe coding and manual coding. The goal is to be intentional about which mode you're in, and not slowly drift into vibe coding everything without noticing.
If you've already noticed the drift, the 30-Day AI Detox Plan has a structured protocol for rebuilding the manual muscle.
Rule 6: Onboard Juniors Differently
This is the rule most teams get catastrophically wrong. Vibe coding is seductive for junior engineers because it lets them ship working code quickly. The problem is that junior engineers who vibe code their way through their first two years are building on a foundation they don't understand, and at some point โ usually during a high-stakes situation or when they're being evaluated for promotion โ the gap between what they can do and what they understand becomes painfully visible.
The better approach for junior engineers:
- Manual first, AI second: For the first 6-12 months, juniors should write significant amounts of code manually โ not as punishment, but as the only way to build the pattern recognition they'll need forever.
- AI for explanation, not substitution: "Tell me what this code does" is a legitimate use of AI for juniors. "Write this code for me" is not.
- Review the AI output before accepting it: Every AI-generated block should be read and questioned. The habit of reading is essential even when you're not writing.
- Track what you've learned without AI: A simple log: every week, what did you build or understand this week that you couldn't have built or understood a month ago?
The reason junior engineers need to write code manually isn't about purity or gatekeeping. It's that the skills you develop by writing code โ debugging, reasoning about edge cases, building intuition about data structures โ are the foundation that lets you evaluate whether AI output is correct. Without that foundation, you can't review AI code effectively. You're just hoping it works.
For more on the unique risks of AI tools for junior engineers, see AI Fatigue for Junior Engineers.
Rule 7: Measure the Health of Your Vibe Coding Practice
How do you know if vibe coding is making you a better engineer or a more fragile one? Here are the signals that suggest it's working โ and the warning signs that suggest it isn't:
- You can explain most of what you vibe coded
- You still remember how to debug without AI
- Your on-call incidents are decreasing over time
- You can modify vibe-coded sections when requirements change
- You feel increasing ownership of your codebase, not less
- You're building things you couldn't have built a year ago
- You can't explain most of what you vibe coded
- You've forgotten how to debug certain code paths
- On-call incidents feel like mysteries you Google your way through
- You feel less capable without AI than a year ago
- You avoid the parts of the codebase you didn't write manually
- You feel anxiety when someone asks about a specific implementation
If the warning column is growing, that's the time to act โ not later, when the gap has widened further. The AI Fatigue Quiz takes 2 minutes and gives you an honest read on where you stand.
Rule 8: The Real Goal Is Knowing Which Mode You're In
After hundreds of conversations with engineers across companies using AI tools heavily, the pattern is clear: the engineers who feel best about their practice โ who aren't burned out, who feel ownership, who are still learning โ are the ones who are most intentional about their mode.
They know when they're vibe coding and when they're writing manually. They know what they're trading in each mode. They have team agreements that make those choices explicit. And they protect time and space for the manual practice that keeps their craft alive.
The engineers who are struggling โ feeling foggy, disconnected from their code, anxious about their skills, dreading code reviews โ are often the ones who drifted into vibe coding everything without ever making an explicit choice. The mode crept up on them. They look up and realize they haven't written a significant piece of code from scratch in months.
Vibe coding isn't the problem. Unconscious vibe coding is.
The best teams aren't the ones who banned AI tools or the ones who embraced them without guardrails. They're the ones who had the honest conversation early, set explicit agreements, and keep revisiting them as the technology changes โ because it will keep changing, and the agreements will need to evolve with it.
Frequently Asked Questions
What is vibe coding?
Vibe coding is the practice of describing what you want in plain language and letting AI generate the code โ treating the AI as a creative partner where you guide the direction but don't write every line yourself. popularized by Paul Graham in 2026. It's a spectrum from "full vibe" (AI generates everything, you iterate) to "AI-assisted" (you write, AI helps with boilerplate and tests).
When should you NOT vibe code?
Avoid vibe coding for: security-critical code (auth, payments, permissions), performance-sensitive hot paths, code you can't afford to misunderstand in production, algorithms where you need to understand the correctness proof, and anything where the cost of a subtle bug is catastrophic. The rule: never vibe code what you can't debug at 3 AM when something goes wrong.
How do you set team norms around vibe coding?
The best teams create explicit agreements on: what requires old-school writing, what requires thorough AI-output review, what can be shipped with a lighter touch, how to handle the knowledge gap when someone reviews code they didn't write, and policies for junior engineer onboarding. These don't need to be lengthy documents โ they need to be honest, specific, and agreed upon by everyone.
Does vibe coding make you a worse engineer?
It can, if you never deeply engage with the underlying logic. The risk is craft erosion โ losing the intuition that comes from building things by hand, the debugging reflex, the ability to reason about code you didn't write. The solution isn't to ban vibe coding. It's to practice deliberate old-school sessions where you build without AI, and to be intentional about which mode you're in at any given time.
How should junior engineers use vibe coding?
Juniors should write significant amounts of code manually for their first 6-12 months โ not as gatekeeping, but because the skills developed by writing code manually (debugging, reasoning about edge cases, pattern recognition) are the foundation that lets you evaluate whether AI output is correct. Use AI for explanation ("tell me what this code does"), not substitution ("write this for me").
How do I know if vibe coding is hurting my skills?
Warning signs: you can't explain most of what you vibe coded, you've forgotten how to debug certain code paths, on-call incidents feel like mysteries you Google your way through, you feel less capable without AI than a year ago, you avoid parts of the codebase you didn't write manually. If this describes you, the 30-Day AI Detox Plan can help you rebuild the manual muscle before the gap widens further.