Scope drift
The assistant adds adjacent refactors, new fields, or product behavior that nobody reviewed.
spec.md beforeSpec Coding turns a vague AI coding request into a short, reviewable packet: context, scope, acceptance criteria, allowed changes, and evidence before the first generated diff.
Most failed AI-assisted changes start with a prompt that hides scope, edge cases, ownership, and proof. Spec Coding makes those decisions visible before the agent edits files.
The assistant adds adjacent refactors, new fields, or product behavior that nobody reviewed.
The PR looks plausible, but reviewers cannot map the diff to clear user-visible behavior.
Tests, screenshots, logs, rollout signals, and rollback paths are invented after the code lands.
“Build coupon codes for checkout. Make invalid codes work nicely.”
Spec Coding is not a full product process and not a heavy formal spec system. It is the small working file between a vague chat prompt and a production diff.
| Method | Primary artifact | Best for |
|---|---|---|
| Vibe coding | chat only | Exploration, throwaway scripts, and prototypes where being wrong is cheap. |
| spec-coding | feature.spec.md | Day-to-day feature work where alignment matters but a 30-page PRD is too much. |
| SDD / formal spec | spec.md + design.md + tasks.md | Regulated systems, multi-team delivery, and changes where wrong code is expensive. |
| Working Backwards | PR / FAQ | Product framing before implementation. Spec Coding handles one feature below it. |
| Shape Up | pitch + appetite | Cycle planning and shaping. The spec is the implementation agreement inside the shaped work. |
People search for this practice as spec-first, spec as code, code spec, spec code, or coding spec. On this site, all of those point to the same practical artifact: a short spec.md kept close to the code and reviewed before implementation.
A single spec.md is enough for small work. Riskier changes need a tiny folder that separates intent, behavior, design, tasks, and evidence so reviewers can challenge the right layer.
proposal.md why this change matters, who is affected spec.md requirements, scenarios, non-goals design.md decisions, trade-offs, rollout path tasks.md implementation slices and allowed scope test-evidence.md proof required before merge
Use this path when the next step is a real change in a real repo. Each item points to a page, template, example, or generator you can use immediately.
Copy the starter spec, or generate the full packet with spec.md, tasks.md, acceptance criteria, and evidence checklist.
Pick the path that matches your current job. The site is organized around reusable artifacts, not passive reading.
Learn the lightweight habit: write the decisions that stop rework before code starts.
Copy repo-ready Markdown files for features, APIs, database changes, tasks, and evidence.
Compare vague requests with finished spec packets for checkout, APIs, migrations, and notifications.
Generate spec packets, Gherkin scenarios, API specs, database specs, and postmortem notes.
Use checklists and evidence requirements to decide whether a change is ready for implementation.
Give Claude Code, Cursor, Codex, or another agent a narrow source of truth before it writes code.
The useful version is small enough to write before momentum disappears, but specific enough to stop an agent from wandering.
Where this lives, which files already matter, and which existing patterns should be reused.
The user or system behavior that changes after the work ships.
Reviewable implementation steps, named files, dependencies, and test commands.
The adjacent refactors, nice-to-haves, and tempting side quests the agent must not start.
Observable criteria plus the tests, logs, screenshots, or rollout signals needed before merge.
## Context Existing checkout totals are computed in billing/totals.ts. ## Goal Apply one valid coupon before payment is created. ## Plan 1. Validate coupon through a small API endpoint. 2. Update checkout summary after validation. 3. Keep draft order state idempotent. ## Out of scope - coupon admin UI - multi-coupon stacking - unrelated totals refactor ## Acceptance - expired coupons show inline error - payment amount uses discounted total - refresh keeps the selected coupon ## Evidence - unit test for validation rules - integration test for checkout total - rollback flag documented
Templates are presented like repo files because that is how teams actually use them: open, copy, edit, review.
| File | When to use | Lines | Updated | Action |
|---|---|---|---|---|
feature.spec.md |
Standard feature work: new endpoint, new screen, or new flow. | 42 | 2026-05-15 | open |
api.spec.md |
API contracts, request/response examples, errors, and compatibility rules. | 48 | 2026-05-15 | open |
database.spec.md |
Schema changes, indexes, constraints, backfills, and rollback planning. | 39 | 2026-05-15 | open |
spec.md |
Goal, non-goals, acceptance criteria, open questions, and evidence required. | 36 | 2026-05-11 | open |
design.md |
Architecture choice, interfaces, rejected alternatives, rollout, and rollback. | 52 | 2026-05-11 | open |
tasks.md |
Reviewable implementation slices with allowed files and test commands. | 44 | 2026-05-11 | open |
evidence.md |
Tests, screenshots, logs, metrics, manual checks, and release stop signals. | 31 | 2026-05-11 | open |
Click any “Copy template” button above to preview the content here.
The method is easiest to trust when you can see the before and after. This example turns a loose product request into scope, plan, acceptance, and evidence.
“Add coupon codes to checkout. Make sure invalid codes do not break payment.”
## Acceptance - expired code shows inline error - already-used code cannot be applied twice - payment amount uses the discounted total ## Evidence - coupon validation unit test - checkout total integration test - rollback flag documented
A few things you may be wondering.
The most expensive specs are the ones you skip. A short spec that catches one scope ambiguity before code review saves a week of rework. Start with the decisions that have historically caused you the most production pain: acceptance criteria, edge cases, and rollback plans.
Even more. Without specs, AI drifts: extra features, changed fields, non-stop rewrites. Specs are guardrails.
Yes — small teams suffer most from lost context and verbal agreements. Specs make you productive even after context breaks.
Update the spec. That's the point — specs are living documents, not contracts carved in stone. Version them in git alongside your code. The spec always reflects current truth.
A PRD describes what the product should do from a business perspective. A spec describes what the code must do from an engineering perspective — with acceptance criteria, edge cases, and testable contracts. They complement each other.
They overlap. Spec-first describes the habit of writing behavior before code. Spec as code keeps that spec in the repository. Code spec, spec code, and coding spec are common search phrases for the same small artifact: a reviewable spec.md that guides implementation.
Start with the pieces that make AI-assisted delivery more controllable: first principles, handoff packets, and pre-code review gates.
The complete introduction to spec-first: what it means, how it differs from standard agile delivery, and the three questions every spec must answer before coding starts.
A copy-ready packet for giving AI coding tools a bounded task, acceptance criteria, file ownership, tests, and review evidence before generation starts.
Twelve practical checks for scope, non-goals, acceptance criteria, edge cases, allowed files, test evidence, and rollout signals before implementation starts.
Generate a packet, copy it into your issue or pull request, then let the agent code against clear scope, acceptance criteria, and evidence.