为什么增加人手并不能使项目进度提高到想象的程度?
假定一个项目估算出来,一个人做需要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上的并行编程》一文,突然想到在项目中好像也存在这种并行计算的影子。该文说道“同步所带来的串行化开销是并行程序最大的性能杀手”,同样也可以说“沟通 所带来的时间成本开销是项目的最大进度杀手,但沟通是不可以省略的”。(当然,本文并不是否定团队协作完成项目,因为大多数项目都不可能一个人搞定:一是时间不允许,二是精力不允许,三是能力不允许,四是客户不允许,五是......,最大的原因是没有必要也没有能力一个人扛,钱是公司赚滴,身体是自己的哦)
分享到:
相关推荐
软件项目进度表:协调与并行提高工作质量 在软件项目管理工作中,对软件项目的进度安排有时比对软件成本的估算要求更高。成本的增加可以通过提高产品定价或通过大批量销售得到补偿,而项目进度安排不当会引起顾客...
除了保证顺利的工作进度外,它还为项目经理提供了机会,可以为强制性的补救措施确定预警信号,以使项目按计划进行并按预算进行。 但是,相关的障碍会抑制实现对施工进度进行准确评估的好处。 这项研究旨在确定,...
生产项目进度控制图表(手动设置甘特图)
ESArcProgressView, 一个在 苹果手表(Apple Watch) 项目中使用的进度视图 ESArcProgressView 一个在 苹果手表(Apple Watch) 项目中使用的进度视图示例 安装 Cocoapodspod 'ESArcProgressView', '~> 1.4'手动
“学海拾珠”系列之三十二:基金换手提高能否增加收益?
20210301-华安证券-“学海拾珠”系列之三十二:基金换手提高能否增加收益?.pdf
内部资料: 2021年5月信息系统项目管理师题目书--人手一本.pdf
IT项目管理,项目经理人手必备资料。希望可以给您很好的帮助
servlet+jsp练手小项目,适合初学者进行项目的练手,可以帮助我们熟悉servlet+jsp的项目流程,掌握转发,重定向,路径等问题,有助于后面框架的学习,而且项目并不复杂,主要是锻炼大家的思路,让我们可以熟悉servlet...
mysql练手项目, mysql 项目实战
Android手动控制进度的自定义圆弧进度条,可通过拖动或者按钮控制进度
java练手小项目
本课程讲解了在Windows系统测试环境和Linux系统测试环境下搭建练手项目,本课程以开源JEECMS项目为实例,并且屏蔽了前端验证码,可以对项目开展性能测试、压力测试、安全测试、功能测试等,非常适合性能测试爱好者、...
人手检测系统的训练图像集,其中Matlab文件中详细标注了人手出现的位置和大小,训练后的系统可以很好的检测出人手
作为项目经理,其实脑子里就是几样东西:做哪些事情、做到什么程度、怎么交货、手上的资源以及各个事情的优先级。所谓多快好省那是人类的梦想,这四个方面 都是相互矛盾的,属于典型的又要马儿跑,又要马儿不吃草的...
承担的工作不仅仅是写代码,通常包括了需求调研分析,系统设计,第三方对接等等一系列工作,并不是很多外行人想象那样,对着电脑敲一通代码,系统就能出来了。 也许有人的人会说,不能完全取代程序员,但是能提高...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、...基于Taptap评价数据集分析手游用户对中国移动游戏产业的满意程度(源码+项目说明).zip
爬虫练手项目,爬取百度贴吧,并保存为html
从网上收集的关于javaweb项目的word 文档,是给java初学者练手的小项目一共四个 有三个可以用java写