0%

学会预估

Learn to Estimate

作为一个程序员,你需要向你的主管、同事、用户提供你完成这些任务所需要的估算,因为他们需要清楚地知道实现他们的目标所需的时间、成本、技术及其他资源。

为了更好地估算,学习一些估算方法显然很重要。然而首先呢,应该学习什么是估算以及它该如何使用,这些最为基础——虽然看似奇怪,但很多程序员和主管对此都搞求不懂。

下面一段程序员和项目经理间的交流可谓典型:
项目经理:完成xyz功能开发,你估计要多长时间?
程序员:一个月。
项目经理:太久了!我们只有一个礼拜。
程序员经:那至少也得三个星期。
项目经理:我最多给你两周。
程序员:成交!

最终,程序员给出了一个领导可以接受的“估算”。但因为是程序员的预估,领导就会让程序员为此负责。为了理解这次谈话的问题,我们需要定义三件事——估算、目标、承诺:

  • 估算是对值、数字、数量以及其他事物的大概计算或判断。这就意味着估算是基于硬指标结合先前的经验对事实的度量——在计算它时,希望和愿望肯定会被忽略掉。也就是说,只是大概,估算不可能做到严谨,例如一次开发任务周期不可能估算到234.14天。
  • 目标是对理想业务的客观描述,比如:“这个系统须至少支撑400个用户同时访问。”
  • 承诺是对特定的功能在确定的日期或事件下,许诺达到特定的质量水准。例如:“搜索功能将在下次产品发布时可用。”

估算、目标、承诺彼此独立,但目标和承诺应当基于合理的估算。正如Steve McConnell所说:“软件估算的首要目标不是预测项目的结果;而是明确项目目标是否切实可行,足够受控于整个项目,直到看见它们的那天。”因此,估算的主旨是为了做一份尽量靠谱的项目管理计划,让项目团队能基于切实可行的目标作出承诺。

所以,上边的谈话,经理其实是让程序员为他脑子里并不清晰的目标作出承诺,而非估算。下次你在管别人要估算时,要确保每个人都理解谈论的内容,你的项目才可能有很好的成功机会。现在到你你学技术的时间了…

小小鼓励,大大心意!