`
再逢山水
  • 浏览: 153721 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

为什么开发人员不能估算时间?

阅读更多

导读:原文作者ley Moran发表的一篇博客《Why Can't Developers Estimate Time?》。译文由伯乐在线整理编译成《为什么开发人员不能估算时间?》,Ashley Moran是一名软件开发人员,最近在其关注的邮件列表中看到了一些有趣的观点,所以他做出了相应回应。

 

以下是文章内容:

一些有趣的观点出现在我所关注的邮件列表中。下面是其中的一些。原始评论将以蓝色字体显示,下面是我的回应。这不是对相关问题的彻底看法,只是我所想到的一些相关的回应。注:我已加以编辑,以改善流程(flow),并加以阐述。

在软件开发中,我们不能对任何单独的任务作出时间的估算,是由于工作性质是创造新知识。

 

软件开发的目标是实现流程(Process)自动化。只要一个流程实现了自动化,便可以针对大多数情况在可预期的时间内反复运行。源代码就好像生产蓝图,而电脑就好像生产工厂,输入(数据)好像原材料,输入(数据)就像制成品。而使用另一种类比,星巴克可以重复迅速地制作咖啡的原因就在于他们花费很多时间在流程的设计上,使得该流程成为了一个复杂且昂贵的作业。星巴克的个人经营者不必再去重新研究该流程,只需买下此蓝图便可。我会让各位读者练习推断我对COSTA咖啡制作过程的意见。

 

事实上,不可预期的开发时间并不总是坏事,因为它所带来的价值也是如此。一款成功的软件可以制造或节省的价值远超过其成本。Tom DeMarco之所以赞成关注高成本项目,正是基于这个原因。能注意到这点,需要一种价值增长的理念,而不是广泛而又普遍的成本控制理念。这是很重要的问题。

 

目前为止,Don Reinertsen的《Principles of Product Development Flow/产品开发流程原理》,是我所看过的对可变性与为价值而开发的最好解释,该原理在日常流程管理中大量使用PatchSpace Bible。我所说的“目前为止最好的”是指超越我所看过的其他解释一个档次,不包括约束理论(Theory of Constraints)的著作。

这就是我的最近开发项目的数据。直方图中的R表示5个小时的量:横轴表示的是User Case的持续时间——0-5小时,5-10小时,等等;纵轴表示的是占此时续时间的User Case数量。我以90分钟为间隔,工作并将其记录在Wave上,这样我们就能清楚地知道任务持续时间。

 

我们这么做既为了与客户沟通,又为了账单。结果是:我们的开发时间的可预知程度跟放射性衰变一样,但却是始终如一的辐射。可估计的相关数据少得可怜,我拒绝估计个别任务的的时间,因为这会产生误导,但是我们有足够数据进行合计。

经验法则:接受开发人员的估算意见,但是要在两倍的基础上再加一点时间

两倍加一点法则很有趣。经理开始运用此法则时,多长时间他会提前完成一次?我们通常太过注重超支。如果一个团队未能提前完成任务的一半。他就要增加估计时间,这意味着拿开发周期与项目进度做交易。周期往往比可预测性更重要,因为它意味着更早地进入市场。同样看看Reinertsen的作品,数字会以与数量级不同的规律出现。

并且,这是关键链(Critical Chain)项目管理的基础,这会将项目估计时间二等分,把剩余时间(添补单独项目)放在最后,作为“项目缓冲时间”。这就意味着帕金森定律不会导致单独任务无规律地扩张。尽管我不觉得关键链是软件行业的一个合适的方法,但作为开发工作的内容,它可作为反馈与学习提高的工具,可明显改善计划。

通常人们只是估计时间

不仅开发人员估计不好。每个人都会遇到临场发挥(即兴应付)的问题,因为那是他们没从未做过的事,所以在完成之前,他们无法准确地作出判断。

作为一个群体,我们应避免这一点。不知道就是不知道,一定要说出来。相比于无法估计,那些能够定期了解任务进度,从而意识到风险(并选择继续投资)的客户,会给予团队更多的信任。这是事实!我是认真的,不用只相信我的话,看看David Anderson的《Kanban》一书吧。

估算是一个很重要的技能,应该在初级开发人员中广泛教学

我提出了一个替换方案:我们需要教给初级开发人员的是完成的意义。如果估计问题已经够糟糕了,在一些不确定的点找出未完成的某些东西(也许是匆忙地兑现承诺…我的意思是估计判断!)不仅会打乱时间的估计,还会打乱所进行的工作的日程。这是常有的事,并且会给一个开发团队的地位造成重大损失。

分享到:
评论

相关推荐

    软件开发成本估算.pdf

    Putnam模型是1978年Putnam提出的一种动态多变量模型,公式为L = Ck \* K^1/3 \* td^4/3,其中L为源代码行数,K为整个开发过程所花费工作量,td为开发持续时间,Ck为技术状态常数。从上述方程加以变换可以得到估算...

    火星人敏捷开发早期估算

    有没有一种方法,不仅能在早期做估算,还能把估算结果直接演进为敏捷开发中的史诗故事和用户故事? 有没有一种方法,不仅能让开发者意识到代码的不断增长,也能让客户和领导同步地理解并认可需求的蔓延? 有没有一种...

    软件开发成本估算.doc

    其中,MM 为开发工作量(以人月计),KDSI 为源指令条数,不包括注释。r, c, a, b 为经验常数,取决于项目的总体类型。 COO 模型可以分为三级:基本 COO 模型、中间 COO 模型和详细 COO 模型。基本 COO 模型是一个...

    软件开发成本估算的经验模.pptx

    中间 COCOMO 模型在用 LOC 为自变量的函数计算软件开发工作量的基础上,用涉及产品、硬件、人员、项目等方面的影响因素调整工作量估算。详细 COCOMO 模型包括中间 COCOMO 模型的所有特性,但用上述各种影响因素调整...

    UPS电池容量和放电时间的估算

    * UPS 电池容量和放电时间的估算可以帮助维护人员监控和维护 UPS 系统的运行状态。 UPS 电池容量和放电时间的估算是 UPS 系统设计和应用的重要组成部分,对 UPS 系统的性能和可靠性具有重要影响。

    软件估算技术

    软件成本估算技术,根据软件的开发内容、开发工具、开发人员等因素对需求调研、程序设计、编码、测试等整个开发过程所花费的时间及工作量做的预测。

    信息化项目软件开发的费用测算规范方案.pdf

    信息化项目软件开发费用测算...本标准规定了信息化项目软件开发费用测算的方法及过程,包括软件开发费用的构成、软件规模、工作量、费用及工期测算方法及过程,为软件开发项目的成本估算和时间表提供了一个科学的方法。

    软工概论-第20章软件项目估算ppt课件.ppt

    软件项目估算的目的是提供一个能使项目管理人员对项目范围、成本、进度、风险等进行合理的估算和管理的框架。为了实现这个目标,软件项目估算需要考虑多方面的因素,包括项目范围、成本、进度、风险等。 软件项目...

    吴佩明-成本模型分析和估算1

    每种环境因素都有其对应的权重值,例如开发人员对开发流程的熟悉度权重为1等。 通过对Actor的权重计算、Use Case的权重计算、技术复杂度计算和环境复杂度计算,可以得到项目的UCP(Use Case Point)值,例如78.4。...

    三种项目成本估算方法

    进度计划是从时间的角度对项目进行规划,而成本估算则是从费用的角度对项目进行规划。这里的费用应理解为一个抽象概念,它可以是工时、材料或人员等。

    项目管理-2-软件工作量估算.ppt

    复杂性是指相同KLOC的两个程序花费的时间将会不同,因而不能简单地应用KLOC或SLOC,而要根据复杂性进行修正。 基于承诺的估计是一种新的软件工作量估算方法,它要求每个开发者作出进度承诺而非进度估算。这方法可以...

    软件估算,很好的一篇文档

    根据软件的开发内容,开发工具,开发人员等因素对需求调研,程序设计,编码,测试等整个开发过程所花费的时间及工作量做的预测

    与老大的交谈——估算项目时间

    3、如果开发人员也不增加,时间也不延长,那只能削减产品功能了。现在的主要问题是沟通问题,怎样才能让产品信服,愿意把时间延长呢?那我们就需要把需求罗列出来,让产品看到我们要做这么多的事情,自然就愿意给你...

    论文研究 - 软件成本估算技术调查

    对于成功的软件项目,准确预测成本,时间和工作量是非常重要的任务。 本文介绍了用于软件成本估算的不同模型的系统综述,其中包括算法方法,非算法方法和面向学习的方法。 本文中考虑的模型既包括传统方法,也包括...

    基于扩展卡尔曼滤波器的锂电池SOC估算仿真研究.pdf

    SOC 估算是电池管理系统(BMS)的重要功能之一,能够为使用人员或智能设备提供一个准确的剩余电量参考,防止过充、过放对电池组带来的损害。目前,常用的 SOC 估算方法有放电实验法、安时积分法、开路电压法、神经...

    软件项目进度与成本管理.ppt

    软件项目进度与成本管理需要解决两个主要问题:为什么软件总是无法按照预期进度完成,软件的开发到底需要多少成本?这两个问题是软件项目进度与成本管理的核心问题。 影响软件项目进度的因素包括需求不断变更、开发...

    2021项目经理分享会-时间管理v1.2.pptx

    本期分享会以项目时间管理的六个阶段为主线,分别介绍活动定义、活动排序、资源估算、历时估算、计划制定、进度控制的方法与经验,及如何在项目中实践。其中要点如:1)利用WBS管好项目的人与事; 2)前导图法排序活动;...

    (完整版)1软件开发计划书模板.doc

    本软件开发计划书模板为软件开发项目提供了一个详细和系统的规划和管理方法,旨在确保软件开发项目的成功实施。 知识点: 1. 软件开发计划书模板是软件开发项目的核心文档。 2. 软件开发计划书模板涵盖了软件开发...

    软件项目管理案例教程-软件项目管理案例教程总结WORD范本模板.docx

    根据用户的要求,系统采用 B/S 结构,公司的 JSP+SQL Server 技术比较成熟,以前成功完成过类似项目,根据工作说明书(Statement Of Work,SOW)的要求,基本上需要 2~3 个开发人员,2 个月左右的开发时间,大约 4~6...

Global site tag (gtag.js) - Google Analytics