阅读更多

10顶
0踩

编程语言

原创新闻 为什么开发人员不能估算时间?

2011-05-06 09:19 by 见习编辑 jobbole 评论(11) 有9185人浏览

  编者按: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》一书吧。

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

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





  译文出处:伯乐在线 - 职场博客 - 程序员
  译文链接:http://www.jobbole.com/entry.php/744

  原文:Ashley Moran  文章推荐:关关  翻译:伯乐在线 敏捷翻译 - 高志翔

  如需转载,但请注明原文/译文出处、译文超链接和译者等信息,否则视为侵权,谢谢合作!

  • 大小: 16.4 KB
来自: 伯乐
10
0
评论 共 11 条 请登录后发表评论
11 楼 陈修恒 2011-05-13 17:24
“经验法则:接受开发人员的估算意见,但是要在两倍的基础上再加一点时间”
↑同意
10 楼 wxn_yxm 2011-05-10 11:27
我们的经验是2.2-3之间
9 楼 achun 2011-05-09 14:13
开发人员是科技的动力,马是马车的原始动力,要让马跑的快,你可以抽鞭子,对开发人员也要抽鞭子么?开发人员付出的要比得到的多,科技的影响是长远的。
袁隆平先生是个科技人员,他付出的远比他得到的多,他创造的比他付出的更多。
你要吃饭么?袁先生给了帮助,造福于千秋万代。
8 楼 云和山的彼端 2011-05-09 11:12
TeamLeader给开发人员的估算时间乘以三报给项目经理,项目经理乘以三报给客户。
7 楼 snowflate_summer 2011-05-09 10:30
我们公司时间都不是开发人员估算的,而是项目经理估算的,这个怎么办?
6 楼 lib 2011-05-09 09:00
按照你的进度时间再乘以1.5至2的系数,应该可以满足。
5 楼 sunrise353 2011-05-08 22:24
估算时间的一倍在多一段时间,还是合适的。不然加班真是要累死啦。。。。
4 楼 stoneskin 2011-05-08 10:49
有道理。。在发现自已对项目时间的估计总是过少后,我都是会多报一倍时间。。
3 楼 181054867 2011-05-07 13:08
通常都是个大概,这是上司希望你加班的信号
2 楼 aninfeel 2011-05-07 09:49
AllenZhang 写道
本文充分揭示了农奴制度的先进性,因为时间从来就不是由开发人员估算的。

干的是领导的活,拿到是小工的工资。
1 楼 AllenZhang 2011-05-06 14:22
本文充分揭示了农奴制度的先进性,因为时间从来就不是由开发人员估算的。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • AI简繁转换脚本.zip

    选中文本,可将简体的文字转换为繁体 。脚本下载后解压文件放到软件安装目录的Adobe Illustrator 的Presets\zh_CN\脚本,文件夹里面,使用方法:选中你文档里的文字,点击 文件-脚本调用。使用方便。

  • js 实现繁体和简体之间的转换

    div class="language">                     a name="gb2big5" id="gb2big5">繁體中文 a>                     script type="text/javascript" language ="Javascript" src="js/gb2big5.Js">script>           

  • vue项目的简体繁体切换

    小程序响应拦截 参考文档 Mon 06Mon 13已完成 进行中 计划中 现有任务Adding GANTT diagram functionality to mermaid

  • js 实现汉字简体和繁体之间的互相转换

    目前,使用繁体字的地区有中国的台湾地区、香港特别行政区和澳门特别行政区,汉字文化圈诸国,新加坡以及马来西亚等海外华人社区多为繁简体并存,中国内地在文物古迹、姓氏异体字、书法篆刻、手书题词、特殊需要等情况下保留或使用繁体字。繁体字,也称繁体中文,欧美各国称之为传统中文(Traditional Chinese),一般是指汉字简化运动被简化字所代替的汉字,有时也指汉字简化运动之前的整个汉字楷书、隶书书写系统。目前,简体字的使用地区包括中国大陆,联合国,马来西亚,新加坡,日本,韩国,朝鲜,以及国际中文教育中。

  • JavaScript实现网页简繁体转换的完整方法

    本文还有配套的精品资源,点击获取 简介:在面向两岸三地用户的多语言环境中,网页的繁体与简体转换需求尤为重要。本文介绍如何通过JavaScript和相关文件实现简繁体转换功能,包括字典查找、字符替换等原理,并探讨在服务器端使用PHP进行转换的可能方法。同时,文章强调了在实际开发中需要注意的兼容性、效率、准确性、用户体验和安全性问题。 1. JavaScript繁简体...

  • nodejs 遍历文件夹改变语言,目前是简体改繁体

    最好遍历文件的时候把依赖文件删除或者移开,否则可能会导致运行时间比较长。主要是引用opencc和nodejs的读写操作的这库实现了这个功能。

  • 使用JS实现对页面的繁体简体翻译转换

    提示:如果发现有些没有翻译到的繁体简体,可以在js里面添加,要注意!!!加到对应的位置复制粘贴来用就ok,如果需要好看一点就修饰他的CSS吧~

  • js网页繁体简体转换(备忘)

    用法:非得加上html头 utf-8编码 其它编码无测试 head 中引用 <script language='javascript' src='zh.js'></script> 再把以下代码放到合试的地方 <a href="javascript:zh_tran('s');" class="zh_click" id="zh_click_s"&gt...

  • 使用nodejs读取简体语言json文件并生成繁体语言json文件

    有时需要为项目准备不同语言的文件供用户选择,简体和繁体算是常见的需求了。比如我们有如下的简体中文文件:{ "hello":"你好", "业务":"业务" }value值为我们最终要显示在浏览器中的内容。翻译文件主要借鉴于此网站:http://www.aies.cn/接下来可以写我们的node程序了。可以单独编写一个繁体化模块:var fs = require("fs"); funct

  • 简单的文件内容繁简体甄别

    在做国际化的时候, 很多旧文件中的简体或者繁体 需要优化, 一个一个找很麻烦, 于是在查阅资料后, 自己编写了一个简单的工具 废话不多说, 上码子! -- 插件: mui-ui , vue.js , jquery 項目是 hbuildx 直接創建的 change_lang.js /** * 繁簡體對照表 字體是一一對應的 */ var zh_s = '皑蔼碍爱翱袄...

  • 简体与繁体中文转换

    //模仿语言包式的简繁转换功能插件!//Edited by Stardy --2005-04-16 , Web :http://www.stardy.com , QQ:2885465var Default_isFT = 0  //默认是否繁体,0-简体,1-繁体var StranIt_Delay = 50 //翻译延时毫秒(设这个的目的是让网页先流畅的显现出来)//-------代码开始,

  • JS 繁简转换优化

    前已有博客,可优化,以充实转换表、优化查找比对效率。

  • 软件开发基于JavaScript实现快速转换文本语言(繁体中文和简体中文)_javascript技巧

    软件开发基于JavaScript实现快速转换文本语言(繁体中文和简体中文)_javascript技巧 一般商业网站都有一个语言的需求,就是为了照顾使用正体中文的国人,会特地提供一个切换到正体中文的选项(或曰“繁体中文”)。传统做法是在服务端完成的,即通过某些控件或者过滤器转换文本语言。这里笔者介绍一种简单可行的方法,不是在服务端而是利用前端的 JavaScript 就可以切换正体中文。 如下图,我们把切换按钮放在页脚(当然你也可以放置在“导航”或者其他更醒目的位置)。 由于页面假设设定均使用Un

  • 对JavaScript繁简字切换的小改进

    繁简即时切换脚本属于比较普遍常见的脚本,多应用于港澳台的公司企业网站上,一些面向大陆服务的站点也提供正体、简体的页面切换(“正体”一词乃台湾方面的新说法)。在前人梳理的经验上,推荐这个 StranBody 方案。此方案是从客户端出发而考虑,是直接基于 JavaScript 对浏览器 DOM 内容修改的纯客户端方案,因此具有不依赖服务端转换,减轻服务端运算符合等的好处。当然,如果用户关闭掉 Java

  • js 实现简繁体互相转换(字符串)

    实现逻辑非常简单,就是循环一个字符串,看看需不需要进行转换。 首先是简化函数: function charPYStr(){ return '锕皑蔼碍爱嗳嫒瑷暧霭谙铵鹌肮袄奥媪骜鳌坝罢钯摆败呗颁办绊钣帮绑镑谤剥饱宝报鲍鸨龅辈贝钡狈备惫鹎贲锛绷笔毕毙币闭荜哔滗铋筚跸边编贬变辩辫苄缏笾标骠飑飙镖镳鳔鳖别瘪濒滨宾摈傧缤槟殡膑镔髌鬓饼禀拨钵铂驳饽钹鹁补钸财参蚕残惭惨灿骖黪苍舱仓沧厕侧册测恻层诧锸侪钗搀掺蝉馋谗缠铲产阐颤冁谄谶蒇忏婵骣觇禅镡场尝长偿肠厂畅伥苌怅阊鲳钞车彻砗尘陈衬伧谌榇碜龀撑称惩诚骋枨柽铖铛痴迟驰耻齿

  • JS简繁体互转

    可以中文简体和繁体相互转译,是一个全面的js代码

  • 繁体与简体互相转换

    繁体与简体的转换,目前常用的工具包是opencc。通过上网搜索与研究测试。目前有两种方式进行转换,一种是python调用opencc的形式,一种是linux内直接命令行操作。通过两种方式的测评,python下运行速度极慢,linux下转换速度相当快。一、linux安装与使用:https://segmentfault.com/a/1190000010122544二、windows中python下安装...

  • cn-chars:一个对简体和繁体汉字相互转化的Node.js模块

    cn-chars 一个对简体和繁体汉字相互转化的Node.js模块 使用 var cnchars = require ( 'cn-chars' ) ; 接口 toSimplifiedChar(cnChar) 转化输入的汉字cnChar为简体形式。若输入的汉字为简体形式,则输出原汉字;若输入的汉字无相应简体形式,则输出原汉字。函数只接受一个汉字的输入,多余汉字将被忽略。 toTraditionalChar(cnChar) 转化输入的汉字cnChar为繁体形式。若输入的汉字为繁体形式,则输出原汉字;若输入的汉字无相应繁体形式,则输出原汉字。函数只接受一个汉字的输入,多余汉字将被忽略。 示例 var cnchars = require ( 'cn-chars' ) ; var cnChar = '话' ; var result = cnchars . toTraditionalChar (

  • 利用javascript实现简体与繁体的转换

    这段代码只是利用Javascript实现了简繁体的相互转化,因为仅操作当前页面,无刷新所以速度快,转换过程流畅. 话不多说上正餐: var Default_isFT = 0 //默认是否繁体,0-简体,1-繁体 var StranIt_Delay = 50 //翻译延时毫秒(设这个的目的是让网页先流畅的显现出来) //-------代码开始,以下别改------- //转换文本 function StranText(txt, toFT, chgTxt) { if (txt == "" || txt

  • 转个简单版JS 简体转繁体

    NULL 博文链接:https://hlee.iteye.com/blog/1117573

Global site tag (gtag.js) - Google Analytics