高品质的音视频能力是怎样的? | Qcon 全球软件开发大会·上海站邀请函 了解详情
写点什么

敏捷的核心:消除浪费,走向精益

  • 2007-07-04
  • 本文字数:1607 字

    阅读完需:约 5 分钟

敏捷的核心是什么?敏捷给软件企业(以及软件开发者个人)带来的好处究竟在哪里?这个问题有很多不同的答案。例如“重视个人和交流”,软件开发者喜欢这样的态度,这是毫无疑问的。例如“重视可工作的软件”,它的价值是显而易见的。但在这一切的背后,敏捷的核心是什么?时下流行的观点是:敏捷就是软件行业里的精益(lean)生产,它的核心是消除浪费。ThoughtWorks 中国公司的高层在近日接受采访时明确指出了这一点。

首先考虑质量问题。一些软件企业为了降低成本而忽视质量,但质量低下的软件会造成返工的浪费,反而提高成本。相反,在日常工作中投入更多的精力来保证质量,反而能够为企业节约成本。ThoughtWorks 中国公司技术总监 Michael Robinson 用软件工程的经典理论来分析这个问题:

任何一本软件工程教材都会告诉你:假设在分析阶段找到并解 决一个错误的成本为 1,在设计阶段解决同一个错误的成本就变成 10,在实现阶段就变成 100,在维护阶段就变成 1000。敏捷软件开发中的众多实践正是为 了避免低质量和返工的浪费。尽管它们一开始看起来似乎有些麻烦,但它们带来的收益是实实在在的。

另一种常见的浪费则是“为将来准备的投资”。例如为了应付将来可能出现的需求变化而提前引入的灵活设计,如果需求没有发生变化,这些灵活设计就会成为浪费:不仅浪费了将它设计出来的成本,而且浪费了继续维护它的成本。制造业为了降低库存成本而创造出“Just In Time”的生产和决策方法,ThoughtWorks 中国公司总经理郭晓认为这些方法同样适用于软件行业:

如何消除预测错误的浪费?避免预测错误的 根本办法就是推迟决策:决策下得越晚,就越不容易因为预测失准而造成浪费。当然也不能晚到错过了时机、耽误了工作才下决策,这就像丰田制造的 Just In Time,决策也要 Just In Time。过早的、含有太多预测成分的决策也会造成浪费,其危害丝毫不亚于过晚的决策。

在最近的两篇 Blog 里,我谈到了一些从更深层次思考敏捷的心得。在我看来,敏捷的、精益的、实用主义的决策往往是符合中庸之道的:它们往往是各种因素、选择权衡之后的结果。敏捷方法极端重视提升客户价值,为了达到这个目标而采取的手段通常都不可能是极端的。

中庸之道常常有效的深层原因是边际效用递减律:对一个方面的东西重视到一定程度以后,再加入更多的重视,收到的边际效用递减;同样的重视度放到另一个方面上,能够收到更大的边际效用。让每一分投入收到最大的回报,尽可能地消除浪费,这是精益的追求。

在另一篇 Blog 里我谈到了如何进行精益设计。设计方案的选择说到底应该是一次成本与收益的计算,而不是个人审美取向的衡量——当然,优秀的程序员能够把这种计算变成本能,我认为这就是“软件开发的艺术”所在。敏捷方法强调“简单设计”,同样是经过计算的结果。

在面对一个复杂并且灵活的设计时,首先要衡量的不是实现它的收益,而是“现在实现它”与“将来实现它”之间成本的差额。不论一个灵活的设计的收益和成本如何,只要这个差额非常小——等到未来实现它也没有什么额外的困难,就应该毫不犹豫地推迟决策,等到真正需要的时候再引入灵活的设计。感谢现代化的 IDEs,很多时候我们讨论的这个成本差额确实非常小,这是敏捷设计通常取简单方案的原因所在。

值得注意的是,随时进行这种成本与收益的计算并不是一件易如反掌的事。计算本身也有成本。这是最佳实践和工具支持存在的意义所在:你可以用较低的成本得到前人积累的知识。例如 ThoughtWorks 在介绍其项目管理工具 Mingle 时特别指出其中融汇了该公司多年从事敏捷软件开发的经验:

Mingle 是一个敏捷项目管理工具。它为整个团队在软件交付过程中提供“一站”式服务,并通过有 10 年敏捷项目开发经验的 ThoughtWorks 公司提供的开发框架共享所有的项目成果。我们带来了敏捷开发方法,同时 Mingle 将会支持和推动这一切工作。

畅通的信息渠道,清晰的成本 / 收益核算,全面消除浪费,这是精益制造的核心所在,也是敏捷软件开发的核心所在。

2007-07-04 02:183901
用户头像

发布了 21 篇内容, 共 26439 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

如何验证volatile的可见性

thuni

《趣学音视频》这段“朋友圈模版视频”的扛鼎之作是如何诞生的

ucsheep

Python 音视频 ffmpeg Pillow

网络协议学习笔记 Day7

穿过生命散发芬芳

网络协议 4月日更

v02.06 鸿蒙内核源码分析(进程管理) | 谁在管理内核资源 | 百篇博客分析HarmonyOS源码

鸿蒙研究站

鸿蒙内核源码分析

HDFS NameNode中的FSImage与edits详解

五分钟学大数据

hdfs

HDFS的Java API

五分钟学大数据

hdfs

如何快速将 APICloud 应用转换为微信公众号?

APICloud

微信公众号 APICloud

字节架构师分享:如何让代码在级别上提升系统性能

Java架构师迁哥

IT之家专访庄秉翰:未来全球5G vRAN将达90%,英特尔5G布网参与度非常高

新闻科技资讯

Leveldb解读之三:Write

Jowin

leveldb

精彩3000字!给讲得明明白白:配置 logback

比伯

Java 编程 程序员 架构 计算机

新一代云网采控之采集架构篇

鲸品堂

架构 部署 场景 云网络 应用

架构实战营模块2作业指导

华仔

架构实战营 #架构实战营

IT专业本科生毕业选择【就业】/【攻读硕士】调查问卷

Aldeo

考核 大学生毕业 问卷调查

网易云课堂个性化推荐实践与思考

有道技术团队

推荐系统

五一啃透这份阿里巴巴Java面试指导手册(泰山版),节后直接面试找工作!

Java架构追梦

Java 阿里巴巴 架构 面试 泰山版

鹅厂首推569页Netty+Redis+ZK+高并发的笔记,开启面试必杀技

Java架构师迁哥

牛哇!阿里用480页笔记直接搞定了微服务44个架构设计模式

Java架构师迁哥

大数据基本导论

五分钟学大数据

大数据

HDFS文件限额配置

五分钟学大数据

hadoop

政采云:数据可视化探索之SpreadJS 表格控件

葡萄城技术团队

圆梦阿里之后,我收集整理了这份“2021春招常见面试真题汇总”

Java 程序员 架构 面试

TcaplusDB君的小知识之TcaplusDB的高可用性和数据安全性介绍

数据人er

数据库 nosql TcaplusDB Tcaplus

面向软件 IT 专业的高校大学生择业现状问卷调研

小诚信驿站

行业调研

Alibaba内部培训Spring源码全集分享:脑图+视频+文档

Java架构师迁哥

嵌入式硬件开发最新技术

cdhqyj

嵌入式 单片机

聪明人的训练(二十八)

Changing Lin

4月日更

为什么越来越多的人不敢结婚?

徐说科技

婚姻 情感 恐婚

HTTP/2做错了什么?刚刚辉煌2年就要被弃用了

学Java关注我

Java 编程 架构 程序人生 计算机

敏捷的核心:消除浪费,走向精益_敏捷_Jeff Xiong_InfoQ精选文章