spec-writing
Specification Writing Skill
Overview
Transform gathered requirements and codebase context into a comprehensive, actionable specification document. The spec is the contract between planning and implementation.
Core principle: Synthesize context into actionable spec. No user interaction needed during writing.
When to Use
Always:
- After requirements gathering is complete
- When you have codebase context available
- Before implementation planning begins
Exceptions:
- Simple changes that don't need formal specs
- Exploratory work without clear requirements
The Iron Law
NO IMPLEMENTATION WITHOUT A COMPLETE SPEC FIRST
A spec must have ALL required sections before implementation can begin.
Inputs Required
Before writing a spec, ensure you have:
- Requirements document - What needs to be built
- Project context - Tech stack, structure, patterns
- Files to modify - Identified from codebase analysis
- Files to reference - Patterns to follow
Workflow
Phase 1: Load All Context
Read all input files to understand the full picture:
# Read requirements
cat .claude/context/requirements/[task-name].md
# Read project context
cat .claude/context/product.md
cat .claude/context/tech-stack.md
# Read any analysis results
cat .claude/context/analysis/[task-name].json 2>/dev/null
Extract from these files:
- From requirements: Task description, workflow type, acceptance criteria
- From project context: Services, tech stacks, patterns
- From analysis: Files to modify, files to reference, patterns
Phase 2: Analyze Context
Before writing, think about:
Implementation Strategy:
- What's the optimal order of implementation?
- Which area should be built first?
- What are the dependencies between components?
Risk Assessment:
- What could go wrong?
- What edge cases exist?
- Any security considerations?
Pattern Synthesis:
- What patterns from reference files apply?
- What utilities can be reused?
- What's the code style?
Phase 3: Write Specification Document
Create the spec with ALL required sections:
# Specification: [Task Name]
## Overview
[One paragraph: What is being built and why]
## Workflow Type
**Type**: [feature|refactor|investigation|migration|simple]
**Rationale**: [Why this workflow type fits the task]
## Task Scope
### Areas Involved
- **[area-name]** (primary) - [role from context analysis]
- **[area-name]** (integration) - [role from context analysis]
### This Task Will:
- [ ] [Specific change 1]
- [ ] [Specific change 2]
- [ ] [Specific change 3]
### Out of Scope:
- [What this task does NOT include]
## Technical Context
### Tech Stack
- Language: [from project context]
- Framework: [from project context]
- Key directories: [from project context]
### How to Run
```bash
[commands from project context]
```
Files to Modify
| File | Purpose | What to Change |
|---|---|---|
[path] |
[purpose] | [specific change needed] |
Files to Reference
These files show patterns to follow:
| File | Pattern to Copy |
|---|---|
[path] |
[what pattern this demonstrates] |
Patterns to Follow
[Pattern Name]
From [reference file path]:
[code snippet or description]
Key Points:
- [What to notice about this pattern]
- [What to replicate]
Requirements
Functional Requirements
-
[Requirement Name]
- Description: [What it does]
- Acceptance: [How to verify]
-
[Requirement Name]
- Description: [What it does]
- Acceptance: [How to verify]
Edge Cases
- [Edge Case] - [How to handle it]
- [Edge Case] - [How to handle it]
Implementation Notes
DO
- Follow the pattern in
[file]for [thing] - Reuse
[utility/component]for [purpose] - [Specific guidance based on context]
DON'T
- Create new [thing] when [existing thing] works
- [Anti-pattern to avoid based on context]
Development Environment
Start Services
[commands from project context]
Required Environment Variables
VAR_NAME: [description]
Success Criteria
The task is complete when:
- [From requirements acceptance_criteria]
- [From requirements acceptance_criteria]
- No console errors
- Existing tests still pass
- New functionality verified
QA Acceptance Criteria
CRITICAL: These criteria must be verified by QA before sign-off.
Unit Tests
| Test | File | What to Verify |
|---|---|---|
| [Test Name] | [path/to/test] |
[What this test should verify] |
Integration Tests
| Test | Areas | What to Verify |
|---|---|---|
| [Test Name] | [area-a + area-b] | [API contract, data flow] |
End-to-End Tests
| Flow | Steps | Expected Outcome |
|---|---|---|
| [User Flow] | 1. [Step] 2. [Step] | [Expected result] |
QA Sign-off Requirements
- All unit tests pass
- All integration tests pass
- All E2E tests pass
- No regressions in existing functionality
- Code follows established patterns
- No security vulnerabilities introduced
### Phase 4: Verify Spec
After creating, verify the spec has all required sections:
```bash
# Check required sections exist
grep -E "^##? Overview" spec.md && echo "Overview present"
grep -E "^##? Workflow Type" spec.md && echo "Workflow Type present"
grep -E "^##? Task Scope" spec.md && echo "Task Scope present"
grep -E "^##? Success Criteria" spec.md && echo "Success Criteria present"
grep -E "^##? QA Acceptance" spec.md && echo "QA Criteria present"
# Check file length (should be substantial)
wc -l spec.md
If any section is missing, add it immediately.
Phase 5: Save and Signal Completion
Save the spec to the appropriate location:
# Save to context directory
cat > .claude/context/specs/[task-name]-spec.md << 'EOF'
[Spec content]
EOF
Verification Checklist
Before completing spec writing:
- Overview section present and clear
- Workflow type determined with rationale
- Task scope defined with in/out of scope
- Files to modify listed with specific changes
- Files to reference listed with patterns
- Functional requirements documented
- Edge cases identified
- Implementation notes included
- Success criteria defined
- QA acceptance criteria complete
Common Mistakes
Generic Content
Why it's wrong: "Implement the feature" is not actionable.
Do this instead: Be specific to this project and task. Use exact file paths.
Missing Tables
Why it's wrong: Empty tables provide no guidance.
Do this instead: Fill in tables with data from context analysis.
No QA Criteria
Why it's wrong: QA agent needs clear criteria to validate.
Do this instead: Include unit, integration, and E2E test expectations.
Integration with Other Skills
This skill works well with:
- spec-gathering: Provides the requirements input
- spec-critique: Reviews the spec for issues
- complexity-assessment: Determines spec complexity for planning
Memory Protocol
Before starting:
Read .claude/context/memory/learnings.md
After completing:
- New pattern ->
.claude/context/memory/learnings.md - Issue found ->
.claude/context/memory/issues.md - Decision made ->
.claude/context/memory/decisions.md
ASSUME INTERRUPTION: If it's not in memory, it didn't happen.