文档章节

这个项目要多久开发完成?

李朝强
 李朝强
发布于 2015/12/04 12:53
字数 1371
阅读 132
收藏 4

How long would this project take?

这个问题是我最常碰到的一个,也是我最难回答的一个。对这种问题最好的回答方式是用全职员工来推算天数。这非常容易,你只需要找出有多少个不重叠的 功能特征,然后每个人负责一个。一旦各个功能块被分成了不能再分的任务,你计算需要多少人天,这就是你的答案。你无论如何都不可能用比这更少的时间开发完 这个项目。

“一个女人生一个孩子要10个月,不论你再增加多少个女人来做这事,都不会缩短这个时间”

“只有当一个任务的完成可以分配多人,并且不需要他们之间相互交流合作的情况下能完成时,人和月才能互相替换。”

“往一个已经延迟的项目里添加程序员只会使项目进一步延迟”(因为项目中现有的人需要培训新来的人)

-《人月神话》

  不幸的是,大部分人只想知道一个项目需要多少时间完成。这实际是个伪命题,因为90%软件成本的产生是发生在软件发布之后。这些费用会产生于修复bug、增加欠缺的功能、性能的改进、对新平台进行支持(安卓就是一个大债主)或重写质量差的老代码来减少技术债务。即使是项目发布前,对于如何合适的处理每一种报错情况,这也是无法预先估计全的。从某种程度上,你就是被别人问了这样一个问题:“我有一个问题,我想解决它,但我无法说清问题是什么。请问解决这个问题需要多少时间?”

  尽管预估很难,但程序员最终要找到一种预估的方法。虽然无法知道一个确切的答案,但我有3种方法能大致估计出一个软件项目要花多少时间:

  1. 想要搞清楚一个事情需要多少时间完成,这最好的方法是找一个程序员已经完成的、相似的项目。对一些简单的网站和应用来说非常有效,或者那些使用标 准CRUD的项目也是适用。当项目小且简单时这种方法最好用。这种方法可以用在软件1.0版本时,但以后的版本就不行了,因为这时你跟相参照的项目开始慢 慢的产生差异,这时写的代码是你以前没有写过的。
  2. 我的好朋友、并且是以前的同事John Walker(不是这个John Walker) 喜欢用这种方法。把项目拆解成最小的任务。然后记录完成每个任务你认为可能需要多少小时、天、周、月。遵循这种原则,如果一个任务需要几小时,就是算成一 天,如果需要数天,就是算成一周,如果是数周,就算成一月。如果超过一个月,那你就无法知道需要多少时间了,或你根本不知道要做什么。
  3. 我有自己的预估方法,但事实上跟John的把任务拆分成最小的子任务的方法非常相似。我是以最坏的情况下每个最小单元需要的完成时间为标准。汇总,然后乘以4。再向上取舍到最近的素数,就算是对我的这种没谱的方法的讽刺吧。

  对于大型的、独特的项目,程序员几乎无法知道它需要多少时间开发。它就是像在问“需要花多少时间能找到治疗癌症的方法?”然而,大部分的管理部 门都拒绝接受这种答案,于是,程序员只好玩一些花招,先弄清楚老板们希望听到的时间,然后加入一些余地。还能有什么办法?通常都是超近路,这都是因为要去 追赶那个本不应该设置的最后期限。你需要明白,预估是困难的,需要运行计划上的变更。除非你的程序员能将任务拆分小于一个月的子任务,千万不要在软件发布 时间上做任何市场活动计划。

  这最后一件需要注意的事是,当你在一个现有的软件(比如2.0版,3.0版….)上增加新功能时,你需要追加20%用来对现有代码进行重写的时间(程序员称之为重构)。这是为了偿还技术债务,或为未来的行动铺路。人们以为Google是拿出20%的时间用来创新,但我敢打赌,其实这大部分是来偿还技术债务的。

  估计一件事情要花多少事情是非常难的,通常也是不可能的。虽然你曾在一些小项目上有成功的预测,但随着项目的发展你会感觉到越来越难。一个好的方法是给程序员留足额外的时间。很多年轻的程序员通常没有这方面的经验,所以,项目经理必须把他们估计出的时间乘以4。


本文转载自:http://kb.cnblogs.com/page/209853/

李朝强
粉丝 91
博文 297
码字总数 149962
作品 0
郑州
产品经理
私信 提问
技术上无法实现和还有多久能完成

我以前是一名程序员,后来也创过业,现在跟着小伙伴们继续在移动互联网这块辛苦的耕耘,也算是小有些心得和记忆(想想就觉得内牛满面),我就分享一下我的这些心得. 移动互联的发展和变化非常大,稍...

丁勒个东
2015/08/31
0
0
正在创业或准备创业的你如何组建技术团队?

深夜,一个人独自在公司听着音乐看着文章的标题在发呆,一个从来没有写过文章的我不知道怎么把文章写得更简单明了让大家看了所有收获及原意看完,很多人会有疑问,都不知道怎么写为什么要写呢...

程序员客栈
2016/05/23
103
0
web 开发面试时你应该提出的 10 个问题

Milecia McG 原作,授权 New Frontend 翻译。 在找工作的过程中,你到达了一个激动人心的阶段!约好了面试日期,做足了准备,按时参加了面试,整场面试十分顺利。然后进入了「你对我们公司有...

NewFrontendWeekly
07/30
0
0
有关android版 osc

@迷途d书童 你好,想跟你请教个问题:最近一直在学习你的android'版osc,我是个新手,想问一下做这种项目需要你个人,多久能完成?还有就是开发水平达到这种程度需要多久的开发经验?...

bemong
2012/11/21
888
0
Vue项目History模式404问题解决

本文主要解决Vue项目使用History模式发布到服务器Nginx上刷新页面404问题。(由于每个项目的情况都不尽相同,本方案已经完美解决本在所使用项目,具体情况可能还需要修改。) 1.项目背景分析...

dalaoyang
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

elasticsearch 6.x的基本dsl语句

本文使用的谷歌浏览器插件sense,链接如下sense插件(兼容es6.x版本) 查看集群状态 http://106.12.27.130:9200/_cat/health?v 绿色-一切都很好(集群功能齐全) 黄色——所有的数据都是可用...

长恭
24分钟前
9
0
Math对象的一些方法

<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> //圆周率 console.log(Math.PI) ......

zhengzhixiang
30分钟前
9
0
移动端的弹窗滚动禁止body滚动

本文转载于:专业的前端网站➼移动端的弹窗滚动禁止body滚动 前言 最近一个需求是弹窗展示列表,显然是需要一个滚动条的,而滚动到底部就会穿透到body滚动,而阻止默认行为是不行的,这样两个...

前端老手
53分钟前
15
0
设计模式 建造者模式和模板方法模式扩展篇

建造者模式和模板方法模式扩展篇 UML 与抽象工厂模式比较 本模式可以看出与抽象工厂非常类似,都是产生不同的产品,怎么区分这两种设计的使用场景呢 - 建造者模式关注的是基本方法的调...

木本本
58分钟前
18
0
CPU 读取cache、内存、磁盘性能

google 工程师Jeff Dean 首先在他关于分布式系统的ppt文档列出来的,到处被引用的很多。 1秒=10^3毫秒=10^6微妙=10^9纳秒=10^12皮秒 读 cache ns 级,读内存100 ns,从内存顺序读1MB 250,000...

SibylY
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部