feature-spec · git:20260303.f77c189 · 2026-03-03 · sha256 32d1416f736f7c82

feature-spec git:20260303.f77c189A

Immutable. This exact content never changes and is served at /api/v1/blob/32d1416f736f7c82.

---
name: feature-spec
description: >
  Write a feature spec for engineering handoff. Use when the user says "write a spec",
  "feature spec", "one-pager for eng", "spec this out", "write up this feature",
  "I need to hand this off to engineering", or wants a concise technical brief
  for a feature - even if they don't say "feature spec".
---

## Overview

A feature spec is not a PRD. A PRD justifies building something. A spec tells engineers exactly what to build. It is a contract: ambiguity in the spec becomes a bug in production.

Keep it to one page. If it needs more than one page, the feature is too large and should be split.

## Workflow

### Step 1: Write the header
```
# Feature Spec: [Feature Name]
**PM:** [your name]
**Eng Lead:** [engineer name]
**Status:** Draft | In Review | Approved
**Target Sprint:** [sprint or date]
**Related PRD / Ticket:** [link]
```

### Step 2: Write the Problem (2-3 sentences)
What is broken or missing? Who is affected? What is the measurable cost?

### Step 3: Write the Proposed Solution (3-5 sentences)
What are we building? How does it solve the problem? What does it NOT do?

### Step 4: Write Functional Requirements
Number each requirement. Be exhaustive. Engineers should not need to ask "what happens when X?" if X is a realistic scenario.

Structure:
- Happy path first
- Error states second
- Edge cases third

### Step 5: Write Non-Functional Requirements
- Performance targets (load time, response time)
- Accessibility requirements
- Browser / device support
- Security or compliance constraints

Only include what's relevant. Don't pad.

### Step 6: Define Out of Scope
Explicit list of things this spec does NOT cover. This prevents engineers from over-building or making assumptions about future phases.

### Step 7: Add Open Questions
Format:
```
Q: [question]
Owner: [name]
Due: [date]
```

Unresolved questions block engineering. Assign owners and deadlines.

### Step 8: Link to assets
Mockups, Figma files, API specs, data models. A spec without visuals is incomplete for any UI work.

## Anti-Patterns

**1. Specs that describe the UI instead of the behavior**
Bad: "There is a blue button in the top right corner."
Good: "Users can trigger X from the [feature area]. Exact placement per Figma [link]."

**2. Missing error states**
Bad: "User submits the form and sees a confirmation."
Good: Cover success, validation error, server error, empty state, and loading state.

**3. Assumptions instead of requirements**
Bad: "This should work on mobile." (assumes engineer knows what "work" means)
Good: "Feature is fully functional on iOS Safari and Chrome Android at 375px width."

**4. Spec approved with open questions unresolved**
Bad: Moving to engineering with "TBD" items.
Good: All open questions resolved or explicitly deferred to a named owner with a date before approval.

## Quality Checklist

- [ ] Header has PM, eng lead, status, target sprint
- [ ] Problem is 2-3 sentences, outcome-focused
- [ ] Requirements cover happy path, error states, and edge cases
- [ ] Out of scope section exists
- [ ] Open questions have owners and due dates
- [ ] Figma / mockup links included for any UI work
- [ ] Spec fits on one page (split if it doesn't)