Introduction

One of the most common ways to critique vibe coding is by pointing to technical limitations such as context length, token limits, or LLM “amnesia.” While those are real constraints, the deeper issue IMHO is the workflow.

In real life, we rarely expect a human counterpart to take a single-line request or a short PRD and return a perfectly working solution. We expect clarifying questions, intermediate artifacts, reviews, and course correction which can be expensive. Over time, engineering practices such as Behaviour-Driven Development emerged precisely to help teams articulate intent clearly before implementation by promoting better dialogue between stakeholders.

When working with AI coding agents, the same principle applies. If we cannot articulate our intent clearly to ourselves first, what eventually gets built will almost certainly deviate from what we originally wanted, regardless of how capable the model is.

This article looks at the fundamental workflow differences between vibe coding and spec-driven development, and how those workflows either amplify or reduce intent-to-implementation deviation.


The Vibe Coding Lifecycle

In a typical vibe coding flow, we describe what we want in a single prompt, review the generated code, provide feedback, and iterate until we are satisfied. It is fast, flexible, and requires very little upfront planning.

Vibe Coding Lifecycle Vibe Coding Workflow: Iterative prompt-feedback cycles with growing intent deviation. Diagram by Hari Krishnan.

How Vibe Coding Works

The vibe coding workflow usually follows a linear loop:

  1. Single-line prompt describing what needs to be built
  2. General-purpose agent that interprets the prompt and fills in gaps
  3. Code generation based on those assumptions
  4. Review and feedback from the human
  5. Iteration using the updated prompt or follow-up instructions

This feels natural, especially because chat-based interfaces encourage getting something working quickly and using that output as the basis for further refinement. The workflow optimizes for speed and momentum.

Implicit Assumptions Accumulate

The core problem emerges as iterations progress.

Each prompt and correction focuses on the current concern. To satisfy new feedback, the agent often revises or overrides earlier decisions. Constraints that were previously implied or loosely stated are weakened or forgotten.

Initially, intent deviation may reduce as obvious gaps are fixed based on feedback. Over time, however, corrections become fragile. Changes in one area introduce regressions in another. The human ends up in a sustained negotiation loop with the agent, repeatedly restating intent in different ways to keep the output on track.

This is not a model failure, it is a workflow limitation where context is not managed effectively.


The Spec-Driven Development Workflow

Spec-driven development takes a fundamentally different approach. Instead of starting with implementation, it focuses on establishing clear intent before asking the agent to write code.

By breaking work into explicit phases with review gates, the spec-driven workflow makes intent articulation deliberate and verifiable, significantly reducing downstream deviation.

Spec-Driven Development Workflow Spec-Driven Development: Four-phase workflow with review gates maintaining intent alignment. Diagram by Hari Krishnan.

The Four Phases of Spec-Driven Development

Each tool may have a few more or a few less, however overall these aspects are usually covered.

Phase 1: What (Specify / Propose / Requirements)

This phase focuses on defining what needs to be built:

  • Feature requirements and acceptance criteria
  • User needs and business goals
  • Scope, boundaries, and non-goals
  • Success metriccs

Phase 2: How (Design / Plan)

Once intent is clear, the next phase addresses how it will be implemented:

  • Architecture and technical approach
  • Technology and pattern choices
  • Data models, APIs, and interfaces
  • Risks and dependencies

Phase 3: Task (Granular Steps with Checks)

With design approved, work is decomposed into concrete tasks:

  • Small, verifiable work items
  • Clear validation criteria per task
  • Explicit dependencies and ordering
  • Testing and verification strategy

At this point, task ordering and parallelization opportunities can be reviewed. Tasks may also be delegated to sub-agents, reducing context burden in the primary thread while keeping intent anchored.

Phase 4: Build (Implementation)

Only after intent, design, and tasks are validated does implementation begin:

  • Tasks executed sequentially or in parallel
  • Validation against acceptance criteria
  • Automated tests run
  • Implementation reviewed against specs

Output: Working code that matches documented intent.


Conversation Matters

Spec-Driven Development is sometimes criticized as an anti-pattern because it appears to conflict with “Working software over comprehensive documentation” from the Agile Manifesto. This criticism often stems from viewing specs as artifacts rather than as a mechanism for intent negotiation.

To give you an analogy, Behaviour-Driven Development was never about Gherkin syntax for its own sake. It was about enabling collaboration between business and technology through structured conversation. That aligns with “Collaboration over contract negotiation.”

Similarly, SDD facilitates structured conversation between humans and coding agents. Specs and plans are not the goal, they are scaffolding that helps clarify and stabilize intent.

Tooling quality and verbosity vary, but the underlying purpose remains the same, ensuring that intent is explicit, reviewable, and durable across iterations.


Watch: Deeper Dive into Vibe Coding vs Spec-Driven Development

For a comprehensive walkthrough of these workflows and their practical implications, watch this video:


Conclusion

Vibe coding and spec-driven development represent two fundamentally different philosophies for working with AI coding agents.

Vibe coding optimizes for speed. It favors rapid iteration, minimal planning, and flexibility. It works well for prototypes, scripts, and exploratory work.

Spec-driven development optimizes for intent alignment. It emphasizes clarity, validation, and verifiable outcomes. This makes it better suited for production systems, team environments, and long-lived codebases, and, over time, even for smaller prototypes.

The critical differentiator is intent management.

Vibe coding accepts deviation as a cost of speed. Spec-driven development reduces deviation by introducing structure, review gates, and explicit intent articulation.

If intent matters beyond the next prompt, structure wins.


Ready to Learn More?

Explore our Knowledge Hub for in-depth guides on:


Related viewing: No Vibes Allowed: Solving Hard Problems in Complex Codebases – Dex Horthy, HumanLayer