项目时间的估算对项目的成败至关重要。项目时间管理包括了项目按时完成所需的各个过程。但是,在实际项目中,经常出现项目延期,估算严重不准确的现象。

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

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

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

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

霍夫斯塔特定律:实际时间总是比预期要长,即便你考虑到了霍夫斯塔特定律。

经常会有 PM 抱怨说,为什么公司的开发永远不能估计自己的项目时间?!然而机智的程序员早就对此司空见惯了。我甚至见过一个预计 2 天完成的项目最后花了 4 个月的时间,即使按照「时间翻倍」的经验法则来看也是挺夸张的。从高级层面来看,问题在于 —— 工程师和 PM 或者其他人员对时间估算的方法和思维方式不同。

大多数工程师的第一反应是,如果一切按照计划正常进行的话,写出一个原型所需要的最短时间。而 PM 或者其他下游人员的想知道的是,项目什么时候可以准备完毕,从此时到发布的这段时间是多长?因此这完全是两个不同的故事了。

所以对于工程师来说,掌握时间估算是一项必备技能,这意味着你是专业、稳定而高效的开发者。

为什么需要进行时间估算?

外部依赖

任何有效的事情都不会凭空发生。项目通常存在外部依赖性,比如跟职能团队的沟通(财务、PR、客户支持)以及客户的交流等。而跟这些外部依赖协调的往往是 PM 或者CEO的工作,这意味着最有资格做时间估算的人(工程师)并不是最需要做这些测算的人。这种不对称导致了根本性的紧张。

优先级

时间测算对确定优先级也很关键。工程领域中性价比是一项重要指标,哪怕你在做的功能是全世界最厉害的,经过时间测算发现需要很长时间才能实现的话,那这个功能的优先级也不会太高。

比方说你正在做一个项目,做成之后可以让网站快 50%,但用同样的时间你本来可以完成 2 个项目,而且每个项目都可以让网站快 40%。如果你不花点时间进行初步测算的话,你永远都不知道还可以做一个更快的网站!

初级时间估算

假设我们达成了时间估算非常重要这个共识,那么我们继续看一下如何估算。通常情况下,我们低估所需时间是因为我们想的是「写出一个原型需要多长时间?」。

但是,交付的东西往往要比原型大多了,你还需要考虑测试、调试、优化所花费的时间。还有开会、访谈、代码评审,甚至发邮件都是需要花费时间的。

低估所需时间的另一个原因是意外的问题,这些问题往往不能被充分考虑到,比如 IDE 更新而让你多花了一天去配置环境等等。

基于此,我们最好不要太相信所谓的经验和直觉。

Step 1:制定技术方案

在开始任何一个重要项目之前,你都应该有一份技术计划或者设计文档。这个文档的目的在于让别人知道你在做的事情,并能获得反馈。当你注意到其中的技术细节时,你就会更清晰知道具体所耗费的时间,比如把某个库更新到新版本,可能会多花一天的时间。你甚至还得自己写一个库。

颗粒度在这里是很重要的。如果有哪一部分让人觉得不清楚,要么是你应该了解更多相关知识,要么得把它分解为更细致的步骤。与此同时,如果一个步骤太细的话,又可能会太脆弱导致整个计划无效,所以要把握好这个度。

想要知道你的文档里应该考虑哪些东西,可以看看AliciaChen 的 这篇文章。关键在于跟 PM 沟通清楚,消除有歧义的地方,这样才不会导致最后要推翻重来。

Step 2:为每一步添加时间估算

文档里的每一步实现需要多少时间,这往往牵涉到对细节的研究(这个是不是已经有库了?)。因此视项目性质而言,先做一个简单的原型可以帮助揭示许多潜在的痛点。

Step 3:追加容错时间

现在你已经有了初步的时间估算,不过还有许多其他需要考虑的因素。

随时调试:Bug 难以避免,这取决于开发者对特定代码库的经验以及代码库的成熟度。会议和假期:开会或者放假时一般来说是不会敲代码的,所以真正敲代码有多长时间?因此时间估算时要好好看看日程表。最终测试:通常应该一边编码一边测试,但很多团队在发布前还需要做集成测试,因此在你的估算中留出这部分的时间。代码评审:在这个代码库中你一般需要进行几轮?每轮需要多少时间?要经过多少评审人?留意评审人的日程安排确保代码评审的时间。

当你把交付时间的开销也考虑进去,你就能看到自己的时间估算和项目的实际发布时间要匹配得多。尽管实际情况可能还会更长,你也可能会因压力而需要缩短工期。但当大家明白你的估算更准确时,也会更信任你。

Step 4:发布后评审上期时间估算

复盘还挺痛苦的,但是回顾能让你在下一次做得更好。每一个实际与预期时间不匹配的项目都发生了什么,找到原因并改进它。

总而言之一切在于沟通。提前沟通、经常沟通,了解彼此的日程和需求变更。

跟 PM 等相关参与者的沟通也能让对方提供可能会影响你估算的重要信息。一位设计师可能会说这个动画需要一周工期,干脆砍掉不要了。另一位 PM 也可能补充说这个原型只是对用户进行研究的而已,这次迭代不用处理太多 bug。

对于工程师来说,不要做不切实际的更短工期的妥协,开诚布公更显专业。对于 PM 和其他人来说,尊重这一估算可能需要一个过程,但要知道光靠唠叨是不可能缩短工期的。

项目时间估算不容易,唯有善于沟通、有同理心以及确定功能优先级才可以。

如何预估项目的完成时间相关推荐

  1. springboot项目中关于时间类型转换的格式问题

    常常项目里转时间类型出现如下错误. Can not deserialize value of type java.util.Date from String \"2021-10-24 12: ...

  2. 【项目管理】阿尔法项目经理的时间投入启示

    依据<阿尔法项目经理:什么是2%的顶尖人才知道,而其他人不知道的>一书的说法,下图是每个过程组中所用的时间占比,包含了普通项目经理和阿尔法项目经理的统计情况. 下面浅谈对此图的解读. 首先 ...

  3. vue项目中动态显示时间

    vue项目中动态显示时间 前言 一.js源代码 二.效果图 1.修改 2.html与style的修改 3.修改后效果图 总结 前言 在vue项目中动态显示时间,并且按日期.时间.星期一列排列. 我们想 ...

  4. 非项目活动的时间怎么跟踪?

    会计.审计.合规和专业服务企业通常需要跟踪花费在项目和非项目上的时间以进行报告.员工可以使用8Manage工时表这样的工具来获取与项目和非项目任务相关的工作时间,并记录管理时间. 非项目时间类别确定在 ...

  5. 北京市中小企业服务体系质量提升项目补助申报时间及条件,补贴3000万

    华夏泰科小编了解到北京市中小企业服务体系质量提升项目补助申报时间2021年9月25日前,按照建设项目投资额予以一定比例的资金补助,单个项目补助金额不超过500万元.区域提升项目根据统筹项目中具体建设项 ...

  6. KDA- 时序推荐中项目关系的时间演化效应

    KDA 摘要 用户意图是推荐系统需要考虑的一个重要因素,它总是在不同的环境中动态变化.最近的研究(以顺序推荐为代表)开始专注于预测用户想要什么,而不是用户喜欢什么,这种研究更善于捕捉用户意图,并引起了 ...

  7. 2021-03-03:一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。给你每一个项目开始的时间和结束的时间 。你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。 返回最多的宣讲场次。

    2021-03-03:一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲.给你每一个项目开始的时间和结束的时间 .你来安排宣讲的日程,要求会议室进行的宣讲的场次最多. 返回最多的宣讲场次. ...

  8. python日期迭代_计算敏捷项目中迭代时间安排(Python3版)

    节奏是敏捷开发的核心,保持合理固定的节奏,能有效的促使各个环节协调统一,高效运行.针对产品的不同周期,方案有所不同. 迭代开发.jpg 通常,我们需要在一个时间盒中去分配一个项目中不同阶段的时间,在项 ...

  9. 关于项目中一些时间转换的问你题 -紫叶and妍

    这个已经是 第三次提交了 第一次信心满满的谢了一遍 因为有些事情的原因 不得不回家 忘记提交 到家有修改了一下 提交 直接跳转到了登陆页面 让俺后心理阴影面积瞬间澎爆 今天早上起来晚了 走的匆忙 结果 ...

最新文章

  1. 如何定制一款12306抢票浏览器——处理预订页面和验证码自动识别功能
  2. svn update 报错,必须先cleanup,然后cleanup失败解决方法
  3. 吞吐量达到瓶颈后下降_如何找到 Kafka 集群的吞吐量极限?
  4. ios:CGContextRef 渲染中文问题
  5. qt linux 聊天室,Qt网络聊天室客户端
  6. 小游戏掉帧卡顿启动慢运行内存不足……这些问题有解吗?
  7. C#MUD英雄大作战二、乔峰篇(副源码文件连接)
  8. hbase数据导入到mysql(转载+自己验证整理,目前失败)
  9. 【OSG】OSG软件模块结构
  10. 2016重庆计算机一级考试题型,重庆计算机一级考试真题2016年最新(笔试+上机)
  11. ionic xcode 上传appstroe 创建Distribution证书报错 you already have a current iOS Distribution certificate
  12. [翻译]超炫列表动画的实现
  13. Flash知识点总结
  14. openlayers根据坐标定位_车辆定位技术概述
  15. C常见错误小记(未完)
  16. (秒杀项目) 4.7 缓存商品与用户
  17. dbc2000 注册机|dbc2000 注册码注册机下载
  18. 用springMVC拦截器实现操作日志管理功能
  19. etl mysql 到sqkserver_从SQL Server到MySQL的ETL实现
  20. 给定一段IP地址172.18.18.128/26,试为该网络做一个IP地址规划,要求开 发室1、开发室2以及制造部各为一个VLAN。

热门文章

  1. 调用其他命名空间中的函数-洋葱先生-杨少通
  2. js控制excel打印完美解决方案(转)
  3. 08s01 mysql_mysql报错 code:08S01,msg:SQLSTATE
  4. 如何安装Mac 下的markman破解版
  5. Goland 1.15运行报错:该版本的 %1 与你运行的 Windows 版本不兼容
  6. python基础专栏⑤-手机编写python篇-qpython开发python
  7. 开源俄版三轴云台软硬件、调参软件调试可用,代码开源,入门说明
  8. 如何经营咖啡加盟店和独立咖啡店?用好国外成功经营咖啡馆四大法则
  9. 【HBase 进阶】-- Region 过多的影响 合理分区数量
  10. 金行健:进门就被抓拍人脸自动注册会员,杭州一大学生将商场告上法庭