软件项目最大的特点就是不确定性。这是指软件项目不可能完全在规定的时间内,按照规定的预算,由规定的人员完成。无论之前你做了多么精细的项目计划,那也不过是一种预测,是一种对未来的估计和假设,在执行的过程中肯定会有偏差。这些偏差就是所谓的风险。即便你考虑了再多的风险,也肯定会出现一些意料之外的风险。因为这种不确定性,导致了计划赶不上变化,也导致了平时的工作中的2种倾向:1、变化太快,索性不制定计划。2、过度强调计划,往往要将项目中非常琐碎的事情都考虑的非常清楚之后再启动项目。第一种倾向,在我做过的项目里占了2/5,都是在项目开始时制定一份计划,项目一启动就丢到一边,项目过程中完全不理会,个人能力强的PM大致还能把握方向和进度,但是问他之前做了些什么额外的工作时,往往回答不出来,等到项目结束,再把当初的计划改改,做个大概的统计也就了事。
而项目过程中的一系列的常见问题也是导致项目失败的原因(以下的原因是我做过的项目中总结出来的影响最大的5点,按照影响程度的严重性,从高到低排列。)
1、项目经理的管理能力不足
项目经理的管理能力不足之所以放在第一位,我想大家都清楚原因。项目经理作为一个项目的灵魂,对于进度的把控、团队成员的组建以及积极性的调动、成本的控制、和客户的沟通、需求变更的把控、重大事情的决策。。。这些任何一个都能左右一个项目是否成功。我遇到的几个项目中都是由于项目经理的能力不够,直接导致项目失败,而且使得项目成员在项目过程中也疲惫不堪,怨声载道。其实现在很多项目的项目经理都是由技术骨干兼任,因此他们往往习惯于关注技术开发,而忽视了项目管理工作。项目,本身就是为了盈利而生,所以不排斥项目经理兼任项目技术主管或业务咨询,但是必须要有将项目管理工作区分开来的意识和责任感。如果没有这样的意识,就会造成疏忽项目计划的制定、上下左右的沟通、专业资源的分配、项目组织的调整、成本的控制、风险分析等。项目管理工作的忽视,必然导致项目失控。
2、需求不明确,变化多
需求的多变是必然的。由于用户对计算机系统认识的不足,加上一个东西的从无到有,所以往往需求开始都是模糊的,只有随着项目的发展和反复的沟通,才能逐渐的明确。如何尽早的引导客户把需求明确,是项目经理、需求分析人员的工作,是保障项目可以顺利实施下去的前提保障,它是一门技术,也是一门思维沟通艺术。需求调研清楚了不代表着万事大吉。同一个东西,不同的人有着不一样的理解。开发人员和客户之间隔着需求人员这么一层,如何把客户的意思明白、清楚、不变形的传递给开发人员,这也是大部分项目中头痛的问题。我们经常可以看到在产品开发的差不多的时候,需求、开发、测试聚在一起吵架,责任互推。
3、计划不充分
计划不充分,分为计划太粗或太细。制定的计划不严谨,随意性太大,会导致可操作性差,在实施中根本无法遵循,也就失去了计划的作用。有的人会抛弃全局计划,采取每周制定下周的计划,这样也是不可取的,毕竟计划没有一个长远的目标或宏观上的掌控,只局限于眼前的一点点事情,往往会致使项目失控。我一般采取先制定全盘计划,再每月制定详细计划,当月快结束时,根据实际情况调整下个月的计划,这样既有了较长期的把控,也有了和项目目标的对比,同时也不会把自己陷入无止境的修改计划中。
4、工作量估计过低
工作量的估计不足,会直接导致项目延期。要对每项任务,甚至整个项目给出一个合适的工作量估计,需要综合开发的技术、人员的生产效率、工作的复杂程度、历史经验等多种因素。我遇到的几个项目中,计划制订者往往是凭个人经验,个人拍脑袋给出来的,问他的凭据是什么,回答往往是个人经验,有时里面也会包含其个人对自己的自信或自尊心问题,怕给出的时间过多而显得自己能力不足。抛开这些,我们还应该注意一些平时不可见的工作量,如人员的培训时间、各个阶段的评审时间等等。制定工作量时,不能被客户给的时间期限或上级的压力所限制,否则往往是以失败结束。
5、项目团队水平不足
技术人员的水平如果不能与项目的要求相适应,对项目需求或新技术不是很熟悉,对项目的质量、成本、进度都会产生影响。当进度开始滞后,项目经理最常用的方法就是增加人手。我之前的一个项目就是如此,由于项目经理不能把握需求,需求不断的增加,于是开始不断的加班,在这种折磨中,老员工开始纷纷离开,新来的员工不熟悉,进度进展缓慢,项目经理开始大量的加人,但是对系统代码和需求的不熟悉,往往3、4个人新员工都抵不了1个老员工。于是,开始无限制的加班,在加班的折磨下,新员工又纷纷离开,于是又加人。。。恶性循环,项目被无限的延期。这样的项目相信大家遇到过不少。
导致项目失败的因素还有很多,对于一个团队来说,一个好的管理者是一个好的开始,但并不等于项目成功。加强自身能力的提升,是每个项目管理者必须有的意识。