RelayWork
The way of building software now

Spec-driven development

When a model can produce a working branch in twenty minutes, code stops being the bottleneck and stops being the record. The specification becomes both. This is what that practice is, where it came from, and how to run it without it collapsing into paperwork.

What it means

Spec-driven development means the specification is the durable artefact and the code is downstream of it. Not a document written to satisfy a process — a document precise enough that a competent engineer, or a competent agent, could implement from it and arrive somewhere you would recognise.

This is not new as an idea. What is new is the economics. Writing the code used to be the expensive part, so specifications were a tax you paid to avoid rework. Now the code is cheap and the thinking is not. A prompt produces a branch; it does not produce agreement about what should exist. The agreement is the scarce thing, and it needs somewhere to live that is not a chat log.

The practical shape most teams land on is two documents and a gate between them: requirements, which answer what and why, and an implementation plan, which answers how. The gate matters more than the documents. A specification nobody has to approve is a suggestion.

Where it came from

The current wave has a short and traceable history. Kiro shipped the three-document shape — requirements, design, tasks — as files beside your code. GitHub's Spec Kit turned the same loop into an open toolkit, with a constitution constraining what the agent is allowed to decide for itself. Both made the same bet: that the artefact the agent needs and the artefact the team needs are the same artefact.

Separately, the Model Context Protocol solved the other half. An agent that can only read a chat window has to be told the state of the world every time. An agent speaking MCP can read the spec, the review notes and the code, and write back into them. That is the difference between an assistant you brief and a colleague who checks.

What none of that settles is who is accountable. A toolkit can generate a plan; it cannot record that a named human read it and stood behind it. That gap is where RelayWork sits.

The loop, in practice

  1. 01Write requirements before code. What problem, for whom, what changes when it ships, what you are deliberately not building. Short. A reviewer who has to read 1,400 words to find the decision will skim, and skimming is how bad specs get approved.
  2. 02Get a named person to approve them. Not a thumbs-up in a channel. A recorded approval, bound to the version they actually read, that dies if the document changes underneath it.
  3. 03Explore the code, then plan. Read the real files. Open a draft pull request with stubs. Discover the constraint nobody remembered. Only then write the implementation plan — it will describe the codebase that exists rather than the one you imagined.
  4. 04Anchor the plan to the code. Link the handful of places that carry the decisions, pinned to a commit, each with a line on why it matters. A reviewer reads the reasoning and the implementation together, which is the only way to catch a plan that is subtly wrong.
  5. 05Slice it small enough to be wrong cheaply. Two days or less per slice. An agent will happily generate a week of work in one pass, and you will review none of it properly.
  6. 06Check the outcome, not the merge. Released is not the end. Ask whether the thing you shipped did what the spec claimed it would. Most teams never close this loop, which is why the same mistake gets specified twice.

Four ways it goes wrong

The spec is written after the code

An agent produces a working branch in twenty minutes, and the document gets backfilled to match. Now the spec is a transcript, not a decision — it cannot be disagreed with, because the thing it describes already exists.

Nobody has to approve anything

A spec everyone can edit and no one has to sign is a wiki page. The moment it costs nothing to change an agreed decision, the agreement stops meaning anything — and the person who relied on it finds out in review.

The plan never touches the code

Implementation plans written from imagination describe a codebase that does not exist: functions that were renamed, a module that was deleted, a constraint nobody remembered. Read the code first, then write the plan.

Specs live where the work does not

The requirements in one tool, the tickets in another, the prompt that produced the code in someone’s chat history. Three sources of truth is zero sources of truth.

What agents change, and what they don't

Give an agent write access to your specs and two things happen. The good one: drafts stop being the bottleneck, because a first pass at requirements takes a minute instead of an afternoon. The bad one: volume. Nobody reads 1,400 words of generated implementation plan carefully, and a spec nobody reads carefully is worse than no spec — it launders a decision nobody made.

So the constraints matter more than the capability. Enforce length limits on the documents. Reject paragraph-long bullets. Make the agent cite the code it is talking about. And keep approval strictly human — not permission-gated, but absent from the tool surface entirely, so there is no configuration mistake that lets a machine sign off its own work.

Running it alone

Most writing about this assumes a team, which misses the half of the value that matters most to one person working with agents: durable memory. A model has no recollection of yesterday's reasoning. An approved spec with code refs pinned to commits is exactly the context it needs to pick the work back up — and it is what stops you re-litigating a decision with your own agent next week.

Approving your own spec is not theatre. It is the moment you stop and read what you asked for before something builds it, and the version binding still catches the case where you changed the plan mid-flight and forgot. Bugs and chores skip all of it — they are tasks with no documents and no gates, because ceremony belongs only where being wrong is expensive.

The shape scales without being redesigned. When the second and third engineer arrive, the specs they need in order to be useful already exist; the approver simply stops being you.

How RelayWork implements it

Two documents, twelve stages, two approval gates, and code refs pinned to a commit. Approvals are bound to a version and die when the document changes. Draft pull requests seed the spec but never advance a gate. Claude connects over MCP with eleven tools and no way to approve anything.

acme.relaywork.app/product/specs/AC-24
A spec in RelayWork: approved requirements at version 3, an implementation document in draft at version 4, and the stage ladder showing stage 4 of 12.
Requirements approved at v3; the implementation document still in draft at v4. The ladder shows stage 4 of 12.

The mechanics are on the features page, and the twelve stages are listed stage by stage.

Further reading

GitHub Spec Kit

GitHub’s open-source toolkit for spec-driven development: a constitution, then specify, plan, tasks, implement. The closest thing to a reference implementation of the workflow as a CLI.

Kiro

AWS’s spec-driven IDE. Requirements, design and tasks as files beside your code, generated and refined with the agent. Popularised the three-document shape most tools now use.

Model Context Protocol

The open protocol that lets an agent read and write real systems instead of guessing. RelayWork’s server speaks it, which is how Claude writes into a gated spec rather than into a chat log.

MCP specification and SDKs

The specification itself, plus the reference servers and SDKs. Worth reading if you are deciding what your own agents should be allowed to touch.

Run it on your next feature

Free while in beta. Create a workspace, connect Claude, and put one requirements document through a real gate.

Create your workspace