写点什么

通过由瀑布到敏捷的转换来减少浪费

  • 2013-10-14
  • 本文字数:1764 字

    阅读完需:约 6 分钟

组织为什么要转向敏捷?一个原因是它可以使组织处理变化的能力更强。项目进行过程中,用户需求会经常变化,这就需要开发团队能够适应产品需求。敏捷帮助团队交付满足用户需要的产品;这些产品不包含不需要(而且没有用)的特性。精益软件开发使用术语“浪费”:一切不增加用户价值的特性都视为浪费。由瀑布到敏捷软件开发的转换是如何帮助组织减少浪费的呢?

Ron Lichty 写了一篇关于“由瀑布转换到敏捷的最具说服力的理由”的博文。如 Ron 所言,该理由与浪费有关:

但是对我而言,真正起决定作用的——使我发生了由对敏捷的热衷到对瀑布的绝望这一转变——是浪费。浪费资源,浪费开发时间,浪费精力。

他问开发人员和开发经理,当收到一份 400 页的需求规格说明书的时候,他们实际上能交付百分之几。他描述了问答过程,得到的答案如下:

(……)答案很少超过 45%——最典型的是 15% 到 25%——最少会交付需求规格说明书上 10% 的需求。

在确定交付内容的方式上,Ron 看到了敏捷与瀑布的主要区别,这一点影响了交付价值:

每次 Sprint,产品经理都会与开发负责人一起对 Backlog 顶部的事项进行协商排序,以保证团队总是致力于最有价值的需求。这是我喜欢敏捷的一点。

另一方面,在瀑布场景中,答案是几乎从不进行评估。针对我的问题,答案包括“对最简单的需求进行编码”、“我们最感兴趣的需求”(最引人注意的需求!)、“阅读需求的过程中出现的想法”或者“最有趣的需求”。一份 400 页的瀑布需求,其需求的优先级几乎普遍是由开发人员而不是产品经理来确定。

在网站“精益思维”上,Mary 和 Tom Poppendieck 描述了精益软件开发的原则。其中一项原则是“减少浪费”:

在产品开发过程中,三项最大的浪费是:

构建了错误的程序包

“没有什么跟高效地做根本不需要做的工作一样没有用处。”——Peter Drucker

程序包构建错误

如果看上去没有足够的时间进行正确的构建,那么当然也没有足够的时间进行不正确的构建。

批处理和队列思想

工作在开展过程中隐藏缺陷、超出时限、导致任务切换以及延迟价值交付。

Mike Cudemo 写了一篇名为“敏捷与瀑布——什么是关键?”的博文。在文章的开头,他解释了瀑布与敏捷处理需求的不同方式:

在蓝图设计完成后,瀑布过程试图“冻结需求”。可想而知,这不现实。需求问题发现的越晚(……),修复成本就越高。在某些情况下,都不可能进行修复。(……)敏捷方法不会试图预先一次性“确定和冻结需求”。它假设,随着用户开始可视化自己的需求,需求会发展和变化。

关于敏捷软件开发中的迭代是如何提供引导结果的可能性,他给出了自己的观点:

敏捷方法试图将需求、设计、编码和测试集中到规模较小的迭代开发阶段。本质上,敏捷方法是一系列规模较小的包含在敏捷过程之中的瀑布。最终用户和企业的利益相关人员可以在系统开发的过程中看到和体验系统。过程修正变得更明显和更易于操控。

根据 Mike 的总结,瀑布项目浪费 IT 预算:

许多 CFO 发现自己置身于一部降低运营成本和进行技术投资的复杂而又需要娴熟技巧的戏中。CFO 对 CIO 施加压力,使他们提出可以充分利用现有投资的计划,同时还要求他们发展快速响应经济增长和竞争变化的能力。项目结果没有失败选项,但根据统计,瀑布方法浪费了公司 IT 项目预算的 60%。

在博文“敏捷成本更低,对吗?”中,Kenny Grant 描述了敏捷方法是如何帮助团队识别和处理浪费的。据 Kenny 说,在开发软件的时候,敏捷软件开发本身并不比瀑布成本更低。使敏捷成本更低的是其处理范围变更和项目调整的方式:

因此,比较瀑布和敏捷就像比较苹果和桔子。在我看来,这是因为,与使用瀑布型开发方法实现相同的业务需求相比,遵循敏捷原则和过程几乎总是生产出不同的产品。(……)项目范围内几乎总是有些部分可以视为浪费,或者其价值不值得以那样的成本交付。敏捷总是不懈地专注于业务价值,并通过恰如其分的工作鉴别浪费——或者是投资回报率(ROI)不佳的需求——从而给团队改变它或者一起放弃它的机会。

考虑到业务需要和需求会在项目进行的过程中发生变化,Kenny 重新表述了问题“是否‘敏捷成本更低?’”:

“对于特定的业务需要,遵循敏捷原则和过程能够使我们开发出满足需要(不多也不少)的产品,而又比使用瀑布型开发方法成本更低吗?”在这种情况下,答案是“是的,绝对!”

查看英文原文: Reduce Waste by Changing from Waterfall to Agile

2013-10-14 02:122072
用户头像

发布了 256 篇内容, 共 95.1 次阅读, 收获喜欢 12 次。

关注

评论

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

大批量更新数据mysql批量更新的四种方法

大数据技术指南

11月日更

Rainbond通过插件整合SkyWalking,实现APM即插即用

北京好雨科技有限公司

Kubernetes 云原生 全链路追踪

TDSQL演进与突破:把企业级分布式数据库做到极致

腾讯云数据库

tdsql 国产数据库

Google I/O 2021 移动和 Web应用上的设备端机器学习

CatTalk

机器学习 tensorflow android Google

数据分析从零开始实战,Pandas读取HTML页面+数据处理解析

老表

Python 数据分析 数据处理 11月日更

从社区贡献者到加入核心团队,开源给他带来了这些变化

TDengine

tdengine 时序数据库

使用 Litho 改进 News Feed 上的 Android 视频表现

CatTalk

android facebook 性能优化 Feed流 Litho

数仓开发详细剖析

五分钟学大数据

11月日更

一文讲透一致性哈希的原理和实现

万俊峰Kevin

微服务 高并发 哈希算法 go-zero Go 语言

为云而生,云原生数据库TDSQL-C技术突破与演进

腾讯云数据库

tdsql 国产数据库

云原生数据库TDSQL-C关键技术内核解密

腾讯云数据库

tdsql 国产数据库

安全经典JWT算法漏洞

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

Java SPI 机制从原理到实战

江璇Up

Java spi JavaSPI

前端开发之JavaScript优化

@零度

JavaScript 大前端

Google I/O 2021 What's new in Android Machine Learning

CatTalk

机器学习 tensorflow android Google

一些常用的hive sql函数

编程江湖

大数据 hive Hive SQL

技术探究:Apache Pulsar 的事务型事件流

Apache Pulsar

Java 架构 分布式 云原生 Apache Pulsar

混合云管理策略是什么?如何又快又好的管理混合云?

行云管家

云计算 混合云 云管理

聊聊 ab 和 jmeter 的并发模型

恒生LIGHT云社区

测试 AB

处理可能超时的异步操作

编程江湖

大前端

NDPQ(NDP+PQ),定义分布式数据库新方向

华为云开发者联盟

数据库 查询 GaussDB(for MySQL) 近数据处理 NDP

并发编程中,你加的锁未必安全

华为云开发者联盟

线程 高并发 并发 线程安全

博文推荐|深入解析 Apache Pulsar 中的事务

Apache Pulsar

大数据 架构 分布式 云原生 Apache Pulsar

大数据开发之Hive

@零度

大数据 hive

Linux一学就会之文件的基本管理和XFS文件系统备份恢复

学神来啦

Linux 运维 文件系统 linux云计算 linux基础

很好用的压测工具 - Apache Bench工具

恒生LIGHT云社区

测试 AB AB testing实战

Java开发中常用的消息队列工具 ActiveMQ

编程江湖

Activemq Java 开发

Python代码阅读(第65篇):根据条件应用指定函数

Felix

Python 编程 Code 阅读代码 Python初学者

喜报!Nocalhost 成功加入 CNCF 沙箱

CODING DevOps

Kubernetes DevOps cncf Nocalhost 本地化开发

万字讲解WiFi为何物

华为云开发者联盟

wifi 物联网 无线通信 传输 无线

TDSQL | 国产化浪潮下,数据库+云如何跑上核心业务?

腾讯云数据库

tdsql 国产数据库

通过由瀑布到敏捷的转换来减少浪费_精益_Ben Linders_InfoQ精选文章