Quick answer
Spec-driven development is a way of working with AI coding agents where the agent first produces written artefacts, typically requirements with acceptance criteria, a design document, and a task list, and only then generates code from them. The idea is that correcting a misunderstanding in a paragraph is cheap and correcting it in a codebase is not. AWS's Kiro is built around it; Claude Code, Cursor, and others support it through planning modes and project files.
Vibe coding, where you describe what you want and accept whatever the model produces, is thrilling for a weekend and painful by month three. The code works but nobody, including the model, can explain why it is shaped the way it is. Spec-driven development is the industry's response.
The three artefacts
- Requirements: user stories with acceptance criteria, often in a given-when-then form, that state what "done" means
- Design: the components, data models, interfaces, and trade-offs, written before any of them exist
- Tasks: an ordered list of small implementation steps, each of which an agent can execute and a person can review
Why it helps
Language models are much better at implementing a clear spec than at guessing what you meant, and people are much better at reviewing a page of requirements than five hundred lines of generated code. Specs also survive the session: a new agent, a new developer, or the same agent a month later can read them and understand the intent. Tests derived from acceptance criteria are meaningful rather than decorative.
What it costs
Time and tokens. A quick fix does not need a design document, and tools that force the flow on every change feel bureaucratic. Specs also drift if nobody updates them when the code changes, which is why tools like Kiro add hooks that refresh them automatically. The pattern suits new features, unfamiliar codebases, and teams; it is overkill for a one-line change you understand.
Related reading
Bottom line
Spec-driven development is what experienced engineers always did, adapted for a world where the implementation is nearly free and the understanding is not. Use it for anything you will have to maintain.



