用户故事INVEST原则,本质上是用来形容“好的用户故事”,而不是“用户故事”,这点请一定要谨记,因此不用怀疑,如果不满足INVEST也可以是用户故事。

下面简单介绍一下各个部分。有一些很好懂我就快速掠过,有一些比较有争议我也会努力讲出我自己的理解。

I——Independent,独立的

这点算是INVEST中最难懂,且最有可能出错的部分。同时也是PO或者研发觉得最困难的一个部分。

所谓独立性,说的是各个用户故事之间不存在依赖性。原先我们对独立性的理解是,在实现功能先后上不能有依赖性,即A的实现不依赖于B,这样子我们就可以更好的根据价值来进行优先级排序。

但是实际工作中,我们遇到过这种需求。看起来是独立的,但实际上依赖性很重。

从功能角度来看没有,但估算用户故事大小的时候,就有非常明显的影响。支付底层逻辑是三个用户故事共同依赖的,无论你优先完成哪个需求,你都需要完成底层逻辑。因此就会出现,第一个完成的用户故事(假设为A),一定会比另外两个故事增加了一些底层逻辑实现的功能。但如果你说先实现用户故事B,那么这部分底层逻辑功能就需要加到B上面去。

这种情况下,拆分出来的用户故事是有依赖性的。

因此,我们对依赖性的定义就要包含两方面:

  • 功能实现之间没有依赖性,即任意顺序实现用户故事都可以,不用刻意考虑技术底层;
  • 功能之间不要出现共同依赖的底层逻辑,这会让底层逻辑必然在某个拆分的用户故事中实现,这对用户故事的尺寸估算带来一定的麻烦,这也是一定意义上的依赖性。

那针对上面的示例,我们怎么做比较合适呢?这里给出一个我个人常用的方法,我一般称其为“模糊细节”。针对于信用卡支付的用户故事,我们拆分成下面的两个,或者三个用户故事,这里以两个为例。为了简化,不再严格按照用户故事模板。

  • 优先支持一种支付方式
  • 再支持另外两种支付方式

通过这种方式,我们将用户故事主体中关于信用卡类型的部分隐藏掉,不会过早的将细节暴露,方便优先级排序与工作量估算,然后借助验收标准来完善用户故事(在正式开发之前完善结束),再进入正式的开发阶段即可。

N——Negotiable,可协商的

可协商体现在需求实现程度可协商。

以登录功能为例,假设有这么一个用户故事。

这里的登陆到底是什么意思?用户名密码?手机验证码?OpenID?扫码登陆?还是其他?

都有可能,这一切并没有在我们写下上面的用户故事的时候就确定了,而是需要PO 与研发团队共同协商后得出结论。可能我们当前只需要实现用户名密码,但是下一个迭代中,我们需要支持微信扫码登陆。

当时这里请注意,Negotiable仅仅是可协商,并不代表PO 一定要接受研发的意见。毕竟PO 才是最终决定用户故事的人。

V——Valuable,有价值的

这个不用谈了,只需要严格按照用户故事模板来写,必然是有价值的,否则在编写阶段就已经被拍死了。

这里有一点要注意:在编写用户故事的时候,一般我们都会紧紧抓住价值,但是在对用户故事进行解聚(Split)时,可能会发生根据模块(Module)而不是功能(Feature)来进行拆分。

E——Estimable,可估算的

所谓可估算的,背后的逻辑是:编写用户故事的人,对具备该用户故事的行业背景。

研发团队是自组织团队,他们负责对用户故事进行估算、拆分、完成等工作。其工作输入主要是来自于PO 与客户/用户,因此作为输入方的PO 是否靠谱就成了最后自组织团队输出是否靠谱的重要判断标准之一。因此,如果PO 自身都不掌握该用户故事的行业背景与知识,我们又怎能相信PO 可以为研发做澄清工作,并让研发通过自组织团队的方式完成交付呢?

具体来说就是,你让一个做电商的PO ,从淘宝去有赞,这个问题不太大。毕竟都是相同行业,模式有差别而已,稍微学习学习还能搞定。但是你是否敢让一个电商PO 去商飞做C919的PO?或者说,如果C919的PO 是淘宝网的PO,这种飞机你还敢不敢坐?

当然,上面的例子比较极端,但放到不同领域或者垂直领域都是适用的。

具备行业知识是写出好的用户故事基础条件之一。

S——Small/Size Appropriate,小的/大小适当的

这个S是当前争议比较多的。

传统的INVEST中,对S的解释就是Small,即认为只有小的用户故事才是好的用户故事,来源见此。

之所以认为小的用户故事是好的用户故事,有以下几个原因:

  • 小的用户故事可以放入短迭代中完成;
  • 小的用户故事更容易被研发所理解,帮助更好的开发;
  • 小的用户故事更容易被估算。

如果我们将用户故事放在“即将开发”的用户故事的话,Small 是毫无疑问非常正确的。
但是,如果我们将用户故事当作Product Backlog的组成元素的话,那么Small可能就不那么合适。

我们考虑一下PBL 排序之后,会是怎样的场景?这里看一下用户故事的冰山模型。

(用户故事冰山模型)

如果我们针对的用户故事是在冰山底层的用户故事,鉴于其优先级较低,我们也不需要在一开始就将这些用户故事细化与拆分,因此这类用户故事不可能是Small的,只能是Size Appropriate。

所以综合来看,我个人是比较接受Size Appropriate这种说法。这种说法可以包含Small的场景,也考虑那些不需要很早就拆分的、较大的用户故事。

T——Testable,可测试的

可测试的重要性毋庸多言,这是用户故事验收标准的重要组成部分之一。

在我的经验中,可测试至少要包含两个要素:

  • 客观性。所谓客观性,从某个测试结果可以得到唯一的结论,即测试通过或者不通过,不存在不同人、不同时间用测试结果可以得到不同的结论;
  • 可重复性。即这种测试不是一次性的,可以重复验证与测试。

好的用户故事

好的用户故事是帮助我们实现敏捷的重要的一步。如何写好用户故事是个技术活,没有太多的捷径。只能通过不断的训练才可以将用户故事写好,而INVEST 就是我们在练习写好的用户故事过程中,重要的尺子。不断的利用这项工具,对自己的用户故事进行反复的改写与练习,才能最终走向用户故事得心应手。

IDCF社区共创读书会 首期汇报,每周四晚8点,冬哥有话说免费直播,关注公众号回复“共读”获取直播地址

  • 8月19日,共读《思考,快与慢》
  • 8月26日,共读《DevOps实践指南》
  • 9月2日,共读《敏捷无敌之DevOps时代》
03-05 15:12