-
精益五原则 + 软件开发一例 - [Lean]
2008-03-17
精益五原则精益思想有五个原则,它们更像是五个步骤,通过不断循环的过程将最终用户价值带入系统中,并将系统中的浪费一层层逼出来,消灭之。这五个原则分别是:
- 价值
明确客户所期望产品或服务应提供的价值。以实现此价值为目的审视整个过程中的所有活动,同时帮助识别其中的浪费。
- 价值流
针对一件产品、一项功能或服务,按时间顺序识别出为实现其价值而进行的所有活动,并确定出其中哪些是有价值的,哪些是浪费。
- 流动
消除价值流中的浪费,让有价值的活动一个接一个地流动起来。
- 拉动
确定价值流何时开始流动,因何流动。价值流应由用户的实际需求拉动。
- 尽善尽美
价 值流中浪费的步骤不可能通过一次改善彻底消除,浪费是被不断发现和具体化的。尽善尽美追求在实现客户价值过程中引入最少的浪费,也即通过更精简的步骤、更 短的时间和更少的必需信息来实现客户价值。当实现了一个阶段的目标后,根据当前的价值流状况设定一个新的目标,重新开始流动和拉动的过程,发现和消除更多 的浪费,不断地持续这一改进过程。
下面以一个简化了的软件项目为例,该项目本来是一个以瀑布方式开发的计划一年的项目,我们将应用精益的五个原则(步骤)虚拟地不断重复开发这一项目,目的是体验一下反复应用这五个步骤进行持续改进的大致过程。
价值,我们考虑根据名称搜索产品这一功能,用户通过这一功能能快速定位到其所关注的产品。
价值流,按时间顺序列出该功能的所有活动(见图):
0.5天需求分析à2个月的等待(瀑布流程中还要同时分析其它功能)à0.5天设计à2个月的排队和等待à2天的编码à4个月的排队和等待à2天的测试à3个月的排队和等待à1天的集成工作à1个月的排队和等待à上线。其中排队和等待都是浪费,一年后,所有积累的工作终于可以被检验,并得到用户的反馈,此时我们也可以判断所有相关工作是否都已经完成。
流动,不难看出其中有价值的工作只有6天,剩下近一年的时间都是排队和等待,如何消除这些浪费,让有价值的工作一个接一个流动起来呢?如果有机会让项目重新来过,我们可能会想先安排这6天来集中做登录功能,这样就没有浪费了,但在这样一个组织里面,这样做相当于给项目添乱。我们不如先设定一个目标,将浪费由近一年减少到4个月。
重新开始项目后,很快你会发现,现有的流程无法保证4个 月后的交付,很多问题暴露出来了。其中文档撰写繁冗耗时、部门之间沟通反馈周期长是阻碍价值顺畅流动的最大问题,造成了大量的排队和等待。这些文档中的大 部分都是耗费成本却对用户价值(快速定位到用户所关注的产品)没有贡献的,是浪费,部门沟通过程中的等待更是不折不扣的浪费。这时我们可以尝试重新安排组 织结构,将与项目相关的所有人从原来的市场、开发和测试等部门调到针对该项目组建的项目组中。将为同一目标而联系密切的人安排到一起,促进了及时的沟通, 减少了撰写部分文档的必要性,使4个月一次的交付变得更加可行。
拉动,当交付周期缩短了以后,就可以比较从容地引入拉动机制,在需求真正变得清晰时才及时拉动针对这一需求的各项工作,而不是强调通过在项目前期一次性地通过高级的需求获取技术将客户头脑中的想法引导出来,并将这些需求引入复杂的开发计划中。“清晰的新需求à验收测试à单元测试à编码实现”的过程也是一种由需求拉动的过程。
尽善尽美,上面价值流的目标是将1年的浪费减少到4个月的水平,我们可以尝试再将目标设为2个月,重新开始价值流分析、流动和拉动的过程。你很快会发现,交付前测试阶段经常延期,质量难以保证,类似的Bug重 复出现。经过分析得知,人工测试过程中的大量重复,测试产能与开发产能的不平衡,开发完成到测试之间的等待,这些都是这一时期急需消除的浪费。可以通过引 入在持续集成框架下的自动化验收测试来消除重复的人工测试浪费,以实现测试产能与开发产能的平衡,在交付期间内引入几次迭代,缩小团队同时面对的需求数 量,这在很大程度上进一步消除了开发与测试之间等待的浪费。这样一来,针对某一功能的测试紧跟开发过程,价值流迅速流动起来,而不是等到快要交付之前才集 中测试。
再把交付周期减少到1个月呢?这样会让更多的浪费现出原形,你可能发现你需要用上所有敏捷的实践和原则才能将它们一一消除。可见,这一过程就是不断发现问题和浪费并消除它们的过程。
在价值流这一环节之所以以一件产品、一项功能或服务为出发点是因为客户的需求本是伴随着反馈和认识的不断深入而持续流出的。这样做价值流分析能适应需求的产生和变化过程,所以在上述例子中,我们为适应需求的这个特点而采用了持续的软件交付方式。
随机文章:
敏捷和精益对我日常生活观点的影响 2008-12-17在InfoQ上发表了《软件开发中的准时化生产》 2008-07-12看部委重组和电信业重组 - 量产后遗症之以设备和部门为中心一例 2008-04-13
收藏到:Del.icio.us
