生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

敏捷杂交 —— 新型实验还是“没弄明白”

  • 2012-01-13
  • 本文字数:3440 字

    阅读完需:约 11 分钟

引言

他们没弄明白。他们做错了。直到他们遵循了所有的准则和实践,他们才是真正的敏捷。”你之前有没有听过这类评论?随着敏捷世界中杂交的增长,对不纯粹的敏捷思维的鄙视也在增加。讽刺且自相矛盾的是,敏捷的主要成果就是让我们摆脱了瀑布过程一体适用的哲学。现在,敏捷中狂热的人们在犯同样的错误……把敏捷作为唯一的方法。本文将尝试展现,作为软件专业人员寻求持续创新和更好的方法时杂交不仅是必要的,甚至是我们的首选。

瀑布式开发不起作用

敏捷主义者以说这句话而闻名,事实上他们有大量支持他们观点的证据。但如果他们的雄辩言辞换种说法或许会更准确些:“敏捷往往对在特定类型的组织内使用特定类型技术的特定类型项目效果更好。”并不是说瀑布过程绝无效果,只是它并不是对所有项目都有效。你能找到许多业界老手,他们会告诉你他们用瀑布过程效果不错。他们在撒谎?他们在拒绝变化?

事实是这两种技术都能依赖于各种因素而发挥作用。我将在下面探讨其中一些因素,除此之外还有些其他因素。我强调这些是为了展示在软件开发投入的付出和被感知的过程中情境在其中有着怎样重要的作用:

1. 项目类型

这是个固定投入的软件产品还是个符合当前策略并将形成核心业务的软件产品?固定投入软件产品通常更适合于传统的瀑布过程,而史考特证券会发现使用敏捷会更有帮助。为什么呢?第一种情况下,项目被视作一种开支来管理、跟踪和监控。在史考特证券,他们的在线交易平台“就是”他们的业务。可以在我之前的一篇文章:为什么有些公司敏捷实施不成功?中找到对这一区别的更复杂的解释。

2. 使用的技术

与传统的复杂客户端应用程序相比,基于 web 的技术通常需要较少的开发时间。由于浏览器遵循(大部分)行业标准,因此基于 web 的技术更易于实现。它们是最适于应用敏捷方法论的技术。如果你正在部署一个复杂客户端产品,要安装在公司中 15 个部门的 16,000 台笔记本电脑、台式机上的各种操作系统(或虚拟机)上…你的开发过程将更具瀑布式特征。你或许仍会在以一定时长的迭代周期中进行开发,每两周一次把代码部署到测试环境中,但这一产品以两周为一个迭代交付一次是复杂且充满风险的。这需要更多的规划。每 30 天就安装些新东西到每个人的台式机上可不是个好主意。到第一次安装相关的问题都得到解决的时候,就要准备另一个 30 天的安装了。这个产品会处于持续的变动状态。功能性的交付非常重要,但稳定性、一致性和性能也同样重要,这需要在所用的各项技术和产品的定位间进行权衡。如果更多的变更和快速交付功能很重要,当前的技术组合是否能提供支持?如果想要的是一个稳定的、可信赖的几乎不会当机的系统,那么可能就不必重做整个软件交付过程了。

3. 项目复杂度

当项目是个新的社交媒体创业项目时,敏捷与之乃是天作之合。项目的复杂度很可能包含在开发者 / 创立者的脑海,并且他们对信息的需求的澄清就在附近(甚至可能就在同一个房间中)。他们的开发投入可能不需要任何集成的硬件。他们有自己的开发 / 发布周期,不会与公司其他部门打交道。他们可能不会把他们的软件与其他软件团队整合,并最终可能在能获得反馈和信息的业务过程改进上也没有任何投入。

将其与一个横跨公司六个部门的一个六西格玛黑带业务过程重组项目相比较。这一项目的软件开发部分也许只是全部投入的一小部分。他们对信息和需求的澄清的需要将由一个“指导委员会”决定,这个“指导委员会”可能一个月会谈不超过一次。可能还有其他外部软件需要他们提供接口并从中获取信息(或者发送信息给对方),因此对集成的谈判和时间的安排是很关键的。

有一点要弄清楚:项目的复杂度越高则更有可能需要更深入的规划…甚至是必须的。复杂度的情境给了我们机会停下来思考我们的方法。

4. 文化

公司是否易于接受新想法和新思维方式?他们是否想探索敏捷软件开发?他们通常如何适应变更?如果公司是保守的,那你对敏捷的引入也许不会有大量追随者,也许还会由此产生敌人。谨慎是必需的。更自由的组织很可能会把变更视作自由和授权。但另一方面,组织可能会过于狂热。在这种文化下,新的思维方式会快速流行起来,并在洞察力和深思有机会决定行止之前快速找到富饶的土地扎根下去。

第三条路

在敏捷和瀑布之间是实用主义。这就是一些车间,在其中把敏捷和瀑布的零部件拼凑在一起,成为自己的过程 / 行动。关注技术和结果,跳过教条和浮夸之词。

实用主义者通常被他们的敏捷同仁们奚落为“不愿意坚持到底”。相反,我总是会争辩道,他们所做的才正是最初敏捷创始人们所做的:在如何开发和构建系统上来试验新的想法。考虑到上面提到的情境,实用主义者明白,没有灵活性的教条的软件开发方法是注定要失败的。

的确,新想法来自实用主义者。

远不是“没弄明白”,他们正在寻找那些始终工作良好的甚至可能对所有项目都有效的部分。这种试验、调整和不随波逐流的意愿是创造力最纯粹的形式。这种意愿应该被鼓励和被照看。根据历史经验,这会孕育出某种变革。

下面有一些实用主义的方法,是我所看到和听到的似乎有些道理的:

1) 在棘手的问题 / 缺陷或关键架构系统上运用结对编程 —— 与其把这一项极限编程技术作为规范供起来,实用主义者更愿在需要时使用它。此外,我曾见到过一个团队,他们在一个房间里,一起讨论代码和关键集成部分以消除分歧,从结对编程演变成了群体编程。

2) 在 Scrum 方法之上附加更多的传统项目管理实践 —— 热切的敏捷人士会告诉你这从来都行不通。但以我的经验来看并非如此。例如,一个有着繁杂业务流程组件的项目中软件开发项目只是全部投入的一部分。你也许能用 scrum 来开发软件,但这样的 scrum 过程会需要与整个业务项目及它的实践、程序、时间表、风险和预算紧密地结合起来。多数企业不会选择 scrum 方法来进行一个业务流程项目。

另一个例子是一个采用离岸供应商的项目。由于时区不同和供应商有限的资源这类项目会很难以协调。另外,除了项目成本,供应商也许会要求你为每日的 15 分钟站立会议,迭代回顾时间和迭代规划时间付账。你不得不权衡额外的沟通是否值得在项目成本中增加额外费用。通常你能够通过每周的碰头会和详细定义的规范来达到同样的质量。此外,供应商通常有交付客户所求的合同义务。否则,就没人付款。这种情形下对“正确理解”的鼓励是非常高的,这也许使得瀑布方法更合意

3) 敏捷中的变更管理 —— 敏捷拥抱变化,但拥抱任何和所有变化会导致团队走向失败。我们都曾参与过这样的项目:客户在整个开发过程中频繁地改变主意,多次修订一组故事,甚至是修订在数个迭代之前就已经开发出来并测试通过的原始需求。这么做也许有很好的理由,但也会有很不好的理由:举棋不定的 product owner 注意不到或是考虑不到预算的问题并且觉得项目结束遥遥无期,或是需要“亲眼见证”后才会认可。在这些情形中的项目范围蔓延危害整个项目,也许使得领导层对敏捷产生怀疑。由 scrum master 或更传统些的项目经理精心安排的更强的变更管理技术越来越有必要,用于记录系统的进程、调整预算和进度偏差。

4) 用户故事经理 —— 敏捷方法就是团队和 product owner 在一个 sprint 规划期间把这些放在一起。然而,这常常导致故事写的不好,没有说明所有细节。敏捷需求误解是常见的问题。委任一个全职的用户故事撰写者对一个项目来说是昂贵的,也是值得的。清晰的用户故事会使得更容易编码、更好测试和最终更高的质量。

这仅仅是一些我看到过的事情。但是,我很希望能听听大家的经历。你们在敏捷和 scrum 中看到了什么创新?

总结

实用主义者不会把敏捷或是瀑布这两种方法看成‘要么接受要么放弃’的交易。我愿意把他们看作把世界视为想法超市的独立思考者。

“让我们召开每日站立会议吧,但我仍然需要甘特图来与其他部门结合在一起。”

“我喜欢每 30 天就向我们的客户展示我们的工作,但我需要一些强有力的变更管理,因为这个客户有些非常古怪的想法。”

敏捷杂交是好事。它会促进实践中的创新。没有敏捷杂交,我们无疑将重复犯前敏捷(pre-agile )世界中的错误。从某种意义上来说,极端敏捷人士是对的:实用主义者没有正确地遵循方法论。但,这不是坏事。

关于作者

Christopher R. Goldsbury是一名软件开发专业人员,在职业生涯中他担任过各种角色:开发人员、架构师、scrum master、开发经理、项目经理和质量保证经理。Chris 把他的经验和想法写在他的博客上。


给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-01-13 00:001784

评论

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

使用矢量数据库打造全新的搜索引擎

这我可不懂

数据库 搜索引擎 矢量 矢量索引

大模型的“海马体”来了!腾讯云AI 原生向量数据库正式上线公测

Geek_2d6073

几种常用到的 Hybrid App 技术框架

Onegun

flutter React Native Hybrid

构建容错软件系统的艺术

高端章鱼哥

负载均衡

大模型真的会“好事多模”吗?

白洞计划

多模态 大模型

5分钟快速掌握低代码和无代码工具

高端章鱼哥

低代码 无代码 应用开发

高并发与性能优化的神奇之旅

互联网工科生

性能优化 数据 高并发

【AI模型系列】中国AI大模型峰会“封神之作”,不容错过的大模型机遇

颜淡慕潇

AI大模型 峰会 WAVE SUMMIT

重磅发布 | 博睿数据首部全行业IT运维精选案例集

博睿数据

IT 案例分享 博睿数据 精选案例 IT 运维

Seata 1.7.0 正式发布,大幅度提升稳定性

阿里巴巴云原生

阿里云 云原生 seata

证券机构数据治理实践,实现数据的“管、 治、用”

袋鼠云数栈

数字化转型 金融

【参赛有奖】云原生编程挑战赛·赛道 2 邀你来战!

阿里巴巴云原生

阿里云 阿里云云原生

不断创新短视频APP源码,未来可期!

山东布谷网络科技

App 短视频 短视频源码

人人可用的前端低代码框架

这我可不懂

低代码 前端框架 应用开发

加强Web应用程序安全:防止SQL注入

树上有只程序猿

sql Web ORM

信科技AntDB数据库专家参加向量数据库首次技术标准研讨会

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 7 月 PK 榜

Footprint Analytics 宣布 20+ 链 API 免费增速,助力熊市 buidler

Footprint Analytics

区块链 NFT Footprint

直播预告 | 博睿学院:探索ES在日志场景的应用

博睿数据

可观测性 博睿数据 智能运维AIOps 博睿学院

代码随想录Day23 - 二叉树(九)

jjn0703

火山引擎数智平台旗下DataWind升级半年报 6大功能助力企业数据消费

字节跳动数据平台

数据库 大数据 企业号 8 月 PK 榜

作为新手小白,你应该了解的五个3DMAX的使用干货小技巧!

Finovy Cloud

3ds Max

分布式系统常见理论讲解

越长大越悲伤

分布式 后端 一致性

闲置资源优化,轻松检查集群中的空闲成本

阿里巴巴云原生

阿里云 云原生 容器服务

一文让你彻底掌握ThreadLocal

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 8 月 PK 榜

华为云盘古大模型辅助药物设计,西交大的新型抗生素研发之路

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 8 月 PK 榜

轻松构建全栈观测,从容应对咖啡产业竞争

阿里巴巴云原生

阿里云 云原生

3分钟全面了解API Moke

优测云服务平台

Mock API 编排 Mock 服务 API 接口 API 测试

代码随想录Day35 - 贪心算法(四)

jjn0703

阿里云率先荣获容器集群稳定性先进级认证

阿里巴巴云原生

阿里云 云原生 容器服务

什么是多运行时架构?

互联网工科生

分布式 服务化 单机

开放原子开源基金会理事长孙文龙一行赴浪潮考察交流

开放原子开源基金会

开源

敏捷杂交 —— 新型实验还是“没弄明白”_研发效能_Christopher R. Goldsbury_InfoQ精选文章