name: 用户故事拆分 description: 使用系统化的拆分模式,将大型用户故事、史诗或特性分解为更小、可独立交付的故事。这使工作更易管理、降低风险、加快反馈周期,并在敏捷开发中保持流程顺畅。此技能适用于用户故事、史诗和任何无法在单个迭代中完成的太大规模的工作。
这不是随意分割——而是战略性的分解,在减少复杂性的同时保留用户价值。 type: 组件
目的
使用系统化的拆分模式,将大型用户故事、史诗或特性分解为更小、可独立交付的故事。这使工作更易管理、降低风险、加快反馈周期,并在敏捷开发中保持流程顺畅。此技能适用于用户故事、史诗和任何无法在单个迭代中完成的太大规模的工作。
这不是随意分割——而是战略性的分解,在减少复杂性的同时保留用户价值。
核心概念
故事拆分框架
基于 Richard Lawrence 和 Peter Green 的《人性化工作指南:拆分用户故事》,该框架提供了8种系统化的拆分模式:
- 工作流步骤: 沿用户旅程中的顺序步骤拆分
- 业务规则变化: 按不同规则场景(权限、计算等)拆分
- 数据变化: 按不同类型的数据或输入拆分
- 验收标准复杂性: 当存在多个“当”或“那么”语句时拆分
- 主要工作: 按技术里程碑或实施阶段拆分
- 外部依赖: 沿依赖边界(API、第三方等)拆分
- DevOps步骤: 按部署或基础设施需求拆分
- 微小发现行为(TADs): 如果以上均不适用,使用小实验来解开未知因素
为什么拆分故事?
- 更快反馈: 更小的故事更早交付,允许早期验证
- 降低风险: 构建更少 = 出错可能更少
- 更好估算: 小故事更容易准确估算
- 保持流程: 在迭代中保持工作流动,无瓶颈
- 可测试性: 更小范围 = 更容易编写和运行测试
反模式(这并非什么)
- 非水平分割: 不要拆分为“前端故事”和“后端故事”(每个故事应交付用户价值)
- 非任务分解: 故事不是任务(“设置数据库”、“编写API”)
- 非随意切割: 不要拆分“添加用户管理”为“添加用户”和“管理”(无意义)
何时使用此技能
- 故事太大,无法在单个迭代中完成
- 验收标准中有多个“当”或“那么”语句
- 史诗需要分解为可交付的增量
- 团队无法就故事规模或范围达成共识
- 故事捆绑了多个角色或工作流
何时不使用此技能
- 故事已经很小且范围明确(不要过度拆分)
- 拆分会产生依赖关系,减慢交付
- 故事是技术任务(改用工程任务分解)
应用
步骤1:识别原始故事
从需要拆分的故事/史诗/特性开始。确保使用用户故事格式编写(参考 skills/user-story/SKILL.md 或 skills/epic-hypothesis/SKILL.md)。
### 原始故事:
[使用用例和验收标准格式化的故事]
步骤2:应用拆分逻辑
使用 template.md 获取完整的填充结构和输出格式。
按顺序遍历8种拆分模式。找到适用的模式时停止。
模式1:工作流步骤
问: 这个故事是否包含多个顺序步骤?
示例:
- 原始: “作为一个用户,我想注册、验证我的邮箱并完成引导”
- 拆分:
- “作为一个用户,我想用邮箱/密码注册”
- “作为一个用户,我想通过确认链接验证我的邮箱”
- “作为一个用户,我想通过回答3个配置文件问题完成引导”
模式2:业务规则变化
问: 这个故事是否有不同场景的不同规则?
示例:
- 原始: “作为一个用户,我想应用折扣(会员10%、VIP20%、首次买家5%)”
- 拆分:
- “作为一个会员,我想在结账时应用10%折扣”
- “作为一个VIP,我想在结账时应用20%折扣”
- “作为一个首次买家,我想在结账时应用5%折扣”
模式3:数据变化
问: 这个故事是否处理不同类型的数据或输入?
示例:
- 原始: “作为一个用户,我想上传文件(图像、PDF、视频)”
- 拆分:
- “作为一个用户,我想上传图像文件(JPG、PNG)”
- “作为一个用户,我想上传PDF文档”
- “作为一个用户,我想上传视频文件(MP4、MOV)”
模式4:验收标准复杂性
问: 这个故事是否有多个“当”或“那么”语句?
示例:
- 原始: “作为一个用户,我想管理我的购物车”
- 当我添加一个商品,那么它出现在我的购物车中
- 当我移除一个商品,那么它从我的购物车中消失
- 当我更新数量,那么购物车总数更新
- 拆分:
- “作为一个用户,我想将商品添加到我的购物车,以便以后购买”
- “作为一个用户,我想从我的购物车中移除商品,以便改变主意”
- “作为一个用户,我想更新商品数量,以便购买正确数量”
注意: 这是最常用的指标,表明故事需要拆分。如果看到多个“当/那么”对,沿这些边界拆分。
模式5:主要工作
问: 这个故事是否需要可以增量交付的显著技术工作?
示例:
- 原始: “作为一个用户,我想在文档上进行实时协作”
- 拆分:
- “作为一个用户,我想看到谁在查看文档(只读存在)”
- “作为一个用户,我想看到其他编辑者的实时光标位置”
- “作为一个用户,我想实时看到其他用户的编辑”
模式6:外部依赖
问: 这个故事是否依赖于多个外部系统或API?
示例:
- 原始: “作为一个用户,我想用Google、Facebook或Twitter登录”
- 拆分:
- “作为一个用户,我想用Google OAuth登录”
- “作为一个用户,我想用Facebook OAuth登录”
- “作为一个用户,我想用Twitter OAuth登录”
模式7:DevOps步骤
问: 这个故事是否需要复杂的部署、基础设施或运营工作?
示例:
- 原始: “作为一个用户,我想上传大文件到云存储”
- 拆分:
- “作为一个用户,我想上传小文件(<10MB)到云存储”
- “作为一个用户,我想上传大文件(10MB-1GB)并带有进度跟踪”
- “作为一个用户,我想恢复中断的上传”
模式8:微小发现行为(TADs)
问: 如果以上均不适用,是否有未知因素或假设需要解开?
示例:
- 原始: “作为一个用户,我想要AI驱动的推荐”(太模糊,太多未知)
- TADs:
- 原型化3种推荐算法,并用10个用户测试
- 定义成功标准(点击率、用户满意度)
- 构建最简单的推荐引擎(协同过滤)
- 测量并迭代
注意: TADs不是故事——它们是实验。在编写故事之前,使用它们来降低风险和澄清。
步骤3:编写拆分故事
对于每个拆分,使用 skills/user-story/SKILL.md 中的格式编写完整的用户故事:
### 使用[模式名称]拆分1:
#### 用户故事[ID]:
- **摘要:** [简短标题]
**使用案例:**
- **作为一个** [角色]
- **我想要** [动作]
- **以便** [结果]
**验收标准:**
- **场景:** [描述]
- **给定:** [前提条件]
- **当:** [动作]
- **那么:** [结果]
步骤4:验证拆分
问这些问题:
- 每个拆分是否交付用户价值?(不仅仅是“前端完成”)
- 每个拆分是否可以独立开发?(无硬依赖)
- 每个拆分是否可以独立测试?(清晰的验收标准)
- 每个拆分是否足够小以适应迭代?(1-5天的工作量)
- 拆分组合时,是否等于原始故事?(没有丢失任何东西)
如果任何答案为“否”,请修订。
示例
参见 examples/sample.md 获取完整拆分示例。
迷你示例摘录:
### 原始故事:
作为一个团队管理员,我想管理团队成员,以便控制访问。
### 建议拆分(验收标准复杂性):
1. 邀请新团队成员
2. 移除团队成员
3. 更新团队成员角色
常见陷阱
陷阱1:水平分割(技术层)
症状: “故事1:构建API。故事2:构建UI。”
后果: 两个故事都不能独立交付用户价值。
修复: 垂直拆分——每个故事应包括前端和后端工作,以交付完整的面向用户的能力。
陷阱2:过度拆分
症状: “故事1:添加按钮。故事2:将按钮连接到API。故事3:显示结果。”
后果: 创造不必要的开销和依赖。
修复: 仅在故事太大时拆分。一个2天的故事不需要拆分。
陷阱3:无意义拆分
症状: “故事1:特性的前半部分。故事2:特性的后半部分。”
后果: 随意拆分,不映射到用户价值或工作流。
修复: 使用8种拆分模式之一——每个拆分应有明确的理由。
陷阱4:创建硬依赖
症状: “故事2无法开始,直到故事1完成100%、测试和部署。”
后果: 无并行化,减慢交付。
修复: 以允许独立开发的方式拆分。如果依赖不可避免,优先处理故事1。
陷阱5:忽略“以便”
症状: 拆分故事有相同的“以便”语句。
后果: 你拆分了动作但没有结果——可能是一个任务分解,而不是故事拆分。
修复: 确保每个拆分有独特的用户结果。如果没有,重新考虑拆分模式。
参考资料
相关技能
skills/user-story/SKILL.md— 编写拆分故事的格式skills/epic-hypothesis/SKILL.md— 史诗通常在成为故事之前需要拆分skills/jobs-to-be-done/SKILL.md— 帮助沿用户任务识别有意义的拆分
外部框架
- Richard Lawrence & Peter Green, The Humanizing Work Guide to Splitting User Stories — 8种拆分模式的起源
- Bill Wake, INVEST in Good Stories (2003) — 良好故事的准则(独立、可协商、有价值、可估算、小、可测试)
- Mike Cohn, User Stories Applied (2004) — 故事分解技术
Dean’s Work
- 基于人性化工作框架的用户故事拆分提示模板
来源
- 改编自
prompts/user-story-splitting-prompt-template.md在https://github.com/deanpeters/product-manager-prompts仓库中。
技能类型: 组件
建议文件名: user-story-splitting.md
建议放置位置: /skills/components/
依赖: 参考 skills/user-story/SKILL.md, skills/epic-hypothesis/SKILL.md
适用对象: 用户故事、史诗和任何无法在单个迭代中完成的太大规模的工作