序1
在首次阅读一本书或者手稿的时候,我总会问自己同一个问题:“作者为这一主题的发展现状增添了哪些内容?”对Mike的这本书,答案有两个方面:他的书增加了我们关于“如何”进行估计和规划的知识,它还增加了我们关于“为什么”特定的实践很重要的知识。
敏捷规划是具有欺骗性的。在某个层面上,它相当容易—— 建立一些故事卡片,确定它们的优先级,把它们分配进不同的发布迭代周期,然后添加其他的细节来获得下一轮的迭代计划。您花几个小时就可以让一个小组学会规划的基本内容,然后他们再花几个小时就可以(对一个小项目)提出一个可被接受的计划。Mike的书可以在很大程度上帮助小组从制订可被接受的计划转变成制订优秀的计划。在这里,我的用词是非常谨慎的—— 我并没有说完美的计划,因为正如Mike在本书中指出的,在一个(足够)优秀的计划和一个完美的计划之间的差异可能抵不上为之所须付出的精力。.
关于Mike的这本书,我早期的想法和敏捷规划本身的概念有关。我常常因为缺乏对敏捷规划的理解而感到困惑或者是悲哀。我们常听到一些批评,例如“敏捷项目开发小组不做计划”,或者是“敏捷开发小组不会对日期和功能做出承诺”。甚至Balancing Agility and Discipline: A Guide for the Perplexed(Addison-Wesley出版社2004年出版)一书的作者Barry Boehm和Richard Turner在他们的书中讨论“计划驱动对敏捷方法”时也弄错了。实际上,Boehm和Turner的观点是对的,但是措词不当。他们使用计划驱动来表示“更看重对预测的平衡而不是对预测的调整适应”,而敏捷方法意味着相反的做法。他们的问题在于“计划驱动”对“敏捷”这一比对传递了完全错误的信息—— 敏捷开发小组不做规划。这一理解实际上是完全错误的。Mike这本书传递了正确的信息—— 规划对任何敏捷开发项目都是不可缺少的组成部分。 本书中有大量的关于规划为什么如此重要以及如何有效进行规划的看法。
首先,敏捷开发小组会进行大量的规划活动,但这些活动被更为均衡地分布于项目的整个开发过程。其次,敏捷开发小组会直接面对不确定性这一被许多非敏捷开发小组所忽视的关键因素。规划重要吗?—— 当然重要。随着知识的获取和不确定性的降低调整计划重要吗?—— 当然重要。我看到过太多的公司,一开始做出许多不切实际的早期承诺然后又无法实现它们,被看作是可被接受的;而那些试图做出更为现实承诺(充分理解不确定性的影响)的人,则被看作“不能适应需要”,或“缺乏团队精神”。在这些公司中,似乎无法交付是可被接受的,而不能承诺(即使是对不切实际的目标)则是不可接受的。就像Mike巧妙指出的那样,敏捷开发方法强调实际交付价值而不是做出一些非凡的但是无法实现的计划和承诺。敏捷开发人员通常会说,我们会给您一个基于当前所了解的内容做出的计划;我们会随着开发过程中获得的新信息对项目和计划做出调整;我们希望您能够理解您所要求的两个目标—— 获得适应变化的应用环境的灵活性,与绝对地遵守原始计划—— 是相互矛盾的。《敏捷估计与规划》这本书对以上的每个论断都进行了说明。
让我们回到对不确定性进行管理这一关键问题上。Mike完成了一项伟大的工作,分析了敏捷开发过程如何同时减少目标不确定性(我们到底要构建什么)和方法不确定性(我们如何构建它)。许多传统的规划人员没有理解一个关键概念—— 不确定性是不能被“规划”的。计划是基于我们在某个特定时间点上所知道的东西做出的,而不确定性则是对我们所不知道的事情—— 对目标或者方法—— 的另一种表述。对大部分不确定性(缺乏知识)而言,获取知识、减少不确定性的唯一办法是通过执行—— 做一些事情、构建一些东西或是模拟一些东西—— 然后获得反馈。许多项目管理方法是“规划、规划、规划-执行”。而敏捷开发方法是“规划-执行-调整”、“规划-执行-调整”。一个项目的不确定性越高,敏捷开发方法对取得成功就越是至关重要。
我喜欢用Mike书中的第4章和第5章来说明有关“如何做”和“为什么做”的问题。这两章详细阐述了如何估计故事点和理想日,并对两者的优缺点分别进行了解释。虽然这两种方法我都和客户一起使用过,但Mike的话让我对估计故事点的优点认识得更为清晰。我认识到故事点是朝向简单性的进化的一部分。软件开发公司长期以来都在寻求“这个软件规模有多大”这一问题的答案。建筑师可以根据平方尺度对建筑工程做出合理的估计。不同建筑师做出的估计可能有所差异,但规模的大小是固定的(虽然收尾工作、材料特性和其他一些因素可能影响到估计结果),保持不变。软件开发人员一直希望也能找到一个这样的度量方法。
在软件开发中,我们最初使用代码行(line-of-code)来度量产品的规模(这一方法当前仍在一定程度上被使用)。对大部分日常规划来说,有一些原因导致代码行的用途有限,其中之一就是由于对其进行估计时所须进行的先期工作太多。接下来就是功能点(function point)方法(以及一些类似的思路)。虽然功能点消除了代码行方法的一些问题,但是其计算仍然需要相当数量的先期工作(您需要对输入、输出和文件等进行估计)。功能点方法的复杂性不可避免地影响了对它的广泛应用。我的看法是随着计算方法复杂程度的上升—— 只要观察一下国际功能点用户组(International Function Point User Group,IFPUG)网站就可以了解到它有多复杂—— 普通人对它的使用就会减少。
然而,对软件项目规模进行估计的需求却从未消失。这两种曾经被采用的度量方法存在两个问题—— 它们的计算过于复杂,而且都是基于瀑布式的开发方法。我们仍然需要一种规模度量方法,我们需要一种易于计算,而且不必完成所有需求分析和设计阶段就可以实现的度量方法。
故事点方法与代码行或功能点方法的两个关键不同之处在于它更容易计算而且可以更早计算。为什么更容易计算?因为它是基于相对规模而不是绝对规模。为什么可以更早计算?因为它是基于相对规模而不是绝对规模。就像Mike指出的那样,进行故事点估计只需要大家坐在一起讨论用户故事(获取共同知识),推测相对的故事规模。与对绝对规模进行估计相比,对相对规模进行估计要快得多。此外,经过几次规模估计和交付的迭代后,一个小组的估计准确性会显著提高。Mike对故事点和理想日估计方法的“如何”和“为什么”的说明提供了对这一主题敏锐而深刻的理解。
第9章和第11章是体现Mike对这一问题理解的透彻性的另一表现。这两章是关于确定用户故事的优先级的。Mike不满足于只告诉我们首先处理具有最高价值的用户故事,事实上他钻研了价值的各个关键因素:经济收益、代价、创新/知识,以及风险。他对价值的这些方面进行了仔细的定义(甚至包括了一个关于净现值(Net Present Value)、内部回报率(Internal Rate of Return)和其他金融分析工具的初级读本),然后提供了使用这些价值因素对决策进行衡量的不同方案,每个方案分别具有不同的简单性。
刚接触敏捷开发的人往往认为如果遵循了特定方法学的12个、19个或8个实践方法,那么就是在采用敏捷开发、极限开发、Crystal Clear开发,或者是别的什么开发方法。但实际上,只有在充分了解这些实践方法并能根据您所处的特定环境调整它们的时候,才是真正采用敏捷开发、极限开发或者别的开发方法。不断地学习和调整是敏捷开发的核心。Mike在本书中做得最好的就是为我们提供了许多看法和经验,来帮助我们的敏捷估计和规划的实践达到这一更高的层次。Mike深入地告诉我们“如何做”—— 例如那些有关故事点和理想日估计的材料。Mike深入地告诉我们“为什么做”—— 例如那些关于故事点和理想日估计的优缺点。虽然他通常给我们一些个人的建议(他更倾向于故事点),他也为我们提供了足够的信息,让我们可以自信地对各种实践方法进行裁剪以适应特定的环境需要。
所以,最后,Mike对此方面技术发展所做出的显著贡献在于—— 他帮助我们在一个新的知识和经验深度上对估计和规划进行思考(如何做),然后帮助我们决策如何利用这些新的知识来调整实践方式以适应新的、独特的或者仅仅是特定的环境(为什么做)。在我通常会推荐给客户的6本书中,有2本是Mike写的。对于那些希望了解敏捷项目管理在此方面发展现状的人,本书是我推荐给他们列的“必读”书目。
Jim Highsmith
Cutter Consortium公司敏捷业务主管..
2005年8月于Arizona Flagstaff
序2
“除了一些小型项目以外,敏捷开发在Yahoo!公司根本就行不通,原因是那样的话开发小组就不会做任何计划,小组成员也无法对自己的工作进行估计。需要有人告诉他们应该做些什么。”
这是人们的原话,从我在Yahoo!公司开始指导采用敏捷开发方法以来就反复听到这样的话。那些不理解敏捷开发概念的人认为敏捷开发不过是消灭掉所有的文档和规划,让开发小组到处乱逛的许可。事实与真相的距离不会比这种看法更远(译者注:即这种看法并非事实真相)。
.“小组不做任何计划。”说这种话的人忘记了敏捷开发小组每隔一周就会花半天的时间来列出任务列表,表上是为了在2周的时间结束时他们能够交付一些对用户有价值的功能所需要完成的工作。开发小组让规划活动扩展到了项目开发的整个过程,而不只是在一开始就先期完成所有规划,结果常被看作缺乏计划。事实并非如此。在Yahoo!公司,与传统开发小组相比,敏捷开发小组所创建的产品让我们的产品经理更为满意。
“小组成员无法对自己的工作进行评估,需要有人告诉他们应该做些什么。”这是一个非常典型的错觉。从商务角度来看,让产品经理或者项目经理具有圣人一样的能力,预计其他在其所从事的行业是专家的人到底能做些什么,简直就是自杀行为。通常,这是一种在被要求交付不现实的目标时,用来向销售人员做出承诺的办法。然后,开发小组的成员被迫连轴转或投机取巧。难怪在我们的行业中大家总是显得筋疲力尽而且士气低落了。
在人们向我提出的问题中,最多的疑问集中在估计和规划等方面,新小组尤其如此。获得一个简单的方法为整个项目过程而不仅仅是一个迭代周期进行规划,其价值是无法估计的。产品经理需要注意满足财务目标并获得一个可预测的发布计划。开发小组仍然可以保持灵活性,并根据需要改变进程,但遵循一个路线图是非常重要的。如果走错了方向,仅仅加快速度是不够的。如果想在公司中成功地实现敏捷开发,学会如何进行估计和规划是最重要的内容之一。
Mike的估计和规划课是我们在Yahoo!的敏捷开发课程中最受欢迎的。它为开发小组提供了技巧与工具,让他们可以为得到最佳的结果而进行恰到好处的规划。如果遵循Mike的建议,真会起作用吗?是的。敏捷开发在Yahoo!公司取得的成功是不可思议的。我看到过小组成员一从Mike的课上回来就把他的建议投入应用。我们可以更快地向市场上推出产品,而开发小组真实地爱上了敏捷开发方法。
为什么敏捷估计和规划方法比传统方法更有效?因为它们专注于交付价值,在销售小组与项目小组间建立信任。让所有的事保持高度透明,让销售人员从一开始就了解发生的所有变化,意味着业务人员可以迅速调整以做出最佳的决策。在我工作的上一家公司,我亲眼看着我们从只有一张非常模糊的路线图而无法交付产品的长期混乱状态,转变成了终于可以给我们能够交付的产品签字的可预测状态。业务部门说也许他们不总是那么喜欢我们的答案(他们第二天总会想要些新东西),但至少他们可以相信我们的答案,而不用因为觉得总是被欺骗而沮丧了。
本书真实地反映了事实。它并不会告诉您如何使您的估计百分之百地准确。那是不可能实现的,只能是白白浪费精力。Mike的书并未试图给您一个完美的填空式的模板,而是让您思考和学习如何分析问题、解决问题。没有两个项目、产品或者公司是完全一样的,所以学会思考方式和基本原则更为重要。Mike在本书中生动地再现了他的亲身经历和个性特点。本书是真实的、诚实的。毫无疑问,本书应该排在您的阅读书目的最上面。...
Gabrielle Benefield
Yahoo!公司敏捷产品开发部主任