90%完成状态——项目经理应该小心的游戏之十四
非常非常多的知识工作者,特别是技术人员,都从未学习过如何估算。就算是尝试过估算的人,他们也过于乐观了,总是会过低估计一项任务需要的工作量。要么得不到任何对估算的反馈,所以他们不会知道自己的估算是不准确的;要么他们预测不到一个任务中会牵涉多少子任务,比如准备测试环境或是签入代码这样的任务。在任何情况下,当有团队成员以为自己完成了90%的任务,而实际上还有90%工作尚未完成的时候,“90%完成状态”就发生了(见图6.14)。
图6.14 90%完成状态
我在职业生涯的早期,曾是“90%完成状态”的受害者。当时我在写一个数据库对话工具,要把一种数据库格式转换成另一种。我认为其中的数据是干净的,可事实恰恰相反。我以为我很清楚每个字段的格式,其实我不知道。我以为我对需求了解得很清楚,可随着工作的进行,每次处理数据库中的一条记录,我遇到了越来越多的特殊情况,每一种都对需求有所变更。
最后我还是振作起来了。我开发了一系列测试用例,改变代码后我就会运行这些测试用例,慢慢地,整个开发工作开始取得进展。(要想知道更为现代的方式,可以阅读有关行为驱动开发的资料。[1])上司问为什么进度这么慢,我向他展示了当时的进度,并解释了我们在一开始并不了解的种种特殊情况。
作为项目经理,你应该去指导一下大家,以消除“90%完成状态”。
- 帮助大家定义出自己的“小石子”。你可以跟对方坐在一起,然后提问:“要完成这项任务,你需要多久?这周要处理的细分任务都有哪些?
- 要让大家把自己的工作进度展示给你。这可能会揭示出他们代码中潜藏的问题(正如我的例子)、风险的列表、测试用例的列表,他们也可以在添加了一些代码之后,告诉你这些代码的临时意图。
- 教给大家如何跟踪自己的估算,让他们了解自己一开始的估算准确度是怎么样的。参见11.2.4节。
有些情况下,人们进入“90%完成状态”是因为他们的实现工作跨越了整个系统架构。如果项目经理让他们按功能逐个实现,同时以短期迭代方式开发,他们就会开始以更小的粒度对工作进行估算和实现。他们的估算会越来越准确,而且也能提高工作的完成度。
[1] 请查看http://behaviour-driven.org/。