近些年来,新的软件开发模式层出不穷。敏捷 (主要包含Scrum,XP,FDD等十多个分支派系), 精益(Kanban-我称之为初级精益方法,新一代精益软件工程),还有DevOps更是让人应接不暇。还真是你一黯然销魂掌,我一绕指成柔剑,那是锣鼓喧天,鞭炮齐鸣,相当热闹!当然,我也没闲着,这三年就忙着修炼新一代软件精益工程方面的实践了,心得体会自然有一些。这里聊聊精益和敏捷的差别,在做选择的时候也许能更客观理性。这只是我一家之言,随兴而聊,欢迎指正讨论。
敏捷和精益有不少共同属性。比如,它们都强调质量是前提,强调持续学习改进,强调可视化管理环境,强调授权团队等。二者也有相当的互补性,这也是为什么有它们结合物Scrumban的原因。但敏捷和精益绝不等同,否则也不会各自成派。相信不少人接受过各种敏捷和精益的培训,看过相关书籍,有过一些实施经验。不知大家琢磨过没有,它们不同点到底在哪里?为什么?
一,核心关注点的差异
首先,它们的关注点的不同,一个关注的是过程,一个关注的是人。
我经常会被问到的一个问题是,项目做得好到底是团队能力强?还是过程好?人重要还是过程重要?
在我看来,创新领域,人必须是第一位的!过程和工具都是由人使用,它们只是重要的辅助物,很难想象有效的过程改进不包含人的能力的提升。那么改进点主要落在哪里?敏捷和精益有较大的差异。
敏捷追求的是在特定敏捷模式下(如Scrum)建立一个适应性强的过程。它可以指导团队用最小的代价,在不确定的环境下,开发出用户真正需要的软件产品。
精益则追求有效、快速的学习,让“人”不断掌握新的技能,高效、持续为客户提供有价值的软件功能。
在精益环境下,我们不会将所谓“好的”过程、实践强加给团队。而是明确目标,识别必须应对的挑战,给团队创造环境,在实践中找出有效的方法,形成并持续完善自己的过程。开发团队是自己过程的主人,过程是个知识传递的载体,最终提升点一定体现在人的能力上。
过程和工具是人的左右手
二,局部和系统的差异
敏捷和精益都强调减少批量规模,敏捷通过2-4周的迭代,间接要求每个迭代软件规模必须足够小,而精益则将此列为核心原则之一,并从系统角度明确强调所建价值流(Flow)必须直通客户。
实际操作中,我发现绝大多数非互联网的敏捷迭代并没有波及到用户。如果我们把软件产品开发分成需求、计划、开发、发布使用四个阶段的话,许多敏捷组织的迭代就覆盖到开发。所谓的小批量仅是在需求分析、设计、编码及内部测试阶段而已,而上线前系统级的测试则还是需要集中在某一个点。从用户使用角度来讲,每个发布的软件规模并不小,用户并没有包含在频繁的反馈、改进环节中。许多金融IT敏捷实施的通病是运维的脱节,使之成为持续为用户交付有价值需求功能的瓶颈,破坏,打乱了端到端的开发流。
这也是我总强调要疯狂追求测试自动化的原因之一,DevOps是打通开发到运维(用户使用)的关键,可以让我们真正做到软件小批量开发。
让小规模软件包直达用户
三,无形和有模的差异
李小龙是世界上少数几位跨越种族的华人英雄。哲学学士的他谈到水:“无形,无法,将水放入杯子,它就是杯子的形状,将水放入瓶子,它就变成瓶子的形状,将水放入茶壶,它就变成茶壶的形状。水可以柔软流动,也可以坚硬凝固。”从此可以窥见李小龙的武术哲学思想,如水一般,柔软而又刚强,充满变化。
敏捷不是“水”,像瀑布开发模式一样,它有自己的模式。而精益则是“水”,某种意义上,精益只是个称谓,你也可以把它叫成小花或者小明。它可以适应不同的模式,比如它可以是迭代,也可以不是迭代。它不会替代任何东西,更像一个改进驱动器,从你当前使用的过程开始,通过将工作流程可视化,控制软件规模,限制在制品个数(WIP,我以后得想个更好的词替代现有的这个翻译法),动态揭示出题点并一个一个去改进解决,目标就是实现价值的最大化
四,科学性的差异
我认为精益是个更加科学的方法,其中一些核心实践有队列、统计理论支持。如它的替代指标和经济指标的区分击中了度量分析的问题最常见的问题;它关于通过管理等待队列,平衡资源使用率以实现缩短响应时间的目标的理念,和队列理论的基本观察高度一致。合理将规模大的软件功能分解成一系列最小、有价值、可发布软件任务包的能力,是建立系统价值流可验证的重要前提。它纠正了长期以来软件开发关于变异管理的错误理念,给出了更加合理价值驱动的量化管理方法。精益也引用了一些在其它计算机科学方面的有效方法,如操作系统中资源调度方法,互联网的信息包(Packet)的传输方式,信息理论一些有效获取新知识的方法等。
队列理论有玄机
敏捷和精益的引入,极大的改进了以瀑布为代表的传统软件开发方法,让软件工程摆脱了流水线的生产模式。敏捷来自软件一线有思想的实践者的优秀实践,当年它是一些团队遵循的地下有效做法,虽然它们违反了组织标准过程,但因为有效而被偷偷使用。精益给我们带来了和软件开发最为接近的创新产品生产开发的经验,它和软件的结合让我们比以往任何时候都更加接近找到软件开发之匙。精益的出现,可以让今天的有效地下非法过程变得合理合法。
敏捷和精益都追求用最小的代价获取最大的经济价值。敏捷顾名思义强调速度,强调灵敏。而精益更加强调创造价值流(Flow),至于这个Flow是什么样的形式并不是那么重要。在精益框架下,我们要把它打造成“水”,源源不断,冲破各种阻力,以解客户之渴。
敏捷带来的是开发模式的变化,而精益将会开启一轮革命性的变革,让我们拭目以待吧!(本资讯于2017-10-10首次发布)