提起用户故事拆分,我们听得最多的就是INVEST原则(关于INVEST原则可以参考文章“用户故事等于需求说明”——你一定没有写好用户故事),但很多人面临的问题是拿到一个较大的用户故事时,该如何拆分才能使得它满足Small的原则呢?接下来,就和大家一起讨论一下如何拆分用户故事。

首先,拆分可以参考以下流程:评估待拆分用户故事-按方法拆分-评估拆分结果。(文末有彩蛋,不要错过)

评估待拆分用户故事

拆分前,我们需要知道手中的用户故事是否需要拆分,就是目前是否已经符合了Small的原则。我们推荐一个用户故事在1-2天内能完成,最多不超过3天,则符合Small原则。有些地方给出的说法是1/5-1/10团队速率,这个算法和你每个迭代天数以及团队成员数有关系,所以我个人还是喜欢简单的说,1-2个工作日能完成算Small。在这种情况下如果你的用户故事已经符合了INVEST其他原则的话,那就没必要拆成多个用户故事了,因为再拆就增加了管理成本(这里不包括拆成多个task,task可以再多拆分的)。

好,当你已经根据上面评估了用户故事,发现依旧需要拆分的话,那么可以按下面方法进行拆分。

按方法拆分

目前业界比较好的方法是Richard Lawrence的方法,原文请参考https://agileforall.com/patterns-for-splitting-user-stories/,下图为已官方翻译的中文版本。

图片来自Lawrence官方

原文里有作者的切分方式,这里我只根据我的理解选择更熟悉的例子,同时合并了其中一些方法。

方法一:按流程拆分

作为有爱心的有财力的中国人,我可以从国外进口口罩捐给武汉。

这个用户故事涉及的过程就很多了,需要找到国外可靠的口罩供应商,然后付款,运回国内,再送到武汉捐给指定医院等等。我们可以先分析整个用户故事成一个一个连续的流程,如果每个小流程作为一个用户故事,能对用户有价值,那我们就先这么拆开。结果比如下面

l  作为有爱心的有财力的中国人,我可以寻找个国外的朋友帮忙寻找可靠的口罩来源。

l  作为有爱心的有财力的中国人,我可以在这个来源付款购买指定数量的口罩。

l  作为有爱心的有财力的中国人,我可以将口罩从外国运回国内。

l  作为有爱心的有财力的中国人,我可以将口罩从国内某地送到武汉捐给医院。

方法二:按操作种类划分

作为有爱心的中国人,我可以在口罩购买平台上操作以完成购买。

如果是一个业务更简单的系统的话,对应的就是增删改查动作。这里的操作会复杂些,把每个操作拆分成一个用户故事即可。

l  作为有爱心的中国人,我可以在口罩购买平台上购买。

l  作为有爱心的中国人,我可以在口罩购买平台上退货。

l  作为有爱心的中国人,我可以在口罩购买平台上查询。

l  作为有爱心的中国人,我可以在口罩购买平台上卖货。

方法三:拆出主要的工作

作为有爱心的中国人,我可以购买N95/KN95/医用外科三种口罩进行捐赠。

整个购买捐赠流程就很复杂了,还要买不同种类的口罩,明显这三种口罩可以拆成三个故事,同时考虑一点,就是无差别的完成购买一个口罩进行捐赠的故事后,剩下的两种需要的工作量就会很少了,同时这里如果没有区分三种口罩的优先级的话,我们可以先拆出一个作为主要工作,再看剩下的两个是合到一起还是继续拆分。

比如拆成如下

l  作为有爱心的中国人,我可以购买其中一种(N95/KN95/医用外科)口罩进行捐赠。(3个故事点)

l  作为有爱心的中国人,我可以购买另外一种(N95/KN95/医用外科)口罩进行捐赠。(1个故事点)

l  作为有爱心的中国人,我可以购买最后一种(N95/KN95/医用外科)口罩进行捐赠。(1个故事点)

如果后两个都比较小,合道一起也没问题的话,也可以拆成如下

l  作为有爱心的中国人,我可以购买其中一种(N95/KN95/医用外科)口罩进行捐赠。(3个故事点)

l  作为有爱心的中国人,我可以购买另外两种(N95/KN95/医用外科)口罩进行捐赠。(2个故事点)

方法四:业务规则分类

作为有爱心的中国人,我可以购买三十万个口罩捐赠给武汉。

这里购买的口罩可以选择多种类型,价格不一样,效果不一样,这就是我们要区分的不同的业务规则,拆分后可能如下

l  作为有爱心的中国人,我可以购买三十万个最贵的口罩捐赠给武汉。

l  作为有爱心的中国人,我可以购买三十万个口罩捐赠给武汉,不区分口罩种类。

l  作为有爱心的中国人,我可以购买三十万个口罩捐赠给武汉,只要N95和KN95级别的。

方法五:简单到复杂

作为有爱心的中国人,我可以购买口罩捐赠给武汉。

简单一句话,涉及的业务可以是购买何种口罩,如何捐赠,给什么机构等,明显不能作为一个故事进行交付,需要拆分。但是业务太复杂,一开始无法全都想清楚,可以先做最基本的,然后再根据方法四的业务规则分类进行扩展。

l  (简单)作为有爱心的中国人,我可以购买口罩捐赠给武汉。

l  (复杂)在XXX日期购买。

l  (复杂)通过不同的运输通道送到武汉。

l  (复杂)捐赠给XXX不同的医院。

方法六:推迟性能实现

作为有爱心的中国人,我可以明天购买口罩捐赠给武汉。

明天这个性能太高了,实现起来可能比较困难,我们先实现购买和捐赠,不考虑哪天能完成,再考虑明天这个性能要求。

l  作为有爱心的中国人,我可以购买口罩捐赠给武汉。

l  作为有爱心的中国人,我可以明天购买口罩并完成捐赠给武汉。

方法七:探针

作为有爱心的中国人,我可以明天购买口罩捐赠给武汉。

这个可能对我来说太复杂了,完全不知道该买什么类型的口罩,买30万个大概多少钱,渠道买比较靠谱,怎么捐赠,给哪个机构,如果现在就强行做计划的话,可能最后发现,我手上的钱是不够的,或者周期太长,到最后才发现的话,会损失很多。所以一般都是先去探探路。

l  调查市场上口罩类型、价格、渠道。

l  调查捐赠方式,靠谱的接受机构。

l  实施捐赠(需要等前面的工作完毕后重新评估)

评估拆分结果

拆分完毕后,再用INVEST原则进行评估,如果符合,那就没问题了。但是有的时候会不符合其中某些原则,比如独立性,但是实际业务就只能这样。比如上面提到的方法三的拆分,这个是必然有关系的,不可能先做第二个用户故事后做第一个。这时只能选择不符合独立性原则。

彩蛋

看了上面这么多拆分方法,是否迷糊了?是否每次拆分都要对照上面的方法一个一个的试?其实不需要的,根据经验,拆分用户故事最重要的是,先捋清楚整个业务(划重点,这个最重要,之前很多例子你感觉切分的不如作者好,都是因为对举例的业务不熟悉),然后按照最重要的原则-纵着切即可。如下图所示。

图片来自网络

纵着切的意思是,每个切分出来的需求是个单独对用户有价值的,就像上图中切出来的一块蛋糕,是独立的个体,包括这一块蛋糕的所有层次以及上面的小人。对比的横着切的意思是所有的需求放一起将前台、后台、数据库操作这样切分出来,结果就是先用几个迭代将所有的需求前台工作做完了,再开发后台的,这样无法尽早交付有价值的需求,比如先将蛋糕上上所有的小人都切下来了。

如果业务比较复杂,那么就以MVP的思想,先交付一个简单的端到端的业务,再慢慢扩展复杂程度。如果过于复杂,就尝试探针方法。

如果捋清楚了需求,尝试纵着切,发现很难下手,这时候再来看上面提到的Lawrence的七个方法,寻求帮助。

点击这里,了解更多精彩内容

【华为云技术分享】如何拆分用户故事相关推荐

  1. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  2. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  3. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  4. 【华为云技术分享】直播回顾丨激发数据裂变新动能,HDC.Cloud云数据库前沿技术解读

    3月24日14:00-17:00,HDC.Cloud开发者沙龙系列云数据库专场直播线上开启,此次华为云数据库通过三场直播从NoSQL数据库新技术.数据库迁移.行业解决方案等方面对云端数据库进行深度解读 ...

  5. 【华为云技术分享】【IoT最佳实践】智慧烟感语音报警(配置篇)

    [摘要] 我们模拟一个烟雾报警器上报烟雾浓度和温度,当温度浓度和温度都超过应用服务器设置的阈值时,应用服务器调用华为云语音通知服务拨打用户的手机进行告警. 场景说明 在物联网解决方案中,一个典型的场景 ...

  6. 【华为云技术分享】HBase与AI/用户画像/推荐系统的结合:CloudTable标签索引特性介绍

    标签数据已经成为越来越普遍的一类数据,以用户画像场景最为典型,如在电商场景中,这类数据可被应用于精准营销推荐.常见的用户画像标签数据举例如下: 基础信息:如性别,职业,收入,房产,车辆等. 购买能力: ...

  7. 【华为云技术分享】开发团队中的任务没人领取,你头疼吗?

    背景 在传统开发模式下模下,发任务由项目经理指派给个人的,而在敏捷开发模式中,是由任务是项目经理指派给个人的,而在敏捷开发模式的务队领取的.很多企业开发任务的时候,有几个任务型中认领怎么办?问题:&q ...

  8. 【华为云技术分享】【DevCloud · 敏捷智库】如何利用核心概念解决估算常见问题

    摘要:团队用于估算时间过多,留给开发的时间会相应减少,大家工作紧张,状态不佳.团队过度承诺直接造成迭代目标不能完成,士气低落.以上弊端直接伤害敏捷团队,是敏捷团队保持稳定健康节奏的阻力. 背景 敏捷江 ...

  9. 【华为云技术分享】Python大神编程常用4大工具,你用过几个?

    摘要:Python是一种跨平台的编程语言,能够在所有主要的操作系统上,运行你编写的任何Python程序.今天介绍几款常见的工具:Python自带的解释器.文本编辑器(Geany.Sublime Tex ...

最新文章

  1. Value xxx of type org.json.JSONObject cannot be converted to JSONArray
  2. 协程 coroutine
  3. ArduinoIDE安装与配置与第一个程序的烧录和运行——人人都能玩硬件
  4. discrete mathematics important questions
  5. css float(脱离正常流:向左/右浮动直到父元素/另一float, 不占空间)
  6. 管控研发部门USB设备
  7. 牛笔了!Android面试真题解析火爆全网,面试必备
  8. Adobe illustrator 调整画板大小 - 连载17
  9. 安装nginx时关系依赖库openssl.lib时,出现:error: 'NR_syscalls' undeclared (first use in this function)
  10. 微商如何打印电子面单
  11. Tableau可视化学习笔记:day07-08
  12. matlab生成的图显示数据类型,matlab中数据类型及图像显示
  13. YouTube批量下载开源代码汇总
  14. kera中各种accuracy的介绍
  15. MFC简易RTF编辑器
  16. javascript:void(0)的作用
  17. Android曲线水波纹动画,Android水波纹显示进度效果,很炫
  18. 分享一个VS写的PDF打印控件
  19. 2020.10.08丨全长转录组之参考基因组比对
  20. 关于js join 方法介绍

热门文章

  1. SLAM Cartographer(3)定位和子图构建节点
  2. 视觉SLAM笔记(48) 局部地图
  3. 联想m100显示耗材_RTX3070显卡搭档高性能显示器,畅玩精美游戏大作!
  4. c语言中空格算空行吗,1、程序中空格与空行使用规范
  5. 载波恢复算法 Blind Phase Search 算法(盲相位搜索算法 BPS算法)
  6. mysql oracle 锁机制_Mysql锁机制
  7. mysql导出可执行文件_实例讲解MYSQL注入中导出可执行文件至启动项原理(三)...
  8. python如何将多张excel表内数据求和_Excel批量操作,把你的工作效率提升10倍以上(1)...
  9. [转]iOS SDK:iOS调试技巧
  10. windows 8,关闭随意窗体都提示“已停止工作”的解决的方法