《孙子兵法》中的论述虽然是关于战争的,但是其思想在项目管理领域对我们也是有借鉴意义的。本文以笔者的实际项目管理经验为基础,分享了《孙子兵法》在敏捷项目管理中的应用。希望能够对读者的实际项目管理工作有所启发。
简介: 《孙子兵法》中的论述虽然是关于战争的,但是其思想在项目管理领域对我们也是有借鉴意义的。本文以笔者的实际项目管理经验为基础,分享了《孙子兵法》在敏捷项目管理中的应用。希望能够对读者的实际项目管理工作有所启发。
成为“敏捷”,而不是做“敏捷”
谈到“敏捷”首先容易让人想到的是各种优秀实践。这些优秀实践固然有可以借鉴的地方。但是在具体实施的时候往往要根据项目的实际情况进行调整,而不是生搬硬套。
故兵无常势,水无常形。能因敌变化而取胜者,谓之神。
——《孙子兵法•虚实》
作战没有固定的方式方法,就像水流没有固定的形状一样。能够根据敌情的发展变化而采取灵活措施取胜的人,才可以称得上是用兵如神。
敏捷开发中的各种优秀实践在具体实施时也同样要根据项目的实际情况作适当的调整和变通。比如,敏捷开发中优秀实践“客户参与”(Customer Involvement)特别强调了现场客户(On-site customer)对于开发团队的重要性。而笔者所带的项目组在无法争取到这样的资源的情况下采取了一种变通方式来实现“客户参与”。我们把需求评审、分析过程中遇到的疑问与问题登记到“需求问题确认列表”。项目组中的每个人都可以自行往这个列表中登记问题。“需求问题确认列表”中的疑问、问题由专人或者问题登记人自己通过电话、电子邮件、即时通讯工具等方式与客户方的需求负责人进行确认。确认的结果以及确认的原始记录(如电子邮件内容)都会记录到“需求问题确认列表”的“确认结果”一栏中,并由问题确认人对确认结果进行知会全组人员。如果有必要的话,项目组的任何一个人都可以组织全体人员对问题及其确认结果进行讨论。而“需求问题确认列表”我们也会定期发给客户方以便再确认和备忘之用。这样一个过程,虽然没有客户与开发团队在一起办公,但是一定程度上规避了开发团队对需求的理解的偏差问题。从而实现了与“客户参与”同样的效果。
因此,实施敏捷开发的关键是使我们的团队成为“敏捷”—— 理解并实现敏捷各个优秀实践所要达到的效果,而不是做“敏捷”—— 对敏捷开发的优秀实践全盘照搬,为了“敏捷”而“敏捷”。
迭代开发的精髓 —— 顺应自然规律和反馈
夫兵形象水,水之行避高而趋下,兵之形避实而击虚。
——《孙子兵法•虚实》
用兵打仗的规律就像水,水流动的规律是避开高处而往低处流。用兵的规律则是避开敌人的锋芒而攻击其薄弱的地方。这是自然界规律给《孙子兵法》的启示。同时,也给了我们在软件开发方面的启示 —— 发现自然规律并顺应它。
敏捷开发中往往存在这样一个现象:某个迭代中提出的需求,过了几个迭代甚至于下一个迭代就被推翻了。这种现象很大程度上是因为客户自己也不清楚需求是什么或者说他们的业务需要(need)是什么。而迭代开发的精髓就在于它考虑到这种现象及其产生的原因,因而采取小批量、频繁交付的开发模式。这使得我们可以根据上一个迭代(或者之前所有的迭代)中获取的经验(包括什么样的需求才是符合客户的业务需要)对当前迭代的目标和活动作出调整。可见,迭代开发的精髓在于顺应自然规律 —— 人们认识事物需要经历一个由浅入深、由错到对的过程。同时,也在于它利用了反馈的功效 —— 当期迭代所掌握的知识和经验会反馈到下一个迭代,从而影响其目标和活动。
同样,迭代开发过程中团队成员对需求的理解也往往一开始不是那么清晰。随着具体开发、测试工作的进展其对需求的理解才渐渐明朗。
正如《太公阴符》所说“圣人知自然之道不可违,因而制之”。规律是不可抗拒的,顺应规律可以帮助我们取胜。人类对事物的认识,往往不可能一下子就洞若观火,而是要经历一个逐渐深入的过程。开发人员也好、测试人员也好,其对需求的理解就是一个例子。不管我们如何努力地去理解、分析需求,其结果往往还是一开始理解得不够全面、透彻,待到具体写代码、写测试用例的过程中,思路才慢慢清晰起来,脑子中的疑问也越来越多。随着这些疑问的解决,对需求的理解也慢慢变得清晰、全面、透彻了。所以知道了这个规律,我们就要“因而制之”了 —— 迭代开发过程中不要只知道往前走,适当的时候停下来,甚至往回走,重新去审视下需求,往往会有新的发现。此时再根据对需求的新的理解去重新审视代码和测试用例,这样就能发现迭代初期时所发现不了的问题,最终使得交付的软件中隐藏的缺陷数降低。
转载自: http://developer.51cto.com/art/201210/359855_1.htm