# Part VII: Lessons Learned ## When Vibe Coding Works Vibe coding excels when: ### 1. You know what you want to build The AI is an amplifier, not a decision-maker. If you can describe the outcome clearly, AI accelerates implementation. If you don't know what you want, AI generates confident nonsense. ### 2. You can verify the output Tests, type checks, manual review—some verification mechanism must exist. Without verification, AI-generated code is a liability. ### 3. The domain has good training data AI assistance is most reliable for common patterns: web APIs, data processing, CRUD operations. Niche domains with sparse training data get worse results. ### 4. You maintain the discipline stack Hooks, tests, types, documentation. Without these, vibe coding degrades rapidly. ### 5. You're willing to read and understand The AI writes; you review. If you paste without reading, you're not vibe coding. You're gambling. ## When Vibe Coding Fails Vibe coding struggles when: ### 1. Requirements are ambiguous AI generates plausible implementations of misunderstood requirements. If you don't know what you want, neither does the AI. ### 2. Novelty is required AI produces conventional solutions. If you need something genuinely novel, AI can scaffold but not innovate. ### 3. Security is paramount AI can generate insecure code with confidence. Security review requires human expertise. ### 4. Performance is critical AI produces working code, not optimal code. Performance tuning requires understanding tradeoffs. ### 5. The codebase is unique AI is trained on public code. Private, unusual, or legacy codebases don't match its patterns. ## How to Build the Discipline Stack For developers wanting to adopt disciplined vibe coding: ### 1. Start with pre-commit hooks This is the lowest-effort, highest-impact change. Linting, formatting, and basic tests on every commit. ### 2. Adopt TDD for new features Don't refactor existing code to TDD. Write new features test-first. Let coverage grow organically. ### 3. Add type hints gradually Start with new files. Configure MyPy with incremental strictness. Don't try to type the whole codebase at once. ### 4. Document decisions, not code Don't write comments explaining what code does. Write ADRs explaining why you made architectural choices. ### 5. Use memory tools if available Claude-mem, custom RAG, or even a well-maintained text file. Anything that preserves context between sessions. ## The Role of Human Judgment After all the tools, hooks, tests, and types—human judgment remains essential. The AI doesn't know: - What the business actually needs - Which tradeoffs are acceptable - What security posture is required - How the code fits into the larger system - Whether the tests actually test the right things These require judgment. They require understanding. They require the human in the loop. Vibe coding doesn't replace human judgment. It gives human judgment more leverage. Freed from syntax and boilerplate, you can focus on what matters: Is this the right thing to build? Does it actually work? Will it serve its users?