“以迭代的方式”工作,是敏捷开发最基本的一个概念;也就是在反复出现的过渡性里程碑节点上,逐步交付更好的产品版本。每一种敏捷方法论都有自己相应的比喻标签。极限编程的“迭代”和 Scrum 的“sprint 冲刺”是最为人知的两种。 Kevin Schlabach 认为“sprint 冲刺”可能是一个糟糕的比喻。
Kevin Schlabach 最近的帖子认为:Scrum 对于“sprint 冲刺”这个单词的使用经常会传递错误的信息:
有些人听到“sprint 冲刺”这个词汇,经常会感到疑惑。他们会问:要是我们总以全速前进,怎么可能不会感到疲惫呢? 人们很容易这样理解“冲刺”这个比喻:你的目标触手可及、近在眼前,因此你情绪昂扬,准备付出更多的努力来达成目标……它传递了一种高度重视的感觉,并让人觉得应该力图而且有可能马上完成目标。
实际上这个词汇并没有说人们应该全速前进……但是对大部分人来说,这就是“冲刺”的定义。
接下来,Schlabach 将敏捷开发与优秀马拉松选手完成比赛的方式进行了比较。他指出,马拉松选手在前进时会检查自己的速度,这是非常重要的;马拉松选手“如果想在 20 英里的比赛中达到平均每英里用时 5 分钟的速度,他们必须在第 1 英里就用 5 分钟跑完”。优秀的选手在整个比赛过程中都会非常重视自己的节奏,他们会留心自己是超出还是落后于自己的速度目标;而且,他们会留心自己是否保持了一个“可持续的步调”,这跟“短跑选手”的比赛方式大相径庭。
Schlabach 将话题拉回到软件开发之上,他使用“步调度量”这个想法,来阐述他所认为的“sprint 冲刺”的关键所在:
Sprint 的关键,是要建立度量周期。如果不经常测量进度,你就无法验证之前的预测是否准确。事先声明会在定义好的周期上展开测量,你可以让自己避免陷入麻烦之中,也就不必再想办法如何摆脱麻烦了。
在 Agile Journal 上, Doug Shimp 和 Dan Rawthorne 在“Scrum 中的比喻”这篇文章中也谈到了类似的话题:
Sprint 是“用尽全力冲过终点”
这就是 sprint 在田径运动中的含义,而且会使得 Scrum 中的 Sprint 总是给人急迫的感觉。可人们不是说:要是总这么跑,那就会喘不过气来么?可持续的步调又到哪里去了?我们已经见过人们有意避开这个词汇,因为他们觉得以后的工作将会变成一系列令人疲惫不堪、呼吸困难的比赛。 我们建议不要从速度、而是从跑道的角度思考 sprint。人们可以看到终点,而且以直线的方式到达。距离并不长(30 天甚至更少),而产品负责人的定义确定明确的终点。
以“可持续的步调”进行“迭代”,这对敏捷开发的成功至关重要。使用“sprint 冲刺”这个单词是不是会让人们远离这一点呢?对于这个问题,您有没有什么想法或是故事要分享?
查看英文原文: “Sprint”: a Misnomer?
在InfoQ 英文站新闻的评论后,读者纷纷发表了自己的看法。
Dave Rooney 说自己经常跟人就 Scrum 的用词进行讨论,他说 Scrum 听起来就像是让人会把自己的头撞得头破血流的地方【译注:此处应该是指 Scrum 的原义——橄榄球中的争球仪式】,而 sprint 则像是只能在短时间内做的事情,很难重复。另外,他对“马拉松”这个词汇的运用也表示怀疑,认为既然第一个跑马拉松的人在最后死掉了,也许这个词汇很难让人产生应有的感觉和印象。他觉得也许用 5000 米或 10000 米跑来形容更合适。
Barrett Nuzum 也同意这些词汇容易产生误解,尤其是对于刚刚接触 Scrum 的人来说:
我的第一个敏捷项目举行了不少回顾会议,团队成员都说他们很难找到可持续的步调。我想“检视和适应(Inspect and Adapt)”应该有助于解决这个问题。但是是否所有的团队都愿意花费时间来吸取这个教训呢?我不这么认为,虽然我觉得他们应该这么做。 我总是试着用“迭代”来替换“sprint 冲刺”,特别是这个词汇暗示着你不仅仅在不断提供解决方案,同时这个过程也并不是马上结束的(也就是说不能立即发布)。
“韵律(cadence)”是另外一个我喜欢用的词。这意味着要创建有规律的节奏,而不是筋疲力尽的“冲向终点”。
Barrett Nuzum 还建议大家去看他的前同事 Dave Nicolette 的文章,其中特别解释了一些容易引起争议的 Scrum 词汇。最后,Barrett 指出:要想成功,指导新人必不可少。
Jim Leonardo 认为:考虑到“计划、执行、发布”这个反复的过程,正确的田径运动比喻应该是“圈(lap)”。
Ben Hall 则觉得“冲刺”这个比喻没啥问题,只是大家没有完全理解,而且它跟其他 Scrum 的比喻混在一起了。
人们觉得“冲刺”就是竭尽全力,而在径赛运动中并非如此。有一句教练的名言:“想破世界纪录,你得放松,而不是出尽全力。”冲刺是受到控制的表现。 在现代的径赛训练中,间隔训练已经成为绝大多数运动各级水平的基本常识了。举个例子,在热身时,跑 8 个 400 米,每次用时 68 秒左右,两次跑之间间隔 2 分钟的休息和舒缓时间。每个间隔包括两部分:工作和休息。实际上,“工作”也是通过“冲刺”来完成的。其他活动都是对工作努力的支持。你也许会说:很多冲刺会有好几个轮次。没错,即使是在比赛时,你也得经常在轮次之间控制个人的体力分配。
我是个 Scrum 的支持者,不过我也觉得很多现代的体育训练概念可以用到软件工程的实践中来。很多学校的径赛教练都使用名为“周期化(periodization)”的概念。“周期化”会将一年或几年分为大小规模不等的时间阶段,并在这些阶段中应对不同的压力,以在长期内产生最佳的成绩。在某种程度上说,这些概念与软件开发的工作有共通之处。我们的工作阶段也可以分月、周、日,还做一些练习,我们也不是总是在“冲刺”那样小粒度的阶段上工作。我们也希望得到长期的出色表现,而不是一次性的工作投入和产出。而 Schlabach 似乎还是陷入了他的“马拉松”比喻之中。
评论