这个User Story要拆吗?怎么拆?

什么是User Story

其实我觉得要对User Story做一个定义还是挺难的。
曾经的我以为,所谓User Story是User来讲述的Story。
你看啊,User Story的编写范式:

As a role, I want to do something or a piece of functionality, so that I can achieve some business value or statement of intent.

但是,随着真正的实践,我发现,User总是一个缺席的定义者。
我们指望User来定义User Story,而大部分情况下是由我们这群BA来定义的。

我曾经和一名敏捷教练讨论,我们BA总是在臆想用户的需要而写User Story,这样有意义吗?
这名来自美国的副总裁回答我说,至少你们从用户的角度来思考了,不是吗?

image

不过,并没有解答我的疑问,我也相信有很多人和我有同样的问题:

User Story到底是从哪里来的?谁来写?
也有很多人认为需求提出方应该来写User Story,至少也应该来确认User Story是否恰当。
但实际情况是,很多时候我们真的只能靠想象,充分利用我们的“同理心”来想象。

我翻了一下BABOK中对于User Story的定义:

A user story represents a small, concise statement of functionality or quality needed to deliver value to a specific stakeholder.
——《BABOK 3.0》

这样看来,User Story只是用来描述可以带给User的价值的功能或质量需求,而非必须由User提供。

后面这段描述更加明确的指出了这点:

With a focus on stakeholder value, user stories invite exploration of the requirements by promoting additional conversations with stakeholders and grouping functional requirements for delivery.
——《BABOK 3.0》

这里,我们暂停一下,敲个黑板:价值
User Story是强调给用户带来价值的。

OK,我们继续。

广为人知的拆分原则

User Story写起来并不复杂,但是从敏捷的小步快走的角度出发,大部分的User Story是需要进行拆分的。

而各种敏捷著作中都有写明 User Story拆分的INVEST原则:

Independent:独立性

User Story必须高内聚,也就是拥有独立性,不依赖于其他User Story的实现而实现。

如果你将一个User Story拆成前台和后台,那肯定不符合这个原则,因为这两个Story的依赖性非常高。

Negotiable:可协商

User Story并不应该是一个人的一言堂。

之前有个小伙伴问我,是不是应该由BA来写User Story。

我说,BA提供的是初稿,最终稿需要让团队所有相关人员达成一致。

Valuable:有价值

再次敲黑板,价值

价值是User Story的关键所在,这个Story如果对用户是没有价值的,那就需要重新拆分或者重写。

Estimable:可评估

在之前的Scrum文中,其实我提到了关于User Story的Point评估问题。

我们必须保证User Story的可评估,因为User Story是所有实现的基础,我们需要根据评估的结果进行计划、追踪和回顾。

Small:足够小

这个原则也决定了User Story要拆得足够小,至于要拆多小,这个我个人觉得应该由团队协商一致,至少也应该是在一个Sprint可以完成的程度。

我在之前的团队里,当评估的点数大于3的时候,我们就一定要拆。

因为根据我们以往的经验,5点及以上的User Story会导致我们的Sprint失败,非常可能做不完或者测不完。

而拆分的过程也是一个再次思考和讨论的过程,大家很有可能会发现之前被隐藏和遗漏的地方。

Testable:可测试

为用户带来价值的User Story必须是可以测试的。

请反复读一下我上面这句话。

之所以称以上原则为“广为人知”是因为大家都知道拆User Story的时候要遵循这些原则,但是依旧不知道要怎么拆。

怎么拆都怪怪的?

还记得我上面敲黑板的两个字吗?

价值

所有User Story的拆分都要以价值为导向,在拆完后也需要通过“这个小的User Story有给用户带来业务价值吗?”来校验是否拆的合适。

这么说可能有点抽象。
我来举个例子。

有这么个图书馆借阅系统的User Story:

作为一个用户,我希望可以找到满足条件的书籍信息,以便我可以在书架上找到它。

这个User Story有点大,好吧,不是有点大,是非常大。
如果你拿这个User Story去和大家讨论,会面临以下问题的解答:

  • 这个用户是注册用户,还是访问用户?
  • 不同类型的用户操作是一样的吗?
  • 所谓的“满足条件”指的是哪些条件?书名?作者?ISBN……
  • 要展示的书籍信息包括什么?书名?索书号?馆藏状态?
    ……

于是大家讨论了下,决定要拆。
这个User Story给你,你怎么拆?

以下是一种拆法,拆成两个User Story:

第一个:建立图书信息表,里面包括书籍的各种属性。
第二个:按照原型,画三个前台界面,包括:搜索界面和搜索结果界面,以及图书信息展示界面。

还嫌大?
那我就把第二个拆成三个,每个界面一个User Story,够小了吧?

有没有觉得哪里不对劲?
有人说,因为没有按照User Story的格式来写,没有写:

作为一个用户,我希望可以查看搜索界面,这样我就可以开始准备搜索了。

更奇怪了,是吧?
来,想一下,这些被拆出来的Story对用户来说有业务价值吗?
你提供一个前台页面给用户,不能搜索,只能看,是准备打印出来挂到美术馆里面“供人瞻仰”去吗?

那么应该怎么拆呢?
我这里提供一个思路,大家可以揣摩一下。

大的User Story:

作为一个用户,我希望可以找到满足条件的书籍信息,以便我可以在书架上找到它。

第一个 User Story:

作为一个用户,我希望可以通过图书名称找到图书的书名、作者、馆藏状态以及索书号信息,以便我可以在书架上找到它。

第二个 User Story:

作为一个用户,我希望可以通过图书作者找到图书的书名、作者、馆藏状态以及索书号信息,以便我可以在书架上找到它。

或者这么拆:

大的User Story:

作为一个用户,我希望可以找到满足条件的书籍信息,以便我可以在书架上找到它。

第一个 User Story:

作为一个用户,我希望可以通过图书名称找到图书的书名以及索书号信息,以便我可以在书架上找到它。

第二个 User Story:

作为一个用户,我希望可以通过图书作者找到图书的书名、作者、馆藏状态以及索书号信息,以便我可以在书架上找到它。

有感觉到什么吗?

嗯,这样就万事大吉了嘛?
我只能说,图样图森破……

因为这里还有一个延伸的问题,就是程序猿GG看到这样的User Story拆分,很想打人。
为什么?
因为在代码实现的时候,其实在做第一个User Story的时候,可以“顺手”把第二个User Story的逻辑实现了。
而如果不顺手实现,那么意味着在做第二个User Story的时候会需要改才交付完成的第一个User Story的代码。

就好像我们装修房子。

image

之前的拆分方法是:水电进场开工、瓦工进场开工、木工进场开工、漆工进场开工、家具及软装进场。
而我后面的两种拆分方法是:先把客厅的水电、地砖、墙面、家具软装都搞定后,再来依照这个顺序搞一遍卫生间,再搞一遍卧室……

但是,看出差别了嘛?

前面的拆分方法一个工种干完,下一个接着干,只有当所有的都干完了,房子才能交付。
而后面的拆分方法至少保证第一个User Story可以交付一个完整的客厅给用户,这对用户来说是有价值的。

这也是敏捷的奥义所在。

但是,工人们肯定不乐意了,我水管先铺一段到客厅的,后面我还要把铺到客厅的一部分拆了再铺到卫生间去……
哈,也从另外一面说明了敏捷方法明显不适合工程装修。

那么你要怎么说服大家接受User Story的价值导向的拆分方式呢?

关键在于,敏捷的另外一项重要工作:重构
敏捷的开发过程其实很强调重构、自动构建等等。
所以,这也是为什么我一直觉得敏捷的框架和流程是一个完整的体系
你不能抛开重构谈User Story拆分,你也不能无视价值来写User Story

我大概花了两三年的时间才摸索出来写和拆User Story的感觉,当然这和业务熟悉程度也有一定的关系。

我想要说的是,想要拆好User Story是需要自己不断的去摸索的过程,没有办法说我今天看了一篇文章或者听了一堂课,我就能把User Story写好、拆好了。

重点是要亲自动手去拆,去写,去试错。


说了这么多,你在拆User Story的时候遇到了什么问题?

这篇文可以解答你的问题吗?

欢迎你留言分享和讨论关于User Story的问题。

也欢迎你提出你想知道的其他话题,我们可以一起讨论。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容