写点什么

书评:敏捷模式──指向成功的路标

2008 年 10 月 07 日

在 AmrElssamadisy 最近的一本书《敏捷模式──指向成功的路标》中,他使用了一种概念框架,用这个框架把具体应用环境和敏捷策略一一对应。他没有建议人人都使用一系列相同的实践方法,而是针对公司所想达到的目标,帮助你找出哪些实践方法是最适合的。这些实践方法不但会引领你走上敏捷的道路,而且会将迁移过程的花费,以及所出现的失望情绪降至最低。

成功实施敏捷开发方法,对于一个企业而言,将会获益匪浅。敏捷过程提供更为精确的项目评估;在项目正在进行的同时也能给予更好的控制(提供更有用的功能,而不只是需求文档上所要求的);产生更高质量和更易于维护的软件产品;以及提高开发团队的士气和信心以及彼此之间的信任。不幸的是,正如我们许多人在敏捷开发者社区里所了解到的,从传统的软件开发过程迁移到敏捷软件开发过程非常困难。针对具体的企业环境,找到合适的敏捷方法并进行实践,是一件很让人头疼的任务。因此,许多企业在转换过程中经历了很多困惑和失望,而且许多企业在发现敏捷开发方法的益处之前,就放弃尝试了。

Elssamadisy 在书中提供了一些行之有效的方法,可以帮助你避开在实施敏捷中的种种陷阱。举例来说,尝试“大跃进”式的迁移是很常见的错误,而作者为你提供了一种逐步进行、迭代采纳敏捷开发方法的计划。他鼓励使用敏捷的方式来实施敏捷:在(希望是)正确的方向上小步前进,利用短期回馈来收集信息,用于调整方案和确定下一步的计划。同时,作者会帮你达到投资回报率最大化,他提供的技巧可以找出对组织最重要的商业价值,并且告诉你如何选择一开始采取的实践组合,以强化这些价值。

如果你对敏捷有所了解,而且希望知道如何在真正的项目中卓有成效地实施敏捷,这本书就是你的不二之选。如果你非常愿意帮助采用传统软件开发方法的企业转而实施敏捷开发,那么这本书非常适合放在你的书架上。

上下文驱动的实施方式

该书的前两部分(第一部分:关于软件开发的想法;第二部分:实施敏捷的艺术)是全书的核心。

第一部分介绍了两个可供敏捷指导者采纳的指导原则:

  • 原则 1:学习是瓶颈。
    对于给定的流程和任务,如果不知道如何实施,要找到可以加快学习速度的途径。Elssamadisy 主张使用敏捷实践者普遍采用的一种方法─周期性得信息回馈 :1)设立目标 2)采取有助于达成目标的行动 3)将行动结果与目标进行比较 4)调整行动并回到步骤 2

    学习的过程发生在步骤 3,并在步骤 4 中得以应用。

    Elssamadisy 同时强调了沟通对于强化学习效果的重要性,个体之间的信息传播,可有效地使他们融入软件开发过程。

  • 原则 2:个体敏捷性
    Elssamadisy 借用了 Chris Avery 的“责任过程模型”,以帮助读者在组织变化的过程中,保留富有成效的想法。该部分提出的建议包括:如何避免常见的陷阱,包括盲目指责、妄下结论、自怨自艾、羞愧难当,以及自感无助而没有主控权的状况。为了产生(并且保持住)责任感,必须创建“思想上为自己负责的状态。用行动解决我们不喜欢的东西。这就是达到个体敏捷性的起点。”

该书的第二部分是我最喜欢的。它阐述敏捷实践的方式,是我不曾在其他书中看到的。它明确描绘了各种各样的“业务价值”(就是诸如“缩减生产时间”和“提高质量”这样的目标),这些价值及其目标可以利用敏捷方法达成。如此描述方式,可以帮助读者在采纳敏捷时,照顾到组织的客观环境:首先,确定对于组织最重要的业务价值;然后,根据上述的目标来应用敏捷实践,从而提升业务价值。

Elssamadisy 同样描述了一些经常碰到的“坏味道”,利用敏捷方法可以有效的去除它们。(一般来说,坏味道比业务价值更易于发现。因此,从企业目前的坏味道开始,确定采用哪种敏捷实践,通常是一种相对简单的途径。)

进一步地,Elssamadisy 解释了各种敏捷方法的联系。很多时候,如果不首先实施某种敏捷方法,那么很多基于它的敏捷方法就很难实施下去。针对特定的商业价值和坏味道,Elassamadisy 提出了一个草图,用于排序和分组对应的敏捷实践。

这种以上下文驱动来实施敏捷的方式,是敏捷出版物中早就应该出现的,我非常高兴地看到它成为本书的核心。由于体验过许多艰难的过渡经历,我可以断言:以基于上下文的、迭代的方式实施敏捷会大行其道,尤其适合于大型组织机构。

敏捷模式

敏捷模式的章节几乎包含了敏捷领域中所有的模式。它们被分成五个群组:

  • 目标和周期:
    两个基本的模式构成了许多敏捷实践的基础。
  • 信息反馈实践:
    迭代、启动会议、待办事项列表、规划扑克、站立会议、完成状态、演示、回顾、时常发布、“联合驻扎”团队、自组织团队、跨职能团队、客户作为团队成员、唤醒式文档、用户故事、用例、和信息辐射器。
  • 技术实践:
    自动化测试、测试后行开发、测试先行开发、重构、持续集成、简单设计、功能测试、代码集体所有制、结对编程。
  • 辅助实践:
    指导、加入社区、阅读周期、研讨会、教室式培训。
  • 模式集群:
    迭代集群、沟通集群、演化的设计、测试驱动开发、测试驱动需求。

辅助实践也包含于其中,是非常令人高兴的。从本质上来讲,它们不是敏捷实践,而是帮助学习新知识的方法。但是,如果忽视了这些实践,将会使学习举步维艰。

每个模式都包含一些有用的工具, 有助于判断这个模式的实践是否适合于你的敏捷实施计划。这些工具包括:对当前模式所提升的业务价值的解释,特定模式适用环境的介绍,和对于某些模式试图解决的阻力的深入说明。仔细阅读每个模式的上述内容,读者可以确定在自己所处的环境中,实施特定的模式会有多少价值。

拿“演示”模式为例,列举一些帮助你判定该模式是否“合身”的内容:

业务价值:
“演示”增加了项目对于干系人的透明度,让客户评估具体的系统,这也增加了产品的实用性,同时对迭代也是支持。迭代可以直接提升业务价值,而演示在这方面起到了二次影响。上下文:你处在一个开发团队中,此团队施行迭代开发,投资者在开发团队之外,但对项目的进度感兴趣。

阻力:

  • 将需求和设计用文档记录是可以的,但是不足以提供信心,让组织相信应用可以满足他们的需要。
  • 通过增强项目透明度,并且提供定期演示的流程,可以增强信心。
  • 可工作的软件会给投资者树立信心,让他们看到不断推进的、卓有成效的工作成果。
  • “我们完成了需求和设计的编写和复查,这就表示完成了 30% 的工作量”,类似的片面完成度统计是错误的。开发者们一向过于乐观。
  • 完成可工作的软件所付出的努力,还包括在软件开发的后续阶段减少许多瑕疵。
  • 越早发现缺陷,修复付出的代价越小。
  • 查找和修复缺陷是一个学习的过程,而学习是软件开发过程的瓶颈。
  • 一些早先设想的解决方案并不总是我们真正需要的。有时候虽然软件开发完成并通过测试,而且是完全按照需求完成的,但不能解决真正的问题。

接下来,关于模式的章节介绍了如何帮助你有效实施敏捷方法,同时避免很多实践者曾落入的陷阱:

因此:
当前模式的描述。该模式如何解决已知上下文环境下的种种阻力。 采纳方法:步骤,顺序,一些实施当前模式的建议。

但是: 采用当前模式可能产生的消极结果。

变种:该模式的变种,不同于“因此”部分的描述,同样能成功实施。

引用: 深入阅读资料。

这些部分用精炼的语句总结了许多敏捷社区诞生的智慧,并且与实际问题丝丝相扣。如果你正在进行某种实践的尝试,但是并未体会到它提供的任何价值,那么这些部分可以帮助你进行调整,以从实践中获得更多的价值。

我非常喜欢“但是”部分。很多常见的敏捷实践都非常容易出错,而且经常很难找到有关这些错误的描述。阅读这一部分的内容,新的敏捷实践团队就可以设置切合实际的目标(不是一切都能顺利推进,实施敏捷实践时有很多歧途),这部分内容还能给新的团队以警示,确保他们不走弯路。大多数情况下,“但是”部分会包含很多建议,告诉你要是走错了路该如何扭转局势。由于许多敏捷实践都曾在这些情况下出了问题,能看到相关内容实在是读者的一大福音。

实例研究

该书的第三部分,研究了两个应用敏捷实践的真实案例。有关敏捷的出版物中,常会描述一种“完全敏捷”的团队,这样的团队与缓慢向敏捷迁移的团队大相径庭。很多倡导敏捷的人都是通过看书学习的,可他们却很难像书中描述的一样马上达到收效,也因此而遭受打击。敏捷在真正实施时,并不是一帆风顺的,能够读这些真实的情况使人耳目一新。现实世界中,尤其在大的企业,改变个人和组织的习惯是一个长久、艰难的过程。事情不会一帆风顺,但是只要假以时日,那些持之以恒的个人和团队总会获益匪浅。这两个敏捷案例清晰刻画了目前的现实情况。帮助组织机构向敏捷迈进的过程是漫长而又艰难的。相信别人也曾遇到类似的问题,这会让你摆脱疑虑,从而看到自己正在取得卓有成效的改进。

结论

这本书并不适用于所有人。我不会将它推荐给完全不了解敏捷的人。Elssamadisy 认为,本书适合对常用的敏捷实践和原则有所了解的读者。所以初学者可能会发现这本书在某些方面缺乏细节描述。我同样不会给资深的敏捷教练推荐这本书;他们很可能对本书的绝大部分内容烂熟于心了。

不过,如果你已经阅读了大量的书籍,并且对敏捷软件开发充满好奇,却不知道从哪里着手,那么这本书对你再合适不过了。如果你对敏捷实践有一些基本的了解,但对于自己能否成为团队中的敏捷专家没有信心,这本书同样适用于你。如果你身在一个敏捷团队中,已经实施的敏捷实践对你来说似乎没有产生预期的好处,你也可以好好读一读这本书。

注意:这本书同样可以通过 Safari 在线书店获得。

关于作者

Ryan Cooper 是一位敏捷软件开发者和教练。他是 Ryan Cooper 咨询公司的创立者。在他的家乡 Halifax,他还是敏捷用户小组的创建人之一。他的博客可以通过 www.onagile.com 访问。

2008 年 10 月 07 日 23:08779

评论

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

Week 5 作業

Christy LAW

Week 5 學習總結

Christy LAW

5.1 分布式缓存架构:架构原理与注意事项

orchid9

架构师训练营第五周学习笔记

一马行千里

极客大学架构师训练营

食堂就餐卡系统设计

张小胖

极客大学架构师训练营 张小胖

第五周总结

fmouse

架构第5周总结

Geek_Gu

极客大学架构师训练营

5.5 负载均衡架构

orchid9

架构第五周作业

Geek_Gu

极客大学架构师训练营

架构师训练营第一周学习总结

张小胖

极客大学架构师训练营

第一周作业总结

hunk

极客大学架构师训练营

5.2 分布式缓存架构:常见的缓存实现形式

orchid9

架构师训练营第一周学习总结

xiaomao

「架构师训练营第 1 期」第五周作业

张国荣

第五周作业(作业一)

Geek_83908e

极客大学架构师训练营

5.5负载均衡架构

张荣召

第五周 技术选型 学习总结

应鹏

学习 极客大学架构师训练营

架构图

猴子胖胖

架构

2期架构师训练营 - 食堂就餐卡系统设计

Vicente

极客大学架构师训练营

5.3 分布式缓存架构:一致性 hash 算法

orchid9

食堂就餐卡系统设计

jizhi7

Week_05 总结

golangboy

极客大学架构师训练营

架構師訓練營第 1 期 - 第 05 周總結

Panda

架構師訓練營第 1 期

2期架构师训练营 - 第一周学习总结

Vicente

极客大学架构师训练营

5.4 消息队列:如何避免系统故障传递?

orchid9

架构师训练营Week01总结

Calvin

第五周学习笔记

张荣召

week1- 作业二:周总结

「架构师训练营」第 1 周作业 - 食堂就餐卡系统设计

xiaomao

第一周 架构方法-学习总结

jizhi7

极客大学架构师训练营

week1-作业一:食堂就餐卡系统设计

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

书评:敏捷模式──指向成功的路标-InfoQ