Vibe coding, using AI coding tools (Cursor, Claude Code, GitHub Copilot) to write code from natural language descriptions without formal specifications, ships features in days that would have taken weeks in 2023. It also produces codebases that become incoherent around 90 days in. Spec-driven development (writing formal specifications before a line of code is written) produces coherent codebases and ships features in months. The question is not which approach is correct. It is what each approach fails at and how to get the benefits of both without the costs of either.
What vibe coding actually is
Vibe coding is a term coined by Andrej Karpathy in February 2025 to describe the practice of directing AI coding tools with high-level descriptions rather than specifications. Instead of writing a detailed spec for an authentication system, you tell Cursor "add Google OAuth" and review the output. The AI makes the implementation decisions, which library, which data model, which API shape.
This is genuinely fast. Teams in early-stage startups and solo developers have shipped full SaaS products in days using Cursor, Claude Code, and Windsurf. The feedback from the community is consistent: vibe coding removes the blank page problem for code the same way AI PRD generators remove it for documentation.
The problem surfaces at scale and over time.
When vibe coding fails
Failure mode 1: The architectural drift problem
Each vibe coding session starts with no memory of previous sessions (unless you explicitly provide context). Session 1 might create users with a userId field. Session 12 might use user_id. Session 23 might use id prefixed with "usr_". The codebase accumulates inconsistency at the rate of sessions. At 90 days of daily coding, you have a data model that makes no internal sense.
The fix is not to stop using AI coding tools. The fix is to maintain an architecture document that every session reads as context. This is the architecture blueprint that Scriptonia generates from PRDs, a single source of truth for data models, API contracts, and component boundaries that any AI coding session can use to make locally-consistent, globally-coherent decisions.
Failure mode 2: The scope expansion problem
Vibe coding is too frictionless. A developer who can implement any feature in an hour will implement features that were never planned. This is not a failure of the tool, it is a feature that becomes a liability without product constraints. Without a scope document, the product grows in every direction simultaneously. Users find 12 features that each work at 70% quality instead of 3 features that work at 95% quality.
Failure mode 3: The debugging abyss
Code written by AI is readable but not always debuggable by the AI that wrote it, especially when the bug involves the interaction of code written across multiple sessions with different contextual assumptions. Engineering teams report that post-vibe-coding debugging sessions take 3 to 5× longer than debugging equivalent hand-written code, because the AI makes assumptions in each session that are not documented anywhere.