专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 研发管理

为何增加人手并不能使项目进度提高到想象的程度

发布时间:2011-06-18 12:17:38 文章来源:www.iduyao.cn 采编人员:星星草
为什么增加人手并不能使项目进度提高到想象的程度?

 

为什么增加人手并不能使项目进度提高到想象的程度?

  假定一个项目估算出来,一个人做需要12个月(客户哪能等那么久,黄花菜都凉了);那么增加到4个人来做,是不是就可以3个月来完成呢,因为总共12个人月嘛。答案是否定的。

 

  因为,如果项目真是一个人来做,不存在沟通的问题,不会存在接口的问题,不会有这样的场景出现:

  项目经理:我们每周开个例会,讨论一下目前的进度;

  技术经理:来,讨论一下设计方案;

  程序员甲:这个需求好像不太明确,你自己弄清楚了再来找我;

  设计人员:方案有变,得重新讨论一下新方案;

  程序员乙:我写的程序没问题,你调用的数据有问题;

  ......

 

  其实,很多人一起做一个项目,有点类似于现在多核时代的并行处理系统,有个阿姆达尔定律对并行系统的处理能力给出了定量的计算公式:

 

百度百科 阿姆达尔定律 写道
  阿姆达尔曾致力于并行处理系统的研究。对于固定负载情况下描述并行处理效果的加速比s,阿姆达尔经过深入研究给出了如下公式:
  S=1/(a+(1-a)/n)
  其中,a为串行计算部分所占比例,n为并行处理结点个数。这样,当a=0时,最大加速比s=n;当a=1时,最小加速比s=1;当n→∞时,极限加速比s→ 1/a,这也就是加速比的上限。例如,若串行代码占整个代码的25%,则并行处理的总体性能不可能超过4。这一公式已被学术界所接受,并被称做“阿姆达尔定律”(Amdahl law)。

 

  项目由单个人完成,其实就是一种串行计算模式,一环套一环,一件事情接着一件事情完成;而增加到多个人来完成,就变成了并行计算,需要对工作任务进行并行化设计和分解,某些工作肯定是很难进行并行化的,而且工作任务需要同步,彼此协作才能完成这个项目。(有时候,系统的一些设计方式,就是为了方便多人协作,但往往会增加开销

 

  假定我们需要串行工作的部分是20%,那么上面一个人12个月完成的事情,在增加到4个人时,会提速多少呢?我们用阿姆达尔定律公式计算如下:

  S = 1 / (0.2 + (1-0.2) / 4) = 1 / (0.2 + 0.2) = 1 / 0.4 = 2.5 倍速

  意思是说,进度是原来的 2.5 倍,那么原来需要 12个月的,现在 需要

  T = 12 / 2.5 = 4.8 月

  比原来设想的3个月搞定的计划要落后差不多两个月时间。

 

  那,有人说,那我继续来增加人手,增加到 8个人来干,总能更快些了吧?我们重新来计算:

  S = 1 / (0.2 + (1-0.2) / 8) = 1 / (0.2 + 0.1) = 1 / 0.3 = 3.33 倍速

  时间

  T = 12 / 3.3 = 3.6 月

  也就是说,新增加的那4个人带来的效率,就是可能使项目再提前1个月完成。果真如此吗?

 

  我们前面假定a的值是20%,对于只是计算机执行的任务来说也许可以这样来假定,但对于由人组成的“并行”系统呢?计算机的并行系统,比如使用多核处理器,每核的处理能力相同;但每个人的能力都是由差别的,对于项目人员配置,总是技术好的带几个技术一般的(甚至是学徒工),因此每个人对提速的贡献是不同的。而且随着人员的增加,沟通的成本会急剧上升,由于模块之间接口增加,相应的缺陷也会急剧增加,因此 a 的值也会随着人员的增加而变大。我们假定在 8 个人参与项目的时候,a 的值估计为 30%,我们重新来计算:

  S = 1 / (0.3 + (1-0.3) / 8) = 2.58 倍速

  发现这个结果与4个人参与项目时差不多,也就是说新增加的这4个人,除了增加了人员成本之外,并没有带来项目效率上的提升。(也可以预计到,再增加人手,项目将会更慢更慢些

 

  这一点,毋庸置疑,增加人手并不能使项目进度加快到想象的速度,甚至相反,Brooks 在《人月神话》中早就提及(有人也把此称之为布鲁克斯定律):

 

Brooks 人月神话 写道
人月
  人月(英语:man-month)指的是“一个人要花几个月”才能完成软件开发的单位,通常用来评估一件软件项目的大小。以成本会计(cost accounting)为基础的进度预估技术,使我们误把工作量和项目进度混为一谈,人月是个危险并很容易就遭到误解的迷思(myth),因为它假设人力和工时可以互换。
Brooks法则
  在一个进度已经落后的软件项目中增加人手,只会让它更加落后。根据Brooks法则,增加人员到一个已经延误的项目里,等于是火上加油。除非你可以把工作区分,让新进人员可在不影响他人工作的状况下有所贡献。
  把工作切分给更多人做将造成额外的沟通(communication)代价——训练和相互的交流(intercommunication)。欲增加软件项目的人手,总共必须付出的代价可分为三方面:工作重新切分本身所造成的混乱与额外工作量、新进人员的训练、新增加的相互交流。

 

 

  网上也有人写了文章来讨论“布鲁克斯定律”,比如:

  柳记 浅谈软件开发定律系列之布鲁克斯定律 http://eilfei2000.blog.51cto.com/2956473/738324

 

  下面的文章也很不错:做一个艺术品,只有一个人才可以做好。规模庞大的工程,需要多个人来完成。

  云风的Blog 软件项目需要很多人一起完成可能是一个骗局 http://blog.codingnow.com/2011/05/solo.html

  关于分工合作 http://blog.codingnow.com/2012/01/_oeouoeie.html

 

  PS:为什么会写这么一篇文章呢?因为今天刚好看到最新的《程序员》杂志上的《1024核CPU上的并行编程》一文,突然想到在项目中好像也存在这种并行计算的影子。该文说道“同步所带来的串行化开销是并行程序最大的性能杀手”,同样也可以说“沟通 所带来的时间成本开销是项目的最大进度杀手,但沟通是不可以省略的”。(当然,本文并不是否定团队协作完成项目,因为大多数项目都不可能一个人搞定:一是时间不允许,二是精力不允许,三是能力不允许,四是客户不允许,五是......,最大的原因是没有必要也没有能力一个人扛,钱是公司赚滴,身体是自己的哦

 

 

1 楼 KimHo 2012-06-04  
钱是公司赚滴,身体是自己的哦
顶这句
学会利用公司各种资源,改进工作效率才行
2 楼 selvemen 2012-06-04  
KimHo 写道
钱是公司赚滴,身体是自己的哦
顶这句
学会利用公司各种资源,改进工作效率才行

是的,在项目中更多的是需要有效沟通,和合理的沟通机制
3 楼 rensanning 2012-06-04  
引用
假定一个项目估算出来,一个人做需要12个月(客户哪能等那么久,黄花菜都凉了);那么增加到4个人来做,是不是就可以3个月来完成呢,因为总共12个人月嘛。答案是否定的。

你的这个假设太极端了,任何项目经理都不可能在只有1个人的前提下,敢做预算来启动一个项目。

PMBOK认为当进度发生偏差时,有两个方法可以用来挽回:赶工和快速跟进。
赶工就是你这里说的加人手,通过增加资源来加快关键路径上的活动从而缩短工期。当然赶工就会增加风险,增加成本。
快速跟进是将预定按顺序执行的活动并行执行从而缩短工期。它所带来的风险是:返工。

任何补救措施都会有风险,不可避免,主要在于项目经理如何降低风险,促使项目顺利进展!
4 楼 facingSun 2012-06-05  
,身体是自己的哦
顶这句
学会利用公司各种资源,改进工作效率才行
KimHo 写道
钱是公司赚滴,身体是自己的哦
顶这句
学会利用公司各种资源,改进工作效率才行

得学~~
5 楼 amonlei 2012-06-05  
太理论了。。。。。增加人手跟增加处理器节点不一样,培训、人员水平参差不齐。。。。
6 楼 amonlei 2012-06-05  
公式所反映的因素,是次要因素,主要因素还是我说所说的,人不是机器,
7 楼 leo_dream 2012-06-05  
rensanning 写道
引用
假定一个项目估算出来,一个人做需要12个月(客户哪能等那么久,黄花菜都凉了);那么增加到4个人来做,是不是就可以3个月来完成呢,因为总共12个人月嘛。答案是否定的。

你的这个假设太极端了,任何项目经理都不可能在只有1个人的前提下,敢做预算来启动一个项目。

PMBOK认为当进度发生偏差时,有两个方法可以用来挽回:赶工和快速跟进。
赶工就是你这里说的加人手,通过增加资源来加快关键路径上的活动从而缩短工期。当然赶工就会增加风险,增加成本。
快速跟进是将预定按顺序执行的活动并行执行从而缩短工期。它所带来的风险是:返工。

任何补救措施都会有风险,不可避免,主要在于项目经理如何降低风险,促使项目顺利进展!

当进度发生偏差时,项目经理肯定要采取措施,保证项目进展顺利。
但是阿姆达尔定律反映的是:增加人手并不能按照理想和预期的进展来大幅缩短工期,不是简单地增加一个人手,就能大幅缩短工期
8 楼 wangyjx 2012-06-05  
用一个阶段的例子,给你九个女人,你也不能一个月生一个孩子
9 楼 alanlhy 2012-06-05  
各有利弊,并行该法最重要的是每个人都能有一个断层思想,你写的模块需要哪些参数,有需要输出哪些参数,这些 应该都要想好,以至于时间不会耗在模块之间的衔接上。。。当然还有一点是要理解透需求。。。
10 楼 yjl6691088 2012-06-05  
钱是公司赚滴,身体是自己的哦
11 楼 yjc2020 2012-06-05  
KimHo 写道
钱是公司赚滴,身体是自己的哦
顶这句
学会利用公司各种资源,改进工作效率才行



顶啊
12 楼 yjc2020 2012-06-05  
架构设计的好,模块分工合理,接口定义清楚。多人开发速度可以提高。
13 楼 bluend1004 2012-06-06  
引用
没有必要也没有能力一个人扛,钱是公司赚滴,身体是自己的哦

精辟~
14 楼 ayanami001 2012-06-06  
要架构NB。。。
15 楼 skanion 2012-06-06  
说得对!!!!
16 楼 Mybeautiful 2012-06-06  
说的有理!
17 楼 leonardo_dzh 2012-06-06  
mark!
18 楼 wandou 2012-06-06  
最大的问题在于,多人开发时,会互相扯皮。不要说哪个公司没有扯皮,每个公司都在扯皮。
19 楼 donglin243870 2012-06-08  
有点意思?
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: