3.3 精益
3.3.1 起源于制造业的精益思想
精益思想起源于制造业。在制造业,传统的思维方式是必须要大规模生产、大批量生产,因为规模越大,规模经济效应越明显;批量越大,准备工作(比如换模具等)分摊到每个工件上的成本就越低。但这样就会有一个问题:需要凑齐一批再开工。每一道工序都是这样的,工序本身不太耗时间,但是要花很多时间等着凑齐一批。以生产一个可乐罐为例:要积攒足够多的氧化铝粉,再用大船运到世界的另一个地方冶炼,因为那里丰富的水电资源使得生产成本更低。“足够多”的意思是50万吨,这需要积攒两周。而大船要在大海上航行四周。冶炼也是批量的:一次生产的铝的量要达到能浇铸成几十个一米见方、十几米长的铝锭,因为这样成本更低。但是凑够需要的数量,说不定要等两个月。之后的每一道工序:在热滚轧厂用重型滚轧机进行滚轧,在冷轧厂用冷轧机进行冷轧,接下来的制管、喷漆,全都是这样的。每个步骤可能只需要一点点时间,比如10秒钟,然而从执行这个步骤到执行下一个步骤,可能要等待几个星期:材料在仓库里等着,或者坐着船漂泊。[3]
对于消费量大、需求稳定、可预期的商品,这样安排还可以。然而又有多少商品真的是需求稳定、可预期的呢?很多商品都不是千篇一律的,而是个性化的,和/或用户需求难以捉摸的,以至于产品销量难以预测。毕竟,我们生活在VUCA——易变(Volatility)、不确定(Uncertainty)、复杂(Complexity)、模糊(Ambiguity)——时代。在此情境下,提高生产效率、节约制造成本固然重要,但更重要的是小批量的、灵活的、快速的生产。要让每个产品,从设计师构思到摆到商店橱窗里或者挂到网站上展示的时间尽量短;要让每个产品,从发现用户有大量的需求到把它生产出来并运输到各个用户家里的时间尽量短。这样才能快速试错,把握机会。
也就是说,传统的思维方式是追求资源效率:审视每个步骤和环节的产出效率,追求单位成本的最大产出。而在VUCA时代往往更重要的是流动效率:从用户的角度,审视创造用户价值的过程是否快速顺畅。[4]
为此,精益思想用下面的5个步骤来梳理生产全过程,并进行改进。
① 明确最终用户想要的是什么,也就是定义价值。
② 明确产品和服务是怎么一步一步生产出来的,也就是价值流。
③ 想各种各样的改进办法,加快价值的流动。其中最重要的是减少批量,增加批次。
④ 当价值流动足够快后,就可以按照用户实际需要的量来拉动整个生产过程,而不是根据不靠谱的预测。
⑤ 按这样的方法不断改进,追求尽善尽美。
通过这样的过程,就能够不断地发现和消除生产全过程中的各种浪费(Muda)——消耗了资源而不创造价值的一切活动结果,包括需要纠正的错误、生产了却没有人要的或者不能满足需求的产品、库存和积压、不必要的工序、员工没必要的走动和货物没必要的搬运,以及各种等待。于是,整个过程就越来越“精益”了。
3.3.2 把精益应用于软件开发
从20世纪末开始,精益思想跨出了它的诞生地——制造业,作为一种普遍的管理哲理在各个行业传播和应用。精益思想对软件开发也很有借鉴意义。
精益软件开发的一个重要内容是精益创业。它要解决的问题是,如何在高度不确定的情况下开创新的产品或服务。这对应到前面讲的精益思想的5个步骤中的第1步,“明确最终用户想要的是什么,也就是定义价值”。这并不容易。精益创业提出了“开发—测量—认知”循环:循环从一个待检验的概念开始。接下来,循环的第1步是开发用以验证这一概念的最小可行产品(Minimum Viable Product,MVP);第2步是基于最小可行产品收集市场和用户的反馈,并获得相关度量数据;第3步是用数据验证假设,证实或证伪后加以调整,产生经过实证的认知。然后,进入下一个循环,持续探索商业模式和产品功能的设计。这样的“开发—测量—认知”循环,可以短时间、低成本地探索和发现有用的价值。
精益看板方法是精益软件开发中一个重要的实践方法,它把还没有发布上线的各个特性都展现在看板墙上,让其可视化。团队能够清楚地看到每个特性的进展状态,这样团队就能方便地知道哪个顺利、哪个不顺利、问题在哪里。此外,如果将太多的特性都放到某个阶段,那么这里大概就会有阻塞、有等待,或者需要在不同的特性之间频繁切换。所以要限制处于特定阶段的特性(也称作在制品)的数量,以防止这样的事情发生。通过这些方法,可以减少浪费,缩短从需求提出到发布上线的时间,提升价值流动效率。
也就是说,精益软件开发的核心逻辑是,要想尽办法尽快把产品方向选对,功能要真正能满足用户的需要,防止跑偏造成浪费。为此,要把大的需求拆分成小的特性来试探,并且把小的特性在设计—开发—集成—发布这个过程中产生的各种浪费尽力消除掉,让这个过程尽可能快,让用户尽快看到这个特性,尽快用起来这个特性,加快用户反馈。
本书2.2节中讲的“小步快跑”,大体就是反映了上述思想。