An experienced project manager I used to work with claimed that he took the programmers’ time estimates, multiplied by pi and converted to the next time magnitude to get the true number. 1 day converts to 3.14 weeks. He had learned the hard way that programmers are bad at estimating times. To get a more precise conversion, I’ve created a translation table for programmers’ time estimations, trying to narrow down where things go wrong.
30 seconds | There’s just a small change to the code to be done. I know exactly what to type and where. It takes 30 seconds to type. | Time for starting the computer, the development environment and getting the right source. The time to build, test, check in and document the fix | 1 hour |
5 minutes | It’s a minor thing, I just have to look up the exact syntax on google and fix it. | It’s quite rare to find exactly the right information on the first try. Even if it is found, it probably needs some adjustments before it works. Add time for building, testing etc. | 2 hours |
1 hour | I know how to do it, but it’s some code to write so it will take some time. | 1 hour is too tight to have any margin for unforeseen problems. Something always fails. | 2 hours |
4 hours | It’s some code to write, but I roughly know the step. I know the Wizzabanga module of our standard framework can do it, but I have to check the documentation on exactly how to call it. | This is probably the only realistic estimation. It is large enough to have some margin for unexpected problems, while the task is still small enough to grasp. | 4 hours |
8 hours | I first have to refactor the Balunga class into two, then I’ll add a call to the Wizzabanga code and finally add the new fields to the GUI | There’s a lot of dependencies on the Balunga class from different parts of the system. About 40 different files have to be adjusted. The newly added field in the GUI has to be added in the database as well. 8 hours is too large to grasp completely. There will be more steps than the programmer thought of when estimating. | 12-16 hours |
2 days | It’s really quite a lot to code. I have to add some new tables to the database, a GUI for those and then the logic to read and write data to the tables. | 2 days of work is too large to overview for most developers. There will surely be things that are missed. Not just small things, but entire major pieces of functionality required will be forgotten during the estimation. | 5 days |
1 week | Ouch… that’s a HUGE task. I don’t have a clue on how to do it, but I can’t say I don’t know. One week should be enough, I hope, I really hope, but I can’t ask for more or they’ll think I’m not competent enough. | The task is way too large to get an understanding of for most programmers. It has to be sent back to an architect that can help splitting it in smaller parts and provide some direction how it should be solved. The architect might find a simple way to do it – or find that there’s a lot more work than expected. | 2-20 days |
Time estimation is hard. Every programmer has an interval where the estimations are realistic. Going below that interval means that the overhead (building, testing checking in code) was overlooked. Going above that interval means that the task is too large to overview.
For junior developers, the interval might even be non existing. They overlook the overhead while on the same time any non-trivial task is too large for them to overview. I’d say that an experienced developer should get anything between 0.5 hours and 24 hours right. Above 24 hours a breakdown is needed. It can be done in the head and then summed to 60 hours by the developer – but even someone experienced need to have manageable chunks to think of.
It is also important to understand that experience in programming is not the same as experience in estimation. A developer that’s not involved in the estimation process won’t get good at estimation. Also if actual time spent is never measured and compared to the estimates, there is no feedback to learn from.
Eventually, every programmer will have use for estimation skills. To prepare for that, decide when things are done for each task you take on. Then estimate the task before starting. Finally count the time spent and compare that to the estimate. Also compare what you actually had to do to your own definition of done. That way you’ll improve both your understanding of all the details involved in a task, as well as improve your estimation skills.
相关推荐
常用设计编程工具 NOVEX切削数据估算.zip常用设计编程工具 NOVEX切削数据估算.zip常用设计编程工具 NOVEX切削数据估算.zip常用设计编程工具 NOVEX切削数据估算.zip常用设计编程工具 NOVEX切削数据估算.zip常用设计...
《编程珠玑》是一本经典的计算机科学与编程书籍,作者是Jon Bentley。这本书以其独特的视角深入探讨了程序设计的艺术和技巧,旨在提升程序员的问题解决能力,优化算法,并提高代码效率。书中涵盖了一系列实用的编程...
基于深度学习的身高估算C++与C混合编程设计源码项目是一套集成了计算机视觉和机器学习技术的软件解决方案,旨在通过图像处理技术来估算人物身高。该项目采用了C++与C语言的混合编程技术,这在当代软件开发中是一种...
【财务预算】需要估算初期投资、运营成本、预期收入以及盈利预测,为投资者或银行提供财务可行性分析。 总结起来,"少儿编程创业计划书"是一份详尽的文档,它描绘了创业者对少儿编程教育市场的深入理解,以及如何...
2. **技术独立性**:功能点估算法不受特定开发技术的影响,而代码行估算法则需考虑具体的编程语言和技术栈。 3. **用户视角**:功能点估算法是从用户的角度出发,更关注软件的功能而非技术实现细节。而代码行估算法...
本文探讨了一种改进的分析编程算法在软件工程工作量估算中的应用。通过与Karner模型的比较,该算法显示出约40%的性能提升,并证明了其在校准用例点方法中的可行性。实验采用最小绝对偏差和随机子采样交叉验证评估...
这一特性极大地提高了工作效率,因为它使得程序员可以在生产线上进行其他工作的同时,对编程任务进行预处理和调试,避免了设备的闲置时间。 软件的主要功能包括: 1. **元件库管理**:JUKI软件提供了丰富的元件库...
选手需要估算出程序运行所需的时间和占用的内存,以应对不同规模的数据输入。 D. 调试与测试:选手在解决编程题目时,还需要有强大的调试和测试能力。正确理解题目、编写出没有bug的代码,以及能够针对测试用例进行...
这种实时编辑能力极大地提高了工作效率,减少了现场调试的时间。 4. **模拟测试**:软件通常配备模拟测试功能,让用户在实际操作前验证程序的正确性。通过模拟火灾场景,检查报警、联动等功能是否正常工作。 5. **...
1)全书涉及的所有源代码(包含完整代码和不完整代码[即:不含学生自己写的部分],学习时不需再次键盘输入无关代码,大幅节约时间) 2)全书使用的C++编程和编译软件包(用于本书示例代码编译调试,也是用于NOIP复赛...
《Windows图形编程》完全版是一本深入探讨在Windows操作系统环境下进行图形编程的权威指南。这本书主要涵盖了图形、多媒体和游戏开发的关键技术,旨在帮助开发者掌握创建动态、交互式应用程序所需的技能。 在...
这时我以前编制rs-232串口程序时收集的一些有关串口编程的硬件和软件技术资料,对于想学习串口编程的朋友比较实用的。里面讲述了有关串口的基本支持和用VB通信时的一些技巧和注意方法。声明:本资料来自互联网,版权...
《Java网络编程第三版》是Java开发者深入理解网络编程的重要参考资料。这本书主要涵盖了Java平台上的网络应用程序开发,从基础概念到高级技术,为读者提供了一套全面的学习路径。以下是本书中涉及的一些关键知识点:...
上海松江云安3208主机编程软件是一款专门针对消防系统的编程工具,它主要用于对消防设备进行逻辑编程,以确保整个消防系统能够按照预设的规则和需求正常运行。这款软件的重要特点是其支持串口通信,使得用户可以通过...
系统变量的使用章节,讲解了如何使用计时器来测量节拍时间,实现对程序效率的优化。此外,程序流程控制部分讲解了如何使用询问、分支以及循环结构来控制程序的执行流程,包括如何编写循环技术和等待函数。 KRL的...
2. **技术难度**:不同的技术架构、编程语言和开发平台会直接影响开发时间和成本。例如,复杂的算法设计、高性能系统优化或跨平台开发可能增加难度,从而提高成本。 3. **团队配置**:开发团队的规模、技能水平和...
为此,研究者们开发了多种估算方法,其中卡尔曼滤波(Kalman Filter, KF)算法及其变体——扩展卡尔曼滤波(Extended Kalman Filter, EKF)算法,在电池SOC估算中展现出了较高的准确性。 C语言作为传统且广泛使用的...
在编程方面,UEFI提供了丰富的接口供开发者使用,支持多种编程语言如C语言等,但通常使用C语言来编写UEFI程序。开发者可以在UEFI的基础上开发各种引导加载器、系统工具和驱动程序。 UEFI还允许开发者从操作系统中...