一、简介
精益(Lean)管理的思想起源于丰田公司,以价值(Value)为驱动,消除浪费和不断改进为核心,使企业以最少的投入获得成本和效益最大改善的一种开发方式。它的特点是强调客户对时间和价值的要求,以科学合理的制造体系来组织为客户带来增值的生产活动,缩短生产周期,从而显著提高企业适应市场万变的能力。这种方法现已被广泛用于生产制造管理,对于IT系统建设,精益开发的常用工具模型是价值流模型。
2003 年《精益软件开发》书籍的问世,标志着精益理念和实践正式引入软件开发领域,与敏捷软件开发平齐(2001 敏捷宣言),成为新的软件开发方法。敏捷软件开发继承和吸收了众多的精益思想和理念,精益软件开发对敏捷软件开发产生了重大的影响。
精益软件开发将精益生产在制造业的实践映射到软件工程业,并通过类比的方式将精益生产中的七种浪费与映射到软件开发中的七种浪费。
1.1 精益开发体系三个要素
在精益理念下,詹姆斯·摩根和杰弗瑞·莱克在《精益产品开发体系》一书中,将精益产品开发体系概括为3个子系统
:流程、人员、工具和技术。 3个子系统相互关联,相互依存。
![](https://img.haomeiwen.com/i6793005/8d8a08fb4160778c.png)
- 流程子系统:
- 由客户定义价值,区分增值与浪费。
- 重视产品开发流程的前端,在前端充分研究各种可选方案,因为前端的改动空间最大,改动代价最小。
- 建立均衡的产品开发流程。
- 通过标准化降低流程中的变数,创建柔性和可预测的产出。
- 人员子系统:
- 总工程师负责制,总工程师既代表客户,又对产品的成败负最终责任。
- 确立适当的组织结构,平衡各功能部门的技术专长及跨功能部门的整合。
- 为工程师构建金字塔型的知识结构。
- 将供应商整合在产品开发体系中。
- 内部学习及持续改善。
- 建立追求卓越的企业文化。
- 工具和技术子系统:
- 不断调整技术以适应人员和流程。
- 运用简单、可视化的组织来理顺组织沟通。A3报告是一种典型的工具。
- 运用强大的工具做好标准化和组织学习。
1.2 精益开发七大原则
![](https://img.haomeiwen.com/i6793005/54b859f6075f5753.png)
1.2.1 消除浪费
将所有的时间花在能够增加客户价值的事情上。
浪费的来源:
- 混乱的工作环境
- 缺乏可用的资源
- 缺乏清晰的优先顺序
- 缺乏对可行性的早期考虑
- 糟糕的跨职能沟通
- 糟糕的产品需求定义
- 过度的设计
- 太多无效的会议
- 太多邮件的沟通
丰田生产系统的策划人之一新乡重夫(Shigeo Shingo),他首创制造业的七种浪费类型,而波彭迪克夫妇则将它转换成软件业的七大浪费类型。
精益生产 | 精益软件开发 |
---|---|
多余加工 | 额外步骤(Extra Processes) |
库存 | 半成品、部分完成的工作(Partially Done Work) |
等待 | 等待(Waiting) |
搬运 | 任务调换(Task Switching) |
生产过剩 | 多余功能(Extra Features) |
运输 | 移动(Motion) |
不良品的返工 | 缺陷(Defects) |
1.2.2 增强学习
面对开发团队以及最终的产品大小的额外挑战,可以说软件开发是个持续学习的过程。最佳的改善软件开发环境的做法就是增强学习。在代码完成后马上进行测试可以避免缺陷的累积
。不是去做成更多的文档或详细设计,而是对各种各样的想法进行实际的编码尝试。用户需求的收集过程可以简单地通过给最终客户演示,并听取他们的反馈来完成。
使用短周期的迭代(每个迭代都应包括重构和集成测试)可以加速学习过程
。在决定当前阶段的开发内容并对未来改善的努力方向进行调整时,在客户端帮助下通过简短的反馈会议来增强反馈
。通过这些简短的反馈会议,客户代表和开发团队会更多地发现在进一步开发时会遇到的主要问题及可能的解决方案。从而,基于已开发出的原型,客户可以更好地理解自己的需求,开发者也能了解到如何才能更好地满足客户的需求。另一个关于和客户沟通、学习的想法是“基于组的开发”,这种方法聚焦于未来解决方案的约束限定而不是各种可能的解决方案,因此通过和客户的对话加速了解决方案的产生。
1.2.3 尽量延迟决策
因为软件开发通常具有一定的不确定性,基于多种选择的方法能够达成更好的结果,尽可能的延迟决定,直到能够基于事实而不是不确定的假定和预测来做出决定。系统越复杂,那么这个系统容纳变化的能力就应该越强,使其能够具备推迟重要以及关键的决定的能力。
1.2.4 尽快发布(快速交付)
在一个技术发展非常迅速的时代,尽早的发布产品有助于更快的获得用户的反馈来改善当前产品的质量,从而更快的完成下一次迭代
。如果每一次快速的发布都能满足用户的需求,那么这个产品就可以视为成功的。每一次迭代的时间越短,团队内部的学习和交流就会变得更好。拥有了速度,决策会被延迟。拥有了速度,就可以更好的满足客户当前而非昨天的需求。
1.2.5 下放权力(尊重一线人员)
让创造增值的员工充分发挥自己的潜力,充分尊重一线人员的意见。给他们配备需要的东西去高效工作,并且信任他们。软件开发是关于学习的,所以要对工作合理的结构化,确保我们是在持续的学习。这也是精益提倡“延迟决策”,在最后一刻再做决定的原因。因为在那个时候我们会知道得更多。最后,要在建造(软件)产品的时候就嵌入质量(检查、保证)。如果我们总是要回头去修复之前的问题,那么我们将无法做到“快速交付”。
1.2.6 嵌入质量
质量的管理在精益软件开发中尤其重要。在这里,质量的保证一开始便被贯穿在开发过程中的每一个阶段,而不只是在测试阶段来发现质量问题。过程中保证质量能大量减少浪费,质量是过程的一部分。
1.2.7 全局优化
局部的优化,若不能带来整体的改善,将是没有价值的。构造一个完整的产品
二、精益开发的特点
2.1 精益开发的特点
- 特点:
- 聚焦价值流,减少浪费和提升开发效率。
- 组织和人在开发过程中起决定性的作用。
- 优点:
- 以客户定义价值为导向开发,关注前端方案的多样性。
- 通过信息顺畅流动驱动组织进行自发高效运作,对此方面要求高于严厉管控的要求。
- 使用的工具通常是简单的、可视化的。
- 追求不断改善的宗旨有利于组织能力的积累,并形成竞争优势。
- 缺点:
- 对过程及时和精确的要求也许会造成系统的弹性不足。
- 对人员的敬业度和经验要求较高,否则难以对系统变化做出积极响应。
- 需要改变组织的结构和文化,对学习型组织的要求比较高。
- 需要强有力的供应商管理体系,以及与精益相匹配的供应商能力。
- 是由第三方研究总结的理论,缺乏一套标准的方法。
- 适用场景:
- 价值导向的组织,对浪费容忍度低。
- 组织运作的方式更多是信息流动驱动,而非严厉管控。
• 由 Leung 写于 2023 年 4 月 18 日
网友评论