美文网首页思想学习
每天都在发生的事情——什么是用户故事地图

每天都在发生的事情——什么是用户故事地图

作者: 乌希萨玛 | 来源:发表于2014-11-18 09:47 被阅读3265次

    其实你已经知道怎么做了

    也许你现在觉得创建用户故事地图是一件很难的事,整个过程中充满了复杂和神奇。但其实就在此时此刻,你已经具备了创建一个用户故事地图的能力和知识,所以我保证这个过程一点儿也不困难。让我们从一个日常生活中常见的例子开始。为了再进一步简化,就从你的生活开始。随着这个例子的展开,也许我会给你已经知道了的事情重新起一些名字。

    找一叠即时贴和一支笔,我说什么你就做什么。

    别担心,去准备一下吧,我等你。

    准备好了吗?

    1. 写下关于你的故事,一次一个

    闭上你的眼睛,回想一下今天早上你醒来的那一刻。你至少“醒来”了对吧?那么第一件你回想起来的事情是什么呢?现在睁开你的眼睛,把它写下来,写在一张即时贴上。我也会跟你一起想、一起写的。我第一张即时贴上写着“点击闹钟的'小睡一会儿'”。让我不爽的是,这件事几乎每天早上都会发生,如果是一些很糟糕的早晨,我会敲上闹钟两次或者三次。

    现在,撕下这张即时贴把它贴到你面前的桌子上,然后回想今天早上你做过的下一件事情,把它写下来、撕下来,贴到第一张边上。然后继续。

    我的第二张和第三张即时贴上写着“关上闹钟”、“昏昏沉沉跌跌撞撞地走进浴室”。

    一直写到你终于准备好出门上班了,如果你今天不上班,那就写到你已经准备好正式开始这美好的一天吧。我通常会以“进入我的爱车”作为最后一张即时贴。

    我觉得你能在三到四分钟之内就能写完所有的即时贴。

    “任务”就是我们做的事

    看一下你写下的所有即时贴,注意一下它们是不是都是动词短语?至少绝大多数是吧。这些动词短语就是任务,例如“冲澡”、“刷牙”。

    所谓任务就是我们为了某个特定的目的而按顺序做的一系列事情。

    在软件里,人们按照某个特定的目的而按顺序做的一系列事情我们就就叫它们“用户任务”。这是一个对于用户故事地图来讲非常重要的概念,甚至比写下并讲出一个好的故事还要重要。

    用户故事地图中的即时贴上记录着人们如何使用你的软件,你也许会注意到它们几乎都是动词短语。

    现在休息几分钟,想想刚才的过程有多么的容易。

    我让你写下你所做的事情,之后所有的任务就从你的脑海中一个个地蹦出来了。这个概念是如此的重要,却又如此自然而然,这让我觉得这个过程非常酷。

    先别着急沉醉在“任务”这个词里。如果你是一个项目经理,你会注意到项目计划中充满了各种“任务”。如果你是一个程序员,在敏捷开发中正在使用用户故事,你会发现在做计划的时候会写上一堆开发和测试的“任务”。如果你既不是一个项目经理,又不是一个程序员,那么在使用“任务”这个词的时候要加倍小心。因为项目经理和程序员会认为你说的“任务”跟他们的使用方法不太一样,他们也许会告诉你,你对这个词的使用方法似乎不太对。

    用户任务是构建用户故事地图的基本元素

    现在,数数你写下的这些任务,大多数人都会写下大概15~25张即时贴。如果你写下的比这个数要多,那你简直太棒了。如果你写下的比这个数要少呢?哥们儿,你一定是过着一种非常简约的生活吧,我无比渴望每天早上自己也能像你这么快就能出家门。但你最好回头看看你的列表,看看是不是把一些事情给跳过去了。

    我的任务和你的任务是不同的

    我相信,“人与人是不同的”这个观点对于每个人来讲都不是什么新鲜事。你会在人们选择做什么事情的时候发现这种不同。

    举个例子来说,总有一些人有动力和自律,几乎每天早上都会去晨练。如果你写下了几张关于晨练的任务,那你就太棒了!我一直还在为这个目标而努力。

    还有些人会因为家庭而有一些额外的任务。如果你有孩子了,我保证你会比那些没有孩子的人多写下很多任务。如果你养了一条狗,那也许在你的桌子上会多出来几个关于照顾狗的任务。

    当你在考虑人们如何使用你做出来的软件的时候,牢记这一点:人与人是不同的。他们在使用软件的时候也许会有不同的目的。他们也许在不同的场景下使用你的软件,而这个场景会迫使他们做出一些你想不到的事。

    我只是更关注细节

    在这个练习里,有些人写下了比其他人更多的细节。他们也许会把“做早饭”分成“把面包放入烤面包机”、“倒一杯果汁”。如果是我老婆的话,也许她会写下一个让我深恶痛绝的任务——“在果汁里加入紫甘蓝”。

    任务就像是大石头,你可以用锤子把大石头敲碎成一堆小石头,而这些小石头仍然是石头。到现在为止我也搞不清一块大石头究竟要大到什么份儿上就会被称作“巨石”,一块小石头要小到什么份儿上就会被称作“鹅卵石”。不过提到把大任务和小任务区分开,还是有一个很有效的方法的。

    我的朋友Alistair Cockburn在他的著作《编写有效用例》中介绍了一个关于“目的等级”的概念。别慌,咱们不是要开始写用例了。只是我们在谈论人类行为的时候这个概念非常有用。

    Alistair使用了“海平面”的比喻来形容这个概念。海平面位于正中间,其它的所有东西都位于海平面的上面或下面。一个海平面级别的任务意味着我们希望完整而单独地完成它。你有没有写下“冲澡”这个任务?这就是个海平面任务,因为你不会在进行到一半的时候去想:“嗯,洗澡这件事先拖一拖吧,我先去搞杯咖啡喝,等会儿再继续冲澡。”Alistair管这类任务叫做“功能级别任务”,并用海波浪来标示它。不过我们还是管这类任务就叫任务吧。

    像“冲澡”这个任务可以被拆分成很多个更小的子任务,比如“调整水温”和“洗头发”,如果是我的老婆的话,可能还要加上“用丝瓜络清理死皮”之类的。始终要注意,人与人是不同的,你会看到人们执行这些任务的时候选择的行为是不同的。因为这些任务在海平面之下,所以Alistair用小鱼的图标来标识这些任务。

    最后,我们可以将一批任务上升到“摘要任务”级别,“洗澡”、“剃须”、“刷牙”以及所有其它在你起床之后要做的类似的任务,都可以被归整到一个“摘要任务”中,我没想好管它叫什么,“个人清洁“?或者叫”清晨洗礼“?不过好像“洗礼”是个挺傻的词儿,算了,别用它了。

    使用目的等级的概念,可以帮助你把一些小任务集合起来,或者是把一些大的任务分解开。

    2. 组织你的故事

    如果你还没有把你的任务组织起来,那请将你的任务们按照先后执行的顺序,从左到右排列起来。

    用你的手指指着第一张即时贴,试着讲一个故事,就从“首先,我做这件事”开始。然后把手指挪向下一张即时贴,说“然后,我做这件事“。之后从左向右继续讲你的故事。你会看到每张即时贴都是一个步骤,而连接这些步骤的则是一个小巧的连词:然后。

    我管这种从左向右的顺序叫做”故事讲述顺序“,或者是个更华丽的名字:”叙述流“。我们管这整件事叫做一个”地图“,而叙述流就是这个地图的横坐标。

    由于我的叙述流已经变得很长了,所以我开始把一些同时发生的事情堆叠起来。随着我把整个流程展开,我发现我遗漏了一些细节。这让我去仔细思考被遗漏的事情究竟是不是真的重要。

    把遗漏的细节补充进去

    挪动即时贴的方式最爽的地方在于能够让我们看到一整个大的故事。看着这些已经被组织在叙述流中的故事,我们会更容易发现被遗漏的部分。

    现在回过头去看看你的那张正在变大的地图,看看有哪些步骤是你遗漏了的。

    我只增加了几张即时贴,因为有太多在“海平面”之下的细节了,所以我不打算把它们写出来了。如果我这么做了,我的桌子上也许会有上百张即时贴。

    3. 探索其它的故事

    直到现在为止,都太明显了,对吧?学习这些东西感觉都对不起你浪费的那些纸!

    但是,好玩的事儿才刚刚开始呢。

    花上一分钟想想你昨天早上都做什么了。如果昨天早上和今天早上你做过的事有什么不一样的,把它们写下来并加入到你的故事地图中。

    想象一下一个糟糕的早上,如果没有没有热水了会怎样?你会怎么做?如果麦片或者牛奶或者其它的什么你经常作为早餐的什么东西没有了呢?如果你闺女因为没做作业而一大清早情绪崩溃了怎么办(这种事情在我家每隔一段时间就会发生一次)?

    把你处理这些事情时候的任务写下来并加入到你的故事地图中。

    现在想象一个你理想中的早晨。哪些事情能够让你的早晨变得非常完美呢?如果早上我去晨练了,并且伴随着阅读享受了一顿悠闲的早饭的话,对我来讲就算是一个完美的早晨了。不过如果那样的话,我希望我能够早起一会儿并终止每天早上和闹钟的作战。

    同时注意一下你最好把一些任务放到同一列当中,不仅为了节省空间,同时还意味着他们和其它的任务有相像的地方。例如,你可能会把“做一顿丰盛的早餐”和“快速做一顿早饭”放到同一列中。

    我的朋友David Hussman管这件事叫做“怎么办”的游戏。不幸的是,我们也许可以玩这个游戏很长的时间,但 那会让我们的地图变得无比巨大。我加了一些我希望能够在早上做的事,例如晨练、伴随着放松的阅读吃一顿早餐。我还加了一些经常在早上发生的其它事。

    把细节、其它的选项、变化和异常加入到你的地图中

    保持叙述流

    有没有注意到当你开始加入这些新的任务的时候,你会重新调整你的叙述流。至少我会的。例如,我需要把“晨练”插入到“起床”和“冲澡”之间。同时我需要加入“穿上运动服”,而这个任务和我洗完澡之后的“穿衣”还是不同的。

    如果你很轻松自然地把事情都排列好,你会对呈现出来的叙述流感到很满意。

    如果现在你讲出你的故事的话,你会发现你可以用很多种方式讲出这个故事。你可以讲关于典型的早上的故事、关于一个豪华早上的故事、关于发生了一件或两件紧急事件的早上。所有的这些故事都可以采用同样的方式——用手指从左向右一张一张地指着不同的即时贴。试试使用一些连词来把你的任务连接起来,你也许会说:“通常我做这件事,但有时候我做这个。”或者“我做这件事,或者这件,然后是这件事。”当然我希望你用具体要做的事来代替“这件事”这个词,因为从我这里看不到你指的是哪张即时贴。

    我小的时候,有一个儿童图书系列,叫做《选择你自己的大冒险》,也许你也记得它们。它会在你阅读完一个章节的时候给你好几个选项,你的选择会决定英雄接下来要做的事。在每个选项后面都是一个页码。如果你选择了一个选项,就可以把书翻到指定的页码继续读。实话实话,我从来都不是这类书的粉丝。不管我做出什么样的选择,故事最终好像都会结束在同一个地方,而且对于一个真正的大冒险的话,似乎选项从来都不够。故事地图有点像这种书,或许更好一点儿。地图中的道路数量几乎是无限的,如果你想想一个使用你的软件来达成他们自己目标的人,这种情况确实更真实一点儿。

    如果你想让整件事情变得更加有挑战性一点儿的话,那就和你的同事们一起来做这个练习。你会更多地了解这些每天和你一起工作的人,并且你会发现找到每个人都同意的叙述流是一件有趣的事儿。在这里,“有趣”的意思是“争论”。总有一些人在吃完早饭去洗澡,而另外一些人正好相反,同样,关于刷牙也是个经常发生的争论,你是在吃早饭前刷牙还是在吃早饭后刷牙呢?或者早饭前后各刷一次?

    放轻松。

    如果你们有分歧,那证明这件事其实不是什么大不了的事儿。例如,早饭前洗澡或者早饭后洗澡只是个人喜好问题。如果找到那些你和你的同事们共通的事情,你会发现在真正重要的事上不会有什么分歧,例如把“穿衣服”这个任务放在“冲澡”这个任务之后,这件事就不是什么个人喜好问题了,毕竟冲澡之前穿衣服只会让你湿漉漉地出现在你的同事面前。

    4. 提炼你的故事地图,找到一条主线

    到现在为止,你的故事地图应该看上去很宽了,如果你探索了一些其它选项,应该看上去也有了一定高度。应该差不多有了30个左右的任务吧,有点儿像一只诡异的动物的脊椎骨和肋骨。

    回头从左向右看一下你的故事地图,你会发现有一堆故事好像应该原本待在一起。例如,那些你在浴室中完成的事情,或者那些在厨房为了做早饭而做的事,或者那些你离开家门之前的琐事——看看天气、抄起外套、把电脑和一天用的东西装进包里之类的。你发现了吗?这样一堆一堆的任务好像原本就应该待在一起,帮你完成一个更大的目标。

    在每堆相似的任务上面,贴上一个不同颜色的即时贴,并写上一个动词短语,把下面那些待在一堆的任务提炼出来。

    如果你没有其它颜色的即时贴了,让我教你个小把戏——其实每张即时贴都有两种不同的形状!只需要把一张即时贴旋转45°……唰!一张钻石形状的即时贴就闪亮登场了!当你希望拥有不同形状的即时贴的时候,就可以用这个法子。

    这些更高一层的任务被称作”活动“。活动把一堆由相同的人在相同的时间内所做的任务组织起来,去达成一个特定的目标。当你阅读在故事地图上面的活动的时候,它们也构成了一个叙述流。这一行即时贴就是整张故事地图的骨干。如果你有一张由非常多数量的即时贴构成的故事地图,而你又非常想把它共享给别人的话,一个好的方式就是讲一个高层次的故事。只需要阅读一下故事地图的主干,使用”然后,他们……“这个连接词把每个活动连接起来。

    活动可以为了一个共同的目标把任务聚合起来。

    这里是我把活动加入到故事地图中之后的样子,活动给了整张故事地图一个骨干。它让阅读故事地图和寻找某个任务变得更加容易,至少对我来讲是这样的。而且骨干还能让我更容易地在宏观上看到早上发生的所有事情。

    活动和更高级别的任务组成了故事地图的骨干

    活动和任务不一定采取同样的表述手段。举个例子,你管早上离开屋子之前做的事情叫什么呢?就是类似拿起背包,找到一份购物清单,查看天气,拿起雨伞(如果需要的话)这种事情。我可能会管它叫”归拢我的杂物“,而你可能会给它起个别的名字。

    当你在为你的客户、你的产品创建故事地图以及找到骨干的时候,最好能够给他们起一个你的客户习惯的名字。

    5. 为了达成某个特性的目标,把你的任务们分片

    接下来会是真正很酷的部分了,在这个小节里你会开始用故事地图帮助你畅想那些没有发生的事情。

    如果看看你创造出来的故事地图,你可能会看到”点击闹钟的‘小睡一会儿’“或者”关上闹钟“在你地图的最左端。想象一下昨晚你忘记设置闹钟了,所以今天早上你没有执行这些”任务“。你猛地睁开眼,看了一眼闹钟,发现几分钟之后你就应该出现在某地,你要迟到了!——别紧张,我们只是假设。

    在一张即时贴上写下”几分钟之内出门“,把它放在故事地图的最左端,靠上的位置。现在设想一条线,从左向右贯穿整张故事地图,就像一条腰带一样。现在,把所有不是必须的任务移到这条线的下方。不需要把活动挪下来,即使在线的上方没有任何这个活动下属的任务了。就让那个活动下面没有任何任务,这表示如果你想在几分钟之内出门,你不需要去达成这个活动的目标。

    现在在最上面的切片里应该只剩下了少数的几个任务。现在回头沿着整个叙述流查看一下,如果在你马上要迟到的时候,还有什么事需要做,而不在故事地图之中的。例如,平时你也许会”冲澡“,但在如此紧急的时刻,”胡乱洗一把脸“或者”用毛巾擦一下身上有异味的部位“这种任务会取代”冲澡“。每当我在一群程序员中做这个练习的时候,我经常看到”多涂一些除味剂“这个任务。我没有偏见,我只是在陈述。

    这里是我的地图,分出来的这一条就是我如果想在几分钟之内出门,要做的所有任务。

    你可以用这个方法考虑不同的目标,把这些不同的目标贴在最左端。比如”享受一个有史以来最豪华的清晨“,或者”为期两周的度假“。你会发现叙述流会保持稳定,但你需要添加或删除某些任务来达成不同的目标。

    采用分片的方式,在特定的目标下识别出对应的任务和细节

    就这些了!你已经学到了所有重要的概念

    太容易了,对吧?随着你创建这个故事地图,你学到了:

    • 任务是描述人们做的事用的,它是动词短语。
    • 任务具有不同的目标等级。
    • 任务在故事地图中从左向右被组织成为叙述流。
    • 故事地图的纵深包含了变化的、可互相替换的任务。
    • 任务被处于故事地图顶端的活动组织在一起。
    • 活动构成了故事地图的骨干。
    • 你可以把故事地图分片,用来识别为了达成某个特定目标而必须的任务。

    相关文章

      网友评论

      本文标题:每天都在发生的事情——什么是用户故事地图

      本文链接:https://www.haomeiwen.com/subject/ouiitttx.html