写点什么

大规模软件研发的困难和应对之策

  • 2015-05-20
  • 本文字数:3535 字

    阅读完需:约 12 分钟

Mary Poppendieck Agile Adria 2015 年会上做了关于大规模团队敏捷开发难题的主题演讲。使多个团队一起工作是很有挑战性,然而大型复杂产品的团队协同研发需求又总是存在的。Poppendieck 在演讲中,为需要大规模敏捷开发的组织提出了一些想法。

在 InfoQ 的采访中,Mary & Tom Poppendieck 谈到敏捷团队如何在协作和自主之间做平衡,如何通过不断实验来解决复杂问题,做研发时保持做产品的心态为什么优于做项目的心态,以及怎样做才能确保对业务影响的关注。

InfoQ:你的演讲中包含了大规模研发团队试图解决的四方面问题: 合作、复杂性、心态和关注点。你提到团队正在寻找平衡协作和自主权的方法。请您详细阐述一下大规模研发如此困难的原因何在?

Mary & Tom Poppendieck: 在 2009 年出版的《驱动力》一书中,作者 Daniel Pink 强调了三件能够激励人们的事情:自治、掌控和目的。敏捷开发的团队把“自治”按字面意思理解为“不受外界的控制和影响或称独立”。有趣的是,尽管存在一些的偏见(如团队思维往往会抑制团队个体的自主权),但敏捷开发通常只会让小团队拥有自治权,而并不会让团队的个体自治。

许多地方的人们都认为,小的跨职能的开发团队应该相互间完全独立, 却很少关注其实这些团队是一个更大的整体的一部分,只有大团队的成功才能带来小团队的成功。这种对于小型团队自主性的关注常常演变为一种掌控,所以当要求小团队通过相互合作而实现更大目标时, 他们常常觉得自主权受到了侵害。

事实上,为了合作,团队及成员之间应当相互包容——他们必须放弃对自己目标的过分关注,取而代之的是一个更大的共同目标。当团队可以独立负责一段代码,例如微服务时,此时并不需要彼此包容。但在许多领域,模块和组件的开发需要一个更大的团队,而这些人必须一起协同工作——或是以一组小团队的方式协同合作——那么自治权在此时适用于更大的组织。

大规模协作的团队肯定不是一个新想法——事实上,人类历史上早已经有了 30 至 50 人规模的团队。生物进化学家称这种规模的团体为“狩猎团体”——为达成更大的目标这个团体必须具备一定的人数, 比如通过狩猎大型猎物来养活一个村庄。诺贝尔奖得主 Eleanor Ostrom 已经搜集了许多大团体高效合作利用自然资源的事例,如林业、牧业、灌溉、以及渔产养殖业。

不幸的是, 一些敏捷开发的 7 人左右小团队有时过于捍卫自主权, 他们往往缺乏实际可行的办法去容纳其他团队的需要,最终很难形成一个整体去完成更高层次的目标。所以,我们需要使小团队重新平衡,自治需让步于合作,从而使整个团队向着一个共同的目标前进。

InfoQ:请举例说明 30 到 150 人的较大规模的团队是如何有效合作的?

Mary & Tom Poppendieck:一个新的产品推出上市并获得成功往往需要超过 7 个人的团队。不管它是保险产品还是智能手机应用, 你会发现产品要想成功,从设计、营销、工程、发布、售后支持、财务到许多相关领域的洞察力都是不可或缺的。回首看看最近遇到的一些伟大的产品, 你可能会发现他们的团队都会多达 30 到 50 人。

我们曾经(错误地) 认为产品交付团队应当是一个自治团队——事实并不是这样——它更像一个大团队中的一个小组。将软件研发团队拆散,形成开发目标独立明确的“自治”小团队,这种做法限制了小团队对于整个产品的贡献。我相信伟大的产品之所以有好的迭代进化,是由于工程师团队参与了整个产品设计过程中的宏观讨论,包括产品应当具备哪些功能,应该运用哪些技术, 如何将产品提供给市场, 需要什么样的支持, 什么样的升级路径会取得最好的效果,等等。

在 Gore and Associates 公司,150 人规模的团队是很常见的, 这些团队能够完全涵盖整条业务线,同时团队成员的生计又依赖于这项业务的成功与否。Pixar 公司的团队有 200 人左右,并肩工作了三年时间,开发了一个又一个动画大片,他们关注如何帮助同伴(经常是不同业务线的)实现最好的作品。

InfoQ:你曾经提出用“试探法”去解决团队扩展的复杂性问题。你能描述一下如何以及为什么这样做么?

Mary & Tom Poppendieck:复杂自适应系统理论对于思考如何研发大规模软件是有意义的——尤其是当软件的产品、市场和业务交织在一起的时候。整个软件密集型业务系统显然是一个复杂的系统。我们从复杂自适应系统理论中能够学到很多,其中一点是,那些取得成功的领先系统总是能够根据实际情况在自组织(agency) 模式和相互依存(connectedness)模式间取得平衡。

长期生存且不断成长的复杂系统都是自适应的,并且这种自适应以一种特定的方式发生。通过源源不断的小实验——其中不乏一些失败的——使得系统的负责人能够逐渐发现好的做法。即便整个复杂系统的响应是有章可循的,仍有必要进行小实验, 一些微小输入条件的变化(比方说,一只蝴蝶拍打翅膀) 都可能会导致系统响应的巨大变化。

对复杂系统的大的变更肯定会产生影响, 但预测产生怎样的影响则几乎是不可能的, 因为没有人或团队可以完全理解交织错综的依赖关系。因此,那些看重可预测性和安全性的人应该明白, 实现稳定的唯一途径是尝试小的事物, 观察结果, 并且使系统调整适应从而解决问题。那种认为当今系统仍然是可预测的,应该进行大的精心策划的想法,早已被证明只是人们的一厢情愿。我们需要明白,就像是在战争中或是复杂的系统中, 做计划的过程是有用的, 但计划本身却是无用的。

InfoQ:你能否解释与保持做项目的心态相比,以一种做产品的心态去研发更能取得好的成果?

Mary & Tom Poppendieck:项目的问题是人们首先需要埋头应付项目中批量的工作,其次项目的目标是遵循计划。在精益软件开发世界中, 我们已经认识到, 小批量部署的代码能够显著提高代码质量,同时大大增加流动效率(因此整体效率也得以提高)。

项目中所谓的“交付团队”期望执行一个精心设计的计划,并且会考核实际执行情况与计划的偏差。但这样的做法要求计划——往往是在项目初期可用信息最少的时候制定的——在整个项目后续的执行中始终保持正确有效。这种做法认为不需要了解项目实际情况并加以适应。虽然一些大型项目允许分阶段滚动改变未来部分的项目计划,但从根本上项目还是基于这样一种理念: 计划是有价值的,并且应当严格遵循。这种假设在不确定的环境中本身就是有缺陷的。

产品面对的是一个不确定的世界——经费不确定、竞争不确定、业务影响不确定。产品被不同的、多样化的团队(包括设计、产品管理、市场营销、工程、支持和运营等团队)构思、尝试和实践。当这些不同技能领域的特长专家共同理解市场、消费者、技术现状以及未来的各种可能性时, 伟大的产品就此出现。事实上,当今市场上,几乎所有伟大的产品都离不开不断地实验过程。

Marty Cagan (来自硅谷产品集团) 表明, 所有好的软件密集型产品中,超过一半的创意来自工程团队,因为这些人明白技术的力量和未来的方向。这意味着当工程团队将重点放在项目交付上,如果只是循规蹈矩完成“业务”要求的需求, 那么大多数潜在的好想法将永远不会变成产品。

InfoQ:你谈到当使用大规模敏捷的时候要关注业务的影响,你能举例说明这点么?

Mary & Tom Poppendieck: 我想改述你的问题——为什么会有人想度量“敏捷”? 如果做得正确,精益 (和敏捷) 是一种心态,这种东西你无法衡量和评测。你可以度量——并测量——的是,通过引入敏捷和精益的原则所带来的积极的业务影响。所以让我们来谈谈为什么以及如何关注业务影响。

聪明、富有创造力的工程师们会在自己的工作中找出有意义的目标。如果他们受制于组织现状,自己对产品的积极改进无法让用户受益,那他们将会另外寻找工作的意义,或是通过历练自己的技术达成美化简历的目标, 或是以追求个人或团队愿景为目标。但是工程师也是人, 与能够通过对技术的掌控而有效解决他人重大问题相比,这种靠程序员内在驱动产生的目标所带来的激励要差很多。以一种对业务有持续积极影响的方式,解决自己所关心的人的重大难题, 这种工作目标才会有最好的激励效果。

这是怎么做到的呢? 最应当关注的是设计师、产品经理、工程师之间的反馈回路是否达到了预期的效果?好的做法是三者都在一起工作,从他们决定尝试一些事情,到他们收到反馈(按照最佳实践应从真实客户处得到反馈)。这个反馈回路是按小时计? 按天? 按周? 按月? 还是根本没有回路? 设计师 Bent Victor 有一条指导原则: 创造者需要与他们创造的东西有紧密的联系。我们有一个类似的指导原则: 团队应该基于他们从工作中获得的经验而做出调整。缩短反馈回路。

查看英文原文: Scaling Dilemmas and How to Deal with Them


感谢丁晓昀对本文的审校。

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

2015-05-20 08:582723

评论

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

架构实战营-模块六作业

无名

架构实战营 「架构实战营」

OceanBase 源码解读(七):一文读懂数据库索引实现原理

OceanBase 数据库

开源 oceanbase 技术解析

Linux常用命令速查手册

入门小站

Linux

在自己的服务器上部署hexo博客

为自己带盐

Hexo 28天写作 12月日更

Camtasia有哪些基本功能

淋雨

Camtasia 录屏软件

2022世界物联网AIOTE博览会-北京开幕

InfoQ_caf7dbb9aa8a

2022北京-AI人工智能-主题展

InfoQ_caf7dbb9aa8a

10年经验总结,华为fellow教你如何成为一名优秀的架构师?

华为云开发者联盟

架构设计 架构师 华为fellow 云服务运维

央行数字货币完成闭环测试 亮剑在即

CECBC

站在你领导的角度考虑问题

张老蔫

28天写作

区块链技术何以成为中国数字化转型最新驱动力?

CECBC

30个类手写Spring核心原理之Ioc顶层架构设计(2)

Tom弹架构

Java spring 源码

2022年企业采购多云管理软件就选行云管家!

行云管家

云计算 公有云 混合云 多云 云管理

模块6作业

Asha

<<活法>>读后感

Tiger

28天写作

大数据开发之传输组件Sqoop的功能介绍

@零度

大数据 sqoop

万吨黄金做后盾!央行数字货币正式拉开序幕

CECBC

netty系列之:一个价值上亿的网站速度优化方案

程序那些事

Java Netty nio 程序那些事 12月日更

2022北京-大数据-博览会

InfoQ_caf7dbb9aa8a

前端开发之Vue 技术栈编写表单组件

@零度

Vue 前端开发

【入门教程直播第三期】如何完成一次高质量的 OceanBase 数据迁移

OceanBase 数据库

数据库 学习 开源 课程 oceanbase

🏆【Alibaba中间件技术系列】「RocketMQ技术专题」Broker配置介绍及发送流程、异常(XX Busy)问题分析

洛神灬殇

RocketMQ 消息队列 Apache RocketMQ 12月日更 System Busy/Broker busy

注册了一个新域名(10/28)

赵新龙

28天写作

2022北京展会专题

InfoQ_caf7dbb9aa8a

Kyligence 智能数据服务与管理相关研究

Kyligence

技术专题合集

MySql优化:一条SQL语句的执行过程是怎样的?

秋水

MySQL性能优化 内容合集 签约计划第二季

数据库大赛50强之「中国人民大学」:培养工程性精英人才,共筑数据库美好未来

OceanBase 数据库

开源 新闻动态 oceanbase OceanBase 数据库大赛

浅析流媒体CDN与WEB CDN的业务差异

郑州埃文科技

CDN加速 IP网络 在线并发

Linux一学就会之文件系统结构-硬链接和软链接

学神来啦

Linux 运维 链接 linux云计算 硬盘

青岛等保测评机构有几家?咨询电话多少?在哪里?

行云管家

网络安全 等保 等级保护 等保测评 等保2.0

极光笔记|基于CMPP协议集成短信测试桩全流程实践分享

极光JIGUANG

大规模软件研发的困难和应对之策_文化 & 方法_Ben Linders_InfoQ精选文章