Back to blog
#ai#engineering

Spec-Driven Development: The New AI Coding Workflow

Spec-driven development puts the spec, not the prompt, at the center of AI coding. Here is how GitHub Spec Kit and Kiro work, and when the approach beats vibe coding.

By Rafael Costa4 min readEnglish
Share
Spec-Driven Development: The New AI Coding Workflow

Ask an AI coding agent to "build a booking flow" and you get something. Ask three different agents, or the same one twice, and you get three different somethings. That gap between what you meant and what the model built is where most AI coding projects quietly fall apart. Spec-driven development is the industry's answer, and by early 2026 it has gone from a niche idea to something close to a default.

The pitch is simple. Instead of steering an agent with a running stream of prompts, you write a specification first: what the software should do, for whom, under what constraints. The spec becomes the source of truth. The agent plans against it, breaks it into tasks, and implements them while you review at fixed checkpoints. GitHub open-sourced Spec Kit to formalize this, AWS built a whole IDE (Kiro) around it, and tools like Tessl are pushing toward treating the spec as the real source and the code as a build output. If your team is shipping AI-written code, this is the workflow worth understanding now.

What spec-driven development actually is

Spec-driven development, or SDD, treats a written specification as the primary artifact of a project. Code is generated from it, not the other way around.

This is not new as an instinct. Engineers have always written design docs. What changed is that AI agents can now read a structured spec and act on it directly, so the document stops being a formality that rots in a wiki and starts being the thing that drives the build. When the spec changes, the implementation follows. When someone asks "why does it work this way," the answer lives in a file, not in a Slack thread from four months ago.

Why prompting alone breaks down at scale

Ad-hoc prompting works beautifully for a throwaway script and poorly for a real product. The reasons are structural, not a matter of prompt skill.

A prompt holds intent for exactly one exchange. The next day, or the next developer, starts from a blank box and re-explains the same constraints, usually differently. Context drifts. The agent invents details you never specified because you never wrote them down, and it has no reason to invent the same details twice. On a feature of any size the result is inconsistency: two endpoints that handle errors differently, a data model that half-matches the UI, tests that assert behaviour nobody agreed on.

Vibe coding, letting the model improvise from a loose description, is fast for prototypes and a liability in production. A 2026 analysis found that a large share of AI-generated code fails basic security checks on the first pass. The fix is not to stop using agents. It is to give them a target that does not move.

How the workflow runs: Specify, Plan, Tasks, Implement

Spec Kit organizes the work into four gated phases, each with a human checkpoint before the next begins.

  • Specify. You describe the goal and the user journeys in plain language. The agent drafts a detailed spec and refines it with your feedback. No code yet.
  • Plan. You declare the architecture, stack and constraints. The agent proposes a technical plan that respects your existing patterns and standards.
  • Tasks. The agent breaks the plan into small, reviewable units that can each be implemented and checked in isolation.
  • Implement. The agent works through the tasks while you verify at each step.

The gates are the point. Each phase produces an artifact you approve before the agent spends tokens on the next one, so a wrong assumption gets caught in the spec review, where it costs a sentence to fix, instead of in the code, where it costs a rewrite.

bash
# Bootstrap a project for spec-driven development
uvx --from git+https://github.com/github/spec-kit.git specify init my-project

The tools: Spec Kit, Kiro, and where they fit

You do not need to pick one vendor. The ecosystem is converging on the same shape from different angles.

GitHub Spec Kit is an open toolkit and CLI that layers the Specify, Plan, Tasks, Implement flow onto agents you already use. It supports Claude Code, GitHub Copilot, Gemini CLI, Cursor, Windsurf and roughly two dozen others, so it fits an existing setup rather than replacing it.

AWS Kiro is a full IDE built on Code OSS that makes SDD the native way of working, with specs, design and tasks as first-class files in the project.

Tessl and similar push further, toward spec-as-source, where the specification is the maintained artifact and code is regenerated from it. That is the more speculative end of the spectrum, but it shows where the idea is heading.

Start with one feature

You do not have to adopt SDD across a whole codebase. Pick one upcoming feature, write the spec, run it through the four phases, and compare the result against how your team would normally build it. The overhead is real up front and usually pays back by the second or third feature.

When it is worth it (and when it is overkill)

SDD earns its keep when work is shared, long-lived, or has to match agreed rules. A feature touched by several people, a system with compliance constraints, or anything a client will maintain later, all benefit from a spec that outlives the conversation.

It is overkill for a one-off script, a quick spike to test an idea, or a solo prototype you plan to throw away. Forcing four gated phases onto a fifteen-minute job just slows you down.

The honest framing: spec-driven development trades a bit of speed at the start for far less rework later, and for AI-written code that a human can actually review with confidence. For a studio shipping software other people depend on, that trade is usually worth making. If your team is already leaning on coding agents, the question is not whether to add structure but how much, and the spec is the cheapest place to put it.

#ai#engineering
Share this article
Rafael Costa

Written by

Rafael Costa

Software Engineer & Technical Writer

Rafael is a software engineer at Lusivision who writes about web development, cloud architecture and applied AI. He has spent over a decade shipping production software for companies across Europe and enjoys turning hard technical topics into clear, practical guides.

View all articles

Related articles

Newsletter

Stay in the loop

Occasional notes on software, design and what we're building. No spam — unsubscribe anytime.