Henricus Louwhoff

December 31, 2025

The Shift to Spec-Driven Development: From Vibe Coding to Agent-Powered Precision

What Is Spec-Driven Development?

Spec-driven development represents a fundamental shift in how we approach AI-assisted coding. Instead of the iterative “vibe coding” approach (where developers prompt an AI, review code, adjust, and repeat), spec-driven development flips the traditional relationship between specifications and code. The specification becomes the source of truth that generates implementation.
  
The core idea is simple: create structured documents in natural language that describe what your software should do. These specifications guide AI coding agents, ensuring they understand what to build, why it matters, and what not to build. The workflow usually involves defining requirements with acceptance criteria, creating technical designs that outline architecture, and breaking work into trackable tasks.

Unlike traditional documentation that becomes outdated once coding begins, these specifications stay at the centre of your engineering process. More importantly, specifications evolve alongside your software. When you add new features, you create new specs whilst keeping old ones as historical records. This creates an audit trail showing what was implemented, when it was built, and why decisions were made. Maintaining software means evolving specifications. Debugging means fixing the specifications that generated incorrect code. The code itself becomes an expression of intent you’ve defined at a higher level.

This living history of specifications becomes invaluable over time. Teams can trace back through spec versions to understand the reasoning behind architectural choices, see how requirements shifted, and maintain continuity as developers join or leave the project. The spec repository becomes your project’s memory.

Implementing Spec-Driven Development with Kiro and GitHub Spec-kit

Two tools have emerged to make spec-driven development practical: AWS’s Kiro and GitHub’s Spec-kit.

Kiro is an AI-powered development environment built around specifications. When you start a project, Kiro offers two paths: “vibe” mode for quick prototyping, or “spec” mode for structured development. Spec mode guides you through three phases:

  1. Requirements generation: Kiro transforms your natural language prompt into detailed user stories with acceptance criteria in EARS notation (Easy Approach to Requirements Syntax)
  2. Design creation: The agent analyses your codebase and proposes architecture and technical stack
  3. Implementation planning: Requirements and design are broken down into specific, trackable tasks
 
Kiro also includes “agent hooks” (event-driven automation that executes actions when specific events occur) and one-click “powers” that provide pre-packaged expertise for specific technologies like Amazon Aurora.

GitHub Spec-kit provides an open-source toolkit that works with various AI coding agents including GitHub Copilot, Claude Code, and Gemini CLI. Spec-kit follows a four-phase process:

  1. Specification: Create a contract defining how your code should behave
  2. Planning: The coding agent transforms the spec into a structured plan with architectural decisions
  3. Tasks: The plan is broken into small, reviewable chunks
  4. Implementation: The coding agent tackles tasks whilst you review focused changes

Spec-kit makes changing course simple: update the spec, regenerate the plan, and let the agent handle implementation. Your job is to steer whilst the agent writes.

The Evolution Towards Agent Developers with Human Oversight

We’re witnessing a role reversal in software development. The traditional model (humans write code, occasionally write specifications as an afterthought) is giving way to a new paradigm where AI agents write code and humans focus on specification, architecture, and review.

This shift transforms developers from programmers into engineers who manage context, craft specifications, and validate outcomes. As one developer described it: working with language models is like managing an intern who has read every textbook but has zero practical experience with your specific codebase and forgets anything beyond the most recent hour of conversation.

The implications:
  • Humans move up the abstraction ladder: Instead of manipulating code, developers express intent in natural language, define system behaviour, and establish architectural constraints
  • Quality through structure: Forcing clear requirement definition upfront prevents costly rework and ensures AI-generated code aligns with organisational standards
  • Review becomes more meaningful: Rather than reviewing sprawling code changes and attempting to reverse-engineer intent, reviews follow a clear path from specification to plan to task to implementation
  • Agents handle mechanical translation: AI coding agents excel at translating specifications into working code, freeing humans to focus on creative problem-solving

This evolution doesn’t diminish the role of developers. It elevates it. Developer expertise shifts from syntax and implementation details to system design, requirement clarity, and architectural decisions. The specification becomes the developer’s primary output, and code becomes a continuously regenerated artefact.

As spec-driven development matures, software engineering means maintaining a clear understanding of what systems should do, with AI agents handling the increasingly automated work of making that understanding concrete in code.

About Henricus Louwhoff

Henricus is a backend software developer with a passion for complex systems and elegant code architecture. Specializing in Elixir and Rust, he thrives on solving challenging technical problems and untangling intricate backend logic, though he openly admits frontend development isn't his forte. When he's not deep in code, Henricus enjoys analog and digital photography and considers being a dad his greatest achievement and defining characteristic.