走进任何使用 JIRA 的敏捷团队,你会看到一个充满工单的看板。有些标记为"故事",有些标记为"任务",可能还有一两个"史诗"。问五个团队成员它们之间的区别,你会得到五个不同的答案。“故事比任务大。”“故事是给用户的,任务是给开发人员的。”"故事有验收标准。"这种困惑不仅仅是语义上的——它反映了对如何在敏捷开发中分解工作的根本误解。
这种困惑导致了实际问题。团队创建的故事实际上是任务。应该是故事的任务。只是大型故事的史诗。跨越多个迭代但没有明确增量价值的工作项。工单系统变成了没有明确目的或结构的工作项倾倒场。
理解故事、任务和史诗之间的区别不是为了遵循 JIRA 约定——而是为了以能够实现迭代交付、清晰沟通和有意义的进度跟踪的方式组织工作。让我们消除困惑,理解这些工作项实际代表什么以及如何有效使用它们。
敏捷没有规定故事结构
许多团队忽略的一点是:敏捷是一种专注于原则和价值观的方法论,而不是规定如何管理故事和任务的严格框架。敏捷宣言没有提到史诗、故事或任务。它谈论的是交付可工作的软件、与客户协作以及响应变化。分解工作的具体机制是从团队尝试在实践中应用这些原则中产生的。
大多数团队通过像 JIRA 这样的工单系统接触敏捷,这些系统预配置了问题类型:史诗、故事、任务、子任务。这些工具呈现的层次结构感觉很权威,好像这种结构是敏捷本身的一部分。团队采用这些类别时没有质疑它们是否满足自己的需求,也不理解它们为什么存在。工具变成了方法论。
真正的问题始于团队将瀑布思维带入敏捷工具。在瀑布项目管理中,工作流经顺序阶段:需求、设计、实现、测试、部署。每个阶段都有详细的文档、正式的交接和批准关卡。当这些团队"转向敏捷"时,他们通常将现有的思维模式映射到新工具上。需求文档变成故事。设计任务变成任务。测试变成迭代结束时的单独阶段。术语改变了,但思维没有。
这造成了我们在各处 JIRA 看板上看到的困惑。故事实际上是技术任务,因为有人认为"实现认证 API"需要被跟踪。任务实际上是故事,因为团队将它们视为独立的工作项。史诗只是大型故事,因为没有人理解区别。工单系统变成了反映穿着敏捷词汇的瀑布思维的倾倒场。
故事/任务的区别不是任意的——它在敏捷思维中有特定的目的。故事代表交付给用户的价值。任务代表实现工作。这种分离很重要,因为敏捷优先考虑迭代交付价值。你不能向用户交付半个 API 端点,但你可以交付功能的简化版本。故事通过关注面向用户的能力而不是技术组件来实现这种迭代交付。
不同的团队需要不同的结构。一个有三个开发人员的小型创业公司可能不需要正式的任务分解——故事就足够了。一个拥有分布式团队的大型企业可能需要额外的层次结构来协调。一些团队使用没有任务的故事。其他团队使用史诗、故事和任务。少数团队在史诗之上使用主题。结构应该服务于你的团队需求,而不是因为 JIRA 提供了模板就遵循它。
重要的不是你选择的特定层次结构——而是理解你为什么以这种方式组织工作。你是为了实现迭代交付而分解工作吗?为了促进协作?为了跟踪进度?还是只是因为 JIRA 字段在那里就填写它们?前者导致有效的敏捷实践。后者导致我们试图解开的困惑。
理解用户故事
用户故事是敏捷开发中的基本工作单元。但是什么使某物成为故事而不仅仅是任务或需求?
什么构成故事
用户故事代表从用户角度的价值单元:
📝 故事特征
以用户为中心
- 从用户的视角描述功能
- 关注用户想要完成什么
- 解释功能为什么重要
- 完成时交付有形价值
可独立交付
- 可以在一个迭代内完成
- 不需要其他故事就能提供价值
- 可以向利益相关者演示
- 完成后可能可发布
可协商
- 细节通过对话浮现
- 实现方法灵活
- 范围可以调整
- 不是合同或规范
可测试
- 明确的验收标准
- 可验证的完成
- 可演示的功能
- 客观的"完成"定义
故事不是技术任务——它是向用户交付价值的承诺。
经典故事格式
标准用户故事格式提供结构:
💡 故事模板
作为 [用户类型] 我想要 [某个目标] 以便 [某个原因]
示例: 作为博客读者 我想要按类别筛选文章 以便我可以找到与我兴趣相关的内容
为什么这种格式有效:
- 作为:识别谁受益
- 我想要:描述能力
- 以便:解释价值
这种格式迫使你思考谁、什么和为什么——而不仅仅是需要构建什么。
为什么故事格式很重要
"作为/我想要/以便"格式不是任意约定——它解决了团队如何沟通工作的根本问题。传统需求规范只关注需要构建什么,让团队猜测上下文和目的。故事格式强制明确表达塑造实现决策的三个关键要素。
识别用户类型很重要,因为不同的用户有不同的需求、约束和期望。为"系统管理员"编写的故事意味着与为"休闲移动用户"编写的故事不同的 UI 复杂性、错误处理和文档。当团队跳过这个上下文时,他们构建的通用解决方案不能特别好地满足任何人。格式使用户上下文明确且不可避免。
将目标描述为能力而不是实现保留了灵活性。"我想要按类别筛选文章"为下拉菜单、标签云、搜索参数或其他方法留出空间。"我想要侧边栏中的类别下拉菜单"在理解约束之前就规定了实现。编写以实现为重点的故事的团队在开发过程中发现更好的方法时失去了适应能力。
通过"以便"解释价值使智能权衡成为可能。当开发人员理解筛选存在"以便用户可以找到相关内容"时,他们可以提出搜索、推荐或相关文章等替代方案。如果不理解潜在需求,团队会准确构建所要求的内容,即使存在更好的解决方案。价值陈述将故事从规范转变为值得解决的问题。
替代格式失败是因为它们省略了这些要素。将故事写成技术任务——“实现类别筛选器”——不提供用户上下文或价值理由。将它们写成功能描述——“类别筛选功能”——解释了什么但不解释谁或为什么。将它们写成验收标准——“系统应允许按类别筛选”——关注验证而不解释目的。每种替代方案都针对不同的关注点进行优化,同时牺牲了使敏捷有效的协作问题解决。
格式还改变了团队动态。产品负责人不能写"我想要重构数据库架构",因为没有用户也没有面向用户的价值。开发人员不能写"作为开发人员,我想要使用最新的框架",因为开发人员不是最终用户。格式迫使每个人从用户的角度思考,创建对真正重要的事情的共同理解。这种一致性防止团队构建技术上令人印象深刻但用户没有的问题的解决方案。
团队有时在内化这些原则后放弃格式,用自然语言编写仍然捕获用户、能力和价值的故事。这很好——格式是一种思维方式的训练轮。但是在没有内化原则的情况下跳过格式的团队最终会得到看起来像故事但缺乏使故事有价值的基本上下文的需求列表。格式很重要,因为它强制执行纪律,直到纪律成为习惯。
超越模板:真正重要的是什么
模板是起点,不是要求。重要的是捕获基本信息:
🎯 基本故事要素
谁:用户或角色
- 特定用户类型,不是通用"用户"
- 帮助团队理解上下文
- 指导设计决策
什么:能力或功能
- 足够具体以实现
- 足够广泛以允许灵活性
- 关注结果,不是实现
为什么:价值或好处
- 业务理由
- 帮助优先级排序
- 实现创造性解决方案
验收标准:完成的定义
- 具体、可测试的条件
- 客观的完成标准
- 对范围的共同理解
一些团队在内化这些要素后放弃模板格式。格式服务于团队,而不是相反。
编写有效的故事
好的故事平衡了具体性和灵活性:
✅ 好的故事示例
电子商务示例: 作为回头客 我想要保存我的支付信息 以便我可以在未来购买时更快地结账
验收标准:
- 用户可以在结账时选择保存支付方式
- 保存的支付方式出现在结账页面
- 用户可以删除保存的支付方式
- 支付数据已加密并符合 PCI 标准
为什么有效:
- 明确的用户好处(更快结账)
- 足够具体以实现
- 可测试的验收标准
- 实现细节保持灵活
🚫 差的故事示例 1
作为开发人员 我想要实现 OAuth2 认证 以便系统是安全的
过于技术化
问题:
- 开发人员不是最终用户
- 关注实现,不是价值
- "系统是安全的"不是具体好处
- 应该是面向用户故事下的任务
🚫 差的故事示例 2
作为用户 我想要更好的仪表板 以便我可以使用系统
过于模糊
问题:
- "更好"是主观的
- 没有描述具体能力
- 没有明确的验收标准
- 太大而无法在一个迭代中完成
好故事和差故事之间的区别通常决定团队是交付价值还是只是完成工作项。
理解任务
任务是完成故事所需的实现步骤。它们代表"如何",而故事代表"什么"和"为什么"。
什么构成任务
任务将故事分解为可操作的工作项:
🔧 任务特征
以实现为重点
- 所需的技术活动
- 要完成的具体工作
- 以开发人员为中心的语言
- 单独没有直接的用户价值
故事的一部分
- 有助于故事完成
- 不能独立存在
- 每个故事多个任务
- 所有任务完成前故事不完整
分配给个人
- 一个人拥有每个任务
- 明确的责任
- 可能的并行工作
- 跟踪个人进度
有时间限制
- 可在数小时或数天内完成
- 不是数周
- 足够细粒度以跟踪
- 足够小以快速完成
任务是构建块,组合在一起时交付故事的价值。
任务示例
任务将故事转化为具体工作:
💡 故事到任务分解
故事: 作为博客读者,我想要按类别筛选文章,以便我可以找到相关内容。
任务:
- 设计类别筛选器 UI 组件
- 实现类别筛选器 API 端点
- 向数据库查询添加类别筛选
- 为筛选逻辑创建单元测试
- 将筛选器组件与文章列表集成
- 更新文档
- 执行跨浏览器测试
注意:
- 每个任务都是具体的技术工作
- 任务可以并行完成(API + UI)
- 没有单个任务交付故事价值
- 所有任务一起完成故事
何时创建任务
并非每个故事都需要在 JIRA 中明确的任务:
📋 任务创建指南
创建任务的情况:
- 故事复杂且有多个组件
- 工作可以在团队成员之间并行化
- 团队想要跟踪迭代内的进度
- 故事跨越多个技术领域
- 新团队成员需要指导
跳过任务的情况:
- 故事小而直接
- 一个人将完成整个故事
- 团队经验丰富且自组织
- 开销超过好处
- 故事可在 1-2 天内完成
一些团队为每个故事创建任务。其他团队只为复杂工作创建。根据你的团队需求选择,而不是 JIRA 约定。
任务反模式
创建任务时的常见错误:
🚫 任务错误
任务作为故事
- "实现登录 API"作为故事
- 没有描述用户价值
- 技术实现重点
- 应该是"用户可以登录"故事下的任务
过于细粒度的任务
- "编写验证电子邮件的函数"
- "添加导入语句"
- 太小而无法有意义地跟踪
- 创建管理开销
没有父故事的任务
- 孤立的技术工作
- 没有明确的用户价值
- 难以优先排序
- 应该在故事下分组
实际上是故事的任务
- "用户可以重置密码"作为任务
- 交付独立价值
- 应该提升为故事
- 有自己的验收标准
故事和任务之间的界限并不总是清晰的,但问"这是否独立交付用户价值?"通常会澄清。
理解史诗
史诗代表跨越多个故事且通常跨越多个迭代的大量工作。
什么构成史诗
史诗是分解为故事的战略计划:
🎯 史诗特征
大范围
- 对于单个迭代来说太大
- 需要多个故事
- 需要数周或数月才能完成
- 战略计划或功能集
主题分组
- 共同目标下的相关故事
- 连贯的用户体验
- 业务目标或主题
- 逻辑功能分组
可增量交付
- 故事可以独立完成
- 价值逐步交付
- 不是全有或全无
- 每个故事增加史诗的价值
高级描述
- 战略目标,不是详细需求
- 细节在故事中浮现
- 灵活的范围
- 基于学习演变
史诗为故事提供战略背景,而不规定实现细节。
史诗示例
史诗组织相关工作:
💡 史诗结构
史诗:用户认证系统
故事:
- 用户可以使用电子邮件和密码注册
- 用户可以使用凭据登录
- 用户可以重置忘记的密码
- 用户可以启用双因素认证
- 用户可以使用社交媒体账户登录
- 管理员可以管理用户账户
注意:
- 每个故事交付独立价值
- 故事可以单独优先排序
- 史诗提供主题分组
- 一些故事可能被推迟
史诗与大型故事
区别可能很微妙:
⚠️ 史诗还是故事?
它是史诗的情况:
- 需要多个迭代
- 包含多个面向用户的功能
- 可以分解为独立的故事
- 具有多个组件的战略计划
它是大型故事的情况:
- 单个面向用户的功能
- 可在一个迭代内完成(如果分解)
- 不能在不失去价值的情况下拆分
- 应该分解为任务,不是故事
示例:
- 史诗:"电子商务结账流程"
- 故事:"用户可以使用保存的支付方式完成购买"
- 史诗包含多个故事(购物车、支付、确认)
- 故事是该史诗中的一个功能
如有疑问,尝试拆分它。如果各部分交付独立价值,它就是史诗。如果不交付,它就是需要任务的故事。
迭代内的故事
迭代是 Scrum 中的基本时间盒。故事如何适应迭代决定了团队的有效性。
迭代承诺
迭代计划确定团队承诺交付的内容:
📅 迭代计划
故事选择
- 团队从待办事项中拉取故事
- 基于优先级和容量
- 故事必须适合迭代
- 团队承诺完成
完成的定义
- 满足所有验收标准
- 代码已审查和测试
- 部署到预发布/生产环境
- 根据需要记录
- 可能可发布
迭代目标
- 迭代的总体目标
- 故事有助于目标
- 提供重点和连贯性
- 指导权衡决策
承诺是对迭代目标和选定故事的承诺,而不是对每个任务或细节的承诺。
迭代的故事规模
故事应该舒适地适合迭代:
✅ 大小合适的故事
理想的故事大小
- 可在 2-5 天内完成
- 每个迭代多个故事
- 足够小以完成
- 足够大以交付价值
团队容量
- 2 周迭代 = 10 个工作日
- 考虑会议、中断
- 实际容量:每人 6-7 天
- 多个故事提供灵活性
示例迭代
- 5 人团队,2 周迭代
- 容量:30-35 故事点
- 6-8 个不同大小的故事
- 小、中、大故事的混合
大小合适的故事能够进行进度跟踪并降低工作未完成的风险。
如果故事不适合怎么办?
对于迭代来说太大的故事需要拆分:
🔪 故事拆分策略
按用户角色
- 原始:"用户可以管理他们的个人资料"
- 拆分:"用户可以编辑基本信息" + "用户可以上传个人资料照片"
按工作流步骤
- 原始:"用户可以完成结账"
- 拆分:"用户可以输入配送信息" + "用户可以输入支付信息" + "用户可以审查和确认订单"
按业务规则
- 原始:"系统计算配送成本"
- 拆分:"计算国内配送" + "计算国际配送"
按数据变化
- 原始:"用户可以从多个来源导入数据"
- 拆分:"从 CSV 导入" + "从 Excel 导入" + "从 API 导入"
按验收标准
- 原始:有 10 个验收标准的故事
- 拆分:多个故事,每个有 2-3 个标准
目标是在适合迭代的同时独立交付价值的故事。
跨越多个迭代的工作
有时工作合法地跨越多个迭代。你如何处理这个问题决定了你是保持敏捷性还是陷入小型瀑布。
史诗方法
大型计划通过史诗跨越迭代:
✅ 多迭代史诗
史诗:支付处理系统
迭代 1:
- 用户可以添加信用卡支付方式
- 用户可以查看保存的支付方式
迭代 2:
- 用户可以使用保存的卡完成购买
- 用户可以删除支付方式
迭代 3:
- 用户可以添加 PayPal 支付方式
- 用户可以设置默认支付方式
为什么有效:
- 每个迭代交付可工作的功能
- 价值增量交付
- 可以在迭代之间调整优先级
- 早期迭代为后续工作提供信息
这在朝着更大目标努力的同时保持敏捷性。
反模式:跨迭代携带故事
跨迭代携带未完成的故事表明问题:
🚫 故事结转问题
故事结转的原因:
- 故事对于迭代来说太大
- 低估了复杂性
- 意外的阻碍
- 迭代期间范围蔓延
- 团队容量高估
为什么有问题:
- 没有交付可工作的软件
- 速度计算中断
- 团队士气受损
- 表明计划不佳
- 隐藏真实进度
更好的方法:
- 将故事拆分为更小的部分
- 将部分工作作为单独的故事完成
- 将未完成的工作移回待办事项
- 重新估算和重新计划
偶尔的结转会发生,但频繁的结转表明系统性问题。
处理未完成的工作
当故事在迭代中无法完成时:
💡 迭代中调整
选项 1:拆分故事
- 识别可完成的部分
- 为已完成的工作创建新故事
- 将剩余工作移至新故事
- 完成并演示完成的部分
选项 2:返回待办事项
- 承认故事无法完成
- 返回待办事项重新优先排序
- 将团队重点放在可完成的故事上
- 基于学习重新估算
选项 3:扩展定义
- 减少范围以适应迭代
- 与产品负责人协商
- 交付减少但完整的功能
- 将剩余范围添加为新故事
不要做的事情:
- 不重新评估就结转
- 延长迭代以完成故事
- 标记为"90% 完成"
- 忽略问题
关键是保持原则:每个迭代交付可工作的软件。
有效使用 JIRA
JIRA 是一个工具,不是方法论。你如何配置和使用它应该服务于你的团队需求。
故事和任务层次结构
JIRA 支持分层工作项:
📊 JIRA 层次结构
史诗
- 大型计划或主题
- 包含多个故事
- 跨迭代跟踪进度
- 战略层面
故事
- 面向用户的功能或能力
- 包含多个任务
- 可在迭代内完成
- 战术层面
任务
- 实现工作
- 故事的一部分
- 分配给个人
- 操作层面
子任务
- 可选的进一步分解
- 任务或故事的一部分
- 非常细粒度的工作
- 通常是不必要的开销
大多数团队使用史诗 → 故事 → 任务。子任务通常是过度的。
工作流配置
配置 JIRA 工作流以匹配你的流程:
🔄 工作流状态
最小工作流:
- 待办
- 进行中
- 完成
扩展工作流:
- 待办事项
- 准备开发
- 进行中
- 代码审查
- 测试
- 完成
基于以下选择:
- 团队规模和结构
- 可见性需求
- 角色之间的交接
- 监管要求
更简单的工作流减少开销。仅在提供价值时添加状态。
常见的 JIRA 错误
团队经常以可预测的方式误用 JIRA:
🚫 JIRA 反模式
过度工程化工作流
- 为每种可能的条件设置 15 个状态
- 复杂的转换和规则
- 管理工单的时间多于工作时间
- 流程成为目标而不是工具
将 JIRA 用作文档
- 工单描述中的详细规范
- 工单作为需求文档
- 失去故事的对话性质
- 创造虚假的完整感
跟踪一切
- 每次对话都变成工单
- 每个错误都得到完整的故事处理
- 管理开销占主导地位
- 团队淹没在工单管理中
速度游戏
- 夸大故事点以显得高效
- 创建不必要的故事
- 人为拆分工作
- 指标变得毫无意义
JIRA 应该使工作可见和可管理,而不是创造额外的工作。
JIRA 最佳实践
使用 JIRA 支持你的流程:
✅ 有效的 JIRA 使用
保持简单
- 最少的必填字段
- 简单的工作流
- 清晰的命名约定
- 易于使用
专注于沟通
- 使用评论进行讨论
- 链接相关工单
- 标记相关人员
- 保持对话可见
维护待办事项
- 定期梳理会议
- 归档旧工单
- 保持优先级最新
- 删除过时的工作
用于计划
- 从待办事项进行迭代计划
- 速度跟踪容量
- 燃尽图显示进度可见性
- 回顾行动项
JIRA 对于计划、跟踪和沟通最有价值——而不是作为综合项目管理系统。
组件和标签
JIRA 提供组件和标签来组织工作。理解何时使用每个有助于保持清晰。
组件:架构组织
组件代表系统的各个部分:
🏗️ 组件使用
组件代表什么:
- 系统模块或服务
- 技术领域(前端、后端、数据库)
- 产品领域(结账、搜索、个人资料)
- 团队所有权边界
示例组件:
- 认证服务
- 支付处理
- 用户界面
- 移动应用
- API 网关
好处:
- 按系统区域筛选工作
- 分配组件所有者
- 跟踪工作分布
- 识别瓶颈
当组件映射到清晰的架构或组织边界时效果最好。
标签:灵活分类
标签提供灵活的标记:
🏷️ 标签使用
标签代表什么:
- 跨领域关注点(安全、性能)
- 工作类型(错误、增强、技术债务)
- 主题或计划
- 临时分组
示例标签:
- security-audit
- performance-optimization
- customer-request
- technical-debt
- quick-win
好处:
- 每个工单多个标签
- 易于添加/删除
- 不需要配置
- 灵活的分类
标签比组件更灵活,但如果没有纪律可能会变得混乱。
组件与标签
根据持久性和结构选择:
📋 何时使用每个
使用组件用于:
- 永久系统结构
- 团队所有权
- 架构边界
- 长期组织
使用标签用于:
- 临时计划
- 跨领域关注点
- 临时分组
- 灵活的分类
示例:
- 组件:"支付服务"
- 标签:"pci-compliance"、"high-priority"、"customer-request"
组件提供结构;标签提供灵活性。适当使用两者。
真实世界示例:构建功能
让我们通过一个现实的示例来演示如何从史诗到任务分解工作。
功能请求
产品经理提出请求:“我们需要让客户在我们的网站上购物时选择手机颜色。”
这是一个典型的功能请求——它描述了要构建什么但不是为什么。在跳入 JIRA 创建工单之前,团队需要理解价值。快速对话揭示了真正的问题:客户打电话给支持询问手机是否有特定颜色,许多人在无法轻松看到颜色选项时放弃购买。业务目标是通过在购物期间使颜色选择明显来减少支持电话并提高转化率。
这个背景改变了团队处理工作的方式。如果不理解价值,他们可能会构建一个技术上可行但不会减少支持电话的最小颜色下拉菜单,因为它很难找到。有了背景,他们知道该功能需要突出和可视化。“为什么"塑造了"如何”。
创建史诗
首先,为整体计划创建一个史诗。现在团队理解了价值,他们可以清楚地写出来:
🎯 史诗:产品定制
描述: 使客户能够在购物体验期间定制产品选项(从手机颜色开始)。
业务价值:
- 减少关于颜色可用性的支持电话(目前占咨询的 30%)
- 通过消除购买摩擦提高转化率
- 减少因不确定颜色而放弃购物车的客户
- 为未来定制选项(保护壳、存储)奠定基础
正在解决的问题: 客户在购物期间看不到可用的颜色,导致支持电话和放弃购买
成功标准:
- 客户可以看到每个手机型号的可用颜色
- 客户可以选择他们喜欢的颜色
- 选定的颜色影响产品图像和定价
- 库存反映特定颜色的可用性
- 订单系统捕获颜色选择
史诗捕获战略目标而不规定实现。
分解为故事
接下来,将面向用户的功能识别为故事:
✅ 史诗下的故事
故事 1:客户可以查看可用颜色 作为浏览手机的客户 我想要看到每个型号有哪些颜色可用 以便我可以决定手机是否有我喜欢的颜色
验收标准:
- 产品页面上显示颜色选项
- 显示颜色名称和视觉色块
- 指示颜色是否缺货
- 在移动和桌面上工作
故事 2:客户可以选择手机颜色 作为准备购买的客户 我想要选择我喜欢的手机颜色 以便我收到我想要颜色的手机
验收标准:
- 客户可以点击选择颜色
- 选定的颜色在视觉上突出显示
- 产品图像更新以显示选定的颜色
- 如果颜色影响定价,价格会更新
- 添加到购物车时选择保持
故事 3:客户可以在购物车中看到颜色 作为审查订单的客户 我想要在购物车中看到选定的颜色 以便我可以验证我订购的是正确的产品
验收标准:
- 购物车显示手机型号和颜色
- 显示特定颜色的产品图像
- 客户可以从购物车更改颜色
- 颜色选择延续到结账
每个故事交付独立价值并适合迭代。
将故事分解为任务
对于故事 1,创建实现任务:
🔧 故事 1 的任务
后端任务:
- 向产品数据库架构添加颜色字段
- 创建 API 端点以按产品获取颜色
- 实现颜色库存跟踪
- 向产品 API 响应添加颜色数据
前端任务:
- 设计颜色选择器 UI 组件
- 实现颜色色块显示
- 添加缺货指示器样式
- 与产品页面布局集成
- 确保移动响应式设计
测试任务:
- 为颜色 API 编写单元测试
- 使用各种数据测试颜色显示
- 验证移动响应性
- 使用缺货场景测试
- 跨浏览器兼容性测试
任务可以分配给不同的团队成员并并行工作。
迭代计划
在迭代计划中,团队选择故事:
📅 迭代计划
迭代目标: 使客户能够查看和选择手机颜色
选定的故事:
- 故事 1:客户可以查看可用颜色(5 点)
- 故事 2:客户可以选择手机颜色(8 点)
推迟:
- 故事 3:客户可以在购物车中看到颜色(5 点)
- 根据优先级推迟到下一个迭代
团队容量:
- 5 名开发人员,2 周迭代
- 估计容量:30 点
- 选定的工作:13 点
- 为其他工作和未知数留出缓冲
团队承诺交付故事 1 和 2,它们一起提供端到端的用户价值。
迭代期间
随着工作进展,任务在工作流中移动:
🔄 迭代进度
第 1-3 天:
- 后端和前端任务并行开始
- 颜色 API 端点完成并测试
- 颜色选择器 UI 组件设计完成
第 4-7 天:
- 数据库架构更新颜色数据
- 前端颜色显示集成
- 移动响应式设计完成
- 故事 1 完成并演示
第 8-10 天:
- 故事 2 实现开始
- 颜色选择逻辑实现
- 产品图像切换添加
- 故事 2 完成并演示
迭代评审:
- 向利益相关者演示两个故事
- 客户可以查看和选择手机颜色
- 收集购物车集成的反馈
- 史诗进度:3 个故事中的 2 个完成
迭代交付提供真实价值的可工作功能。
结论
史诗、故事和任务之间的区别不是任意的——它反映了不同的抽象级别和组织工作的不同目的。史诗代表跨越多个迭代的战略计划。故事代表独立交付价值的面向用户功能。任务代表有助于故事完成的实现工作。
理解这些区别能够实现有效的迭代计划。故事应该适合迭代,每次迭代交付可工作的软件。当工作太大时,将其拆分为史诗下的多个故事,而不是任务。每个故事都应该交付独立价值,即使史诗未完成。
有效使用 JIRA 意味着配置它以支持你的流程,而不是让它决定你的流程。保持工作流简单。使用组件进行架构组织,使用标签进行灵活分类。专注于沟通和计划,而不是全面的文档。
真实世界的示例演示了如何将功能请求分解为史诗、故事和任务。从战略目标(史诗)开始,识别面向用户的功能(故事),并将故事分解为实现工作(任务)。这种层次结构既能实现战略计划又能实现战术执行。
常见错误包括将任务视为故事、创建跨越多个迭代的故事以及过度工程化 JIRA 工作流。这些错误创造了没有价值的开销。保持简单:史诗用于计划,故事用于功能,任务用于实现。
当故事不适合迭代时,拆分它们。使用拆分策略:按用户角色、工作流步骤、业务规则、数据变化或验收标准。目标是在适合迭代边界的同时独立交付价值的故事。
跨越多个迭代的工作应该组织为包含多个故事的史诗,而不是作为跨迭代携带的单个故事。这在朝着更大目标努力的同时保持每个迭代交付可工作软件的原则。
关键见解是这些工作项类型服务于不同的目的。史诗提供战略背景。故事实现价值的迭代交付。任务组织实现工作。将每个用于其预期目的,你的敏捷流程将支持有效的软件开发,而不是创造管理开销。
在创建下一个 JIRA 工单之前,问:这是否独立交付用户价值?如果是,它是一个故事。它是更大计划的一部分吗?如果是,将其链接到史诗。它代表实现工作吗?如果是,将其作为故事下的任务。这些简单的问题澄清了如何有效地组织工作。