霍夫斯塔特定律:实际时间总是比预期要长,即便你考虑到了霍夫斯塔特定律。
( Hofstadter’s Law: It always takes longer than you expect, even when you take into account Hofstadter’s Law. — Douglas Hofstadter )
经常会有 PM 抱怨说,为什么公司的开发永远不能估计自己的项目时间?!然而机智的程序员早就对此司空见惯了。我甚至见过一个预计 2 天完成的项目最后花了 4 个月的时间,即使按照「时间翻倍」的经验法则来看也是挺夸张的。从高级层面来看,问题在于 —— 工程师和 PM 或者其他人员对时间估算的方法和思维方式不同。
大多数工程师的第一反应是,如果一切按照计划正常进行的话,写出一个原型所需要的最短时间。而 PM 或者其他下游人员的想知道的是,项目什么时候可以准备完毕,从此时到发布的这段时间是多长?因此这完全是两个不同的故事了。
所以对于工程师来说,掌握时间估算是一项必备技能,这意味着你是专业、稳定而高效的开发者。
为什么需要进行时间估算?
外部依赖
任何有效的事情都不会凭空发生。项目通常存在外部依赖性,比如跟职能团队的沟通(财务、PR、客户支持)以及客户的交流等。而跟这些外部依赖协调的往往是 PM 或者 CEO 的工作,这意味着最有资格做时间估算的人(工程师)并不是最需要做这些测算的人。这种不对称导致了根本性的紧张。
优先级
时间测算对确定优先级也很关键。工程领域中性价比是一项重要指标,哪怕你在做的功能是全世界最厉害的,经过时间测算发现需要很长时间才能实现的话,那这个功能的优先级也不会太高。
比方说你正在做一个项目,做成之后可以让网站快 50%,但用同样的时间你本来可以完成 2 个项目,而且每个项目都可以让网站快 40%。如果你不花点时间进行初步测算的话,你永远都不知道还可以做一个更快的网站!
初级时间估算
假设我们达成了时间估算非常重要这个共识,那么我们继续看一下如何估算。通常情况下,我们低估所需时间是因为我们想的是「写出一个原型需要多长时间?」。
但是,交付的东西往往要比原型大多了,你还需要考虑测试、调试、优化所花费的时间。还有开会、访谈、代码评审,甚至发邮件都是需要花费时间的。
低估所需时间的另一个原因是意外的问题,这些问题往往不能被充分考虑到,比如 IDE 更新而让你多花了一天去配置环境等等。
基于此,我们最好不要太相信所谓的经验和直觉。
Step 1:制定技术方案
在开始任何一个重要项目之前,你都应该有一份技术计划或者设计文档。这个文档的目的在于让别人知道你在做的事情,并能获得反馈。当你注意到其中的技术细节时,你就会更清晰知道具体所耗费的时间,比如把某个库更新到新版本,可能会多花一天的时间。你甚至还得自己写一个库。
颗粒度在这里是很重要的。如果有哪一部分让人觉得不清楚,要么是你应该了解更多相关知识,要么得把它分解为更细致的步骤。与此同时,如果一个步骤太细的话,又可能会太脆弱导致整个计划无效,所以要把握好这个度。
想要知道你的文档里应该考虑哪些东西,可以看看 Alicia Chen 的 这篇文章。关键在于跟 PM 沟通清楚,消除有歧义的地方,这样才不会导致最后要推翻重来。
Step 2:为每一步添加时间估算
文档里的每一步实现需要多少时间,这往往牵涉到对细节的研究(这个是不是已经有库了?)。因此视项目性质而言,先做一个简单的原型可以帮助揭示许多潜在的痛点。
Step 3:追加容错时间
现在你已经有了初步的时间估算,不过还有许多其他需要考虑的因素。
随时调试:Bug 难以避免,这取决于开发者对特定代码库的经验以及代码库的成熟度。会议和假期:开会或者放假时一般来说是不会敲代码的,所以真正敲代码有多长时间?因此时间估算时要好好看看日程表。最终测试:通常应该一边编码一边测试,但很多团队在发布前还需要做集成测试,因此在你的估算中留出这部分的时间。代码评审:在这个代码库中你一般需要进行几轮?每轮需要多少时间?要经过多少评审人?留意评审人的日程安排确保代码评审的时间。
当你把交付时间的开销也考虑进去,你就能看到自己的时间估算和项目的实际发布时间要匹配得多。尽管实际情况可能还会更长,你也可能会因压力而需要缩短工期。但当大家明白你的估算更准确时,也会更信任你。
Step 4:发布后评审上期时间估算
复盘还挺痛苦的,但是回顾能让你在下一次做得更好。每一个实际与预期时间不匹配的项目都发生了什么,找到原因并改进它。
总而言之一切在于沟通。提前沟通、经常沟通,了解彼此的日程和需求变更。
跟 PM 等相关参与者的沟通也能让对方提供可能会影响你估算的重要信息。一位设计师可能会说这个动画需要一周工期,干脆砍掉不要了。另一位 PM 也可能补充说这个原型只是对用户进行研究的而已,这次迭代不用处理太多 bug。
对于工程师来说,不要做不切实际的更短工期的妥协,开诚布公更显专业。对于 PM 和其他人来说,尊重这一估算可能需要一个过程,但要知道光靠唠叨是不可能缩短工期的。
项目时间估算不容易,唯有善于沟通、有同理心以及确定功能优先级才可以。
关注公众账号
【飞马会】
▼
飞马会
AI人工智能/大数据/技术管理等人员学习交流园地
往期福利
关注飞马会公众号,回复对应关键词打包下载学习资料;回复“入群”,加入飞马网AI、大数据、项目经理学习群,和优秀的人一起成长!
回复 数字“1”下载从入门到研究,人工智能领域最值得一读的10本资料(附下载)
回复数字“2”机器学习 & 数据科学必读的经典书籍,内附资料包!
回复数字“3”走进AI & ML:从基本的统计学到机器学习书单(附PDF下载)
回复数字“4”了解人工智能,30份书单不容错过(附电子版PDF下载)
回复数字“5”大数据学习资料下载,新手攻略,数据分析工具、软件使用教程
回复数字“6”AI人工智能:54份行业重磅报告汇总(附下载)
回复数字“7”TensorFlow介绍、安装教程、图像识别应用(附安装包/指南)
回复数字“8”大数据资料全解析(352个案例+大数据交易白皮书+国内外政策汇篇)
回复数字“9”干货 | 荐读10本大数据书籍(初级/中级/高级)成为大数据专家!
回复数字“10”麦肯锡160页报告:2030年全球将可能8亿人要被机器抢饭碗
回复数字“11”50本书籍大礼包:AI人工智能/大数据/Database/Linear Algebra/Python/机器学习/Hadoop
回复数字“12”小白| Python+Matlab+机器学习+深度神经网络+理论+实践+视频+课件+源码,附下载!
回复数字“13”大数据技术教程+书籍+Hadoop视频+大数据研报+科普类书籍
回复数字“14”小白| 机器学习和深度学习必读书籍+机器学习实战视频/PPT+大数据分析书籍推荐!
回复数字“15”大数据hadoop技术电子书+技术理论+实战+源代码分析+专家分享PPT
回复数字“16”100G Python从入门到精通!自学必备全套视频教程+python经典书籍!
回复数字“17”【干货】31篇关于深度学习必读论文汇总(附论文下载地址)
回复数字“18”526份行业报告+白皮书:AI人工智能、机器人、智能出行、智能家居、物联网、VR/AR、 区块链等(附下载)
回复数字“19”800G人工智能学习资料:AI电子书+Python语言入门+教程+机器学习等限时免费领取!
回复数字“20”17张思维导图,一网打尽机器学习统计基础(附下载)
回复数字“21”收藏 |7本 Matlab入门经典教程书籍,不可错过!
回复数字“22”吴恩达新书,教你构建机器学习项目:《Machine Learning Yearning》
回复数字“23”机器学习:怎样才能做到从入门到不放弃?(内含福利)
回复数字“24”限时下载 | 132G编程资料:Python、JAVA、C,C++、机器人编程、PLC,入门到精通~
回复数字“25”限资源 | 177G Python/机器学习/深度学习/算法/TensorFlow等视频,涵盖入门/中级/项目各阶段!
回复数字“26”人工智能入门书单推荐,学习AI的请收藏好(附PDF下载)
回复数字“27”资源 | 吴恩达斯坦福CS230深度学习课程全套资料放出(附下载)
回复数字“28”懂这个技术的程序员被BAT疯抢...(内含资料包)
回复数字“29”干货 | 28本大数据/数据分析/数据挖掘电子书合集免费下载!
回复数字“30”领取 | 100+人工智能学习、深度学习、机器学习、大数据、算法等资料,果断收藏!
回复数字“31”2G谷歌机器学习25讲速成课全集(中文版),限时下载
回复数字“32”Matlab安装包+教程视频,让你从入门到精通!
回复数字“33”程序员去阿里面试,没想到过程如此壮烈 (内含资料包)
回复 人工智能下载《FMI人工智能与大数据峰会嘉宾演讲PPT》
回复AI 江湖下载《十大AI江湖领域》
回复ML实践下载《机器学习实践经验指导(英文版)》
回复DL论文下载《深度学习100篇以上论文资料》
回复算法 下载《数据挖掘十大经典算法》
回复6.10 下载《6.10饿了么&飞马网项目管理实践PPT》
网友评论