为什么程序员预估的时间都不靠谱

http://www.aqee.net/why-programmers-are-bad-at-estimating-times/一个我曾经共事过的很有经验的项目经理曾宣称说,他会拿程序员估计出的时间乘以π值,然后再提高一个数量级,这样得出的才是正确的开发所需要的时间。1天时间经过变换后是3.14周。他经过惨痛的教训才认识到程序员预估的时间都是不靠谱的。为了能更精确的对程序员估计的时间进行换算,我创建了一个时间换算表,重点说明究竟是什么地方出了问题。

估计时间 程序员的思考 程序员忽略的事情 真正所
需时间
30秒 只需要对代码进行很小的改动就搞定了。我清楚的知道程序应该在哪里做修改、怎么修改。只需要30秒时间。 启动电脑的时间,启动开发环境的时间,获取源代码的时间。编译、测试、提交代码和文档修改的时间。 1小时
5分钟 一个小问题,我只需要上谷歌上查查它正确的语法就能搞定。 你不可能第一次就能精确的查找到正确的信息,就算是找到了,在使用它之前你也需要对它做一些调整。还有编译、测试的时间等。 2小时
1小时 我知道该怎么做,但是这需要写一些代码,所以要花一些时间。 1小时时间太紧张,没有给任何未预料到的事情留下余地。总有一些你预料不到的事情。 2小时
4小时 这需要写一些代码,但我基本知道该怎么做。我知道我们的标准框架里的Wizzabanga模块能做这个事情,但我需要去查查文档看如何正确的调用它。 这可能是唯一一个符合现实的估计。在任务不是很大、能够处理的情况下,它给未预料到的问题留下了足够的时间。 4小时
8小时 我首先要重构Balunga类,把它拆分成两个,然后在Wizzabanga模块里加入调用代码,最后在界面上添加一个新的表单域。 系统的很多地方都对Balunga类有依赖关系。大概有40多个文件需要调整。界面上新添加的属性的同时数据库里也要新增字段。8小时是十分理想的状况的时间。程序员在估计时间时总忽略了还有很多其它事情要做。 12-16小时
2天 这需要写很多的代码。我需要在数据库中添加一些新表,用一个界面来显示它们,然后还要写存取它们的逻辑代码。 对大多数程序员来说,2天时间能完成多少东西都是很难说的。肯定会有一些东西被遗忘。并不是指一些小的东西,一些主要功能上的重要东西也有可能在你估计时被遗漏。 5天
1周 哇塞…这可是个大任务。我还不知道如何实现它,我不是告诉你我不知道如何做。一周时间应该足够了,但愿,希望能够,但我不会要求更多的时间,不然的话他们会说我能力不行。 这样一个任务对于大多数程序员来说都很难理解消化。这个任务应该发回给架构师,让他把任务拆分成更小的模块,对各模块应该如何执行给出一些指导。架构师应该能找到实现它的一些简单的方法——或者认识到这个任务的工作量比他预期的要多。 2-20天

预估时间本身就很难。每个程序员的估计都会跟真正需要的时间有些差距。估计时间短了说明有些事情被忽略了(编译,测试,提交代码)。估计时间超了说明任务太大,难以理解。

对于资历较浅的程序员,这种估计误差是混乱的,他们经常会轻视一些任务,同时又对一些稍微有难度的任务过分高估。我认为,对一个有经验的程序员,一个任务的时间应该在半小时到24小时之间,超出24小时的任务都需要拆分。程序员在脑中想一想可能会认为要60小时,但实际上即使是很有经验的程序员也需要将任务分成可控的模块再来分析做决定。

还有一个很重要的需要认识到的一点是,编程上的经验并不等同于时间估计上的经验。一个从没有做过工期估计的程序员不会擅长估计时间。如果不去拿真正需要的时间和估计出的时间进行比较,你不可能从其它反馈信息之得到正确估计时间的经验。

每个程序员都会用到评估技巧。为了提高你的这项技能,你可以在你从事的每个任务上进行锻炼。在任务开始时先预估开发所需时间,拿它跟你最终真正用掉的时间进行对比。这样,你不仅在对任务细节的理解上有提高,同时也提高了你对时间预估的技能。

评论:

根据我的经验(这里排除天才或非常有能力的程序员情况),一个称职的高级软件工程师,一般完成时间是预估时间的两倍,如果不是,那就是3倍或3倍以上。同样,一个称职的软件工程师,一般完成时间是预估时间的三倍,当然,如果不是,就是4被或4倍以上。如果工程师含以上的情况话,建议留心用。

时间: 2024-10-14 20:50:46

为什么程序员预估的时间都不靠谱的相关文章

不要相信程序员在加班时间写的代码

不要相信一个程序员在加班时间写出来的代码. (软件工程的学说表明,连正常时间好好写的代码,也不要太相信.不过这不是本文的重点,略过不提.) (不懂代码的人,看到本文中的Java代码可以略过,不影响理解.) 创造力的时限 写代码,与写文章.绘画.思考复杂问题,并没有本质上的区别,都是创造性的活动. 每个人的创造力,都会随着身体状态而波动.广为人知的是,一个人年老体衰后,相比年富力强时,创造力会急剧下降.其实,人每天的状态起伏,也同样会剧烈影响这一点. 如果是拧螺丝,那么在精疲力尽.拧不动以前,身体

千万不要相信程序员在加班时间写的代码!

其中最重要的就是这条:不要相信一个程序员在加班时间写出来的代码. (软件工程的学说表明,连正常时间好好写的代码,也不要太相信.不过这不是本文的重点,略过不提.) (不懂代码的人,看到本文中的Java代码可以略过,不影响理解.) 创造力的时限 写代码,与写文章.绘画.思考复杂问题,并没有本质上的区别,都是创造性的活动. 每个人的创造力,都会随着身体状态而波动.广为人知的是,一个人年老体衰后,相比年富力强时,创造力会急剧下降.其实,人每天的状态起伏,也同样会剧烈影响这一点. 如果是拧螺丝,那么在精疲

绝大多数创业者都“不靠谱”

绝大多数创业者都“不靠谱” 你有没有这样的经历:几年不见,甚至是几月不见的朋友,再次见面,名片上的称号已换成了什么“产品经理”.“首席执行官”.“总裁”.“合伙人”等等.他们口中经常谈论的名词儿从过去的“我要做土豪”,变成了商业模式.互联网思维.社会化经营,平台.O2O.C2C……仿佛一夜间他们被施了什么魔法,变得无比高大上,从趴在地上一下跃居于时代的潮头.(音乐放松椅) 当你一细问他们经营的业务,会马上觉得情况有什么不对劲.这些在互联网公司混了几天的哥们,包里随时可以摸出来一打商业计划书,但却

Scratch不仅适合小朋友,程序员和大学老师都应该广泛使用!!!

去年接触到了Scratch这个编程工具,它是一种简易图形化编程工具,这个软件的开发团队来自于麻省理工大学称为“终身幼儿园团队”(Lifelong Kindergarten Group). 网址https://scratch.mit.edu/ 使用这个工具,当时我是为了教孩子们,在使用了一段时间之后,一些想法不自主的就萌生出来了. Scratch可使大学教学更有互动性 我记得当年读大学的时候,老师都是用C在一个黑色或蓝色背景的编辑框中,敲入或输出一些非常无趣的字符. 我只想说老师,其实我就想知道游

那些拼命加班的程序员们,后来都怎么样了?

阅读本文大概需要 5 分钟. 作者:黄小斜 小张是个 80 后程序员,典型的技术人,他非常热衷于技术,对代码有着独特的追求. 小张属于踏实肯干的程序员,在公司工作兢兢业业,也干出了很不错的成绩,当然,与之伴随的是,加班成为了家常便饭. 公司还不错,算是一个比较有潜力的成长型公司,转眼间,他已经在目前这家互联网公司干了七年了,自己也算是技术骨干,手下也带了一些新人. 只不过曾经的小张已经变成了老张,发际线也已经移动到了无法自拔的境地. 回想起小张刚进公司的时候,意气风发,大有初生牛犊不怕虎的姿态,

.Net程序员面试 每个人都应知道篇 (回答Scott Hanselman的问题)

昨天回答了Scott Hanselman在他清单上关于C#那部分的题目,.Net 程序员面试 C# 语言篇 (回答Scott Hanselman的问题),今天接着回答他在清单上列出的"每个写代码的人都应该知道"部分的题目. 1. 描述线程跟进程的区别 (Describe the difference between a Thread and a Process?) 进程是指处于运行状态中的程序, 例如在windoe 环境下Ctrl + Alt + Delete 可以看见此时本台wind

java/python/php/android/ios/前端程序员视频教程,全部都在这里了,应有尽有

内容付费 知识付费 Make your content more valuable 内容付费,让知识更具价值 所有资源打包链接:https://www.fageka.com/sell/FxXXLXM1431 编程: 程序员文档教程合集--java/php/ios/android等多种文档教程,各种设计思维.各种电子版教程应有尽有,都在这里了:https://www.fageka.com/sell/zRBQada0604 java打包链接--包含java所有资料,含Hadoop:https://w

为什么我觉得做在线教育平台的都不靠谱

写在前面的话: 本文是我在2014年,也就是2年前应教育行业媒体"多知网"之邀所写的一篇在线教育行业分析+评论.虽然写得早,但文中所有观点,站在今天看,仍然是完全适用的,并无不同.包括文中提到的很多观点,我相信今天也已经都得到了验证. 在2014年,我就感觉在线教育平台是个很不靠谱的模式,此后也曾就此与跟谁学CEO陈向东.果壳网CEO姬十三等人有过交流.可惜,跟谁学还是走进了我所预见的一些坑. 今天此文重发,是因为在三节课同学群里,我们又一次听到了有很多在线教育平台开始裁员的消息.于是

程序员们的时间管理法则

转自:http://www.csdn.net/article/2012-07-26/2807737 软件开发是非常令人兴奋的工作,经过多年的工作,你不仅可以得到相应的报酬(随着工作经验增长)还会有其他晋升的机会.大多数人只关心保持头浮出水面.但这并不是我们所要追求的目标,那仅仅是我们在学校或者孩童时代的梦想? 为了赚更多的钱,大多数人还会找额外的工作并且不太关注编程以外的东西.没有时间休息.没有时间和家人朋友小聚.除了工作还是工作.因此导致压力越来越大,对生活的不满足感油然而生. 其实我们只要稍