问题

估算和度量几乎是敏捷开发及其他开发方法永恒的话题。不过,在进行估算之前,必须理解估算的价值,并觉得为估算所付出的工作量值得。

请看下面这段对话,它发生在2003年为一家企业做CMMI咨询的时候,涉及到代码行估算(有改动和扩展):

甲:假设一段代码是1000行。不估算,写完了一数是1000行;估算,写完一数还是1000行。为什么要进行估算呢?

乙:因为如果知道是1000行,就可以按生产率来估计开发时间了。比如如果一天开发100行,那么10天就能开发完成。

甲:知道是10天,要花10天;不知道是10天,开发完还是10天,为什么要估呢?

乙:如果知道每个任务的具体天数,就可以均衡每个人的工作量。

甲:如果我们这里都是主动领取任务和跨职能,那么每个人干完都会自己领取,不存在工作量平衡问题,是否还需要估算?

乙:……

这段对话表明,在做估算之前,以及在确认用什么方法估算之前,都是应该思考一下:我为什么要估算?其他实践也是这样。

尤其是敏捷开发的估算会(就是Scrum的计划会),需要整个团队开接近一天的时间,如果不能找到合适的理由,浪费时间的可能性还是很大的。

分析

从1999~2001年左右开始做估算,而2002年之后又开始教别人估算。迄今为止,最经得住质疑、雷打不动的两个估算目的不是做计划、度量、平衡工作量、之类,而是:

1. 报价或早期制定项目计划

若报价是错的,老板极有可能已经承诺了不切实际的价格和目标。一旦这个已经确定了,那么相应的总体计划其实也已经敲定了。

比如,若一个“本来(可惜无人知道)”需要100万和10个月的项目被签订为50万和5个月,其实无论团队如何努力,团队的绩效都会化为泡影。即使团队以超人的能力在80万(按工作量计算的成本)和8个月完成了项目,都不会拿到奖金。因为老板整个项目净亏损50万,无论责任在谁,反正钱是没有的。

尽管造成这个结果,责任似乎在老板据多一些,但要知道老板签订合同之前可是问了两个人:一个是客户,客户回答:“50万,5个月。”;另一个是团队,团队说:“不知道,因为需求太粗略了”。你是老板你该怎么办?http://

2. 用估算降低工作量

这个说法听起来很奇怪:我们一般认为有个东西叫任务,我们只需要拿尺子去测量一下,看看结果就可以了;现在居然测量过程会改变实际结果

本人在2001年左右得到高人真传,编程水平飙升而代码行数陡降,所以后来常常干一些杀代码的工作。比如:4000行代码、4000个常数、2个人月的工作=》700行代码、76个常数、0.5人月;4000行代码、65个函数,1个人月=》55行代码,1个函数,2小时。后来到一家企业,他们自己刚杀完一个代码,19万行代码,13人×9年=》1.3万行代码,1人×1.5年;估计好好杀杀能进万行以内……

当然下一个问题:当问题发生了,再去看它,会很容易发现有众多浪费的代码和工作量,如果一切还没有发生前,有没有方法发现?

对高手而言,他们总能及时预见到代码和工作量的浪费,并在第一次编写代码的时候就能做到最少代码和最少工作量。可是团队里边还是有很多新手的,他们没有能力做到这一点,甚至都不知道自己将会浪费90%的代码和工作量,怎么办?

没想到后来是估算帮助解决了这个问题,所以很值得一试。