03Spec-driven development

Spec-driven development needs a living specification

Spec-driven development tools write a spec for each feature. Teams also need a living specification, one shared and reviewed model of the whole system.

By SpecsGraph Team10 min read
On this page

Spec-driven development became a product category in a single year. GitHub open-sourced Spec Kit (opens in a new tab) in September 2025, AWS made Kiro (opens in a new tab) generally available that November, and open-source projects such as OpenSpec (opens in a new tab) and BMAD (opens in a new tab) gathered tens of thousands of GitHub stars each. Behind all of them is an insight that is hard to argue with: a coding agent builds far better from a written, reviewed specification than from a prompt typed into a chat.

Sean Grove of OpenAI made the case at the AI Engineer World's Fair in June 2025. Code, he said in The New Code (opens in a new tab), "is sort of 10 to 20% of the value that you bring. The other 80 to 90% is in structured communication."

But look at what most spec-driven workflows leave behind: a folder of Markdown files for one feature, written just before the code, used to plan the tasks, then set aside when the branch merges. For one developer shipping one change, that is a real step up from vibe coding. For a team that has to keep a system correct for years, with product managers, analysts, testers and several agents working on it at once, it solves the smaller half of the problem.

The larger half is keeping one specification of the whole system true after every change. That is what a living specification is for, and it is the idea SpecsGraph is built around.

Note

In short

Spec-driven development tools write a specification for each feature, which helps one agent build one change. A team also needs a living specification: one shared, structured description of the whole system that people and agents both read, that changes only through review, and that is published to Git beside the code.

What spec-driven development tools do today

Most spec-driven tools run the same loop. You describe a feature. The agent expands it into a specification, then into a technical plan and a list of tasks, and implements the tasks one by one while a person checks each step.

  • GitHub Spec Kit names the phases specify, plan, tasks and implement, and keeps project-wide principles in a constitution. Each feature gets its own spec.md, plan.md and tasks.md. GitHub describes the spec as "a contract for how your code should behave" that "becomes the source of truth your tools and AI agents use to generate, test, and validate code".
  • Kiro, from AWS, writes requirements in the EARS format ("THE System SHALL …"), then a design and a task list. Since general availability, it also runs property-based tests that check whether the code matches the spec.
  • OpenSpec treats work as changes that are proposed, applied and archived. Archiving a change updates the project's specs, so the next change starts from them. A beta feature called Stores keeps planning in a separate repository that several code repositories can share.

Birgitta Böckeler of Thoughtworks gave the field its vocabulary in October 2025 (opens in a new tab), with three levels of ambition:

  • Spec-first. A spec is written first and then used in the AI-assisted workflow.
  • Spec-anchored. "The spec is kept even after the task is complete, to continue using it for evolution and maintenance."
  • Spec-as-source. The spec is the main source file over time. People edit only the spec, and "the human never touches the code".

Spec Kit's own documentation (opens in a new tab) uses the same three terms, and it is candid about the choice it leaves to you: the toolkit "does not force one artifact maintenance strategy", and "the main risk is silent divergence".

Where a spec per feature falls short

The first field reports are mixed. Böckeler found that on a small bug, Kiro's workflow "was like using a sledgehammer to crack a nut", and admitted: "I'd rather review code than all these markdown files." Colin Eberhardt at Scott Logic put one feature through Spec Kit (opens in a new tab) and got 2,577 lines of Markdown and 3.5 hours of review for 689 lines of code. With his usual iterative approach, he was "around ten times faster". The Thoughtworks Technology Radar (opens in a new tab) rates spec-driven development Assess and notes that some tools "generate lengthy spec files that are hard to review".

None of this makes specifications a bad idea. It shows what happens when a spec is a set of files that one developer generates for one change, and that nobody owns once the change ships. For a team, five problems follow.

  1. The spec ages at merge. Once the branch merges, nothing ties the spec to the next change. Böckeler notes that it is often "left vague or totally open what the spec maintenance strategy over time is meant to be". A stale spec can be worse than none, because the next agent that finds it will trust it.
  2. Every feature describes the system again. Each spec restates the parts of the domain it touches, in its own words. After fifty features, the same business rule exists in fifty slightly different versions.
  3. It stops at the repository. Most systems span several services and repositories. An open Spec Kit issue (opens in a new tab) from September 2026 asks for "a way to represent a product as a logical grouping of multiple repositories/services".
  4. The people who own the behavior rarely see it. A spec is drafted in one developer's agent session and reviewed, if at all, in a pull request. The product manager, analyst and tester who decide what the system should do seldom read it before the code exists.
  5. Every agent sees a different picture. Each developer's agent assembles its own context from instruction files, chat history and whatever it finds in the repository. Two agents working on the same rule can hold two versions of it, and both will write confident code. Incomplete context is one reason AI output so often lands near the target instead of on it: "AI solutions that are almost right, but not quite" was the top frustration in Stack Overflow's 2025 Developer Survey (opens in a new tab), named by 66% of developers.

What a living specification is

A living specification is a shared, structured description of how a whole system should behave that stays true as the system changes, because every change to that behavior is agreed in the specification first.

The idea is older than coding agents. Behavior-driven development has long treated executable examples as living documentation, and domain-driven design asks a team to share one ubiquitous language across conversations, documents and code. Thoughtworks' advice for spec-driven teams (opens in a new tab) points the same way: specifications "should still use domain-oriented ubiquitous language to describe business intent", with scenarios written as Given, When, Then.

What is new is the reader. An agent can read the whole specification, cite it and propose a change to it in seconds, so keeping the specification current finally costs less than letting it drift. The case for shared context keeps getting stronger, too. DORA's 2025 AI Capabilities Model (opens in a new tab) found that "connecting AI tools to internal data sources boosts their impact on individual effectiveness and code quality". The Thoughtworks Radar (opens in a new tab) now rates context engineering Adopt and describes context graphs that model institutional reasoning "as structured, queryable data".

A living specification has six properties:

  1. It covers the whole system. Every bounded context, rule and term the team depends on, not only the part that is changing this week.
  2. It is structured, not free text. Contexts, use cases, features with Given, When, Then scenarios, glossary terms, roles and contracts are separate entries that refer to each other, so a person or an agent can read one without reading everything.
  3. It speaks one language. Each term is defined once and used the same way in the scenarios, in review and in the code.
  4. It changes through review. Anyone, agents included, can propose a change. A person accepts it, and the agreed state is always known.
  5. It is versioned like code. Changes are drafted on a branch of the specification and merged when they are agreed, with their history kept.
  6. It lives beside the code. Every agreed change is published to the repository as plain files that anyone can read, diff and test without a special tool, which also keeps each change traceable.

One change, end to end

Here is what that looks like for one change. Northwind Commerce, the sample online store in our docs, has three bounded contexts: Orders takes orders, Billing takes payments and Catalog tracks stock. Customers sometimes pay for items that sold out while they were checking out, so the team decides to reserve stock at checkout.

  1. Open a workstream. A product manager opens a workstream called "Reserve stock at checkout". It is a branch of the specification, so Main, the agreed version, stays untouched while the team works.
  2. An agent reads, then proposes. A developer asks a coding agent to draft the change. Over MCP, the agent reads the Orders and Catalog contexts and the glossary, then stages a proposal: a new feature with its scenarios, a new term, reservation, and a change to the checkout use case in Orders.
  3. The team reviews in threads. The business analyst asks what happens when only part of the cart can be reserved. The tester asks how long a reservation lasts. The agent answers in the threads and stages revised scenarios.
  4. A person accepts. Each revision is accepted by a person. The agent cannot accept its own work, and the server refuses if it tries.
  5. Publish. A person publishes the accepted work. SpecsGraph opens a pull request that adds the spec files to the repository, next to the code, and Main moves forward when it merges.
  6. Build against it. Developers and their agents implement the feature against Main, and the scenarios become its acceptance tests.

The feature the team agreed on reads like this:

Reserve stock at checkoutGherkin
Feature: Reserve stock at checkout

  Background:
    Given the Catalog has 5 units of "Trail mug" in stock
    And the Catalog has 1 unit of "Canvas tote" in stock

  Scenario: Every line item gets a reservation
    Given a Customer has a cart with 2 "Trail mug" and 1 "Canvas tote"
    When the Customer starts checkout
    Then a reservation holds 2 "Trail mug" for the order
    And a reservation holds 1 "Canvas tote" for the order

  Scenario: Checkout stops when a line item cannot be reserved
    Given a Customer has a cart with 2 "Canvas tote"
    When the Customer starts checkout
    Then no reservation is created for the order
    And the Customer is told that only 1 "Canvas tote" is left
    And payment is not requested

Three months later, when the team adds gift cards, the agent that drafts that change starts from these scenarios and from the definition of a reservation, not from a blank page.

Two panels. On the left, a spec per feature: four spec files, one per feature, fading as each feature merges. On the right, a living specification: a workstream where an agent proposes, a person accepts and the work is published into Main, the agreed spec of the whole system, which people and agents read, and which lands in Git as a commit or pull request.
A spec per feature stops changing when its feature ships. A living specification is the one place every change goes through.

A spec per feature or a living specification?

A spec per featureA living specification
DescribesOne changeThe whole system
LifetimeUntil the feature mergesAs long as the system runs
Written byA developer and their agentProduct, analysis, development, QA and agents
ReviewedIn a pull request, if at allChange by change, and a person accepts each one
VocabularyWhatever the feature neededOne glossary, used everywhere
Reaches agentsAs files in one workspaceOn demand over MCP, for every agent on the team
Lives inMarkdown in one repositoryA shared model, published to Git

The two are not rivals. A plan and a task list are still a good way to build one change, whether Spec Kit, Kiro or an agent's plan mode writes them. What changes is where the plan starts and where its result goes: it starts from the agreed specification, and when the feature ships, the specification is updated through review instead of being left behind.

Why we are building SpecsGraph

SpecsGraph is our attempt to make the living specification practical for teams that build with AI agents. The problem it starts from is familiar: product intent lives in tickets, business rules in documents, code in Git and test plans in yet another tool, and each agent sees only what fits in its prompt.

  • One model of the system. Each project keeps a single typed model, organized the way domain-driven design organizes software: subdomains and bounded contexts, use cases and events, data contracts, and features with Gherkin scenarios, a glossary and roles.
  • Branches for change, one agreed Main. Work happens in workstreams. Main changes only when a person publishes agreed work.
  • Agents propose, people accept. Agents reach the model through the SpecsGraph MCP server and stage their edits in proposals. Accepting a change, resolving a thread and publishing are human acts, and the server enforces that. It is how people and agents work on one model without stepping on each other.
  • The team's words are the spec. Our open-source agent skills ask one question at a time and do not invent detail. Anything a person did not say becomes a question, not a claim.
  • No AI of our own. MCP is an open standard, which Anthropic donated (opens in a new tab) to the Linux Foundation's Agentic AI Foundation in December 2025. SpecsGraph works with the agents your team already uses: Claude Code, Cursor, Codex, GitHub Copilot or any other MCP client.
  • Plain files in your repository. Published specs are YAML files in your Git repository, readable and diffable without SpecsGraph.

SpecsGraph is early, and we are building it in the open where we can. If your team builds with agents and this problem sounds familiar, see how the workflow works, read our agent skills on GitHub (opens in a new tab), or talk to us on Discord (opens in a new tab).

FAQ

Questions, answered

  • A shared, structured description of how a whole system should behave, kept current because every change to that behavior is agreed in it first. People and AI agents read the same specification, changes go through review, and the agreed version is published to Git next to the code.

Humans and agents, one source of truth