五磅袋

2005年10月13日

你不能把十磅的屎塞进五磅的袋子里

-- 任何尝试过的人

当我和肯特写《规划极限编程》时,我们加入了这个奇特的引言,以帮助人们理解规划的本质。

软件开发的一个大问题是,人们对有限时间内能做些什么几乎没有概念。我们经常看到很多功能被塞进一个袋子里,却不知道它是否能装得下。由于人类的欲望,这个袋子通常太小了。我非常喜欢肯特规划方法的一点是,它提供了一个简单的机制来处理这个问题。

这个原则非常简单。你将项目的总时间分成多个迭代。你将所需的功能分成多个特性(或故事,正如 XP 所称)。你估计每个特性需要多少工作量。你跟踪每个迭代完成的工作量,并且不会在迭代中加入超过容量的特性。XP 的发布规划就是决定哪些特性放在哪些迭代中。

就像很多事情一样,这是一个人的过程。在我最近参加的一个会议演讲中,我的同事蒂姆·麦金农描述了将几个交易员与开发团队一起办公,这在帮助他们了解可以构建什么方面产生了巨大的影响。交易员仍然全职进行交易,但通过共同办公产生的非正式交流产生了巨大的影响。

人们经常将敏捷方法描述为反规划。然而,当我第一次接触到极限编程的雏形时,最让我印象深刻的是它的规划质量。特别是计划的简单性,使得在不面对后果的情况下,很难将额外的特性添加到项目中。这就是敏捷方法自适应规划的本质——计划经常变化,但以一种可控的方式。如果你想添加一个特性,你总是要问“我需要去掉什么来腾出空间?”因此,如果你看到一个敏捷项目中添加了特性,却没有进行这样的思考,没有为它们腾出空间,那么你可以安全地得出结论,规划做得不好。