产品需求文档(PRD)撰写
概述
PRD 是需求方与开发、测试之间的唯一事实源(Single Source of Truth)。好 PRD 的标准:开发照着能写,测试照着能验,任何一个新人 10 分钟读明白。核心是把"要什么"翻译成"谁能做什么 + 满足什么条件算做完"。
何时使用
- 用户要"写 PRD / 需求文档 / 需求规格说明书 / 写份需求"
- 有背景想法或会议纪要,需要产出可落开发的需求
- 需要为功能定义验收标准、异常分支、边界规则
- 评审既有 PRD 找漏洞(缺验收、缺异常、缺数据定义)
不使用:市场分析报告(无具体功能规格)、技术方案/接口设计(那是开发文档)、纯 UI 视觉稿。
PRD 类型速选
先按类型定骨架重心,再起步能省掉"从空页开始"的内耗。完整骨架见 references/prd-archetypes.md:
- MVP 功能型:一个功能 / 一次小迭代 → 单 FR 闭环 + 验收可判定
- 平台型:多角色、复杂状态机、跨端 → 角色权限 + 状态流转 + 异常矩阵
- 增长实验型:验证假设 / 看数据 → 假设 + 指标 + 实验设计 + 判定口径
PRD 标准结构
- 文档信息:版本、作者、日期、评审记录、变更记录
- 背景与目标:为什么做(数据/痛点/机会)、业务目标(可量化指标)、不做什么(Out of Scope,明确排除边界)
- 名词与约束:术语定义、涉及的权限/角色、平台约束(端、机型、合规)
- 用户画像与典型场景:目标用户、3 个以内的核心用户故事("作为X,当Y时,要Z")
- 功能需求规格(主体):
- 每个功能:编号(FR-01)、功能描述、入口、操作权限
- 业务流程:主流程 + 分支 + 异常流程(流程图或文字逐步描述)
- 字段与数据定义:每个输入/展示字段的名称、类型、必填、长度、校验规则、默认值
- 状态与状态流转:订单状态机必须写明每个状态及合法迁移
- 降级与容错:接口失败、网络不可用、权限不足时怎么呈现 - 验收标准(Acceptance Criteria):对每个 FR,用"当……时,系统应……"写可判定断言(可直接转测试用例)
- 非功能需求:性能(响应时间/并发)、安全(权限、数据隐私)、兼容性(版本范围)
- 埋点与数据需求:关键行为的埋点事件、分析口径(指标定义要给出公式)
- 依赖与风险:依赖的第三方/前置版本、开放问题、风险项与缓解
- 排期与范围:里程碑、MVP 范围清单、后续迭代范围
写好正文的三个关键
1. 字段定义先行(消灭歧义)
每个字段给全:数据类型、必填、默认值、长度/取值约束、校验、为空时的行为。
| 字段 | 类型 | 必填 | 约束 | 默认 | 为空时 |
|---|---|---|---|---|---|
| 手机号 | string(11) | 是 | 1 开头 11 位 | - | 提示"请输入" |
| 金额 | decimal(10,2) | 是 | >0,最多 2 位小数 | - | 提示"请输入金额" |
2. 状态机写全迁移
"订单状态:待支付/已支付/已取消/已退款。合法迁移:待支付→已支付/已取消;已支付→已退款;其余迁移一律禁止并提示。" 不写清,开发自行脑补必出错。
3. 验收标准可判定
- ❌ "登录要很快" → ✅ "在 4G 网络,登录接口 P95 响应 < 800ms"
- ❌ "支持导出" → ✅ "点击导出后 10s 内生成文件,下载文件名含导出日期,重复点击不产生重复任务"
内置校验脚本与评审工具
scripts/prd_lint.py(仅 Python 标准库)做所有机器可判定的结构检查,判断类工作(内容质量、评审意见)仍由 AI 与人工完成。
# 提示:脚本用相对路径 scripts/,请先 cd 到本技能目录再运行
python3 scripts/prd_lint.py 需求.md
脚本产出:必选章节缺失、FR 编号连续性、字段表五要素(类型/必填/约束/默认/为空时)、状态机合法/非法迁移、验收标准条数 vs FR 数、指标口径。错误必须修复(退出码 1);警告逐条人工评估。单元测试在 tests/test_prd_lint.py(python3 tests/test_prd_lint.py)。
配套评审模板(随 PRD 一并交付):
- references/prd-traceability-matrix.md:需求追溯矩阵(目标↔FR↔验收↔用例)
- references/prd-review-sheet.md:需求评审走查表(13 维度结论 + 遗留问题清单)
建议流程
- 澄清输入:目标用户、场景、现有流程的问题(不要直接开写)
- 定范围:做什么 → 不做什么(先把 Out of Scope 列出来逼用户表态)
- 写骨架:文档信息/背景/画像/结构,先让用户确认大框架
- 填规格:逐 FR 填描述+状态+字段+异常
- 写验收:每条转成"当…应…"
- 自动走查:跑
prd_lint.py清结构层错误并按警告补内容 - 评审走查:用
prd-review-sheet.md逐维度过,prd-traceability-matrix.md对断链;标注开放问题
常见错误
| 错误 | 修正 |
|---|---|
| 只有"要个 XX 功能"没有验收标准 | 每个 FR 配可判定 AC |
| 字段只写名字不写类型/约束/为空行为 | 字段表格五要素给全 |
| 状态机不写非法迁移 | 全量定义状态与合法/非法流转 |
| 不做 Out of Scope | 明确"本期不做",阻止范围蔓延 |
| 用形容词(快/多/好用)代替数字 | 给可量化指标 |
| 异常场景只字不提 | 网络失败/权限不足/重复提交/数据为空都要有处理 |
| 指标不给口径 | 指标定义附计算公式与统计单位 |
检查清单(交件前)
- [ ] 有背景、目标、可量化成功指标、Out of Scope
- [ ] 含用户画像与核心用户故事
- [ ] 每个 FR 有编号、描述、入口、权限
- [ ] 每个字段有类型/必填/约束/默认/空值行为
- [ ] 状态机定义完整(含非法迁移)
- [ ] 异常与降级场景已定义(失败/无权限/空数据/重复提交)
- [ ] 每条 FR 有可判定的验收标准
- [ ] 有非功能需求(性能/安全/兼容)
- [ ] 指标定义含公式口径,埋点清单齐全
- [ ] 有依赖、风险、开放问题与排期
- [ ]
prd_lint.py无错误;警告逐条处理 - [ ] 追溯矩阵已建(目标↔FR↔验收↔用例无断链)
- [ ] 评审走查表已填(通过/问题/待确认)