程序员必备的项目时间估算指南

有位 PM 最近告诉我她面临的一个难题:“软件工程师永远不能估算出他们的项目需要多长时间。我该怎么办?”还有两位 CEO 最近也告诉我同样的事情。

《为什么程序员总是不能准确估测项目时间?》(http://blog.jobbole.com/24924/),我们都深有体会。我曾经遇到过一个项目,预计需要两天完成,结果做了四个月。在这种情况下,即使用“时间翻倍”的经验估算,也依然差出了一个数量级之多。这样真的非常影响业务。我曾见过整个公司为了举办一个发布活动费尽心力,结果却不得不推迟数月。

从高级层面上讲,这个问题在于在时间估算的时候,工程师、PM、经理、公关以及其他所有人的看法存在不同。大多数工程师本能考虑的是,如果一切都按照计划进行,写出一个可用的原型需要的最短时间。但下游的人想知道的是项目何时准备发布——这完全是另外一回事了。

对于工程师而言,把握估算项目所需时间是一段终身的旅程。忽视这个问题,会给你以及与你直接或间接接触的每个人带来困扰。精准把握估算项目所需时间会让你脱颖而出,同事们将会把这些和你的专业精神,稳定性和工作质量相关联。

为什么我们要时间估算

首先我来回答一下工程师经常问到的问题:“为什么要估算时间?”许多工程师抱怨(有一定道理)这是一份间接成本。“如果我开足马力去做,会更快地完成项目!”

主要有两个原因:外部依赖和优先次序。

外部依赖

没有任何有效活动会在真空中运作。项目通常有外部依赖,例如与非工程团队(通讯,金融,公关,客服)、其他工程团队甚至最终用户本身的协作。协调这些外部依赖关系通常是经理、PM或CEO的职责。这意味着最有资格做时间估算的人(工程师)不是最需要估算时间信息的人。这种不对称导致了根本的矛盾。

优先次序

时间估算也是确定工作优先级的关键。“钱花的值不值”是项目中的重要指标,没有真正的估算,也就无法确定钱花的值不值。即使你正在做的功能是世界上最棒的,如果花时间做一个全面的估计,你可能会意识到这将需要花费很长时间才能完成。

假设你正在做一个项目,这将使网站的速度提升50%,但在相同的时间内,可以完成两个项目,每个项目将使网站快40%。如果没有花时间做一个初步的估计,你永远不会知道你可以做出一个访问速度更快的网站!

时间估算入门

现在大家都同意绝大多数时候都需要时间估算,我们来谈谈技巧。

我们低估时间是因为我们考虑的是“我需要多长时间才能写出这个基本版本?”

但交付的东西不仅仅是基础版。还需要考虑到编写,测试,调试和润色所需的时间。不要忘了开会、访谈、做代码审查以及发送电子邮件等事情也需要时间。

低估时间的另一个原因是我们几乎总是在编码过程中遇到“未知数”,这些未知数是不可能完全预测和考虑周全的。也许IDE会更新,中断了项目,你花费一天的时间去修复它。在时间估算中无法考虑到这一点。

但是,我们仍然可以比最初的直觉做的更好。以下是我的做法:

第一步:制定技术计划

在着手开始工作前,你应该已经有了一份技术规划或设计文件,可以为任何重要的项目提供帮助。可以用这个让别人知道你在做什么,并获得反馈。制定技术计划是启动时间估算的理想阶段。当完成技术细节设计时,会发现未知问题,你将会神奇地修改估算时间。也许你会意识到,可能需要把一个正在使用的库升级到新版本,这可能会增加一天的时间。甚至可能意识到计划使用的库实际上并不存在,需要自己写。

颗粒度在这里很重要。如果任何一步感到模糊或者不清楚,或许你会跳过这个步骤(应该学习更多),或者需要将其分解成更小的步骤。同时如果某个步骤粒度太细,那么在实践中可能会不堪一击使整个计划无效。

有关技术计划里应该考虑哪些方面,请参阅 Alicia Chen 的这篇文章《What do you mean ‘we need more time’?》。其中一个关键点是消除与 PM 或其他利益相关方之间的任何潜在歧义,这样最终你就不会因做错了某些事而不得不重新开始。

第二步:为每个步骤增加时间预算

估算一下技术方案中的每一步将执行多长时间。这通常会涉及对细节的研究(“有没有已经有人实现了这个库的功能?”)。根据项目的性质,罗列一个简单原型,可能会有助于暴露出许多未来潜在的痛点。

第三步:添加大量的额外时间

现在你已经有一个初步的估计,但是我们之前提到的所有的点还需要考虑。

随时调试:总是会有Bug。调试很大程度上取决于你对特定代码库的经验和代码库的成熟度。

会议、访谈、假期等:可能你不会在工位一直编码。你真正会有多少个小时进行编码?估算时应该至少看看你的日历。

最终测试和bug清理:通常你在编码的同时应该也在写测试,但是很多团队在发布前,需要进行一轮润色工作或集成测试。在估算中要给予这些工作足够的预算。如果分阶段进行推出,最初推出的1%内容,可能会暴露需要修复的bug,需要考虑到这一点。

代码审查:项目需要做几轮代码审查?通常需要多长时间?一定要确保有充足的评审人员(也可以确认一下他们的日程安排)。如果这是只有一个评审人员的项目,应该提前征求他们同意,要求他们安排一名候补人员,以防评审人员会休假或者在关键节点太忙。

一旦开始将所有这些时间开销添加到项目中,就会开始看到自己的时间估算值与项目实际启动时匹配地多了。是的,实际情况可能会比估计的更长,你可能会倍感压力去缩短工期。但是当大家知道他们可以依靠你时,他们会欣赏你的估算。

第四步:项目发布后,对时间估算做回顾总结

在项目完成之后回顾一下所做的工作,这听起来很痛苦。但是这种审查回顾会让你从中学到很多,下次做的更好。

哪个过程结果与预期的时间不同?如果集成测试花费了比预期两倍的时间,记下来,下次给测试留下更多的时间。或者尝试改进集成测试系统。

你一定会看到自己的估算随着时间的推移而不断改善。甚至可以在这个过程中提出一些很好的见解,来帮助整个团队。

最后,一切都与沟通有关

你的时间表和其他变动事宜,应该提前告知其他人。如果在发布前一个月让经理知道你正在使用的库中存在新的安全漏洞,不得不从头开始,他们会有时间相应的通知公关,财务或用户,需要推迟发布。

和其他协作方沟通得来的重要反馈,有助于调整时间估算。设计师可能会说:“哦,如果这个花哨的动画将要花一整周的时间,我们可以完全剪掉它。”PM可能会补充说:“这只是用户研究中的一个原型实验。我们不需要为这个迭代做太多的bug清理。”经理可能会说,“你把一半的时间用在了开会?我来解决这个事情!”

对于工程师来说,不要为了取悦上级,向不切实际的时间表妥协。坦诚地说出你的估算时间和变更方式,这样更专业。

对于其他所有人来说,尊重估算的时间是很难的,而且这需要一个过程。你只能坐下来砍掉实际上不需要发布的功能或阶段,来缩短预计的时间,而不是通过唠叨把时间缩短。

我们永远无法完美估算项目所需的时间。唯一的办法就是保持开放、多沟通、有同理心,并果断地确定优先次序。

本文来自开源中国社区 [http://www.oschina.net]

时间: 2024-10-24 05:42:32

程序员必备的项目时间估算指南的相关文章

优秀程序员必备的一些素质

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 作为一个合格而优秀的程序员,应该具有哪些素质?其实才工作半年的我,好像远远不够资格来谈论这个话题,不过这半年的成长让我获益匪浅,在程序员这个话题上也可以多多少少说出一点有价值的东西来. 一.对开发工作要有必要的兴趣 兴趣是最好的老师,对某个事物有了一定的兴趣,才会潜下心来学习.研究它,工作同样如此.如果对程序员的工作完全没有兴趣,甚至是抱着厌

程序员可以兼任项目经理吗?

人们的有些尝试从来没有成功过:接到一个小项目,项目小,完全不需要一个全职的项目经理.于是就决定让一个程序员兼任项目经理.毕竟,还能有谁比程序员更清楚应该写出一个什么样的程序? 的确,很多程序员能做好项目经理的职位.好的程序员和好的项目经理的之间没有本质的冲突.这两个职位都是面向细节和面向结果的.但是一个人不可能同时做好这两个工作. 为了理解这种不兼容性,必须认识程序员和项目经理工作任务的类型. 开发软件需要进入一种沉浸状态,为了更加有效率,程序员必须完全进入代码世界,来专注于操作算式和变量,预见

合格的PHP程序员必备技能_php技巧

作为PHP的爱好者,如果你想加入PHP程序的世界,一定要做好充分的准备. 如果想进入大的企业进行底层开发的话必须对互联网各方面的技术原理了解的很清楚,例如apache实现原理.语言方面既然是php开发自然对 c/c++要求比较高.往往需要自己写php扩展.使用mysql自然想很多常见的,性能瓶颈要能有很好的解决方案.mysql 插件编写,apache模块编写.联系起来结合点还是要会c. 倘若是做中间层和前端工作则要求对css,javascript要求比较高.当然对web的一系列实现原理也是要非常

程序员必备的10大健康装备! 我们要工作更要健康!_生活健康

前言 做为程序员,为了实现理想而奋斗不懈,每天对着电脑辐射坐在工位上拼搏8小时甚至更久,这种如同机器旁边的机器般的工作对于健康的损耗何其之大?再这么下去,还真得应了:"职务不高,工资不高,血压血脂血糖高:政治不突出,业务不突出,腰椎盘突出"这种亚健康状态,最可怕的是技术人员平均寿命都有点惊悚,就怕最后"出师未捷身先死,长使英雄泪满襟".是时候呼吁一下健康的问题了!废话不说了,进入正题吧.本次的带来的是:程序员必备的10大健康装备,Let's go! 装备1:沙袋 &

需不需要留给程序员了解需求的时间??

问题描述 需不需要留给程序员了解需求的时间??现在我们公司是边开发边了解需求,作为一个程序员感觉很无奈... 解决方案 解决方案二:一般公司只需要你回答:能不能?是不是?.........楼主太天真了.解决方案三:都把程序员当神看了啥都不了解就开始干边干边了解,总花费了解时间没少,而且随着了解的加深,对已完成代码进行修改也很费时间.解决方案四:哪有那么多时间给你去熟悉需求,解决方案五:肯定还是先了解大局了才去动手干啊,后期再来修改代码好玩吗?跟你老板说,我是来上班的,不是来被玩的.解决方案六:打

招南京 .net 程序员!要求有项目开发经验!有应用程序开发经验佳!

问题描述 招南京地区.net程序员!要求有项目开发经验!有应用程序开发经验佳!详细情况请加qq:411545730面议:

为什么程序员难以评估开发时间?

一个曾经与我一起http://www.aliyun.com/zixun/aggregation/6918.html">工作过的经验丰富的项目经理声称,他拿到程序员的时间估算以后,先将它乘以π,然后转化下一个时间数量级后,才能得到真正的值.1天转化成3.14周.他过去因为程序员不擅长估算时间而吃尽了苦头.我创建了一个用来翻译程序员时间估算的表格,来尽量缩小估算错误. 时间估算时困难的.每一个程序员都有一个现实的估计区间.低于这个区间的估计意味着(构件,测试,检查代码的)时间开销被低估了.超过

Sublime Text[崇高文本]----最性感的编辑器(程序员必备)

代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 自打开始编程,我就开始试过不少编辑器,比如editplus,ultraedit,emacs,vim,还有各种各样不同的IDE,但却没有哪款让我特别心仪的,直到我遇到了 Sublime Text 2 !如果说"神器"是我能给予一款软件最高的评价,那么我很乐意为它封上这么一个称号.它小巧绿色且速度非

十个程序员必备的网站推荐

简述 程序员的工作和日常生活非常的枯燥,这里给大家推荐一些程序员经常使用的网站,也是我经常上的一些网站,尤其是前三个网站感觉用起来非常的舒服.我大致把这些网站分为三类,使用工具类,设计分享类,资讯交流类,业界良心类.希望能对大家有所帮助. 简述 网站推荐 网站推荐 Github代码托管(https://github.com/) 作为开源代码库以及版本控制系统,Github拥有140多万开发者用户.随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法.代