`
coding1688
  • 浏览: 236833 次
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

 

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

  假定一个项目估算出来,一个人做需要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上的并行编程》一文,突然想到在项目中好像也存在这种并行计算的影子。该文说道“同步所带来的串行化开销是并行程序最大的性能杀手”,同样也可以说“沟通 所带来的时间成本开销是项目的最大进度杀手,但沟通是不可以省略的”。(当然,本文并不是否定团队协作完成项目,因为大多数项目都不可能一个人搞定:一是时间不允许,二是精力不允许,三是能力不允许,四是客户不允许,五是......,最大的原因是没有必要也没有能力一个人扛,钱是公司赚滴,身体是自己的哦

 

 

22
11
分享到:
评论
19 楼 donglin243870 2012-06-08  
有点意思?
18 楼 wandou 2012-06-06  
最大的问题在于,多人开发时,会互相扯皮。不要说哪个公司没有扯皮,每个公司都在扯皮。
17 楼 leonardo_dzh 2012-06-06  
mark!
16 楼 Mybeautiful 2012-06-06  
说的有理!
15 楼 skanion 2012-06-06  
说得对!!!!
14 楼 ayanami001 2012-06-06  
要架构NB。。。
13 楼 bluend1004 2012-06-06  
引用
没有必要也没有能力一个人扛,钱是公司赚滴,身体是自己的哦

精辟~
12 楼 yjc2020 2012-06-05  
架构设计的好,模块分工合理,接口定义清楚。多人开发速度可以提高。
11 楼 yjc2020 2012-06-05  
KimHo 写道
钱是公司赚滴,身体是自己的哦
顶这句
学会利用公司各种资源,改进工作效率才行



顶啊
10 楼 yjl6691088 2012-06-05  
钱是公司赚滴,身体是自己的哦
9 楼 alanlhy 2012-06-05  
各有利弊,并行该法最重要的是每个人都能有一个断层思想,你写的模块需要哪些参数,有需要输出哪些参数,这些 应该都要想好,以至于时间不会耗在模块之间的衔接上。。。当然还有一点是要理解透需求。。。
8 楼 wangyjx 2012-06-05  
用一个阶段的例子,给你九个女人,你也不能一个月生一个孩子
7 楼 leo_dream 2012-06-05  
rensanning 写道
引用
假定一个项目估算出来,一个人做需要12个月(客户哪能等那么久,黄花菜都凉了);那么增加到4个人来做,是不是就可以3个月来完成呢,因为总共12个人月嘛。答案是否定的。

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

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

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

当进度发生偏差时,项目经理肯定要采取措施,保证项目进展顺利。
但是阿姆达尔定律反映的是:增加人手并不能按照理想和预期的进展来大幅缩短工期,不是简单地增加一个人手,就能大幅缩短工期
6 楼 amonlei 2012-06-05  
公式所反映的因素,是次要因素,主要因素还是我说所说的,人不是机器,
5 楼 amonlei 2012-06-05  
太理论了。。。。。增加人手跟增加处理器节点不一样,培训、人员水平参差不齐。。。。
4 楼 facingSun 2012-06-05  
,身体是自己的哦
顶这句
学会利用公司各种资源,改进工作效率才行
KimHo 写道
钱是公司赚滴,身体是自己的哦
顶这句
学会利用公司各种资源,改进工作效率才行

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

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

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

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

是的,在项目中更多的是需要有效沟通,和合理的沟通机制
1 楼 KimHo 2012-06-04  
钱是公司赚滴,身体是自己的哦
顶这句
学会利用公司各种资源,改进工作效率才行

相关推荐

    企业项目计划进度管理甘特图excel模板.zip

    首先,甘特图的原理是通过条形图来展示项目的各个任务、阶段以及它们的起止时间,使团队成员能清晰地看到项目的整体进度和每个任务的状态。在Excel中制作甘特图,可以利用其内置的图表功能和数据管理工具,实现...

    项目进度管理系统(甘特图)

    项目管理是现代企业运营中不可或缺的一部分,而一个高效的项目进度管理系统则是确保项目顺利推进的关键工具。本文将深入探讨“项目进度管理系统(甘特图)”这一主题,解析其核心功能,并提供相关的实践指导。 一、...

    人手检测训练数据库

    这个名为"人手检测训练数据库"的资源是专为训练一个人手检测系统而设计的,它包含了大量的图像样本,以及与之配套的Matlab文件,这些文件详细标注了图像中人手的位置和大小信息,为机器学习模型提供了必要的标注数据...

    软件项目管理——失败案例分析

    该项目的失败原因可以归结为五个方面:缺乏合理的时间进度、不科学的估算技术、人员过多、缺乏跟踪和监督、意识到进度偏移时的不当反应。 首先,缺乏合理的时间进度是造成项目滞后的最主要原因。时间进度的合理性...

    Android自定义圆弧进度条(手动控制进度)

    在Android开发中,自定义视图是提升用户体验和实现独特设计的重要手段。本文将深入探讨如何在Android中创建一个自定义...自定义视图不仅能够提高应用的个性化程度,还能锻炼开发者对Android图形绘制和事件处理的理解。

    3_3人月神话软件项目

    在其他工程领域中,严格的进度追踪被视为常态,但在软件工程中,这种做法往往被忽视,直到项目偏离轨道,才试图通过增派人手来补救。然而,这种“用汽油灭火”的做法实际上会使问题变得更糟,因为增加的人员需要时间...

    项目经理常见问题解决思路4 --- 3个.pdf

    在项目管理实践中,项目经理常常会遇到客户要求压缩项目工期的情况,这可能源于甲方对于成本、进度等方面的压力,或者是对乙方项目管理能力的不信任。针对这种情况,项目经理需要有一套系统的应对策略,来妥善处理...

    java练手项目

    Java练手项目是针对初学者设计的一...通过实践这些Java练手项目,初学者不仅能巩固Java Web的基本概念,还能体验实际项目开发流程,提高解决问题的能力。不断练习和深入学习,将有助于成长为一名合格的Java Web开发者。

    项目管理资源配置PPT课件.pptx

    在实际操作中,如果资源有限,可能需要采取进度控制措施,比如增加资源投入(如雇佣更多油漆工)、延长工作时间、调整工作范围或提高工作效率,以加速项目的完成。 总之,有效的资源配置是项目管理中的核心策略,它...

    project2003 项目案例

    总结,"项目案例"这个压缩包为Project 2003的学习者提供了一手的实践资料,通过深入学习和理解这些案例,可以大大提高项目管理的专业素养,无论是在理论知识还是在实际操作上,都能得到显著提升。对于从事项目管理...

    基于opencv的人体手臂识别

    在计算机视觉领域,人体手臂识别是一项重要的技术,广泛应用于手势识别、人机交互以及智能安全监控等场景。OpenCV(开源计算机视觉库)是实现这一技术的常用工具,它提供了丰富的图像处理和机器学习功能。本项目专注...

    易语言人手必备三万源码+一千模块

    易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语法,降低了编程的门槛,使得更多非计算机专业的人也能轻松学习编程。"易语言人手必备三万源码+一千模块"是一个非常宝贵的资源集合,对于易语言的学习...

    项目经理工作总结怎么写

    作为项目经理,其实脑子里就是几样东西:做哪些事情、做到什么程度、怎么交货、手上的资源以及各个事情的优先级。所谓多快好省那是人类的梦想,这四个方面 都是相互矛盾的,属于典型的又要马儿跑,又要马儿不吃草的...

    项目管理-甘特图模板.rar

    在项目管理领域,甘特图是一种广泛使用的工具,它通过图形化的方式清晰地展示了项目的进度计划,帮助管理者有效地跟踪和控制项目进程。"项目管理-甘特图模板.rar" 文件提供了一套便捷的Excel模板,为项目管理初学者...

    100个php练手项目

    这些项目涵盖了从基础到进阶的各种技术点,包括但不限于: 1. **基础操作**:如变量、数据类型、控制结构(if...else, switch)、循环(for, while, do...while)以及函数的使用。 2. **字符串与数组处理**:涉及...

    图书馆管理系统项目计划书

    项目开发环境包括硬件环境:PC Server 服务器,人手一台 PC 机,软件环境:Tomcat+Maven+JDK+MySQL+Eclipse 及插件网络环境:100M 及以上速率局域网,TCP/IP 协议等。 项目团队组织结构包括开发组、测试组、文档组...

    win7系统下文件夹重命名提示"找不到该项目:的解决!

    在Windows 7操作系统中,有时用户在尝试对文件夹进行重命名、剪切或复制操作时,可能会遇到“找不到该项目”的错误提示。这个问题通常与Windows的文件系统或注册表设置有关,尤其是涉及到文件夹的元数据描述。在这个...

    C#工业控制——机械手项目实例.rar

    这个项目的核心在于利用软件技术对机械手的动作进行精确编程,使其能够执行点位插补、直线、画弧以及jump和moveOP等复杂运动。以下是关于这一主题的详细知识讲解: 1. **C#编程语言**:C#是微软公司推出的一种面向...

    系统软件项目实施计划方案

    - **用户方全程参与**:为了确保项目的顺利进行,用户方需成立由高层领导带领的项目小组,并积极参与到项目的各个阶段(如调研、设计、编码等)。这种做法不仅有助于培养用户方的技术团队,还能加强双方的沟通与协作...

Global site tag (gtag.js) - Google Analytics