由于我对估算和计划是在太感兴趣了,因此每当我看见有人在博客或者消息组里面宣称“估算是在浪费时间!别再做了!”我都会十分留意。有趣的是,这些针对估算和计划的争论从来都不会来自那些我们为他们开发产品或者系统的那些人,因为他们都明白估算和计划的意义(以及错误的估算和计划带来的痛苦)。
让我们来仔细想想那个观点。在你的人生当中,有多少件事情是你完全没用做计划的?我估计你会为婚礼做计划,为搬到另外一个城市做计划,为假期出行做计划,或者为任何你事先没有打算做计划的这类事情做计划。
假设你打算第一次去意大利旅行。你可能会计划去哪些城市,每个城市要呆多久,预算是多少等等。现在假设你打算第一百次要回去你长大的故乡,你也会进行计划——尽管你计划的内容是决定你不需要做任何计划。
计划,是一种考虑将来的行为。有时候,将来是存在着风险以及不确定因素的。在这些情况下,我们需要比对可预知的将来(如第一百次回故乡)做更多的计划。当未来是可预测的时候,我们要做的计划可能只是花费几个毫秒来决定我们并不需要做更深入的计划。
当然,一个软件项目远没有那么简单。
那么估算呢?我们真的需要估算吗?答案是肯定的。因为估算是计划的前提条件,你不可能在没用做任何估算之前就做计划,就算这些估算是非正式的或者是隐式的。当我在写这篇文章的时候,我还在飞往加州的飞机上。在登机之前,我决定去ATM机取一些现金,因为我估计在稍后我需要一些现金。然后我又估算了一下数额,大概200美金就足够了。在这个例子中,估算所花费的时间还不到一秒钟,我甚至都还没有意识到,它就已经发生了。
当一位Product Owner 说:“我希望加入这个特性,而不是那个”的时候,他其实已经在为每一项特性所需要的时间做估算了,虽然这是一种隐式的估算(或者叫做猜测好了)。当一位程序员决定在下班之前修复一个BUG,而不是开始做一个新的用户故事的时候,其实他也进行了一次隐式的估算,而他估算的是在到下班之前的这段时间里,他刚好有足够的时间完成这个BUG的修复工作。
有的团队说:“我们不会进行估算的,我们只会把所有用户故事定义成同样的大小”,但是他们却没有意识到其实他们已经是在进行估算了。在这里,他们所估算的是一个用户故事要和其他用户故事的大小相同。其实,我认为要令所有用户故事大小相同,比要估算在大小一定范围内的大小不一的用户故事更困难。
其实,尽管你没有意识到,但是在不知不觉中你已经进行估算了。那些在博客和消息组里面说估算是浪费时间的人,正是忽略了这种估算的存在。
但是,这种随意的,下意识的估算足够吗?如果团队进行正式的估算会不会更好呢?
也许吧,但是并不是所有情况都适用。团队只有在深入调查后需要采取不同的行动的情况下才有必要进一步深入估计,否则就应该适可而止了。当然,如果进一步的计划能够让团队作出更好的决定(对交付日期更有信心,或者更好地为功能排列优先级等等),那么就应该进一步估算及计划。
举个例子,我们最近在给一个网站添加对我们的敏捷估算和计划的eLearning功能的支持。我没有询问负责这个功能的程序员完成该功能所需要的时间,但是我仍然能够有一个大致的概念知道需要多久能够完成。因为我和他已经在一起工作很久了,我对他的工作效率非常清楚。进一步地追问并不会为这个项目带来任何改变。
从上述可见,估算和计划是必须的。因为它们可以(而且应该)是轻量级的。如果进一步的估算不能让你做出更好的决定,那么你目前的计划就是足够了的。