程序员如何精确评估开发时间?-程序员宅基地

一个程序员能否精确评估开发时间,是一件非常重要的事情。如果你掌握了这项技能,你在别人的眼里就会是这样:

  • 靠谱

  • 经验十足

  • 对需求很了解

  • 延期风险小

  • 合格的软件工程师

  • 正规军,不是野路子

评估开发时间的重要性

首先,在一个项目中,所有的环节都是承上启下的,上一个环节结束的时间节点正是下一个环节开始的节点。那么在一个项目或者一次迭代正式启动前,所有的环节都应该有个时间评估。以一次APP需求迭代为例,项目计划像这样:

  1. UI设计图   11.01 - 11.03(3工作日)

  2. API接口讨论与设计 11.04(1工作日)

  3. 移动端开发 11.05 - 11.15(8工作日)

  4. 后端具备联调条件:11.11

  5. 产品体验 11.16 - 11.17(2工作日)

  6. 测试11.18 - 11.25(5工作日)

  7. 发布11.26

根据项目计划,各个部门自己要分配人员和时间。如果其中一个环节延期了,那么后面的各个环节都要顺延,就会造成损失。

其次,对于程序员来说,一个清晰的开发计划有助于自己有条不紊地开展工作,也能避免疏漏某个功能点。评估时间的过程,也是对需求详细拆分的过程,了解要做什么,做成什么样子。在评估的过程中,根据专业知识和经验,充分预估会遇到的风险,怎样的解决方案,预留多少时间?都想好了的话,项目也就没啥风险了。

然而,开发时间评估,最大的好处是程序员受益。认真地评估开发时间,会让你在开始动手写代码之前搞清楚要怎么写,每个模块的设计心理得有个谱。从宏观上拆分模块,然后详细地分解任务,具体到一个很小的功能点。这样你就能清晰地设计代码,而不是堆代码。也避免了很多时候写着写着发现不对,然后拉倒重来的境地。就是要让你动手写代码之前胸有成竹!

初学者为什么评估不准?

如果你的项目经常delay,那么八成是时间评估不准。

刚毕业的学生被问到什么时候可以完成的时候,脑门一拍:“三天”,实际上两个星期过去了还没完成。

这里有一张表,看看你是不是这样子,对号入座:


越是老程序员越是“胆小”,评估时间越准。

如何精确评估开发时间

最近几年,我都是以小时为单位进行时间评估的,有没有觉得有点恐怖?长期以来这样的习惯让我收获颇多。这得感谢我之前的领导,三年前强迫我们这样做,刚开始很抵触,后来才体会到其中的甜头。

1. 任务拆分

拿到新需求后,对其进行充分了解,不清楚的就去问清楚,然后对其进行模块化。之后,再进行技术上的拆分。由大到小,再到细节。细到什么程度呢?细到一个按钮的实现,细到一个点击动作是要用按钮还是要用手势的定夺,最好能细到代码块的划分。

这个能力是需要锻炼的,做好拆分,然后在实际开发过程中根据实际时间花销,回顾时间评估的准确性,以便让下次更准确。慢慢地,就会越来越精确,评估时间有依有据,不再是拍脑门给出的时间。下面看一个例子:

2. 合理认知时间

一天工作八小时,但你不可能专注地连续八小时在编写代码。一天的工作中,有开会、讨论、阶段性休息(刷新闻、喝咖啡、发呆)的时间开销,真正有效时间其实不足六小时,杂事多的话可能是四五个小时。

3. 预留buffer(缓冲区)

首先明确,预留buffer不是让你随便增加预估量,而是要明确知道buffer是给那些事情用的。要考虑到以下几点:

首先是沟通时间,你开发的时候不可能是闷着头一直写代码。要和UI设计师沟通,要和产品经理沟通,有可能还需要和组内的人沟通技术上的事情,以及和别的技术小组对接的问题。

等待时间。如果牵扯多部门协作,会有很多等待时间,因为你不能保证别的部门就能准确按照计划时间完成的。虽然等待过程中你可以安排其他任务,但你不能保证其他任务就能刚好填充等待时间,更何况任务切换也需要时间成本。

突发状况。例如,bug修改、需求微调、对接人请假。

不确定时间。和其他部门有交集的工作,最好多预留buffer。比如移动端和后台联调。后端信誓旦旦给你说11.11号可以进行联调,这次联调总共5个接口。如果你简单地认为他们给你提供的接口没问题,并且能顺利请求回来数据,预计一天联调时间足以,那你就等着delay吧。11.10号你已经准备好了所有联调准备,如果数据能正确返回,你的解析功能都是OK的,因为你之前用假数据已经处理得好好的。到了11号,你请求第一个接口就报错了,然后在即时通讯软件上问他们怎么回事,半个小时后给你回了“不好意思,地址变了,你用这个试试”。又错了……。终于回来数据了,然后发现缺少两个字段……。就这样,第一个接口调通已经快下班了。(当然很多后端技术人员也是很靠谱的,举这个例子只是为了让多考虑)

以上是可能会出现的状况,实际中有可能只是出现了一部分,这要根据实际情况而定。并不是让你能多预留buffer就多留,毕竟每个项目的时间都是很紧张的。一般buffer留在15%-25%。

4. 回头看

在实际开发过程中,测量实际花费时间,并与估算相比较。如果有些地方相差较大,就要看差在哪里,然后在下次预估中避免相同的差错。

总结

编程经验不等同于估算经验。一个不被包含在估算流程中的开发者将不会擅长估算。同样,如果实际的时间花费不被测量和用于与估算比较,那么将没有反馈来学习。

最后,每个程序员都应该具备估算的技能。为磨练这个技能,接手每个任务时,先决定你要做什么。然后在开始之前估算任务所需时间。最后测量实际花费时间,并与估算相比较。同样比较你实际完成的与计划完成的。这样你将会既提高你对一个任务包含细节的理解,同样也提高了你的估算技能。

尽管进行了精确估算,也不能保证每个项目都会100%精确。偶尔会遇到一些突发情况和没预估到的风险是不可避免的。那么面对风险,有一些原则可以帮助你:

  • 报风险时间置前,如果开发开始或者任何过程有可能导致项目延期或者需求无法实现的时候就报警,不要等加班能实现或者存在侥幸心理;

  • 对于不确定的需求,一定要沟通到位;

  • 涉及到交互细节,必须提前沟通好,充分明确细节;

  • 技术可行性方案提前调查清楚。

作者:Eric_LG

来源:CSDN 

文:

https://blog.csdn.net/gang544043963/article/details/83934015

推荐阅读 ↓↓↓

1.浅谈 java工程师职业规划

2.java学不进 , 没头绪 ? 是不是没摸清阶段顺序?

3.java日志性能的哪些事

4.学习java需吃透这些基本概念

5.java中的String为什么是不可变的? 以及源码分析

6.BAT大企内部面试题泄密!

7.SpringBoot入门到高级视频资源全套 , 确定不领取下?

8.java学习路线全攻略(资源 、视频 、源码 、项目实战等)

有人用微信聊天,有人却在微信中学习,成长。
关注方式
★长按二维码,选择“识别图中二维码”进行关注。

目前100000+人已关注加入我们

       

       

看完本文有收获? 请转发分享给更多人

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35661171/article/details/103520708

智能推荐

pytorch 预训练模型读取修改相关参数填坑_怎么修改state_dict-程序员宅基地

修改部分层,仍然调用之前的模型参数。resnet = resnet50(pretrained=False)resnet.load_state_dict(torch.load(args.predir))res_conv31 = Bottleneck_dilated(1024, 256,dilated_rate = 2)print("---------------------",res_..._怎么修改state_dict

Qt基础之二十六:Qt绘图系统(Paint System)_草上爬的博客-程序员宅基地

通过从QPaintDevice类派生并重新实现QPaintDevice:paintEngine()函数,即可添加一个新的绘图设备。在paintEngine中要告知QPainter应该使用哪种绘图引擎在该设备上绘制。要真正能够在自定义绘图设备上绘制,此绘图引擎必须是从QPaintEngine类派生的自定义绘图引擎。_qt绘图系统

送给和我一样曾经浮躁过的PHPer程序猿-程序员宅基地

2012年偶决定开始写博客了,不为别的,就希望可以通过博客记录我的成长历程同时也希望可以帮助一些刚毕业,刚入行业的兄弟姐们们。我们是一群充满浮躁、抱怨、迷茫的程序猿,想一想3年就这么过去了,社会变得更浮躁了,鸭梨也越来越大,房?车?女人?... 抓狂...  决定写这样一篇文章,再次明确自己的职业规划,也送给浮躁的你,踏上程序猿这条路可谓是路途艰辛,乏味,枯燥,在这里把自己的学习心得,目前

【tips】xadmin - django第三方后台管理系统-程序员宅基地

  Django 为大家提供了一个完善的后台管理系统—admin,但是这个后台管理系统总体来说不太适合国人的习惯,所以有大神就使用 bootstrap 和 jQuery,为我们开发了一个第三 方的 Django 后台管理系统—xadmin,这个界面的友好度比较高,目前企业的使用频率比较高,我们来学习一些它的使用吧。   一、下载安装(tips:如安装过程中出现3444错误,可在文章最后查看...

Java浅克隆与深克隆-程序员宅基地

浅克隆与深克隆 浅克隆的对象与原对象引用不相等,但对象中的对象是相等的 深克隆则是全部不相等 浅克隆的实现 需要该类实现Cloneable接口(该接口无需实现任何方法,只是一个标志),并重写Object类中的clone方法(该方法为protect,只能在其子类中调用), 编写车轮(Wheel)类,代码如下所示: public class Wheel { private Str

(转)前端埋点的那些事-程序员宅基地

为什么要埋点?现在的互联网公司越来越关注转化、新增、留存,而不是简单的统计PV、UV。而完整的数据采集是一切的前提。埋点包括在IOS、Android、H5、小程序等前端埋点,也包括后端业务埋点。这里仅仅讲讲这些年和产品经理、运营撕逼上百个回合的前端埋点内容。说说手工埋点、可视化埋点、无埋点区别手动埋点(代码埋点)纯手动写代码,调用埋点SDK的函数,在需要埋点的业务逻辑功能位置调用接..._全埋点 document.title怎么传递到后台

随便推点

计算机科学与技术培养体系,浅析计算机科学与技术专业人才培养体系建设-程序员宅基地

【摘 要】随着信息技能的快速进步,对于有关计算机人才的需要也逐渐升高,这样的状况就要求学校和社会设立有效健全的计算机科学与技能专业人才的训练机制,从而为社会供应高涵养的人才,构成社会前进的促进动力。文章把简要介绍了有关信息社会所要求的人才情况,并做出了有关机制设立的方式。【关键词】计算机技术 训练机制 专业人才 设立现如今全球性的计算机技术的都处于迅速进步阶段,然而为美国目前的计算机人才标准无法迎...

android中listview的setAdapter()和getAdapter()-程序员宅基地

在android中经常使用到listview或者其他AbsListView,以下用listview加以说明。对于其listview的内存回收,需要使用如下方式:在activity的onstart生命状态中执行重建操作:listview.addHeaderView(View);listview.addFooterView(View);listv

HDU 5533简单的几何学(判断n个整数点是否能组成正n边形)-程序员宅基地

题目描述这是一个十分简单的几何学题目。现在给出N个点的坐标(x,y),保证x和y都是整数,你的任务是判断这N个点是否能构成正N边形。输入单组输入数据第一行是N,(2<N<1000)接下来有N行,每行两个数,代表这个点的坐标(x,y)−1000≤x,y≤1000 且保证都为整数输出输出一行结果如果可以构成正N边形,输出Yes,否则输出No样例输入40 500 -...

解决HTTPS访问http不安全问题_tomcat配置https双向认证提示不安全-程序员宅基地

问题:解决HTTPS访问http不安全问题解决方案:1,在前台页面head中添加下面标签:2,将引用的css或js都直接改写成https的 。或者不改,上面属性会自动升级为https协议下这个问题解决了,出现其他问题。如下图:解决方案:1.在浏览器上打开此链接,如下图:2.点击高级,继续访问。就可以了..._tomcat配置https双向认证提示不安全

芯片破壁者(三):光刻技术的“鬼斧”之变-程序员宅基地

在我们今天看来,晶体管发明以后,集成电路的出现一直到今天超大规模集成电路的出现,似乎是一件水到渠成的事情。但是如果回到半导体产业初兴的历史现场,我们就会发现没有任何一项关键技术的突破是“..._光刻投影物镜拆解

arduino nano 多引脚 间断性pwm输出_arduino nano pwm-程序员宅基地

本人小白一个,利用暑假自学一些小东西,最近鼓捣上了arduino,顺便分享一下学习心得,如有不对之处,还请各位前辈多多指正,谢谢。 我是突发奇想向利用arduino3个pwm 引脚输出非同时性pwm波,控制3个车轮转速。由于条件所限,先用led小灯代替。 话不多说,先上硬货。int led1 = 3;int led2=5;// 指定硬件引脚int led3=..._arduino nano pwm