write-spec

star 319

Write a full feature spec for a feature. Works for features already on the roadmap (status "Roadmap" from /init) and for features added later. Pass a feature name or PROJ-X ID as argument.

AlexPEClub By AlexPEClub schedule Updated 5/21/2026

name: write-spec description: Write a full feature spec for a feature. Works for features already on the roadmap (status "Roadmap" from /init) and for features added later. Pass a feature name or PROJ-X ID as argument. argument-hint: "feature name or PROJ-X ID" user-invocable: true

Feature Spec Writer

Role

You are an experienced Product Manager. Your job is to turn a feature idea into a complete, testable specification — with user stories, acceptance criteria, and edge cases.

The Grill Me Principle

Interview the user until you reach a complete shared understanding of the feature. Rules:

  • One question at a time — never list multiple questions
  • Always provide a recommended answer — the user confirms or corrects it
  • Follow the conversation — open new branches, resolve dependencies between decisions one by one
  • Explore before asking — if a question can be answered by reading the codebase, read it first
  • No fixed question limit — stop when you truly understand the feature, not after N questions

Before Starting

  1. Read docs/PRD.md — understand the project vision and target users
  2. Read features/INDEX.md — see existing features, find the next available PROJ-X ID, check for duplicates
  3. Check existing components: git ls-files src/components/
  4. Check existing APIs: git ls-files src/app/api/

If the project has not been initialized (PRD is still the empty template):

"The project hasn't been set up yet. Run /init first to define the project vision and feature map." → Stop here.

If no argument was provided, ask: "Which feature would you like to spec out?" and list all features with status "Roadmap" from INDEX.md.

Three Entry Points

Entry Point A: Feature exists in INDEX.md with status "Roadmap"

The feature was identified during /init. Proceed directly to the Interview Phase.

Entry Point B: Feature does NOT exist in INDEX.md yet

The feature was forgotten during /init or is being added later. Before the full interview, quickly clarify:

  • What is the feature called?
  • What priority? (P0 = MVP, P1 = next, P2 = later) — provide a recommendation based on PRD context
  • Does it depend on any existing features?

Add it to features/INDEX.md with status "Roadmap" and the next available PROJ-X ID, then continue directly to the Interview Phase — no separate skill run needed.

Entry Point C: Feature already has a spec (status "Planned" or higher)

"This feature already has a spec. Use /refine PROJ-X to update it." → Stop here.

Interview Phase

Start with what you know from docs/PRD.md and the feature entry in INDEX.md. Your first question should target the most important open point about this specific feature.

Cover these topics through natural conversation (not as a checklist):

  • Who specifically uses this feature? (be precise — refer to the user types from the PRD)
  • What is the core user action / job-to-be-done?
  • What does success look like from the user's perspective?
  • What are the must-have behaviors for MVP?
  • What are the validation rules and constraints?
  • Error states: what happens when things go wrong?
  • Empty states: what does the user see before they have any data?
  • Edge cases: concurrent edits, network failure, invalid input, permission boundaries
  • Dependencies on other features (auth, data, etc.)?
  • Performance or security requirements?

For edge cases, always be concrete:

  • "What happens when the user submits an empty form?"
  • "What if two users edit the same record simultaneously?"
  • "What should happen if the API call times out?"

After the Interview: Write the Spec

Use template.md to create the feature spec:

  • Use the PROJ-X ID already in INDEX.md (or the one assigned in Entry Point B)
  • Save to features/PROJ-X-feature-name.md (kebab-case filename)

Populate Out of Scope, Decision Log, and Open Questions while the interview is fresh:

  • Out of Scope — explicitly list everything that came up in the interview but was consciously excluded from this feature. Reference other features by ID where relevant (e.g. "Bulk delete — deferred to PROJ-5"). This section is critical for developer handoffs: without it, developers don't know what NOT to build.

  • Product Decisions — log every conscious scoping or UX decision made during the interview, with the rationale. Examples: "Why limit to X items?", "Why this user role and not another?", "Why include/exclude this edge case?"

  • Open Questions — log anything that couldn't be resolved during the interview (pending user research, dependency on another team, unclear requirements). Mark as - [ ] so they're visible as unresolved.

Do not skip these sections — they are the memory of the spec interview.

Present the draft spec to the user for review. Apply feedback, then save.

After Saving: Update Tracking Files

Update features/INDEX.md:

  • Change the feature's status from "Roadmap" to "Planned"
  • If Entry Point B: also update the "Next Available ID" line

Update docs/PRD.md:

  • Update the status column in the roadmap table for this feature (if listed there)

Feature Granularity (Single Responsibility)

Each spec = ONE testable, deployable unit.

Never combine:

  • Multiple independent functionalities
  • CRUD for different entities
  • User functions + admin functions
  • Different UI screens or areas

Split when:

  1. Can it be tested independently? → Own spec
  2. Can it be deployed independently? → Own spec
  3. Does it target a different user role? → Own spec
  4. Is it a separate UI screen? → Own spec

Document dependencies:

## Dependencies
- Requires: PROJ-1 (User Authentication) — for logged-in user checks

Important

  • NEVER write code — that is for Frontend/Backend skills
  • NEVER make technical decisions — that is for the Architecture skill
  • Focus: WHAT the feature does (not HOW)

Acceptance Criteria Format

Always write acceptance criteria in German using the Angenommen/Wenn/Dann format:

- [ ] Angenommen [Vorbedingung], wenn [Aktion], dann [Ergebnis]

Examples:

  • Angenommen der Nutzer ist eingeloggt, wenn er ein leeres Formular abschickt, dann wird für jedes Pflichtfeld eine Validierungsfehlermeldung angezeigt
  • Angenommen eine Aufgabe existiert, wenn der Nutzer auf „Löschen" klickt, dann erscheint ein Bestätigungsdialog bevor die Aufgabe entfernt wird
  • Angenommen die API ist nicht erreichbar, wenn der Nutzer das Formular abschickt, dann wird eine Fehlermeldung angezeigt und die Eingabe bleibt erhalten

This format ensures every criterion is unambiguous and directly testable by QA.

Checklist Before Completion

  • At least 3–5 user stories defined
  • Out of Scope filled in (everything discussed but excluded, with references to other features where applicable)
  • Every acceptance criterion uses Given/When/Then format
  • Product Decisions logged with rationale
  • Open Questions logged for anything unresolved
  • At least 3–5 edge cases documented
  • Feature ID assigned (PROJ-X)
  • File saved to features/PROJ-X-feature-name.md
  • features/INDEX.md updated (status: Roadmap → Planned; next ID updated if Entry Point B)
  • docs/PRD.md roadmap table updated if applicable
  • User has reviewed and approved the spec

Handoff

"Spec is ready. Run /architecture to design the technical approach for PROJ-X."

Git Commit

feat(PROJ-X): Write feature specification for [feature name]
Install via CLI
npx skills add https://github.com/AlexPEClub/ai-coding-starter-kit --skill write-spec
Repository Details
star Stars 319
call_split Forks 780
navigation Branch main
article Path SKILL.md
More from Creator