为什么敏捷比瀑布式更成功?

具有讽刺意味的是,敏捷勇于失败的态度是其更成功的原因之一。
139 位读者喜欢这篇文章。
diagram of planning a cloud

Opensource.com

敏捷继续风靡全球。来自 Standish Group Chaos Study 的最新报告提出了有趣的发现:基于敏捷原则的项目比基于瀑布式方法的传统项目具有显著更高的成功率。

Comparing success and failure of agile vs. waterfall

在本文中,我将尝试描述一些促成敏捷团队展现出的这些高性能指标的因素。

敏捷成功率更高的原因是什么?

我参与过的几乎所有瀑布式项目都强烈倾向于规避风险。瀑布式项目通常有宏大的目标,并围绕这些目标进行组织。这意味着,大量的资源(资金和人力)被汇集并投入到严格控制的漏斗中。

一个瀑布式项目通常以以下内容开始:“听着,我们对这个新举措寄予厚望;我们聘请了优秀的专家,投入了大量资金以确保一切顺利进行。不容失败!”

然后,团队以认真的态度开始工作,并渴望展示早期成果,以证明这种潜在的风险投资是合理的。而且,通常情况下,工作从关注我们所说的“精确工作”开始。我们所说的精确工作是指对团队正在构建的软件产品的各个方面做出早期承诺。规范、基础设施、架构、设计,所有这些方面都在项目一开始就得到确定和巩固。一旦经过审查和签字,需求就会被冻结,团队就会匆忙编写代码。最终,代码完成了(通常经过数月的疯狂工作),然后是代码冻结,现在开始测试。

正是在这个阶段,当我们进入测试时,有趣的发现开始涌现。通常情况下,事实证明,早期、急切的承诺巩固了团队和产品基础设施,但最终却将整个项目逼到了一个众所周知的死角。迟来的(且不可避免的)失败付出了高昂的代价。

我刚才描述的过程通常被称为“过早优化”。

敏捷颠覆了上述方法。它拥抱风险,因为它认识到,即使我们尽力而为,风险也是无法避免的。敏捷侧重于早期反馈(使之成为极其早期的反馈)。敏捷摒弃了傲慢的“我们无所不知”的态度,转而采用谦逊的“我们在实践中学习”的方法。

因此,敏捷不是预先确定和巩固需求,而是拒绝冻结范围。恰恰相反,敏捷方法对任何范围蔓延都保持完全开放。换句话说,在敏捷项目中,不存在范围蔓延这种说法。

敏捷中的范围是通过响应反馈来管理的。但是如何征求宝贵的反馈呢?

反馈总是很难获得。每个人都很忙,没有人有时间主动提供反馈。而且,即使有人设法抽出时间提供反馈,通常也是本着“如果你没有什么积极的话要说,至少不要说任何负面的话”的精神提供的。因此,大多数主动提供的反馈最终都变成了不温不火的赞扬。

然而,我们更感兴趣的是找出真相。因此,征求有价值反馈的唯一可靠方法是失败。失败是一个伟大的激励因素。它使所有相关方都以紧迫感做出回应。

在敏捷中,我们重视频繁和早期的失败。我们希望尽早暴露任何重大风险。我们对残酷而诚实的批评持开放态度。

秉持这种态度,敏捷遵循持续集成 (CI) 方法。当我们构建解决方案时,我们必须尝试将组成部分与每次代码转换集成。每一步都伴随着集成测试。

瀑布式方法则恰恰相反。集成被留到最后一步,一旦其他一切都被过早地优化、巩固和测试。正是在最后阶段(集成)发现了重大风险。此时,通常为时已晚,无法成功处理损害。

如何经常且尽早地集成

瀑布式方法不如敏捷成功的原因似乎很清楚。但根本原因不一定归咎于管理软件开发项目的不负责任的方法。瀑布式方法并没有傲慢地拒绝早期和频繁的集成测试。每个人都希望能够尽早发现重大风险。问题在于无法集成尚未准备好进行测试的服务和组件。

随着项目的进展,我们更喜欢使用分而治之的方法。我们自然更喜欢通过并行完成尽可能多的事情来节省时间,而不是按顺序(一次一件)进行开发和构建。因此,我们将团队分成更小的单元,专门执行专门的任务。

然而,当这些专业团队工作时,他们意识到或正在发现各种依赖关系。然而,正如 Michael Nygard 在没有终点的架构中所说:“依赖关系的问题在于你无法依赖它们。”因此,项目开始放缓,因为它被各种无法用于集成测试的依赖关系所困扰。

敏捷方法消除了任何障碍,并允许自治团队继续开发活动,而无需等待任何人。这样,一旦团队开始迭代/冲刺,就可以开始集成测试。从这个意义上说,敏捷是 IT 组织向前迈出的一大步。

接下来阅读什么

关于敏捷的 4 个误区

在最近一次关于敏捷开发的演讲之后,红帽的敏捷教练 Jen Krieger 收到了她称之为“有史以来最史诗般的会议反馈:'你的演讲是……

标签
User profile image.
Alex 自 1990 年以来一直从事软件开发。他目前的热情是如何将“软性”带回软件中。他坚信,我们的行业已经达到了相当成熟的水平,可以完全实现这个崇高的目标(即将“软性”带回软件中)。

6 条评论

仅通过计算项目并将它们归类为敏捷或瀑布式来比较成功率过于简化了情况。实际上,将非敏捷项目(无论这意味着什么)标记为瀑布式完全无视了迭代和增量产品交付的许多其他实践和组织。原始报告还比较了项目规模,但仍然没有比较实际交付范围(与原始范围相比)、交付时间和成本方面的成功。

在我的实践中,我曾在一家公司工作,我们在 15 年的时间里以稳定的 6 周发布周期进行增量和迭代交付,交付可用的软件,与业务分析师和产品管理部门进行永久合作,明确解决变化并适应变化,制定了流程,但仍在更新和调整流程,并结合收集到的实践和观察结果。这个流程本着敏捷宣言的精神,只是没有声称它是敏捷的——它是我们的流程,而且它奏效了。根据本文,它将被归类为瀑布式,但这绝对不是。

因此,我不会接受报告的总体陈述,更不会接受本文中仅基于部分报告做出的概括。更有价值的分析是分析应用敏捷的每个原则对上述项目成功的影响。

首先,瀑布式被误解了。由于某种原因,人们认为瀑布式意味着提前一年计划项目。实际上,我阅读了蓝图,其中没有关于持续时间的信息。事实上,如果您将瀑布式应用于 2 周,您就有了新的敏捷方法

项目/活动的持续时间不是区分瀑布式和敏捷的因素。您是对的——您可以有持续数年的敏捷项目,也可以有仅持续半天的瀑布式项目。

区分瀑布式和敏捷的两个因素是

1. 大型预先计划/设计
2. 门控阶段

在瀑布式中,在我们首先掌握完整的详细蓝图之前,我们不会尝试构建任何东西。我们称这些蓝图为“需求文档”。需求文档的交付标志着对话的结束。这些文档被冻结,只有当该阶段完成时,我们才进入构建阶段。

构建阶段也是门控的;它必须完成,然后我们才能进入下一个阶段——测试。等等。

敏捷则恰恰相反。在敏捷中,没有人等待大型预先计划/设计。指定需求与构建、测试等并行进行。

您可以看到瀑布式和敏捷之间存在巨大的不可逾越的差异。

回复 作者:Ren (未验证)

我们仍然使用结构化设计和分析、Yourdon 和 Demarco ... 我们是大型批处理流程,并且有几个独立的系统接口。所有接口都必须同时加载才能工作,并且编码/测试阶段通常需要一两个月以上才能让每个人同步。
我想瀑布式最适合我们。

我不确定我理解您在这里的理由。为什么瀑布式最适合您?瀑布式为您解决了什么敏捷无法解决的问题?

回复 作者:Mickey

瀑布式总是很简单

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.