讲软件项目管理的书绝对可以称得上汗牛充栋了,正所谓“懂得很多道理,依然过不好一生”。拿了PMP证书很多年的项目经理,项目照样管不好。
其实项目管理关键的点就那么几条,抓住了关键就像庖丁解牛,很多问题就会迎刃而解。
1、糟糕的软件项目管理
要管好软件项目,首先得知道,管不好的项目是什么样的:
项目延期,不能按计划上线
项目质量差,bug太多,系统上线后无法顺利运行
项目需求失控,总是不停的改需求,总有做不完的新需求
没有人能说得清项目的具体范围、交付时间、质量要求
项目组人员持续膨胀,人越来越多,还是不够用
项目组人员变动频繁,不断有人离职
项目经理说服不了客户,协同不了内部资源
没有文档和正常的沟通,不知道同伴做了什么
版本管理混乱,代码冲突,源码丢失
老问题一再出现,多次掉到同一个坑里
没有版本更新的流程,随时上线代码,系统随时会挂掉
......
是不是似曾相识的场景?这可能是很多软件公司都会出现的现象,无论是内部研发项目,还是交付客户的项目都会出现上述的部分或全面问题。
如果能完全避免这些问题,项目管理基本上就比较顺利了。
2、软件项目管理的方法
针对前面所述项目中经常出现的问题,分析如下:
#
问题
解决办法
知识领域
1
项目延期,不能按计划上线
制定详细的项目计划,计划需要和客户沟通、项目组沟通,达成一致
计划管理
2
项目质量差,bug太多,系统上线后无法顺利运行
项目组配置正式测试人员;
依照设计做测试方案和测试case;
测试不通过,不允许上线;
质量管理
测试管理
3
项目需求失控,总是不停的改需求,总有做不完的新需求
基于投标方案和合同范围制定需求框架,在框架内调研和确认需求;
记录需求变更,及时正式通知客户(变更可能增加费用)
需求管理
4
没有人能说得清项目的具体范围、交付时间、质量要求
项目经理要研究投标方案、项目合同,确定项目范围、时间、质量要求
整体管理
5
项目组人员持续膨胀,人越来越多,还是不够用
项目组构建初期,明确人员组成和各自职责分工。
需求管理
团队管理
6
项目组人员变动频繁,不断有人离职
制定合理的项目计划
建立项目组良好的团队氛围
计划管理
团队管理
7
项目经理说服不了客户,协同不了内部资源
反复坦诚的沟通不能解决问题时候,要向上级主管求助
沟通管理
8
没有文档和正常的沟通,不知道同伴做了什么
制定文档规格,按模板编写文档,按质量要求评审;
项目组每日例会,加强协同
文档和源码管理
沟通管理
9
版本管理混乱,代码冲突,源码丢失
采用代码管理工具如github管理源码;
每周定期做代码review
文档和源码管理
团队管理
10
老问题一再出现,多次掉到同一个坑里
典型问题,项目组内部学习交流;
每周技术经验分享
团队管理
11
没有版本更新的流程,随时上线代码,系统随时会挂掉
建立上线流程,需求来源明确、改动范围清楚、测试结果通过3个条件满足才能审核上线
团队管理
梳理流程总结经验,提出解决问题的原则和方法,就形成了软件项目管理的基本方法论(很明显,上述问题就是项目管理领域的主要管理职能缺失造成的)。软件项目管理的方法论通常涵盖下面的内容:
计划管理:计划必须是真实可行的,必须和项目组、客户沟通确认。计划的执行进展必须每周更新,问题和风险要提出来及时解决。
质量管理:质量管理是贯穿项目始终的,有必要的流程和模板,通过评审、文档来落实。
测试管理:要有专门的测试团队、测试计划、测试方案和测试case,使用工具跟踪测试case的执行至通过,上线前要完成测试报告。根据测试报告判断是否具备发布或者上线条件(不是按客户指令或者按领导意图)。
需求管理:先通过合同和投标方案圈定需求的大框架,在此基础上进行需求调研,形成需求规格跟用户确认。需求变动一定要有记录并且得到客户认可(后期费用审定时候这些记录决定了你能不能要到需求变更的钱)。
文档和源码管理:文档不是为了应付客户或者满足验收要求才编写,文档是内外部沟通的主要媒介之一,是和源码一样重要的软件资产。源码必须有工具管理,每天提交,做定期的review。
团队管理:项目启动组成项目团队,明确团队构成和职责;项目执行过程中不断培养和发展团队能力,减少出错和重复犯错的机会;良好的团队氛围能激励大家互相支持,按时完成任务。
沟通管理:信息透明,沟通渠道通畅,做到得客户认可,同事信任,很大程度上取决于项目经理的能力和合理沟通机制的建立。
整体管理:项目管理要有整体的流程和规范要求,比如项目立项条件、启动的条件、正式上线的条件、验收通过的标准、交给运维提供的资料等。
软件项目管理的制度、流程和原则,早已成熟和应用多年了,并不需要增加新的内容。
最重要的一点,把最基本的要求认真执行、长期执行、执行到位,就能很好的控制项目风险。
3、项目经理的责任和选择
项目经理是项目执行的第一责任人(对最终结果负责),是软件项目成败的关键,因此对项目经理的要求也比较高,并非一个有经验的程序员就能承担。
先说项目经理的职责。
组建项目团队,为项目团队设定工作目标。
制定项目工作计划、编制预算并做好任务分解,确保计划的执行。
监控项目计划执行过程,确保进度、质量、成本符合规划。
解决项目执行过程中的重大技术、问题。
解决项目执行过程中的资源冲突,协调客户、供应商和公司内部资源。
积极探索有效的项目管理方式,丰富公司项目管理的经验和能力。
要承担这样的职责,项目经理需要的技能覆盖计划、组织、管理、控制、激励、领导多个层面,差不多就是小型CEO的角色。而且项目规模越大,对项目经理的能力要求越高,所以一些“大项目”,项目经理可能是公司总监、副总甚至总经理亲自担任。
宰相必起于州部,猛将必发于卒伍,项目经理都是从基层逐步成长起来的。从项目经理人员选择和培养的角度,具备下面基本素质的年轻员工,可以作为培养候选人:
技术能力:优秀的程序员,至少有3年以上的开发经验,熟悉公司所使用的开发技术、框架,具备一定的行业知识。
性格和态度:自我驱动型人格,性格稳定成熟,态度积极向上,愿意主动承担责任,主动沟通;在压力下保持理性。
项目经验:全程参与过2个以上项目,对项目管理流程有切身的体会。
文档能力:熟练的编写文档、汇报材料。
这些年轻人通过在项目中的不断磨练、不断成长,最终会有一部分人成为优秀的项目经理。
4、项目文化
建立项目管理制定、流程的同时,不忘建立项目管理文化。制度与文化,一为刚性一为柔性,两者相辅相成,构成了项目管理艺术的全部。
项目文化是什么?
目标-结果导向。任何项目的成败,以最终结果是否实现当初目标来考察。
良好的过程管理是项目成功的基础,