程序员/PM怎么让项目预估的时间更加准确
项目时间的估算对项目的成败至关重要。项目时间管理包括了项目按时完成所需的各个过程。但是,在实际项目中,经常出现项目延期,估算严重不准确的现象。
一个我曾经共事过的很有经验的项目经理曾宣称说,他会拿程序员估计出的时间乘以π值,然后再提高一个数量级,这样得出的才是正确的开发所需要的时间。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小时,但实际上即使是很有经验的程序员也需要将任务分成可控的模块再来分析做决定。
还有一个很重要的需要认识到的一点是,编程上的经验并不等同于时间估计上的经验。一个从没有做过工期估计的程序员不会擅长估计时间。如果不去拿真正需要的时间和估计出的时间进行比较,你不可能从其它反馈信息之得到正确估计时间的经验。
每个程序员都会用到评估技巧。为了提高你的这项技能,你可以在你从事的每个任务上进行锻炼。在任务开始时先预估开发所需时间,拿它跟你最终真正用掉的时间进行对比。这样,你不仅在对任务细节的理解上有提高,同时也提高了你对时间预估的技能。
项目时间估算其实是有章可循的
总结起来我觉得,对时间的预估与风险的控制关联非常密切,预估时间长短根据风险进行评估;比如,项目实现技术复杂度,人员状态,人员到位情况,资源到位情况等。当然预估时间还要考虑其他很多因素,比如成本,质量等因素。
简单总结下。抛个问题,项目管理过程中,由于技术复杂度评估不足或者需求边锋导致项目延期,你作为PM会怎么去处理这种情况呢?
转载请注明原文地址:http://www.cnblogs.com/chenliangcl/p/7363139.html
程序员/PM怎么让项目预估的时间更加准确的更多相关文章
- fw: 专访许鹏:谈C程序员修养及大型项目源码阅读与学习
C家最近也有一篇关于如何阅读大型c项目源代码的文章,学习..融合.. -------------------- ref:http://www.csdn.net/article/2014-06-05 ...
- 程序员常用6 个 Python 的日期时间库
内建的 datetime 模块 在跳转到其他库之前,让我们回顾一下如何使用 datetime 模块将日期字符串转换为 Python datetime 对象. 假设我们从 API 接受到一个日期字符串, ...
- [译]好程序员的五声“呐喊”
通常编程情况下,会导致软件项目变坏的一些列反应 原文:The five shouts of good programmers 在任何一天,在这个世界上都有软件项目正在失败,这很常见.常见到当软件产品按 ...
- 程序员谈学习:我为什么要学习Linux?
http://kb.cnblogs.com/page/196876/ 好长时间没好好写点东西了,前段时间由于项目的需要出差了一个多月,期间各种加班,每天晚上加班到十点,回到宾馆实现是没什么精力再写博客 ...
- 分享大牛开发经验,浅谈java程序员职业规划
在中国有很多人都认为IT行为是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实现实并不是这样子的,在下从事.NET及JAVA方面的开发的也有8年的时间了,在这...... 在中国有很多人都认为I ...
- Java程序员可能犯的3个常见SQL错误
概述:Java程序员不仅要具备扎实的Java编程能力,在日常的工作当中往往还要涉及到其他语言的基础知识,尤其是SQL.那么哪些常见的SQL错误是程序员们容易犯的呢?让我们一起来看看吧! 你可能看到Ja ...
- 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具
Java学习路线图引言: 黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...
- 《程序员修炼之道:从小工到专家》【PDF】下载
<程序员修炼之道:从小工到专家>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196340 内容简介 <程序员修炼之道> ...
- 程序员的职场潜意识Top10
什么叫潜规则?其实就是不明文规定的一些规则,关键是他没法明文规定,因为有的规则太没节操.在我们职场中有些规则你不遵守将举步艰难,而要玩转这些潜规则,那么你必须要具备如下10个潜意识: 1.项目会议.那 ...
随机推荐
- IT行业歧视40岁以上人群为找工作还要谎报年龄[转]
IT行业歧视40岁以上人群为找工作还要谎报年龄(这样不好) http://www.aliyun.com/zixun/content/2_6_616161.html [赛迪网讯]4月5日消息,许多40多 ...
- jsp 按钮颜色
jsp 按钮颜色 第一种方法 <input style= "color:#FF0000;background-color:#00FF00;" type="butto ...
- Visual Studio自动添加头部注释 -C#开发2010-2013验证
在团队开发中,头部注释是必不可少的.但在开发每次新建一个类都要复制一个注释模块也很不爽,所以得想个办法让开发工具自动生成我们所需要的模板.....操作方法如下: 找你的vs安装目录, 比如我的是在D盘 ...
- 动态绑定DropDownList
1.首先前台创建一个dropdownlist控件,并为这个控件起名id ,并且不要忘记runat=server这个属性,否则后台不能获取到该控件. 2.后台自定义方法绑定控件(本方法以三层架构的写法为 ...
- Luogu 2245 星际导航(最小生成树,最近公共祖先LCA,并查集)
Luogu 2245 星际导航(最小生成树,最近公共祖先LCA,并查集) Description sideman做好了回到Gliese 星球的硬件准备,但是sideman的导航系统还没有完全设计好.为 ...
- Phpcms整理
一.先去官网下载一个pc(http://www.phpcms.cn/)进行安装 把下载的pc包放在服务器www目录下: 在地址栏访问localhost/project/install/install. ...
- __main() 和 main() 【转】
因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可 ...
- 设计模式的征途—14.职责链(Chain of Responsibility)模式
相信大家都玩过类似于“斗地主”的纸牌游戏,某人出牌给他的下家,下家看看手中的牌,如果要不起,则将出牌请求转发给他的下家,其下家再进行判断.一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新 ...
- 安装 Docker Machine - 每天5分钟玩转 Docker 容器技术(45)
前面我们的实验环境中只有一个 docker host,所有的容器都是运行在这一个 host 上的.但在真正的环境中会有多个 host,容器在这些 host 中启动.运行.停止和销毁,相关容器会通过网络 ...
- (转)Vi命令详解
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...