write-a-prd
Purpose
Structured interview -> PRD specifying what to build from the user's perspective. Pipeline: plan-feature -> write-a-prd -> review-prd -> glossary -> (design-ux) -> design-feature -> review-plan.
Starting
Before asking anything:
- Look for a scope document in
./plans/(*-scope.md). If found, read it fully — problem statement, stakeholders, feasibility, and scope are your starting context. - Explore the codebase for the product perspective — existing user flows, UI patterns, terminology, conventions.
- Search for existing documentation — user guides, help docs, product specs, onboarding flows.
If scope doc exists, ground your first question in it: "I've read the scope for [feature]. The problem is [X], stakeholders are [Y], scope includes [Z]. First question: [question about target users]."
No scope doc? Start from the user's description, beginning with problem/motivation.
Interview Protocol
Product discovery interview. Focus on user needs, behaviors, and success criteria — not technical implementation.
One question per turn
Use AskUserQuestion for every question. Never plain text. Each call: one question with question, header (max 12 chars), options (2-4, each with label + description), recommended option first with "(Recommended)" suffix. Set multiSelect: true when choices aren't exclusive. Use preview for code/mockup comparisons. User can always pick "Other."
When the user can't decide
State your recommendation, record as assumption in Risks & Open Questions, move on.
Code-first (product lens)
Explore the codebase before asking questions it could answer. Look through a product lens: "The app currently shows [behavior] when users [action]. Should we extend that or introduce something new?"
Completeness tracking
Track whether you've resolved decisions across these domains:
- Problem & motivation — Confirm/deepen from scope doc. User pain point in their words? What they do today instead?
- Target users & personas — Who specifically? Distinct user types? Technical sophistication? Usage frequency?
- User stories & JTBD — Key user stories (As a [user], I want [action], so that [outcome])? What job is the user hiring this feature to do?
- Functional requirements — What must it do? Walk each user story: what does the user see, click, receive at each step?
- Non-functional requirements — Performance, accessibility, device/browser support, data retention, compliance. Only what's relevant.
- Success metrics & KPIs — How will we know it's successful? What to measure? What does "good" look like at 30/60/90 days?
- Scope definition — Detailed in/out/future. For each "out": why deferred. For each "future": trigger for inclusion.
- Dependencies & constraints (business) — Pricing decisions, partner agreements, legal, timing, content needs.
- Risks & open questions — Product risks (adoption, competitive response, cannibalization), open questions needing answers before/during implementation.
Exhaust every branch. Domains are not checkboxes — each is a branch of the decision tree. Explore depth-first: when an answer raises sub-questions, resolve them before moving to the next domain. Keep asking until every sub-question within every domain is fully resolved. If the codebase answers a question, mark it resolved and move on — only ask the user what the codebase can't answer. No limit on number of questions. Questions stay concise; depth comes from more turns, not longer ones.
Scope
No technical implementation (schemas, APIs, architecture, build ordering, technology selection, operational concerns). Redirect: "Captured for design phase — let's stay on what users need."
Wrapping up
When every domain is fully resolved with no remaining sub-questions: "I think we have enough to draft the PRD."
Match naming prefix from scope doc if it exists (e.g., team-billing-scope.md -> team-billing-prd.md). Otherwise derive kebab-case name and confirm.
Save to ./plans/<feature-name>-prd.md. After writing: "Review this and tell me what to change. When satisfied, run /review-prd."
Update directly on change requests. No re-interview for minor adjustments. If a change conflicts with an earlier decision, flag and confirm before updating.
PRD Template
Include relevant sections. Omit any that would say "N/A."
# PRD: <Feature Name>
> Product requirements for [feature] (scope: [<feature-name>-scope.md])
> Generated from write-a-prd interview on <date>
## Problem Statement
## Target Users
### <Persona Name>
- **Who**:
- **Current behavior**:
- **Key need**:
- **Usage frequency**:
## User Stories
### <Story Name>
- **As a** <persona>, **I want** <action>, **so that** <outcome>
- **Acceptance criteria**:
- [ ] <criterion>
## Functional Requirements
### <Requirement Area>
- FR-1: <requirement>
## Non-Functional Requirements
- NFR-1: <requirement>
## Success Metrics
| Metric | Target | Measurement | Timeframe |
|--------|--------|-------------|-----------|
| | | | |
## Scope
**In scope (v1):**
- ...
**Out of scope:**
- <thing> — <why>
**Future (conditional):**
- <thing> — <trigger>
## Dependencies & Constraints
- **Dependency**: <statement>. *Status: resolved/pending*
- **Constraint**: <statement>. *Impact: <what this limits>*
## Risks & Open Questions
- **Risk**: <statement>. *Mitigation: <approach>*
- **Open question**: <question>. *Needed by: <when>. Impact if unresolved: <consequence>*
## Pipeline Status
| Step | Date | Verdict | Key Findings |
|------|------|---------|--------------|
| plan-feature | <date or "skipped"> | <verdict> | <summary> |
| write-a-prd | <date> | -- | <summary> |
More from michaelmerrill/skills
design
Design specification interview → standalone spec.md (flows, screens, states, components, responsive, a11y). Triggers: 'design this,' 'what screens,' 'how should users interact,' post-product. Not for: technical design (engineering), requirements (product). Skip for API-only, CLI, backend, or infra features.
8plan
Decompose technical design into agent-sized implementation issues → numbered markdown files + standalone plan.md. Triggers: 'plan this,' 'break into issues,' 'create tasks,' 'ready to implement,' post-engineering. Not for: designs without file paths/phases (run engineering first).
7design-ux
MUST USE when a user wants to design user flows, interaction patterns, or screen-level UX for a feature that has defined requirements. This is the UX design step in the planning pipeline (write-a-prd → review-prd → glossary → design-ux → design-feature → review-plan). Typical signals — "design the UX," "how should users interact with this," "what should the UI look like," "design the flows," "design-ux," "what screens do we need," or following up after a review-prd or glossary session. Also applies when the user has a PRD and wants to figure out the user experience before technical design. Conducts a structured interview to produce a UX specification — user flows, screen inventory, component mapping, interaction specs, and accessibility requirements. Do NOT use for technical design (use design-feature), writing requirements (use write-a-prd), reviewing plans (use review-plan), scoping/feasibility (use plan-feature), or when the feature has no user-facing UI (API-only, backend, CLI tools).
6plan-feature
Scoping interview for new features -> scope doc with go/no-go. Triggers: user wants to add/build/implement any new capability. First pipeline step. Not for: bugs, PRDs (write-a-prd), design (design-feature), executing existing specs.
6define
Product requirements → living doc Requirements section + quality gate + domain glossary. Stateful: detects existing sections and resumes where needed. Triggers: 'define this,' 'write a PRD,' 'define requirements,' 'spec this out,' post-explore. Not for: scoping (explore), UX (design), technical design (architect).
5explore
Scope and assess new feature ideas → living doc with go/no-go. Elaborates vague ideas into clear concepts. First pipeline step. Triggers: user wants to add/build/implement any new capability. Not for: bugs (triage-issue), requirements (define), design (design/architect).
5