【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

当你的“敏捷”团队以蜗牛的速度行进:5 个关键路障以及如何克服它们

  • 2015-12-06
  • 本文字数:3885 字

    阅读完需:约 13 分钟

在过去的十年里,作为敏捷项目的讲师和经理,我发现自己越来越认同我一开始工作的时候阅读的一个引述:

我们已经从一个教理(瀑布式)转到了另一个教理(scrum 和 XP),我认为所有的重点是我们被期望能做到敏捷的。我们的思维发生了什么?—— Brendan’s Braindump 中的注解。

然而大多数的软件工程团队,特别是那些精益开发团队,极其信赖像 Scrum 和 Kanban 这样的敏捷开发过程框架,在理论和实践中总有很大的差距。当敏捷对于一个组织或是团队的新成员来说是一个相对来说比较新的概念时,这句话尤其地正确。

敏捷方法可以清楚地帮助处理由来已久的 IT 关注点:缺乏团队效能,螺旋形上升的开发时间和开销,以及适应变化的困难。然而,这显然不是一个银色子弹:我看过大量的敏捷开发团队不能完全履行任务,下面的五条是我遇到过最普遍的原因。

敏捷的阻力

一个解决祸患的百发百中的秘诀是不断向一个不可信服的团队灌输敏捷过程。许多大的组织仅仅雇佣一个敏捷教练,训练使用 Scrum 或者其他方法的团队,希望所有团队都会变好。但是习惯对于个人来说是最难戒的毒药。说起对于敏捷的抵抗, Mountain Goat 所说的正中要害:

许多团队可能会抵抗敏捷,因为他们对现在的工作和同事感到很舒适。另外的团队可能因为真的不喜欢或不相信 Scrum 方法而抵抗敏捷。他们可能相信反复开发复杂的产品而不做重要的事先设计会导致事故。

真实的故事:我工作过的一个产品团队用扑克牌来决定处理积压的工作的优先权。但是经理所说的任何话仍然是板上钉钉的,击败了我们做团队决定所付出的努力。尽管经理、开发者和测试员都知道过程背后的理论,遵从的习惯太难被改变动摇。领导不想失去他们的影响力,所以选择不追随开发过程中的许多关键部分。

这意味着虽然我们名义上是遵守“敏捷”过程的,我们的行动还是固守于一些以前的思考方法。这种工作方法让领导和许多团队成员都感到很舒适。不用说,这个团队没有从敏捷过程中得到任何的好处。

如何克服它:为了使用敏捷方面取得成功,记录谁失败了谁获得了能力是非常重要的。你必须保证整个团队都能从这个过程中获益。这需要说服所有的利益相关者,证明并且列出从过程中可以获得的清楚的好处,听取所有的反馈,在极端的例子中,把顽固的反对者分开,减低他们对团队活力产生负影响的能力。

无法应对不断变化的优先级

大多数的 Scrum 管理员和产品经理都承受着大项目,小团队的压力。由于没有任何可能偏离于 sprint,所以任何没有预想到的需求都会造成严重的问题。万一你有有限的资源,不能为这个项目加更多的人,任何迫切的需求都可以强迫你离开原先预计的轨道。

对太多的团队来说,接收新的需求的同时还按照原先的计划执行几乎是不可能完成的任务。因此,团队在不停的迭代规划过程中,许多次失败于持续交付所承诺的成果。

当然,你可以因为考虑 sprint 中期的优先权而拒绝临时的需求。但这不是每次都可取的方法。在这种情况下,你可能必须要从现有的 sprint 中去除一些需求,之后新的需求才能添加进来。在其他情况下,你会被强制取消 sprint 并着眼于急迫的需求。

真实的故事:我几年前做的一个项目,客户想要一个简约的登录注册表单,然后他们的顾客可以简单地通过他们的 email 登录注册。团队创造了一个表单设计,也得到了认可。此后,在下一个 sprint 中,后台开发完成后,客户决定在表单中添加一些参数,以从用户那里获取更多数据。

这阻碍了工作的发展。Scrum 管理员迅速地重新安排了资源,改变了 sprint 的优先权,关注于首先持续交付设计,让设计获得认可,再用剩余的实际来完成后台开发。由于需要改变的部分相对来说比较简单,优先级的改变并没有很坏地影响进程的发展。但是那些会影响接下来的 sprints 重大改变会很难处理。

如何克服它:最好的避免这种情况发生的方法是请一位受过训练且有经验的 Scrum 管理员来指挥团队的进展,他可以设想预测未来的需求,有效地把事情按照优先权排好,并为产品工程创造最优的计划。

同时,各种不同的编程实践的知识,还有一些可以使用于解决具体问题的经验也会帮助应对没有预想到的问题。这是向一个经验老道的敏捷教练请教时可以获得的巨大的帮助。Scrum 管理员拥有的经验越多,越容易解决因为改变优先权所引发的问题。

处理不了的缺陷积压

Agile 关注于不停地持续交付和开发,这迫使团队快速进展,持续交付通常优先考虑质量问题。发现许多错误和缺陷堆积起来形成一个巨大的、令人生畏的积压非常常见。随着时间的推移,团队工作的一个非常巨大的组成部分就是处理积压问题,导致只有非常少的时间和精力可以致力于新的设计或是开发。

太多的团队,特别是新接触敏捷的团队,最终会处于一个站不住脚的位置,因为他们团队整个开发过程的很大部分都在处理积压问题。在最差的情况下,开发软件的过程就像你在开车时手刹拉着的情况。

真实的故事:我们的一个团队曾经做一个有清楚需求的明确的项目。然而,当客户把这个产品的某些部分推广至更大的用户群时,完全想不到的初始功能的概念性缺陷被发现,这严重破坏了正在进行的 sprints。

产品经理迅速调整了分配于缺陷清理的时间比例,并改变了管理,重视了客户想法改变的频率、团队的速度和我们的质量基准。通过分配 20% 的时间给缺陷积压,为一些 sprints 增加额外的资源,以及运用结对编程的方法来加速进程,我们最终度过难关,防止事态失控发展。

如何克服它:没有一个简单的答案——团队只需要产生较少的缺陷,并很好地解决它们。为了实践的目的,将开发过程中 10-15% 的工作(或是适合你的项目的比例),用于解决测试过程中发现的错误,这是一个很好的可以防止积压变得很多的方法。

一个熟练的,可以迅速优先缺陷处理,使用正确的 Extreme Programming 和 Test Driven Development 方法的 Scrum 管理员在项目的成功完成中起到了关键性的作用。

延迟于构造 MVP

当运用 MVP 模式工作的时候,许多敏捷团队都以平行地执行 UI 设计和后台活动告终,而并没有建立这两者之间的桥梁。我们不妨假设产品开发预计需要 9 个月。在这种情况下,大概需要 4 个月平行开发 UI 和后端(并没有建立两者之间的桥梁)。在这种场景下,首次查看统一的产品造成的更改会有深远的影响,这通常会导致大规模的修改。

真实的故事:我曾经工作的一个团队负责开发一款移动端以及网络端的应用,开发过程从屏幕设计开始。一旦 PSDs 或 JPEGs 被批准,中间层、数据库和商业逻辑元素也得到了解决。然而,由于应用程序的交互仅在设计被批准后才可以看到,客户经常返回修改设计,使得整个开发过程紊乱。

Scrum 管理员可以通过将所有的交互放在一起来简化整个开发过程,并让整个开发过程合理。因此,设计、开发和每个过程的交互都串行建立,向客户提供一个工作模块或功能。这可以让客户从一开始就获得一个清晰的图像,因此可以减少紧要关头的改变的数量。

如何克服它:只有当开发过程中的所有部分,包括设计、JPGs、HTML、代码、中间层和数据库都连接在一起的时候,才能使产品拥有一个对于真实可用的产品的清晰视图。团队可以在每个 sprint 递交一个功能性的、交互性的产品。这个产品层层建立,每次迭代过程都给产品拥有者一个更清晰的视图。这可以帮助及时递交 MVP,减少开发最后阶段的重要改变。

缺乏敏捷教育,交流的缺口

当产品拥有者不能经常与大型团队进行沟通时,或者当他 / 她不理解敏捷过程时,往往会出现问题。

真实的故事:例如,我曾经工作的一个团队遇到了一些延迟,仅仅因为产品拥有者不能每周在 sprints 提供及时的输入。

在另外一个项目中,没有单独的产品拥有者。这个角色被分成了一个技术领导和一个功能领导,他们有不同的优先权和不同的观点。这两个领导不参与日常团队工作中,他们经常提出互相矛盾的需求。这对于优先化产生了很大的问题,使得开发者很难处理。

如何克服它:虽然做决定和从整个团队以及利益相关者那里输入很重要,让问题可以止步也同等重要。对于产品有清晰广泛的视野的个体,和一个可以做最终决定的人,在大多数情况下都非常需要,他们可以在开发时避免分散的方法。

与此同时,教育产品拥有者和管理人员敏捷过程的工作方式,以及他们在成功开发中必须扮演的角色是非常重要的。为了这个目的,雇佣一个有经验的敏捷教练会是一个有益的决定。

总结

当然,如果你想从任何的敏捷过程中获利,会有许多其他的障碍需要你去克服。但是以上的这些是最普遍的和可避免的错误,这些错误仍然困扰着许多团队,仅仅因为组织不能改变他们的习惯和思考过程。

对于敏捷你经常抱怨的问题是什么?什么正在妨碍你的软件产品开发过程的敏捷性?请在评论中与我们分享你的见解和经验。

关于作者

Bhoomi Mehta是一位 IT 专业人员,她在 Cygnet Infotech 公司任职,拥有被证实的跨职能专业技能,包括咨询、运营、市场营销和应用程序投资管理。她将精力运用在激励敏捷精益团队在各自的功能中发挥最佳水准。她这些年在各个方面身兼数职,包括咨询、指导、训练、团队管理、质量保证以及市场营销。Bhoomi 的动力来源于使能够建立精益的、自立的、热情的和有效的团队。她所有努力的基础上是一个清晰的理念:“团队不是好的或者是坏的来判断的。一个项目或是任务的成功结果与指导、工具和相信你自己可以成功完成直接成正比的。”

查看英文原文: When your ‘Agile’ Team Moves at Snail Pace: 5 Key Roadblocks and How to Overcome Them


感谢张龙对本文的审校。

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

2015-12-06 03:272575
用户头像

发布了 218 篇内容, 共 65.0 次阅读, 收获喜欢 75 次。

关注

评论

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

原创 | 使用JPA实现DDD持久化-O/R映射元数据:类级映射-实体和值对象

编程道与术

Java hibernate 编程 mybatis jpa

Java架构速成笔记:七大专题,1425页考点,挑战P8岗

Java架构追梦

Java 学习 面试 java架构

不满意社区的轮子,我们自创了一套 React Hooks 风格的数据加载方案

LeanCloud

API React Hooks

时序数据库DolphinDB与Druid的对比测试

DolphinDB

数据分析 时序数据库 Druid 数据库选择 DolphinDB

如何预防勒索攻击事件?这份安全自查指南请查收

京东科技开发者

数据安全 数据加密 系统安全

话题讨论 | 30 张图解高并发服务模型你必须这些

程序员柠檬

话题讨论

原创 | 使用JPA实现DDD持久化-O/R映射元数据:映射注解分组

编程道与术

Java hibernate 编程 mybatis jpa

在构造函数中调用其它构造函数会有什么问题吗?

jiangling500

Java c++ C++11 构造函数

分布式时序数据库DolphinDB与InfluxDB对比测试报告

DolphinDB

数据库 大数据 Influxdb 性能测试 DolphinDB

有钱还APP系统开发|有钱还软件开发(现成)

系统开发

话题讨论 | 选择做一个程序员,你后悔过吗?

xcbeyond

话题讨论

情报合成研判系统开发,智慧警务解决方案

t13823115967

智慧公安

区块链司法存证应用落地应用解决方案

t13823115967

区块链落地开发

甲方日常 65

句子

工作 随笔杂谈 日常

《css大法》之使用伪元素实现超实用的图标库(附源码)

徐小夕

CSS css3 大前端 CSS小技巧

北京奥森小景

小马哥

摄影 美景 奥森 28天写作

Mybatis 中xml和注解映射,这次终于搞明白了

田维常

mybatis

原创 | 使用JPA实现DDD持久化-领域模型:对象的世界

编程道与术

Java hibernate 编程 mybatis jpa

话题讨论 | 立一个近期的flag,你会想到什么?

xcbeyond

话题讨论

P8架构挑战:七大专题1425页考点,你能成功吗?

小Q

Java 学习 程序员 架构 面试

roblox mini map

katichar

可见性是什么?(通俗易懂)

叫练

volatile JMM 多线程 synchronized

人脸识别是如何实现的

anyRTC开发者

ios 音视频 WebRTC 人脸识别 安卓

《算法导论》.pdf

田维常

全球熵ETV系统APP软件开发

系统开发

业务中台建设-数据

孝鹏

架构 中台 数据 赋能

一文教你看懂缓存穿透、击穿、雪崩、降级等异常

鄙人薛某

Java 缓存 后端 缓存击穿 缓存雪崩

operator-sdk & kubebuilder

QiLab

k8s operator-sdk kubebuilder crd

安装MySQL后,需要调整的10个性能配置项

Simon

MySQL percona server

第四章作业

走走,停停……

使用JPA实现DDD持久化-O/R映射元数据-特殊属性映射:ID、Version和Transient

编程道与术

Java hibernate 编程 mybatis jpa

当你的“敏捷”团队以蜗牛的速度行进:5个关键路障以及如何克服它们_文化 & 方法_Bhoomi Mehta_InfoQ精选文章