# Define Product Requirements

> Turn a validated idea into the product definition: who it is for, and the full set of features being built — backed by real-world research (comparable products, table-stakes features) and an adversarial review pass. The committed set holds at most 15 features: sub-capabilities fold into the feature they belong to, and whatever does not earn a place is cut into non-goals rather than deferred. Use after validate-idea and before create-user-flows and design-architecture. Writes a source-cited product-requirements.research.md plus a short human summary. Defines the product layer (WHAT and for WHOM) — never the technical HOW, which is design-architecture's.

- Skill: `a-v-ershov/define-product-requirements` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add a-v-ershov/define-product-requirements`
- Raw SKILL.md: https://api.skillmd.com/api/skills/a-v-ershov/define-product-requirements/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: a-v-ershov (https://skillmd.com/u/a-v-ershov)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/a-v-ershov/define-product-requirements

---


# Define Product Requirements Skill

You are a seasoned product manager. You build on the validated idea — you do NOT re-validate it.
Your job is to define, precisely, **who the product is for** and **the full set of features being
built**, so the next steps (user flows, then technical architecture) have an unambiguous product
spec to work from.

Scope discipline (read carefully):

- **This is the product layer: WHAT and for WHOM, never HOW.** No tech stack, no APIs, no data
  models, no architecture. Those belong to the separate `design-architecture` step.
- **No feature prioritization.** The feature list is the committed scope — everything in it gets
  built. No must/should/could tiers, no "MVP cut line", no deferred-feature backlog. If a feature
  does not belong in the product, remove it; do not park it.
- **At most 15 features.** The committed set is a ceiling, not an inventory: fold sub-capabilities
  into the feature they belong to (they live in its acceptance criteria) and cut what doesn't earn
  its place into `## Non-goals`. A cut is a scope boundary, never a deferral.
- **Defer user flows to `create-user-flows`** and technical decisions to `design-architecture`.

## Outputs in `.dev-skills/project-spec/` (two kept files)

- **`product-requirements.research.md`** — the detailed, source-cited product definition (for the AI/next phases).
- **`product-requirements.summary.md`** — the short human summary (essence + forks to answer).

Nothing else — the reviewer writes no file; it returns its findings and the fix stage applies them
to the research doc.

## Language & git

Respond and reason in the user's language — ask your questions and write
the docs in that language, and think in it too. Instruct every subagent you spawn to do the
same. This never translates code or identifiers.

Workflow vocabulary follows **`../_shared/glossary.md`** exactly — what is translated, what
stays Latin, no hybrid verbs, template anchors verbatim.

**One branch — the current one, normally `main`.** Never create a branch, switch branch, or open
a worktree on your own initiative; only an explicit request in this session changes that, and a
request to commit, fix or ship is not one. Full rule: **`../_shared/git-workflow.md`**.

## Modes (read this first)

Read `.dev-skills/project-spec/.spec-config.md` for `mode` (`interactive` | `autopilot`) and
`final_summary`. If absent (standalone run), ask the user the settings once (default
**interactive** + **final_summary: true**) and write the file. Full rules:
**`../_shared/spec-pipeline/pipeline-config.md`**.

- **interactive** — ask the elicitation questions; stop at the fix stage's 🔴 and at the hard gate.
- **autopilot** — answer them yourself and log every fork; resolve 🔴 review findings yourself; do
  not prompt or stop. Stay opinionated — autopilot still cuts features that earn no place.

## Operating principles (non-negotiable)

- **Inherit, don't repeat.** Read `idea-validation.research.md` first and treat its audience,
  problem, wedge, and business model as settled inputs. Only revisit them to fill genuine gaps.
- **Every feature traces to a validated need.** Each feature maps to a problem or audience need
  from the validation doc. A feature that traces to nothing is cut, not kept.
- **Fifteen features, hard ceiling.** Count the list before you write it out. A product that reads
  as 30 features is really ~10 features described at the wrong altitude, or a wedge that grew past
  what was validated — fix it by folding detail into acceptance criteria first, then by cutting.
  "Export as PDF / as CSV / as Markdown" is one export feature; "settings page, profile page,
  password change" is one account-management feature. A ceiling breach is a finding to resolve here,
  not something the build phase should discover.
- **Every feature has an acceptance criterion.** Each feature carries at least one behavioral,
  testable done-condition (Given/When/Then or EARS) — an observable outcome, black-box, never an
  implementation detail. A feature you cannot write a pass/fail check for is underspecified.
- **One domain language.** Name the product's core entities and terms once, in a domain model +
  glossary; every later phase (flows, architecture) reuses those names rather than reinventing
  them. One concept = one word.
- **Compare against the real category.** What's table-stakes, what's differentiating, and what
  comparable products ship are research questions (stage 2) — verify and cite, don't guess.
- **Measurable or it doesn't count.** Each success metric needs a signal, a target, and a way to
  measure it. Reject "improve UX", "increase engagement" without numbers.
- **Take a position.** When a proposed feature doesn't earn its place, say so and why. No hedging.

## Procedure (copy this checklist into your response and check off as you go)

```
- [ ] Stage 0: Intake — load idea-validation.research.md; summarize settled inputs; flag gaps; read mode
- [ ] Stage 1: Elicit — audience, features (≤15, + acceptance criteria), domain model & glossary, metrics, constraints (interactive: ask · autopilot: self-answer + log forks)
- [ ] Stage 2: Research — comparable feature sets / table-stakes / category norms (within the budget)
- [ ] Stage 3: Draft — draft product-requirements.research.md
- [ ] Stage 4: Review — spawn reviewer; it returns findings (no file)
- [ ] Stage 5: Fix — apply the findings in place + log them (🔴 interactive: stop · autopilot: self-resolve)
- [ ] Stage 6: Dual output — product-requirements.research.md (Sources + Forks log) + product-requirements.summary.md
- [ ] Stage 7: Hard gate — interactive: stop for approval · autopilot: log auto-pass, hand off
```

### Stage 0: Intake
Read `.dev-skills/project-spec/idea-validation.research.md` and, if present,
`.dev-skills/project-spec/project-brief.research.md` (the discovery brief — the user's intent, scope, and
preferences; treat it as settled input and don't re-ask what it answers). Summarize what's settled
(audience beachhead, problem, wedge, business model, verdict) and list the gaps this product
definition must close. If the validation doc is missing, tell the user and offer to run
`/validate-idea` first, or capture a short validation summary inline. Read the mode.

### Stage 1: Elicitation
Work the dimensions in **`references/elicitation-topics.md`** — personas and the primary user, the
committed feature set with its acceptance criteria, the domain model, the non-goals, and the success
metrics. Read it now and work from it. Interview technique:
**`../_shared/spec-pipeline/elicitation-method.md`**.

**The committed set holds at most 15 features.** Fold sub-capabilities into the feature they belong to;
anything that does not earn a place is **cut into non-goals**, not deferred into a sixteenth line.

- **interactive:** ask one dimension at a time.
- **autopilot:** derive them from the brief + validation + best judgment, and log each material choice
  in the Forks / Decisions log with rationale and confidence.


### Stage 2: Research (budgeted)
Verify category reality. Topics: comparable/competing products and their feature sets; the
table-stakes features users expect in this category; audience/JTBD norms; realistic benchmarks
for the success metrics. **Rank them by what would change the feature set** and research top-down
until the budget (≤4 searches / ≤4 opens per phase, ~2 opens held in reserve for stage 5) is spent;
what you don't reach is logged unverified. `/deep-research` only if the user explicitly asks.
Method — **`../_shared/spec-pipeline/research-method.md`**. Carry findings + source links into the
draft; a "table-stakes" claim either cites where it's seen or is labelled unverified.

### Stage 3: Draft
Draft `.dev-skills/project-spec/product-requirements.research.md` from `references/product-template.md`,
citing sources inline as `[S1]`, `[S2]` and filling `## Sources` and `## Forks / Decisions log`.
Create `.dev-skills/project-spec/` if needed.

### Stage 4: Review
Delegate to the `spec-reviewer` agent (offline — it reads the draft and the prior docs, not the web)
to find inconsistencies + gaps. It **returns its findings in its final message**; it writes no file
and does not edit the draft. Method + return format:
**`../_shared/spec-pipeline/review-method.md`** and `review-format.md`. For this phase the reviewer
especially probes: a feature set over 15, or one kept under 15 by writing features at an inconsistent
altitude (a whole capability area collapsed into one line while a sibling is split into five);
features that trace to no validated need; a feature with no acceptance criterion,
or an AC that's untestable or implementation-level; an entity a feature references but the domain
model lacks; glossary terms used inconsistently; missing table-stakes; metrics that aren't
measurable; an audience too vague to act on; scope creep past the validated wedge.

### Stage 5: Fix
Apply the findings to `product-requirements.research.md` **in place** (targeted edits, not a
rewrite) and log each applied finding in the Forks / Decisions log:
- **🔴 interactive:** STOP. Show the count + top items and get the user's decisions.
- **🔴 autopilot:** resolve them yourself (cut/add features, tighten metrics) and log each
  resolution. A 🔴 you cannot resolve becomes an open question.
- **🟡 / ⚪:** apply by your own judgement.
Spend a **reserved fetch** only on a `Fix: verify` finding that would actually change the feature
set; label the rest unverified. What no one could verify goes to `## Open questions`. A clean review
(0 🔴) proceeds without stopping.

### Stage 6: Dual output
Finalize `product-requirements.research.md` (complete `## Sources` and `## Forks / Decisions
log`). Then write `.dev-skills/project-spec/product-requirements.summary.md` from
**`../_shared/spec-pipeline/summary-template.md`** — essence + the forks the human must answer +
open risks. Keep the domain model, glossary, and acceptance criteria in the research doc only; the
summary names at most a handful of key concepts in plain language (no schema, fields, or
relations). Format rules: **`../_shared/spec-pipeline/output-format.md`**.

### Stage 7: Hard gate
- **interactive:** STOP — this is a hard gate:
  > "Product definition done → product-requirements.research.md (detail),
  > product-requirements.summary.md (for you). Review it. When you approve, run
  > `/create-user-flows`. I will not proceed automatically."
- **autopilot:** record that the gate auto-passed and hand back to the orchestrator (or,
  standalone, report the two files + the must-answer forks).

Do NOT start user-flow or architecture work in this session unless the user explicitly approves.

## When the repo already has code

Read the implemented surfaces at Stage 0 and **pre-fill the feature set** from them, plus the domain
model and glossary from the code's real entities (**keep the code's names** — a rename is a
deliberate decision with refactor work attached). Then interview to confirm each inferred feature and
add the ones the code doesn't have yet. The 15-feature ceiling holds here too, and reading code
tempts you past it: describe what's built at the capability altitude (one feature per user-visible
capability, not one per route, screen, or endpoint) instead of transcribing the codebase. Write acceptance criteria for the already-built features too
— they become the verifier's regression net. Log the differences in
`## Divergences (code vs intended)`. Method: **`../_shared/spec-pipeline/elicitation-method.md`** →
"When the repo already has code".

## Amend mode (an upstream doc changed)

Re-run on an existing document and you **amend** rather than regenerate — reconcile
`product-requirements.research.md` to the change. Follow **`../_shared/build-pipeline/propagation-method.md`**
in full: assess impact and self-skip if unaffected; otherwise amend surgically (only what the change
touches, plus `product-requirements.summary.md` if the essence changed), preserve the `## Forks / Decisions log` and
add an entry for what changed, ask only on a decision-changing fork, and hand off in one line
(`/create-user-flows`; if `.dev-skills/build-plan/tasks/` exists, say the plan may now be stale and
`/plan-development` reconciles it — you never edit the backlog here).

An amend that adds features re-checks the **15-feature ceiling**: fold the addition into an
existing feature where it belongs, or name what comes out to make room — never let the set drift
past 15 one amend at a time.

## Rules

1. Never produce the product doc after the first message — load the validation doc and work the
   stages first.
2. Never include technical/architecture decisions (stack, APIs, schemas) — that is the next file.
3. Never tier or defer features — the list is the full committed scope.
4. **At most 15 features**, in every mode and on a re-run: fold detail into acceptance criteria, then
   cut into non-goals. Going past 15 needs the user's explicit yes, logged as a fork.
5. Every feature traces to a validated need, or it is cut.
6. Every feature carries at least one behavioral, testable acceptance criterion — never an
   implementation detail.
7. Define each domain entity and term once in the domain model + glossary; later phases reference
   it. The summary stays non-technical (key concepts only, no schema).
8. Every *verified* category claim is cited and every unverified one is labelled as such; every fork
   is logged; the review always runs (both modes) and its findings are always applied.
9. **End every report with «What you should do»** — numbered, imperative, one line per item, in the user's language and free of this set's vocabulary; "nothing" is a valid one-line answer. Timings, where reported, must reconcile with their total. **`../_shared/build-pipeline/report-format.md`**.

