在我们的工作中,不时需要评估工作任务的优先级:例如下个版本的软件应该加入的功能,又或者对之前工作回顾列出的一大堆改进项目,在一轮头脑风暴之后,发现需要做的事情是如此之多,而能投入的资源显得如此至少,怎么挑选出最有价值的事情来做就成了头痛的事。
过往,我们常做的方法是,召集一个会议,大家一起来为每个任务评分:分别评估出任务的工作量级和重要性(1、2、3… 最重要为1),然后将两者相乘得到一个分数,根据这个分数对任务排序。这种做法是期望能找出重要性比较高,但是又不太难完成的任务。但很不幸,越是重要的任务往往工作量越大—-如果有重要而简单的任务,我们早就把它做了,不需要等到这个会议的召开—-得到的分数差距不大。印象中,我参加过的评估会,都没有得出什么有用的结论,最终做的决策似乎跟评估没有太多的关系。
你可能会指出,这个评估模型根本就是不对的,工作量和重要性两者相乘得不出有意义的数字。但我们都不够聪明,没有想到一个足够简单而直观的方法。(回过头来看,应该是我们谁都没有花心思去想过。为什么?为什么?为什么?!)
今天读”More Joel on Software“,第36节介绍了他们用的方法,值得借鉴。
首先评估每项任务的工作量(成本),得到一个数字,其实这个数字是什么单位无所谓,story point也好,$也好,在例子里用的是$,金额。
功能 | 成本 |
---|---|
个性化首页 | $10 |
轻松安排软件开放进程 | $4 |
追踪资金到账时间 | $5 |
允许对bug分叉(fork) | $1 |
然后规定每人手上只有限量的资金,例如$20,可以用来购买这些功能。每个人根据自己对功能的重要性判断来决定应该为每个功能分配多少钱。例如:我觉得追踪资金到账时间是没有用的功能,一分钱也不分给它;安排软件开发过程很重要,我愿意出两倍的钱;而允许对bug分叉更重要,出4倍的钱;而个性化首页不是那么重要,所以我只愿意出80%的钱。故此,我的资金这样分配:
功能 | 成本 | 销售额 |
---|---|---|
个性化首页 | $10 | $8 |
轻松安排软件开放进程 | $4 | $8 |
追踪资金到账时间 | $5 | $0 |
允许对bug分叉(fork) | $1 | $4 |
这个过程其实就是一个已经按照成本加权的优先级评估。每个人在评估时已经综合考虑了成本和重要性。
将每个功能从各人手中获得的资金累加起来,再除以成本,就得到一个投资收益率,很明显,投资收益率最高的功能就是应该最优先做的。
功能 | 成本 | 总销售额 | 投资收益率 |
---|---|---|---|
个性化首页 | $10 | $45 | 4.5 |
轻松安排软件开放进程 | $4 | $36 | 9 |
追踪资金到账时间 | $5 | $12 | 2.4 |
允许对bug分叉(fork) | $1 | $7 | 7 |
下次排任务优先级的时候,我们应该尝试一下这种方法。
P.S. 回头再想一下,这个方法其实跟我们以前用的工作量乘以重要性级别的方法本质上是一样的,但是我们过去用的重要性级别1、2、3、4、5没有定量关系,说不出不同级别之间的重要性相差多少倍,因此相乘出来的数字就没有比较价值了。另外,每人手上持有有限量资金进行分配这种方式更接近我们日常的思维模式,调动起人的直觉,类似于planning game。