010 Coding Collective

010 Coding Collective

Vibe coding vs spec-driven development: what's the difference?

Vibe coding starts with a prompt. Spec-driven development starts with a written spec the AI has to follow. Same tools, a different starting point, and a very different thing to review at the end.

AI LLMs Vibe Coding Cursor Claude Code Software Architecture Software Development Product Development

Two ways to drive the same model

Vibe coding and spec-driven development use the same tools and the same models. What changes is what you hand the AI before it writes a line, and that decides what you can trust afterwards.

Write the spec first

In spec-driven development the specification is the artifact you work on. The code is generated from it, checked against it, and regenerated when the spec changes.

Something to review against

A spec gives you a yardstick. Without one, reviewing AI-generated code means guessing what it was supposed to do in the first place.

Same model, a different starting point

Vibe coding and spec-driven development run on the same tools. Cursor, Claude Code, Copilot, the model underneath is identical. The difference sits in what you hand it before it writes anything.

With vibe coding you start with a prompt and keep going until the thing on screen looks right. With spec-driven development you start by writing down what the software has to do, and the AI generates code from that document. The spec is the thing you maintain. The code follows it.

That sounds like process overhead. In practice it changes the one thing that decides whether AI-generated code is worth anything: whether you have a yardstick to hold it against. We wrote about the attitude behind this earlier in vibe coding vs AI-assisted coding. This article is about the method.

The difference at a glance

Vibe coding Spec-driven development
Where you start A prompt, then another prompt. A written spec: what it does, for whom, under which rules.
What you maintain The chat history, until you lose it. The spec. Code gets regenerated from it.
How you judge the result It runs and it looks right. It matches the spec, and the gaps are visible.
What happens on a change Ask again and hope the rest survives. Change the spec, regenerate, review the diff.
Where it fits Prototypes, one-off scripts, anything disposable. Software with users, data and a second year.

What a spec actually contains

A spec in this sense is a working document. Nobody is asking for a fifty-page requirements binder from 2008. Most teams that do this well keep three layers, and the AI reads all of them.

1

What it has to do

The behaviour in plain language. Who uses this, what they can do, what happens at the edges. Written so someone outside the team can tell whether the built thing matches.

2

The rules it has to obey

Your stack, your conventions, the security boundaries, the things that are off limits. This is the layer that stops the model from inventing its own architecture every session.

3

The plan to get there

The work cut into steps small enough that each one is reviewable on its own. A step that touches thirty files is a step nobody reviews.

Tooling has grown around this. GitHub’s Spec Kit and Amazon’s Kiro both push you through spec, plan and tasks before generating anything, and the same discipline works with a plain markdown file in the repo that your AI editor reads every session.

Why the spec is really a review tool

Here is the part that matters for anything headed to production. Reviewing AI-generated code without a spec means reconstructing the intent from the code itself. You read a function, you decide it looks reasonable, and you have no way to tell whether it does the thing that was asked or a neighbouring thing the model found easier.

Without a spec you are not reviewing the code. You are guessing what it was supposed to do, from the only evidence available, which is the code you are trying to check.

With a spec, review becomes a comparison. Does this match what we wrote down, yes or no. That question can be answered by a second person, by a test, and increasingly by a second model. The vague version of the question cannot.

This is why we build our own process around a written brief and a human who sees every line before it ships. The model does the typing. The judgement about whether the result is correct stays with a person, and that person needs something to judge against.

Vibe coding still has its place

Spec-driven development is not free. Writing the spec takes real time, and on a throwaway project that time buys you nothing.

1

You are exploring, not building

When you do not yet know what the thing should be, a spec is a guess written down. Vibe your way to an answer first, then write the spec for the version that survives.

2

The blast radius is tiny

A script that runs once on your own machine has no users and no second year. Ugly code that works is the correct outcome.

3

You are three prompts from done

Some tasks are genuinely small. Writing a spec for a fifteen-minute change is ceremony, and everyone can feel it.

The failure mode is starting in exploration mode and never leaving it. The prototype gets a user, then a paying user, then a database with real names in it, and the spec that would have made it reviewable was never written. That is the same trap we described in the last 20% of a vibe-coded project, arriving from a different direction.

Vibe engineering is the same idea under a different name

You will also see this called vibe engineering, a term Simon Willison put forward for the disciplined end of AI-assisted work: you still lean hard on models, and you bring the whole engineering apparatus with you. Specs, tests, review, version control, CI, the ability to say what the software is supposed to do.

Treat vibe engineering and spec-driven development as the same instinct with different emphasis. Spec-driven development names the artifact you start from. Vibe engineering names the practice around it. Both exist because pure vibe coding runs out of road the moment something has to be maintained.

Prompt engineering is a different thing entirely

Prompt engineering gets pulled into this comparison a lot, and it sits on another axis. Prompt engineering is about phrasing a single instruction well: give the model context, format, examples, constraints. It makes any one exchange better.

Spec-driven development is about what persists between exchanges. Your spec survives the session, the context window, the tool you switched to last month and the colleague who picks it up next quarter. A well-phrased prompt gets you a good answer today. A spec gets you a codebase you can still reason about in a year.

Three signals you have outgrown vibing

1

You cannot say what it should do

Someone asks whether a behaviour is a bug or intended, and the honest answer is that nobody wrote it down. That is the moment a spec pays for itself.

2

Changes break things elsewhere

Every fix knocks something else over, because the model has no picture of the whole and neither do you. A spec plus small steps is how you get that picture back.

3

Real data has arrived

Actual users, actual records, actual money. From here on, code that nobody can review against anything is a liability rather than a shortcut.

Conclusion: the spec is what makes AI code reviewable

Vibe coding and spec-driven development sit at two ends of one question: how much of your intent exists outside your own head. Vibing keeps it in the chat and in your memory. A spec puts it in the repo, where a colleague, a test and a model can all read it.

🎭

Vibe coding = fast answers

Perfect for finding out whether an idea is worth anything. What you end up with is a prototype, and that is exactly what it is good for.

📐

Spec-driven development = something to maintain

Slower on day one and much cheaper in month six, because everything the AI produced can be checked against something you wrote on purpose.

Most teams need both. The skill is knowing which one you are doing right now, and being honest about when the project moved from one to the other.

Frequently Asked Questions

What is spec-driven development?

Spec-driven development is an approach where you first write down what the software has to do, which rules it has to obey and in which steps it gets built, and the AI generates code from that specification. The spec is the artifact you maintain: when requirements change you change the spec and regenerate, then review the difference. Tools like GitHub Spec Kit and Amazon Kiro formalise this flow, and a markdown file in your repo that the AI editor reads every session achieves the same thing.

What is the difference between vibe coding and spec-driven development?

The difference is what you hand the AI before it writes anything. With vibe coding you start with a prompt and keep iterating until the result looks right, so your intent lives in the chat and in your head. With spec-driven development you start with a written specification, the code is generated from it and reviewed against it. That gives you a yardstick: you can answer whether the code does what was asked. Without a spec you can only judge whether it runs.

Is spec-driven development better than vibe coding?

It depends on what you are building. For prototypes, one-off scripts and exploration, vibe coding is faster and the spec would be a guess written down. For anything with real users, real data or a second year of life, spec-driven development wins, because AI-generated code that nobody can compare to a stated intent cannot be meaningfully reviewed. Most teams use both and get into trouble when a prototype quietly becomes a product without the method changing along with it.

Is vibe engineering the same as spec-driven development?

They point at the same discipline from different angles. Spec-driven development names the artifact you start from, the specification. Vibe engineering, a term coined by Simon Willison, names the practice around heavy AI use: tests, review, version control, CI and the ability to state what the software is supposed to do. In day to day work they amount to the same posture, which is leaning on models while keeping every engineering guardrail in place.

How is spec-driven development different from prompt engineering?

Prompt engineering is about phrasing one instruction well, with the right context, format and constraints, and it improves a single exchange. Spec-driven development is about what persists between exchanges. The spec survives the session, the context window, a change of tooling and a change of colleague. A good prompt gets you a good answer today; a spec gets you a codebase that is still explainable in a year.

When should I switch from vibe coding to a spec?

Three signals. One: someone asks whether a behaviour is a bug or intended and nobody can say, because it was never written down. Two: every change breaks something elsewhere, which means neither you nor the model has a picture of the whole. Three: real users and real data have arrived. From that point, code that cannot be reviewed against a stated intent is a liability rather than a shortcut.

Built it on vibes and now it needs to hold up?

We read what is actually there, write down what it should do, and tell you what it takes to get from prototype to production.

Let's discuss your project

From AI prototypes that need to be production-ready to strategic advice, code audits, or ongoing development support. We're happy to think along about the best approach, no strings attached.

010 Coding Collective free consultation
free

Free Consultation

In 1.5 hours we discuss your project, challenges and goals. Honest advice from senior developers, no sales pitch.

1.5 hours with senior developer(s)
Analysis of your current situation
Written summary afterwards
Concrete next steps