如何科学预估开发时间

0. 我是前言

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

1. 评估开发时间的重要性

首先,在一个项目中,所有的环节都是承上启下的,不管你是身处瀑布流团队还是敏捷团队,不管团队用的是 Sprint 还是 Kanban,上一个环节结束的时间节点正是下一个环节开始的节点。那么在一个项目或者一次迭代正式启动前,所有的环节都应该有个时间评估。

对于项目,合理的预估可以减低延期风险,促进高效协作。

对于个人,合理的预估能让你宏观把控,细节拆分,了解需求,合理安排工作。

2. 为什么评估不准?

首先我们要知道,“评估” 天生就会产生偏差。但是,我们可以通过科学手段无限消除偏差。

先来看一个有趣的例子:

从 A 地到 B 地,总共20公里。请你预估一下骑自行车过去得多久。

我:每小时骑行10公里肯定没问题,所以就预估2小时吧。

现实a:20公里都是乡间小路,用时4小时。

现实b:晚上十点出发,抹黑骑行,用时6小时。

现实c:刚出发就开始下大雪了,被迫停歇一天,用时15小时。

现实d:唯一的跨江大桥坍塌了,被迫绕行100公里,路上爆胎,用时24小时。

。。。

再看看一张很贴近日常开发的示例:

估算时间

程序员想象的

程序员没想到的

实际时间

30秒

只需改动一行代码。我知道怎么改,在哪里改。

切换分支,拉取代码,切换环境,编译。改动代码后测试,修改相关文档。

1小时

5分钟

小事一桩,只需要谷歌查一下文档,很快就修改了。

在搜索引擎上很难一次就获得正确信息。发现Stack Overflow上答案五花八门。上官网翻了半天才找到相关文档,按照文档说明修改之后发现结果不对。

2小时

4小时

根据UI设计图,我知道有个第三方UI控件可以实现。

这个第三方控件和UI设计上的动画效果不一致,不能通过设置属性来改变动画。需要更改控件源码,或者寻找别的控件。

1-2天

2天

只需要实现一个简单的页面,然后从后端获得一次数据,展示出来即可。

如果请求失败,页面得显示一个提示。如果API请求token失效,需要更新token并且重试一次。Staging环境很难用,需要后端配合手动配置数据。

3-5天

5天

我知道这个功能比较复杂,大概需要改动三个模块。虽然你我还没有具体思路,但是我不能说我不知道,一周时间应该够了。

需求细节没有了解清楚。这个任务已经太大,不可控因素很多,需要拆分任务。由于历史原因,实现某个功能点很麻烦,牵一发动全身。或许架构师会发现一种很简单的方法来完成它。

3-20天

图3. 预估示例

是不是很真实?

从以上两个例子可以看出,导致预估不准确的原因有如下几种:

  • 想当然
  • 经验缺乏
  • 依赖的不确定性
  • 对需求和上下文了解不清楚

总之就是,假设不成立。

3. 不同的预估标准

3.1 以 Point 为单位

敏捷开发中,是以 Point 为单位评估一件事情的「复杂度」。一般使用菲波那切数列(1,1,2,3,5,8,13,...)中的数字。

「复杂度」的评估标准应该提前拟定好。要知道,「复杂度」仅仅体现事情的复杂度,不与个体的能力绑定。

一般迭代周期是固定的,如果知道团队的 Capacity,那么就能算出这次迭代可以完成多少个 point。

例如,迭代周期是20个工作日,Capacity 是 0.8,团队成员 4 人,那么这次迭代就可以完成 20 x 0.8 x 4 = 64 个 point。

3.2 以 Day 为单位

在瀑布流开发模式中,一般以 Day 为评估单位,并且和个人能力挂钩。所以可以直接估算出开发时间。

任务数量确定,评估出开发时间后,就可以算出交付日期。这个就不展开讲了。

不管是敏捷开发,还是瀑布模式开发。他们在时间预估上只是形式不同。

4. 如何科学地预估

上面提到过,评估是准确是因为很多假设不成立。那么如何做到假设成立呢?这就需要提高多个维度的认知。

4.1 提高需求认知 - 任务拆分

我们需要把任务拆分的尽可能小,以敏捷模式为例,一般 1 到 8 个 point 为宜,尽量不要超过 8 个 point。如果某个 story 超过 8 个 point,那么这个 story 必然很笼统,包含了太多的内容,估点肯定不准确。这时可以要求 PM 或 BA 去拆分这个庞大的 story。

拆分任务的时候,也是对需求详细了解的过程。对于不明确的地方,一定要和 PM 或 BA 沟通清楚。让一个 “事务” 变成一个个可执行且明确的 “任务”。

4.2 提高技术认知 - 做 Spike

对于开发者来说,不是所有的技术点都了然于胸。对于不确定的技术点,应该提前调研,可以建 Spike ticket 专门去做调研。进行可行性验证后,再基于调研结果做时间估算。

4.3 提高时间认知 - 计算有效时间

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

还要考虑人员请假和人员变动的时间开销。

虽然在敏捷模式下以「复杂度」为单位估算,但我们仍然需要清楚有效时间。这有助于我们计算 Capacity。

4.4 提高风险认知 - 合理预留 Buffer

自身风险:虽然做了调研,但也避免不了在工程中实践的时候不出问题,这是技术实践中的风险。

其他团队的风险:比如说前后端 API 联调,前端和后端团队都是对方的风险。后端开发人员告诉前端所有接口都已准备好并且自测了,但是当你去调用的时候发现有各种问题。(只是个例子,不针对后端)。还有需求改动。大的改动当然是不允许的,但是小改动往往不可避免。

面对这些风险,如何应对?

预留 Buffer !也可称为“容错时间”。这是在合理认知风险和认知时间的基础上进行余量预估,可不是随便增加预估量嗷。

具体要根据团队的沟通成本、配合默契度、依赖程度进行估算,一般在15%~25%之间(主观经验值,无从考证)。

4.5 回头看

一项能力的建设过程,都是不断反馈的过程。不同的项目不同的开发团队,往往评估策略是有差异的。所以我们要通过回头看,不断校正,逐步趋于精确。

预估 -> 实际用时统计 -> 回顾分析。不断练习,积累经验, 预估时间会越来越接近实际用时。

5. 结束语

Robert C. Martin 说:“Just as the Hare was overconfident in its speed, so the developers are overconfident in their ability to remain productive.” 是的,我们总是过于自信,很多时候在预估时间的时候体现的淋漓尽致。在多次交付延期或被迫加班之后,我们会逐渐趋于成熟,心里默念:谦和朴诚,保持敬畏。

最后,虽然有些团队是不要求严格预估时间,但是作为开发者,我们自己心里得有数,请养成这个习惯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34095.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译原理之代码生成

前面提到了经过了词法分析->语法分析->语义分析->中间代码优化,最后的阶段便是在目标机器上运行的目标代码的生成了。目标代码生成阶段的任务是:将此前的中间代码转换成特定机器上的机器语言或汇编语言,这种转换程序便被称为代码生成…

前端案例-跟随鼠标移动的天使

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域新星创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

前端代码在线编辑器:codepen、codesandbox

文章目录 单文件在线编辑器项目级在线编辑器 推荐两个前端代码在线编辑器 单文件在线编辑器:https://codepen.io/pen/ 项目级在线编辑器:https://codesandbox.io/ 单文件在线编辑器 codepen 相信使用 element-ui组件库的小伙伴应该知道 codepen在线编…

vue前端生成二维码并提供二维码下载

在一个管理后台的开发过程中使用到了需要前端自行生成分享二维码,并提供二维码下载功能,网上的解决方案很多,最终自己做完的思路和代码整理记录方便后续学习使用! vue版本为2.x 具体实现步骤: 下载安装依赖&#xff0…

总结本人学习b站黑马前端课程,各部分案例汇总

目录 1.Ajax: 对应课程: b站黑马JavaScript的Ajax案例代码——新闻列表案例 b站黑马JavaScript的Ajax案例代码——评论列表案例 b站黑马JavaScript的Ajax案例代码——聊天机器人案例 b站黑马JavaScript的Ajax案例代码——图书管理案例 2.ES6面向对…

前端——动态生成表格

案例分析 因为表格数据是不断更新的,我们需要js 动态生成。 这里我们模拟数据,自己定义好数据。 数据我们采取对象形式存储。所有的数据都是放到tbody里面的行里面。因为行很多,我们需要循环创建多个行(对应多少人)每…

Methodot低代码电影票房管理系统实战案例(二):前端低代码搭建系统后台

本次系统后台实战将使用Methodot应用工厂中的前端低代码组件完成搭建,无需注册域名、购买云服务器、虚拟机等,可在Methodot云端一体化完成开发、交付、访问、运维,3s即可部署至线上 免运维,在Methodot上可直接开发部署到线上 本次…

c语言源码代码生成器,SoEasyPlatform 代码生成器

介绍 一款轻量级开源的代码生成器,相对较动软代码生成器而言要轻量的多,支持多种数据库,所用到dll组件也都在github有源码,代码非常的简单有点基础的看源码可以把生成的项目改成自已的风格。 特色 该代码生成器最大的特点就三个简单 ,无需安装,生成的代码 简单并且有教学…

基于GPT-4的免费代码生成工具

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

前端直接生成GIF动态图实践

前言 去年在博客中发了两篇关于GIF动态生成的博客,GIF图像动态生成-JAVA后台生成和基于FFmpeg的Java视频Mp4转GIF初探,在这两篇博客中都是采用JAVA语言在后台进行转换。使用JAVA的同学经过自己的改造和开发也可以应用在项目上。前段时间有朋友私下问&…

利用JS代码完成动态生成表格案例及解析

思路&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&…

屏蔽必应(bing)搜索引擎点开一个页面下面会出现“浏览 6 个相关页面”的网页推荐方法

如以上图片显示&#xff0c;“浏览 6 个相关页面” 的推荐内容是网页里面的js实现的&#xff0c;无法取消&#xff0c;微软官方也回复说不能关闭的&#xff0c;只能通过浏览器的屏蔽广告插件可以实现&#xff1a; 我用的是这个uBlock Origin插件根据这位大佬的帖子安装的&…

基于chatgpt-on-wechat的微信个人对话机器人搭建

1.开源项目选定 现在gpt很火,git中大佬们都创建了很多高星项目,我这里选用了chatgpt-on-wechat(项目地址:https://github.com/zhayujie/chatgpt-on-wechat),这个项目在扩展时也很舒服,大家可以去拉下来看看,学习源码才能方便后续的扩展 2.服务器选定 国内服务:前置条件需要走…

【模仿】调用微信聊天功能和分享功能

今天整理个不是问题的问题&#xff0c;没学到啥&#xff0c;主要完成功能&#xff1a; 老大要求能调用手机号码然后通过微信聊&#xff0c; 我去&#xff0c;说白了老大看到了应用-通讯录plus-的微信功能&#xff0c;要我模仿。 首先&#xff0c;坑啊&#xff0c;我以为是开放…

iOS微信QQ聊天界面的UI框架以及Socket简单实现群聊功能

7.1日更新 Python3 TCP Demo相关 https://blog.csdn.net/Deft_MKJing/article/details/80851879 2.2日更新&#xff0c;socket简易群聊通信&#xff0c;之前实现的是静态本地聊天模拟 最新版本Demo传送门 1.需要的先下载下来&#xff0c;先开启SocketSeverce 2 这个服务器代…

JetChat-简仿微信聊天应用

Swift5.0编写的简仿微信聊天应用&#xff0c;完美支持表情键盘、单聊、群聊、本地消息会话缓存、朋友圈、白天和黑夜主题模式 Examples - 主要界面展示 聊天朋友圈 白天模式黑夜模式 主要技术运用 聊天功能采用RxSwiftMVVM响应式架构设计&#xff0c;通过ViewModel合理过渡处…

程序员聊天必备表情包,收好不谢

现在聊天用表情代替文字已经是潮流了&#xff0c;往往一张图片比文字更能表达内心的想法&#xff0c;今天我们就来了解下程序员聊天时都用些什么表情。 程序员怒产品 &#xff1a; 被吐槽写BUG时怎么办 产品又来提需求 产品又要改需求&#xff0c;怎么办 产品说&#xff0c;这个…

【华为云技术分享】云图说|全新华为云云备份服务:为您的数据提供三合一的保障

云上道路千万条&#xff0c;数据安全第一条。当不幸在云上发生病毒袭击、误删除、软件故障等“车祸”时&#xff0c;如果没有事先对数据进行保护&#xff0c;业务将会中断&#xff0c;并且将导致数据丢失、损坏的后果&#xff01; 华为云云备份就像安全气囊&#xff0c;关键时…

云存储——华为网盘

华为网盘 编辑本段信息 [1] 华为网盘是华为 软件公司&#xff08;下简称 华为公司&#xff0c;华为投资控 [2] 股有限公司的子公司&#xff09;旗下的互联网存储服务。首次注册为5G容量&#xff0c;可以通过各种渠道来获得更多 网络存储空间。可以当作U盘使用,但比优盘方便安全…

利用群晖nas备份华为手机数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、确保手机和nas处于同一局域网二、nas启用smb服务&#xff0c;并且设置正确1.启用smb服务2.在设置最小SMB协议时&#xff0c;会有提示不安全因数的可能。但是…