我谈迭代

包括Scrum在内的敏捷开发是一种基于递增和迭代(Incremental & Iterative)模型的开发方式,绝大多数人都知道。但是我经常会在培训中较真地问学员,“迭代是什么意思?”绝大多数情况下,学员们脸上是一片茫然。有时候会有人回答:“在Scrum中,每2到4周是一个迭代,把时间分成这样一个一个时间箱的就是迭代开发。”其实并不尽然。

首先看一下迭代(Iterative)这个词,因为这个词是舶来词汇,我们看一下它的英文注释。Iterative是英文Iterate的形容词形式。看一下韦氏大辞典中Iterate一词的定义

Iterate: To say or do again or again and again重复地说或者做)

很显然我们的迭代开发(Iterative)中的迭代取的是它的“不断地做(Do again and again)”的意思。因此迭代开发背后的思想是一种与传统思维模式截然不同的方式,传统思维方式往往希望一遍做好,一次成功;但是迭代开发意味着反复地做,不断地根据客户和市场的反馈进行调整。

 

迭代促成创新

在”Google的创新“中, Google的资深技术总监Patrick Copeland指出,人类对于创新的最大的错误是认为“创新是关于想法”的。对于创新来说,更重要的是找到是像爱迪生和Reid Hoffman(Paypal和LinkedIn的创始人)这样的发明家。爱迪生坚信:“天才,百分之一是灵感,百分之九十九是汗水”。他愿意为了发明电灯去试验、去迭代几千次。而Reid会把简单的想法不断去迭代,最终造就了Paypal和LinkedIn。

 

持续发布(Ship)的习惯

迭代的一个前提和直接的后果就是需要不停地发布,不停地发布才会从客户那里获得反馈。在“Linchpin – Are You Indispensable?”一书中,畅销书作者Seth Godin指出,在当今这个竞争激烈并极速变化的世界里,如果为了克服自己的懒惰,克服自己的恐惧,实现自我的艺术(也就是价值),唯一的解决方案就是”To start today, to start now and to ship, make it a habit“。这个在谷歌里面称为极限创新(Extreme Innovation)。“如果没有因为发布了第一个版本而感到羞耻,那发布得就太迟了;尽量每天都能感受到羞耻,不停地去测试新的想法,去迭代、迭代、再迭代。”无独有偶,亚马逊每个星期也会400次左右的升级。苹果也在持续发布它的产品,把它的竞争对手远远抛在了后面。在敏捷界,我们给它取了一个新的名字:“持续发布(Continuous Delivery)

 

迭代思想贯穿整个敏捷开发

TDD的基本工作方式是:先写一个失败的测试,然后用最简单、最蠢、最多硬编码的方式去让测试通过,关键是让它马上通过,而接下来的事情就是不停地去重构,去优化。不停地去尝试用更好、更容易理解的方式去实现。这是一种迭代

演进式设计与架构,敏捷团队同时会避免过早、过多的预设计(BDUF),通过Emergent Design去发现程序设计中需要抽象的部分,把它抽象为架构的一部分。这一切也是从最基本的设计,不断演进而来。这也是一种迭代。

演进式需求。绝大多数敏捷团队都会利用用户故事来管理需求,而用户故事能够完美地支持需求的演进。这还是一种迭代

Dan North(BDD的发明人)去年提出了“刻意的发现”(Deliberate Discovery),参见他的博客和在伦敦QCon的话题分享,更加强调了无论是需求还是设计,都要避免过多的预设计,而要通过在日常功能开发过程中不断地、有纪律地、刻意地去发现,去抽象,去演进,才会做出好的系统。迭代贯穿整个产品开发的方方面面,是刻意

 

迭代与质量

质量维度为功能迭代提供了一个很好的切入点。正如我在去年敏捷之旅成都的话题“Achieving business agility with onion release”以及在Scrum Gathering中的”User Story Map”工作坊中分享的,我们可以通过对功能进行横向切分,把一个功能划分成必须的、可选的、安全性的以及性能、易用性等许许多多的用户故事,这其实就是在根据对客户的理解以及从客户那里得到的反馈对同一个功能不停地去优化,去迭代。

最后分享几个关于我收集的关于递增&迭代开发的链接
“”We Increment to Adapt, We Iterate to Improve“ via Jurgen Appello at “Methods and Tools” magazine, Summer 2008

Using both incremental and iterative development ” via Alistair Cockburn

Going Round and Round and Getting Nowhere eXtremely Fast? Another Look at Incremental and Iterative Development.”  via Pascal Van Cauwenberghe at “Methods and Tools” magazine, April, 2004

 

Share

One comment

  1. seo companies · 18 7 月, 2011

    I do trust all of the concepts you’ve introduced on your
    post. They are really convincing and can definitely work.
    Nonetheless, the posts are too brief for novices.
    Could you please lengthen them a little from subsequent
    time? Thank you for the post.

Comments are closed.