在软件开发中,进度延迟是所有项目永远的痛。我所在公司的产品研发各项目组也都出现了非常严重(远超出20%的正常偏离范围,甚至超过前期阶段时间的100%)的进度偏差;出现这种状况的原因是多方面的,分析如下: 1, 原定进度非常有挑战性 a) 尤其是一些产品上一个版本还没有结束,需要项目组投入较多精力;项目组同时兼顾两个版本的工作,有些分身乏术 b) 一些项目组都出现由于上一个版本的工作压力而不得不暂停新版本的工作 2, 质量要求提高,人员技能尚需跟进 a) 公司、各部门和项目组都认识到产品质量的重要性,也认识到上一个阶段的主要工作成果的质量会大大影响后续工作,都加强了流程中重要交付件,如产品包需求、设计需求等的质量要求 b) 由于缺乏专职的、平常例行的需求收集整理工作,前期需求调研花费了较多时间 c) 由于项目组具体工作承担人的水平技能距离质量要求有一定差距,因此工作开展之前的培训等工作花费了一些时间 d) 由于加强了产品包需求、设计需求等重要前期成果的质量要求和评审,花费了较多时间 3, 计划制定和任务分解估计不足 a) 缺乏对流程中各项工作重要性和具体实施所需要时间的认识,存在对各个阶段中所需要开展的工作认识不足,任务分解不足以及时间估计不足的情况,导致如果质量要求不下降,预定的时间进度就无法完成;如果要保持预定进度,很多工作成果质量就下降甚至走形式 b) 对每个阶段工作的细分不够,没有按照工作细分后来制定切实可行的时间进度表;或者制定了时间表也无法真正执行,出现偏差没有做出及时总结和调整 c) 项目计划中,原定时间本来就因为开发人员天生的乐观性估计不足,且没有充分考虑病事假、会议、培训等的额外时间支出 4, 人力资源不足 a) 除部分项目组开发人员相对充足外,各项目组都遇到人员波动较大或人力资源严重不足的情况,无法同时承担上一个版本的验证阶段和新版本的概念计划阶段的同步开展;甚至已经严重威胁新版本的项目开展 b) 对一些项目组而言,人员配备原本严重不足,核心员工的离职已经影响到项目的生死攸关的程度 c) 对部分项目组而言,人员储备不足,新上马的产品和增加新功能的开发严重依赖于新招聘员工,风险也很大 d) 所有项目组,非开发人员尤其是测试人员严重不足,对项目组工作的协调开展非常不利 e) 所有项目组,人员的储备都非常不够,受人员离职影响波动非常大,且对后续版本开发也非常不利;且招聘计划和项目发展的要求存在悖论,体现为:08年新员工招聘是根据当前项目的需要制定的,但新员工一般需要3-6个月后才能逐步承担部分工作,1年后才能较为独立工作,对当前项目的实际工作帮助不大;而后续版本的开发需要的人员现在没有纳入招聘计划,09年再招聘的新员工又无法在下一个版本中承担重任;该局面不纠正,各项目组就总是处于人员紧张的状况 5, 突发任务和非项目开发工作的影响 a) 已经成立维护团队,已经大大减少了对产品开发团队的影响;但仍然有部分维护团队无法解决的问题或项目支撑,不过总体不是很严重 b) 对于一些维护团队无法承担的突发重大任务较多,这些任务的开展,影响部分项目组的工作开展 不切实际的进度要求所带来的危害,具体包括: 1, 目前各个项目组的进度情况和项目任务书原定进度相比较,延迟已经非常多;如果不进行统一调整,可以预计在后续开发阶段也无法追上,最后的结果是要么压缩后续测试阶段的时间,要么出现破罐子破摔的心态和法不责众的心态;也导致项目进度时间表的权威性丧失 2, 导致项目组压力过大,一些过程出现走过场和降低质量要求的情况,从而看似追赶了一些进度,但对后续的工作影响很大。例如Word 1.0版本原本估计需要2年时间,比尔盖茨根据市场形势坚持要压缩为1年,最后实际花费了4年时间才完成,就是因为为了完成预定的进度,很多代码都没有进行很好的设计就匆匆完成,甚至出现很多硬编码等违反编程基本规范的问题。某产品上一个版本在计划阶段设计需求做的不够充分,也是导致后期开发阶段设计变更频繁,最后延期的最重要原因 3, 如果项目进度正常,项目组只需要每周汇报进展即可;但如果和原定计划偏差很大,各管理层人员都会非常关注,进行大量的讨论和问题分析,采取各种紧急和临时性手段来试图挽回进度损失,这些都导致了原本不需要进行的时间开销。在上一个版本的开发过程中,就出现过多次讨论如何赶上进度而几乎一个下午都在开会的情况;这些时间用来干点“正事”多好啊,太可惜了。 4, 进度过于紧张和进度延迟太多,就会导致项目组无视产品研发的科学规律,把很多应该分解的任务都“忽略”了,各项纳入计划的任务也无视最低质量完成的最少投入时间,导致拟定的后续进度表无法真正执行;同时导致项目组加班过多,项目组成员的压力大;每次拟定的进度都无法完成也严重挫伤项目组成员的士气和成就感,导致出现效率下降乃至各种更严重的问题 5, 进度表的不准确和一再延迟,也非常不利于公司的产品市场宣传和销售等相关工作的安排;不利于支持中心、事业部和客户等的已有项目的安排;同时也不利于公司其他部门和研发中心之间的团结和协作 6, 不利于过程数据的统计和分析,不利于经验的积累和总结提升 那么,如何解决进度延迟的问题呢? 我想,有下列一些方法可以参考: 1, 管理层,尤其是高层管理和项目经理在思想上要达成一致,即我们要在市场和业务需要的前提下,符合软件开发和项目管理的科学规律 2, 如果第一点做不到,那么项目经理可以做的事情就非常有限,但也不是无能为力;需要有更高的技巧和艺术性,甚至需要开一个高价,等着高层管理来砍价的非正常手段。总而言之,项目经理必须具备双重身份,即要在站在客户立场,也要站在项目立场,否则都是失败的。 3, 明确项目的目标、范围、需求,以及优先级,并和各干系人充分沟通,达成一致 4, 在明确具体要开发的功能、技术路线之后,根据分解之后的功能点和要求,由实际工作承担人来进行时间的估计 5, 充分考虑各种突发任务、常规事情(病事假、会议、管理工作、培训等)的影响,为这些工作预留出一定比例的时间(10-30%不等) 6, 关键性的工作,不能只有一个人能搞定,避免人员带来的风险 7, 项目外的工作,必须通过项目经理的审批才能开展 8, 需求、功能设计的变更,必须走变更流程,变更之前,就充分考虑对项目进度的影响 9, 项目经理至少每周审视项目的进度和质量情况,及时采取措施纠正偏差
|