prd-writing
Author Product Requirements Documents (PRDs) from scratch — interview-driven, templated, published to docs/prds/NNNN-*.md
- License 许可
- MIT
- 所属仓库
- HigorAlves/orc
- 最近更新
- 2026-11-07
- Stars
- ★ 7
- Forks
- 0
01 前言 Front Matter
- name
- prd-writing
- description
- Author Product Requirements Documents (PRDs) from scratch — interview-driven, templated, published to docs/prds/NNNN-*.md
- when_to_use
- Use for "write a PRD for X", an unsettled new feature, or /orc:prd.
02 资源文件 1
- 参考文档references/TEMPLATE.md2.5 KB
03 SKILL.md 正文
PRD Writing
Defer to
orc:doc-writingfor the shared scaffolding: the doc-type map (PRD vs TRD vs RFC vs ADR vs postmortem, and how PRD differs fromorc:to-prd), the shared section outline, thedocs/<type>s/NNNN-*.mdnumbering & publication convention, and the review gates. This skill carries only the PRD-specific template, fields, and tone.
A PRD is the contract between product intent and engineering execution. It captures what we're building, for whom, and why now — before anyone argues about architecture. A good PRD makes the design conversation that follows it 10× faster because half the questions are pre-answered.
When to write one
Write a PRD when all of these are true:
- The work has a user-facing outcome — a behavior, capability, or experience changes for someone outside the team.
- The intent is non-obvious — there's a real product question (which audience, which metric, which scope), not just an implementation question.
- The work is non-trivial — multi-day effort, or coordination across product/design/engineering.
Don't write a PRD for:
- Pure refactors with no user-visible change → use
orc:rfc-writingif architectural, or just a plan. - Tactical bug fixes → just fix it.
- One-day features that have no audience question (e.g. "add
--verboseflag for engineers") → a plan or issue is enough. - A decision that's already made and documented elsewhere →
orc:adr-writingto record it.
Interview checklist (before drafting)
If the user hasn't already answered these in conversation, ask before drafting. Skip questions whose answers are already obvious from context — don't waste user time interviewing them on things they've already said.
- Problem. What user pain or business need triggered this? Quote a real signal — a support thread, a churn metric, a customer ask, a competitive feature, a regulatory deadline.
- Audience. Who specifically benefits? Single persona, multiple personas, internal team, all users? If "all users," push back — usually it's a subset.
- Success metric. How will we know in 90 days that this worked? Pick one primary metric, optionally one or two secondaries. "It feels better" is not a metric.
- In scope. The smallest version of this that delivers the outcome.
- Out of scope. What we are explicitly NOT building (heads off scope creep in review).
- Open questions. What does the author not yet know but needs to before implementation?
- Dependencies / risks. External teams, vendors, data, regulatory blockers, prior work that has to land first.
Template
Every PRD uses this shape. Delete sections that genuinely have no content; never leave TBD or stub placeholder text. A section that's empty is a lie about being thought through.
Template body: TEMPLATE.md — read it at step 4, when drafting.
What to do as the model
- Confirm a PRD is warranted — apply the "all of these are true" test above. If borderline, surface the call to the user (PRD / smaller-issue / nothing).
- Run the interview if input is sparse — go through the seven checklist questions, but skip any already answered in context. Batch into 2–3
AskUserQuestioncalls; don't drip one at a time. - Find the next sequence number in
docs/prds/(see the numbering convention inorc:doc-writing). - Draft from TEMPLATE.md. Fill every section with real content. Delete sections that genuinely have no content (e.g. no counter-metric, no appendix) rather than writing
TBD. - Show the draft to the user for review before committing (review gates in
orc:doc-writing). - Commit via
orc:git-commit. Suggested message:docs(prd): NNNN — <kebab title>. - Cross-link. If the PRD relates to existing tickets, RFCs, ADRs — link FROM those to the PRD (the link is the entry point, not the reverse).
Tone
Plain prose, written by a product-minded engineer for product-and-engineering readers. No marketing voice ("delight", "seamless", "best-in-class"). No "obviously" or "trivially" — if it were obvious, you wouldn't need a PRD. Cite real numbers when you can: support ticket counts, latency budgets, deadline dates, named stakeholders by role.
Anti-patterns
- Status: Draft that never moves. Either get approval or archive — don't let a PRD rot in Draft.
- PRDs without success metrics. "We'll know it's good when we see it" is a sign the author didn't think hard enough.
- PRDs written after the feature shipped. The "Why" gets sanitized in hindsight; future-you can't tell what was real motivation vs. retrofitted justification.
- PRDs that read like specs. If half the content is API shapes and database tables, you're writing a TRD or RFC — promote it accordingly.
- PRDs without "Out of scope". Without explicit exclusions, every reviewer will paste in their pet feature and the work doubles.
- One-line problem statements. "Users want CSV export" is not a problem statement; it's a solution. The PRD articulates the problem CSV export solves.
04 同仓库更多 Skills
writing-plans
Write a comprehensive implementation plan of bite-sized TDD tasks that an engineer with zero codebase context could execute — exact files, code, tests, and verification steps
writing-for-agents
orc's doctrine layer for writing any document an agent consumes — skills, AGENTS.md/CLAUDE.md, reference docs
workspace-mode
Use when cwd is a parent dir holding multiple sibling git repos — defines repo auto-detection, --repos/--repo/--all-repos/--this-repo precedence, per-repo dispatch, and linked-PR mechanics.
wizard
Generate an interactive bash wizard walking a human through work only they can perform — credentials, secrets, one-off migrations
wait-what
Stop and re-pitch — the last message did not land; say it again simply, in the project's own vocabulary.
vitest
Vitest fast unit testing framework powered by Vite with Jest-compatible API