在极限编程中有一个很有意思的实践,就是隐喻。他是指在系统架构、设计和开发过程中将一些重要、关键、复杂的概念,用隐喻的方式表达出来,方便他人能迅速的理解,双方迅速达成一致。这也是为什么是极限的原因。
隐喻一词metaphor,来源于希腊语metaphora,本意是“传送”即“意义的转换”。隐喻的特征是暗示,暗示的好那隐喻很容易达到沟通的作用,隐喻的不好很容易把人搞晕掉。要隐喻的好,前提条件是双方对隐喻的事物是有一致理解的,即你我都知道对方知道的事实(可以看乔哈里视窗)。
在敏捷过程中常见的隐喻都有哪些呢?我们可以列举一些。
猪和鸡的故事
一天,一头猪和一只鸡在路上散步。鸡看了一下猪说:“嗨,我们合伙开一家餐馆怎么样?”。猪回头看了一下鸡说:“好主意,那你准备给餐馆卖什么呢?”。鸡想了想说:“餐馆卖火腿和鸡蛋怎么样?”。猪说:“不开了,我全身投入(火腿是一次性资源),而你(鸡蛋是可再生的)只是参与而已!”
它展示了在Scrum中的两组角色:猪和鸡。猪被认为是Scrum团队中的核心成员,在一个团队中产品的负责人和Scrum主管和开发团队就是"猪"角色。鸡不是Scrum的一部分,但必须要考虑他们,用户、客户或提供商、经理等扮演着“鸡”角色。需要说明的是在Scrum团队中不会有一个人同时成为“猪”角色和“鸡”角色。
湖水与石头
当一个湖中有很多水,水面很高时,湖中的石块都被水所覆盖,此时即使有很大的暗礁,人们也看不到。但是当水量减少,水面降低时,一些大石块就暴漏出来了。接下来随着湖水的进一步减少,中等石块和小石块也逐步被人们发现。
这告诉我们一个什么道理呢?想想软件开发的过程吧,如果采取大批量的做法,一次性提交很多功能,就好比拥有很多水量的湖,你看不到其中隐含着的问题,甚至一些很严重的问题,都隐藏在这里面不容易被发现。如果换种做法,采取小批量的交付模式,每次只提交一小部分功能,这会发生什么呢?这就好比湖水减少了,一些隐藏的“石块”立刻就会暴漏出来,这样平时遇到的各种问题,都不会被累积成为一个大包袱,能够被及时发现和解决。
堵车的高速路
一条高速路上,在没有任何车的情况下,一辆车法定最快的速度是120KM/小时,但是这时候高速路的使用效率是最低的。加两辆车,还不错,继续最高速度行驶。但是随着车辆的增多,到了一定程度,司机们就开始减速,不敢以最快的速度往前冲。车辆继续增多,速度继续下降,直到最后,车都在高速上了,高速路同时承载了最多的车辆,但是大家都堵在高速路上打麻将。
为什么会这样呢?每一辆车在我们的研发过程中相当于一个在制品,当我们只有少量在制品的时候,团队能集中精力应对这些在制品,能保证在最短的时间完成工作,相当于车辆在最高的速度在行驶,如果只有一辆车,我们说这种是单件流。每一辆车新开上高速,就相当于我们启动了一个在制品。每一个在制品都会让团队精力分散,启动的在制品越来越多,而交付的越来越少,最终所有在制品都卡在研发过程中,没有能交付的产品。那么怎么办呢?现实生活中如果流量过大,交警一般都会限流,只允许一部分车上高速。在敏捷里面,我们同样要限流,限制同时能启动的任务数,以终为始,真正完成一个任务后才能启动下一个任务,实际这就是精益中WIP的作用。
有节奏的地铁
地铁已经是我们生活中非常常见的交通工具了。地铁有这些特性:
固定节奏:每列车都有自己的节奏,一般每隔几分钟就会有一辆。一般都会有个提示牌高速你下一辆车还剩几分钟。在站台停下开门,几十秒后,关门继续往前跑;
车厢额定容量固定:每个车厢大小差不多,早晚高峰能塞多一些人,但是数量基本都差不多。
每个地铁的目的地非常明确,有明确的线路图,起始站和终点站固定;
固定节奏是Scrum中一个很重要的特点。地铁每几分钟就会有一辆列车前来,每个需要上车的乘客对地铁的时间有预期,就像我们固定每个迭代的时间,每个迭代会进行启动会,就像地铁停车开门,乘客进入。每个故事都可以有规划不用挤着上车,不用担心像公交车一样过了这辆,下一辆不知道什么时候来。同时每个迭代固定时间周期,根据历史数据可以估算团队的容量,每个迭代究竟可以装下多少故事,随着团队能力提高,可以安排一些挑战任务,增加团队容量,就像地铁每个车厢的额定容量是固定的,早晚高峰可以多装一些人。另外每个迭代的目标都是明确的,就像地铁的路线图,从哪里开始到哪里结束。
黄河清淤,束水攻沙
束水冲沙法,就是收紧河道,利用水的冲力,冲击河床底部泥沙,从而达到清淤防洪的目的。一般适用于流量较大的河流,如黄河。最早使用这种方法治理黄河的是明朝著名水利工程师潘季驯,之后历朝历代都采用这种方法治理黄河。
水分则势缓,势缓则沙停,沙停则河饱,尺寸之水皆由沙面,止见其高。水合则势猛,势猛则沙刷,沙刷则河深,寻丈之水皆由河底,止见其卑。筑堤束水,以水攻沙,水不奔溢于两旁,则必直刷乎河底。欲图久远之计,必须筑近堤以束河流,筑遥堤以防溃决;
在精益看板方法中,每个迭代的PB故事卡如即将进入河道的黄河水,如果团队成员一下启动大量故事卡进行开发,就等于将河水分流,团队的精力一下被同时启动的多个故事卡分散了。那么每个故事的流动速度就不高,慢慢就会被堆积在doing阶段,而无法最终交付。但是如果对每个阶段能进入的故事卡的数量进行限制的话,就容易将团队精力集中在当前最重要的少数几件事情上。集团队之力,迅速完成任务,将故事卡迅速拉动到下一状态,这时候再从上游拉动新的故事卡。这就达到限制了河道的宽度,利用水势迅速冲洗砂石,避免砂石堆积的好处。道理和堵车的高速路差不多,这里有更详细的说明。
你们在日常工作中还会用到哪些巧妙的隐喻呢,欢迎告诉我,谢谢。