Skip to content
Workflow · 9 min

Spec-driven development, without the ceremony

Use an approved description of behavior to guide implementation, testing, and change—not to predict every line of code.

The contract comes before the implementation

A useful specification defines the observable contract: who can initiate a flow, what inputs are valid, how decisions branch, what data changes, which failures are expected, and how success is verified. It should be detailed enough for two implementers to build compatible behavior without prescribing every internal abstraction.

This sequence exposes product ambiguity while changes are still cheap. It also gives design, engineering, and QA one artifact to challenge before separate interpretations harden into code, mockups, and test plans.

A six-step operating loop

The workflow works best as a loop rather than a one-time handoff. Each step produces an artifact or decision that the next step can inspect.

  • Frame the outcome: state the user problem, scope, non-goals, and measurable result.
  • Model the behavior: capture actors, flows, branches, data, permissions, and failure states.
  • Review the decisions: resolve contradictions and publish an approved revision.
  • Implement from bounded context: give each person or coding agent the relevant entities and acceptance tests.
  • Verify the contract: test observable behavior, including negative paths and permission boundaries.
  • Reconcile discoveries: propose specification changes when implementation reveals a missing or incorrect assumption.

How coding agents fit

A coding agent needs more than a ticket title, but less than an unfiltered workspace dump. Give it the goal, the affected flow, related data models and roles, acceptance tests, and repository-specific instructions. Keep unrelated product context out of the prompt so the task boundary stays legible.

If the agent discovers a conflict, it should surface the conflict instead of silently choosing new product behavior. Treat a proposed spec edit and a code change as separate decisions, even when the same agent drafts both.

Where teams usually go wrong

The first failure mode is writing a giant document before learning anything. Prefer a thin, complete slice of behavior over exhaustive background. The second is treating approval as a status label without naming who decided. The third is allowing tickets to become an unofficial fork of the product intent.

Another common mistake is freezing the specification after development starts. Implementation is a source of evidence. When it reveals an edge case, the team should either confirm the existing contract or approve a revision—then keep code, tests, and the published intent aligned.

Choosing the right level of detail

Increase detail where mistakes are expensive: access control, financial calculations, state transitions, integrations, data deletion, and irreversible actions. Keep routine presentation details lighter unless they are accessibility or brand requirements.

A good test is whether the specification helps a reviewer find a wrong assumption. If more prose makes that harder, replace the prose with a table, flow, typed model, or explicit acceptance case.

Review checklist

  • Is the desired outcome clear before solution detail begins?
  • Are decision branches and failure states explicit?
  • Does every implementation task point to relevant acceptance cases?
  • Will an agent stop and surface a product conflict instead of inventing behavior?
  • Does the team reconcile discoveries into a reviewed revision?

Put the idea into a spec your team can use

Start with one feature. Structure the decisions, review the AI proposals, and publish a version your team and coding agents can query.

Start free