AI 101: From Vibe Coding to Spec-Driven Development
How to combat the AI slop in coding and build software that actually follows a plan and your goals + Spec-Driven Development tools
As AI joins us in software development, one important question becomes hard to avoid: how safe is this, really? Vibe coding has brought convenience, speed and fun to the world of programming and reduced the barrier to entry into it – but it also came with a large amount of low-quality, unstructured code, the kind of “AI coding slop,” that triggers everyone.
But if giving up vibe coding seems too radical, is it possible to make it safe and effective? How to find that source of truth which will help AI-generated code stand on firm ground?
How AI would say: Enter Spec-Driven Development (SDD).
The idea is to put everything – user stories, requirements, system behavior, constraints, acceptance criteria, features – into one place, called specification, and the coding process starts with it. It becomes the base of rules with defined goals, which acts as a map for coding agents to not get lost in the sea of prompts.
Today we’ll look at why SDD can be a more reliable alternative to vibe coding, and walk through the main SDD tools you can use right now.
And if SDD is a roadmap for coding agents, we hope this article will be your roadmap to SDD.
P.S. Special thanks to Marc Brooker, VP and Distinguished Engineer for Agentic AI at Amazon Web Services (AWS), for walking us through the key aspects of SDD.
In today’s episode:
A Little Bit of Coding History
What is Spec-Driven Development (SDD)?
Specification: A New Way of Describing Programs
The benefits you get with SDD
Who works on SDD?
Kiro which is by AWS
Spec Kit from GitHub
Tessl’s approach
What about the coders’ favorites – GitHub Copilot, Claude Code, and Cursor?
Conclusion: Where to use SDD?
Sources and further reading
A Little Bit of Coding History
For decades, programming meant telling the computer exactly how to do things. Early languages like C or Fortran were purely procedural: loops, memory, control flow — every step explicitly written by the developer.
Then in the 1970s, SQL introduced a radically different idea. Instead of describing the procedure, you described the desired result, for example: SELECT name FROM users WHERE country = ‘US’
You didn’t specify indexes, joins or execution plans, and the database figured out the implementation. In many ways, SQL was one of the first mainstream examples of spec-driven programming – you provide the specification, the system handles the execution.
In the 2000s, the industry tried to push this idea further with Model-Driven Development (MDD). Engineers would design systems using formal models, like UML diagrams or domain models, and tools would generate the code automatically. This ensured the system is built with correct architecture and logic. In theory, this was great because models would become the main artifact and code would just be a byproduct. But in practice, the tooling was rigid and developers often ended up fighting the generated code. Another option was Behavior-Driven Development (BDD) that focuses on user behavior and ensures the system does the right thing from a business perspective.
Now we are in the next era of coding brought by generative AI like code assistants and autonomous agents. It gave us what programmers of the past could only dream of: translating natural language in working code, modifying large codebases, easier generating tests, refactoring systems, etc.
Vibe coding is a kind of peak moment in the use of AI as a co-coding assistant. It goes prompt by prompt, and more concretely the workflow looks like: developer writes prompts → AI generates code → developer patches with more prompts to refine and fix bugs → repeat. This works surprisingly well and brings the simplicity to the coding process, so much more users became able to do coding. But at the same time it is very fragile:
Vibe coding has no persistent global plan
The outcome is non-deterministic
Requirements live in chat history
Changes can override earlier decisions
Architecture becomes fragile
AI agents often can’t handle large tasks safely
This happens because vibe coding lacks structure: a foundation of rules and constraints, verification systems, something like an inner compass for your agent that defines what “doing it right” means and prevents it from getting lost between iterations. Spec-driven development aims to solve this.
What is Spec-Driven Development (SDD)?
Spec-Driven Development (SDD) is an attempt to reintroduce formal structure, scalability and provable correctness into AI-assisted software development. It lives somewhere in the middle between MDD, BDD and vibe coding.
Spec-Driven Development makes it much easier for the coding agent to make forward progress without making backward progress. It provides the coding agent with the context it needs to build software in an ongoing way.
Marc Brooker, distinguished engineer at AWS
In SDD, the rules and the constraints are much more explicit and the main part that SSD is built on is →
Specification: A New Way of Describing Programs
How to do that? →



SDD makes a lot of sense given where the models actually are. GPT-5.4 just dropped and its raw coding score barely moved (57.7% on SWE-Bench Pro vs 55.6% for 5.2). Where it did improve is tool search efficiency and multi-step orchestration. Which is basically the infrastructure that makes spec-driven workflows viable. Covered the full picture here: https://reading.sh/gpt-5-4-just-dropped-heres-your-explainer-8fcc0126d84d?sk=ad5982c9f3b9382ff8fea9c32491a811