谈谈精益(下篇)——看板系统

此文是《谈谈精益(上篇)——Lean Manufacturing》的续篇。

先说说精益软件开发

制造业的成功,已经证明了精益思想的强大。非常自然地,软件行业的从业者,也希望能够汲取精益的理念,来消除软件开发中存在的浪费,从而能够成功的交付客户价值,获得更高的软件成功率。这其中的先驱者,当属Mary and Tom Poppendieck夫妇。他们出了一本书,名字就是《Lean Software Development》,内容则是如何将精益思想落地于软件行业中,来影响现有软件开发行业的形势。

这里,我们参考制造业的DOTWIMP,来思考对应软件行业的DOTWIMP。希望通过这些原则,来具体指导如何精益地做软件开发——消除浪费(Eliminate Waste)

Defect (Defect)

软件行业中的缺陷,是一个非常普遍的概念。代码或者系统中任何与预期不符的情况,都可以称为缺陷。很明显,缺陷是一种不为客户带来价值,反而会造成巨大浪费的事物。发现缺陷,会造成QA的工作量,修复缺陷,会带来开发的重复工作。根据Lean的原则,我们需要从根本上去除缺陷的产生,而不是事后花费成本修补。并且,当我们捕捉到一个未覆盖的缺陷时,我们需要发现缺陷背后的根本原因,从而保证这个缺陷不会再次出现,不会引入重复的浪费。

单元测试和集成测试,就是保证代码从一开始不引入缺陷的实践之一。诚然,自测试代码中的测试部分,本身确实对于客户来说,没有价值,也是一种浪费。但是,这种开发级别引入的浪费,是为了避免后期更大的浪费出现。在软件开发的开发部署流程中,一个缺陷越晚被发现,定位并修复的成本会越高,也就意味着浪费会更大。

Extra features (Over-production)

作为开发,总是抑制不住冲动,希望软件不仅能够满足当下的需求,当未来有新的需求出现时,也能成功应对。但是,额外的需求功能,也是一种浪费,因为它没有对客户产生价值,但仍需要开发人员花费成本维护和测试。

埃里克莱斯是《精益创业》一书的作者,书中说到:

最大的浪费是构建没人在乎的东西。

做一个能卖出去的产品,而不是卖一个做出来的产品。

Handoff 交接 (Transportation)

任何曾工作在瀑布软件开发方式下的人都对“交接”这个词印象深刻。BA在写好一个很大的需求文档之后,交接给架构师;架构师在做好设计并完成设计文档之后,交接给开发团队;开发写完代码之后,交接给QA团队。在每次交接的过程中,知识不可能全部传下去,会丢失相当一部分。这样,开发人员脑子中的需求,和BA的理解可能大相径庭。

这就是为什么敏捷团队和SCRUM都倡导全功能团队:团队中应包含各个角色,BA、DEV、QA、PM、UX。这样避免了交接带来的浪费,促进了不同角色之间知识的充分分享。

Delay (Wait)

项目进行中任何拖延,都是一种浪费。比如当团队某成员提出一个问题,而能够回答这个问题的人并不能轻易的被找到的时候,这时候Delay产生了,从而浪费也产生了。

Partially completed work (Inventory)

从BA开始准备一个Story的需求描述,到最后达到能够达到上线的状态,中间过程中的Story都被看做是未完成的工作。除非上线,否则不论Story处于任何状态,都没有为客户产生价值。未完成的工作,还有可能推迟了发现问题的时间。

Task Switching (Motion)

没人什么事情比让一个人同时做多件事,更能降低一个人的效率的了。当开发人员同时做好几个Story的时候,频繁的切换上下文,会造成额外的消耗,但并不增加任何价值。提高效率的最好办法,就是集中精力解决一个问题,然后再解决下一个问题。

Unneeded processes (Processes)

你有没有曾经遭遇过这样的经历,为了对生产环境做出一点微小的环境改变,但需要经历一个漫长的审批过程,等待好几个人的签字?很多公司都有这样冗长的机制,并且经历过的人都知道,为了完成一点点的改变,过程是多么的痛苦。这种不必要的流程,没有为客户增加过多的价值,但是却引入了相当大的浪费。

什么是看板方法

看板方法是用于管理软件开发流程的新技术。看板方法源自丰田的“及时生产”(JIT=just-in-time)系统(在前文中我对JIT解释如下:Just-In-Time努力将生产过程中每一步的库存量尽量降到最低,最好为0。换句话说,这意味着只需要在合适的时间、合适的地点,提供适量的原材料。去除库存带来很多好处:不仅可以节省成本,还去除了商品被废弃或者损坏,久置的可能性。)

一个软件开发的流程可以看作是一段自来水管道,特性需求从一端进入,经过开发的软件从另一端涌现出来。

在管道内部,存在着各种各样的工序,我们先假设一个最为简单的阶段性流程:

分析需求->开发代码->测试软件运行正常

在管道中的瓶颈会限制工作的流动。管道的整体吞吐量被限制为瓶颈的吞吐量。用我们的开发管道为例:如果测试人员每周只能测试5个特性,而开发人员和分析人员每周能够生产10个特性,整个管道的吞吐量就只有每周5个特性 ,因为测试人员扮演了瓶颈角色。如果分析人员和开发人员不知道测试人员是瓶颈,那么测试人员的待办工作就会越堆积越多。

影响就是前置时间增加。并且,就如同库存一样:位于管道中的工作会套牢投入的资金、产生与市场的距离、库存中的产品(交付特性)会随着时间逐渐失去价值。

看板系统

如果我们知道哪里有瓶颈,我们就能够重新部署资源来解除它。我们怎样才能知道在已知流程中哪里是瓶颈呢?当我们知道了瓶颈后会采取哪些措施呢?

《看板方法》一书中对看板系统的定义是这样的:

看板(或卡片)的数量,等价于系统设置(核定)的流通能力。一张卡片与一个工作项关联。每张卡片都充当一种信号机制。只有获得一张自由卡片后,才可以开始新的工作项。这张卡片与该工作项关联在一起,跟随工作项在整个系统中一起流转。当自由卡片没有剩余时,就不能开始额外的工作。任何新到达的工作项必须在队列中等待,直到可以获得新的自由卡片。有了自由卡片,队列中的新工作项就又可以启动。

看板方法背后有两条基础性的原则:

仅当有可用产能时才通过信号卡传递机制来拉动工作的流动

只有系统具备了处理的能力才能拉入新工作项,而不是基于需求将工作项推入系统中。

另外一条是:

限制在制品的数量

恰当的设置能力阈值,拉动系统就不会出现过载现象。

思考——如何设置WIP

根据某些研究和经验观察,每个知识工作者同时在2个工作项上工作是最优的。同时考虑影响因素很多,比如说一些突发的情况,或者说团队的成熟度情况,通常来说,我们将在制品限额设为每个人或者每个结对2个工作项。

在选择WIP数值上,并没有什么魔法公式。这个数值是通过试验观察不断调整的,我们可以先选择一个数值,然后观察这个数值是否能很好地工作。WIP数值本身不是最重要的,在价值流中添加WIP限制带来一种积极的压力:这种积极的压力迫使大家去面对软件交付过程中的存在问题,并思考如何改进。

举个例子

下面的看板展示了这样一种情况:开发人员(Dev)和业务分析师(BA)正被阻止开展任何新工作(因为QA堆积的待办工作项已经超过了限制的在制品数量),这种情况会持续直到测试人员(QA)空出了一个卡片位置并将下一个工作项拉到测试步骤中。

这时Dev和BA会开始寻找能够帮助测试人员减轻负担的方法。例如,BA可以帮忙测试,Dev开始进行自动化测试等等。

一旦QA完成了一个特性的测试,就会将卡片移走,并且在Testing->Ongoing列中空闲出一个卡片位置。

Testing->Ongoing列中空出来的位置可以用Development->Done列中的一个卡片补充进来。这时Development->Ongoing列就会空闲出一个卡片位置,下一张卡片就可以从Analysis列中拉进来。

前置时间(Lead Time)是指在当前迭代完成的用户故事中,从需求进入IPM至需求交付的耗时,Lead Time通常用作改善流动的重要衡量标准——减少Lead Time就是减少等待的时间,加速价值的流动。

写在最后:

看板是一种方法,它能够为我们提供:

可视化的工作流,展示工作项的进度视图

平衡需求能力,识别瓶颈

看板代表了精益的思维范式:每个团队的情况不同,每个看板也会不一样。尊重他人,持续改善的思想是一样的,我们重视通过不断地思考,频繁且可靠地交付高质量软件,帮助团队在能力和组织成熟度方面得到不断地提升。

相关阅读:

谈谈精益(上篇) - Lean Manufacturing

谈谈敏捷 - Agile Methodology

本文作者万学凡,ThoughtWorks首席咨询师,武汉。作者保留本文一切权利,未经许可请勿转载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,832评论 25 707
  • 文章来自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鹏阅读 9,189评论 2 126
  • -----转载----- 1、问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? ...
    花开沉浮阅读 7,348评论 4 88
  • 习惯了睡前听电台的一段故事或者一首歌曲,今天听了石进的《夜的钢琴曲》系列,我听不懂却又被旋律感动,凝望着这乡村孤...
    双林木兮阅读 500评论 0 0
  • 额,先落脚这里吧。简书第一篇。 作为一个半吊子iOS dev,捂脸。 上周,想把swift认真学一下,记得14年那...
    程程程程程子阅读 771评论 0 0