story-splittinglisted
Install: claude install-skill marsloting/product-thinking-pack
# 故事拆分 + Acceptance Criteria + Edge Case
## 何时触发
- 一个需求看起来 ≥ 1 周工作量
- 写 spec 写到一半发现"还要包括 X / Y / Z"开始膨胀
- "这个 epic 太大,拆一下"
- acceptance criteria 怎么写
- "上线前 edge case 过一遍"
- 团队估算分歧 > 50%(说明大家理解的"做完"不是同一回事)
- PRD review 时被问"那 X 情况怎么办"
## 何时不触发
- 单文件 hot fix(一行代码改动不需要拆)
- 已经按 phase 切好的 dev 任务 → 用 dev-phase-rollout
- 创意发散阶段(拆故事是收敛阶段,发散用 jtbd-framework / brainstorm)
## 第一步:INVEST 自检
每个故事过这 6 项:
| 字母 | 含义 | 通过标准 |
|---|---|---|
| **I**ndependent | 独立 | 可以脱离其他故事单独 ship 上线 |
| **N**egotiable | 可商量 | 内容、UI、实现可在 dev 中协商,不是死的 |
| **V**aluable | 有价值 | 上线后用户 / 业务能感受到具体价值 |
| **E**stimable | 可估算 | 团队能给出 ≤ 3 天的合理估算 |
| **S**mall | 小 | 1-3 天可完成(≤ 1 个 sprint) |
| **T**estable | 可测 | 有明确的"做完了"判断标准 |
任何一项不通过 → 必须拆。
## 第二步:SPIDR 拆分(5 条主路径)
| 路径 | 何时用 | 例子 |
|---|---|---|
| **S**pike | 技术不确定,先 spike 验证可行性 | "新支付方式接入"先做 1 天技术 spike |
| **P**ath | 一个故事多个用户路径 → 按路径拆 | 注册流程 = 邮箱注册 / 手机注册 / 第三方登录 三个故事 |
| **I**nterface | UI 多端 → 按端拆 | 桌面 / 移动 / API 三个故事 |
| **D**ata | 数据多类型 → 按类型拆 | 单一货币先做 → 多货币扩展 |
| **R**ules | 业务规则复杂 → 先做主流程,规则后续加 | 主流程不含权限 → 加权限 → 加白名单 |
## 第三步:7 splitting strategies(备用,SPIDR 不够时用)
1. **Workflow steps**:按工作流步骤拆(注册 → 验证 → 激活 → 完成)
2. **Business rule variations**:先核心规则,再扩展规则
3. **Major effort**:把 80% 工作量集中处先做最简版本
4. **Simple/complex**:MVP 简单版 → 复杂场景版
5. **Variations in data**:先一种数据类型,再扩展
6. **Data entry methods**:先一种输入方式,再扩展
7. **Defer performance**:先功能正确,再性能优化
## 第四步:垂直切片不水平切片(关键)
❌ **水平切片**:DB 层 → Backend API 层 → Frontend 层(每层一个故事)
- 问题:单层完成无价值,必须三层全做完才上线
✅ **垂直切片**