软件项目管理之开发队伍建设篇
为什么软件开发项目开发进度延迟、费用超出预算、软件质量不能保证等问题一直在困扰着我们?我从来不认为产生这些问题的主要问题在于项目管理方法掌握不够、在于软件工程理解不透或在于软件开发能力不强,主要问题在于我们常常忽视了软件开发队伍的建设。没有一支好的队伍,怎么可能圆满的完成软件开发项目?回顾多年的开发经历,下面总结一下软件开发队伍建设的一些经验,试图从各个方面来阐述如何打造一支积极主动、和谐稳定、高效创新的软件开发队伍,目的是抛砖引玉,希望大家结合自己的日常项目管理现状,补充、调整.
1、软件项目经理必须在软件开发团队中树立起自己的权威地位。
软件项目经理是软件开发团队的领头羊,要成功的带领开发团队圆满完成软件开发任务,必须使全体开发人员信服你的知识结构、管理能力、协调能力和决策能力,所以软件项目经理必须具备相当的专业和管理素质并且勇于承担软件开发项目的成败的责任才能在软件开发团队中树立起自己的威信。
软件项目经理应该站在比开发人员更高的高度来认识所开发的系统和开发的过程,做到统领全局,需要知道但不必非要精通软件开发过程中采用的技术、使用的工具、开发过程中每一个环节的重点和难点,只有这样,才能在关键时候作出准确、正确的决定,从而在软件开发团队中树立起自己的权威地位。
我接触过的很多软件开发组织常犯的错误之一是研发经理经常干预项目经理的管理,其实软件项目经理在软件开发团队中威信的树立同时需要研发经理的支持,研发经理和项目经理要建立一种互信的汇报和指导的互动机制,即使项目经理在管理过程中出现差错,研发经理应该多加指导,避免直接插手软件开发过程,研发经理必须赋予项目经理充分的信任和自主的执行权利。
2、取得公司决策层对软件开发队伍的充分信任和支持。
在软件开发过程中,特别是规模较大的软件项目,由于涉及面较广、开发周期较长,经常需要跟日常行政管理、市场部门、采购部门、技术支持部门、财务部门等打交道,如果没有公司决策层的支持,跨部门的协作难免会遇到障碍,而公司决策层的支持来自于他们对我们软件开发团队的充分信任,信任我们能够按软件产品的愿景和目标出色的完成开发任务。
公司决策层对我们软件开发团队的信任来自于研发经理和项目经理可信的专业背景和管理技能,来自于开发团队朝气蓬勃的工作精神,来自于开发团队齐心协力的协同工作态度,来自于开发团队强烈的使命感、荣誉感和责任心。
我们有些软件研发经理和项目经理经常在公司决策人员面前挑剔开发人员的不足之处,对开发人员怀抱各种不满,诉说人力资源的欠缺,其后果是公司决策层越来越对我们开发团队失去了信心和信任。研发经理和项目经理应该向公司决策层汇报每个开发人员的长处,汇报我们是如何通过弥补个别开发人员的不足之处来提升团队整体的协同开发能力,让公司决策层充分认识到我们作为一个集体的团结和力量,从而对我们充满信心、信任和支持。
3、在开发团队中建立一种信任和忠诚机制。
只有我们项目经理对软件开发团队每个成员的真诚信任,才能获得开发人员对项目经理、对项目、对公司的忠诚,所以作为管理人员,首先不要带着成见去猜测开发人员的能力、道德观念、工作态度等,而是真诚的信任他们,真诚的与开发人员进行沟通。只有充分的信任每一个开发人员,相信他们能够出色的完成交给的任务,他们才会全身心的、充满热情的投入到自己的开发工作中去。信任还体现着一种开放的心态,只有信任他们的忠诚度,让每个开发人员理解项目的目标、了解软件的体系结构和功能需求、了解开发团队中其他成员的开发任务和进度,这样开发人员和项目经理之间、开发人员之间才会配合默契,才会感觉到工作是一种幸福而不是一种无奈。
信任意味着给予每个开发人员对自己的工作任务的足够的权限,忠诚意味着每个开发人员会对交给自己的工作任务的成功负责。在召开项目开始阶段的会议的时候,可以讨论并确定每个开发人员的权限,在召开项目开发过程的会议的时候,可以验证每个开发人员是否具备各方面的条件来执行分派的工作任务。不要将任务分派给一个没有权限执行此类任务的开发人员。
4、形成一种为解决问题而不断地召开简短会议的讨论氛围。
中医有这样的一种说法,那就是“痛则不通,通则不痛”,体现在软件项目管理中就是要经常的沟通,消除所有团队成员之间就某一问题存在的冲突。在软件开发过程中不时地召开简短的讨论,是一种行之有效的方法。
项目经理要在软件开发过程中不断地与每个开发人员进行沟通,询问他们在开发过程中是否遇到了技术上的障碍,了解他们是否对需求或业务存在误解,检查开发人员之间是否就某一方面产生了不同的理解和冲突等。当发现上述问题的时候,项目经理应及时组织相关人员召开简短的会议,指定此问题的主要责任人准备好讨论主题、相关的资料以及演示的PPT,提前3小时递交会议参与者,要求参与讨论人员提前1小时将各自的意见和建议递交主要责任人汇总,并在会议上提出讨论,通过讨论最终达成一致的意见,形成会议纪要作为下一步的开发指导。
5、养成在公开场合肯定开发人员工作成果的好习惯。
大型软件开发项目往往持续周期很长,在这漫长的开发过程中,如果只是在里程碑的时候给开发人员奖励是远远不够的。项目经理应该在每次的工作例会中表扬那些在此段时间内表现良好、工作效率高、实际化解了很多难题的开发人员,并且经常要邀请研发经理和公司决策层参与这样的表扬,这样开发人员的心理会得到极大的满足。对于在开发过程中存在问题的开发人员,在项目例会时尽量用探讨的方式指出不足之处,共同探讨如何通过改进解决存在的问题,避免在项目例会上当着所有开发人员的面来批评他们。对于个别开发人员情绪的波动,我们可以在私下进行沟通。
在软件开发过程中或在软件开发完成后,由于各种因素的影响,难免会需要对原有系统做变更。变更必然会遭遇开发人员的抵制,特别是那些不影响业务逻辑的变更,比如界面的调整,因为在开发人员的思维观念中会认为自己的开发是成功的、完美的。此时,项目经理首先要肯定开发人员的成果,肯定当前的变更是在他们以前的成功的基础上进行的,这样开发人员会乐意去接受变更。
6、积极培养软件开发队伍的集体荣誉感。
我们提倡多一份荣誉感,少一份功利性,明确定义成功和失败,强调成功首先是个人的成功,然后才是团队的成功,强调失败首先是团队的失败,然后才是个人的失败。我们要倡导维护知识分子的一份尊严,尊严来自于开发出出色的软件产品,尊严来自于强大的团队凝聚力,尊严来自于公司领导和客户的认可。
一个没有荣誉感的团队是不可能有很好的责任心的,一个没有责任心的团队是不可能开发出优秀的软件产品的。在软件开发团队中要建立软件产品是开发团队集体智慧的结晶这样的理念,每个开发人员在开发过程中的付出很难做到象生产流水线的计件工作一样精确,在开发过程中通过开发人员之间的互帮互助,不但可以消除斤斤计较的不良风气,还能增强彼此的协作氛围、团队的凝聚力和集体的荣誉感。
7、充分识别、发挥、利用软件开发人员的个性,高效完成开发任务。
软件开发是一种创造性的活动,创造性意味着需要个性的极大张扬,但这种张扬受制于企业的管理制度和软件开发规范,作为软件项目经理应该会同研发经理一起寻找并把握好规范和个性之间的平衡点。在软件开发过程中,项目经理要仔细的观察、分析每个开发人员的个性,不同的个性分配不同的开发内容,这样的任务分配能使每个开发人员感到自己被重视,这样的任务分配能让开发人员感到工作的愉快感,这样的任务分配能使每个开发人员全身心的投入到软件开发之中,压制个性的任务分配方法容易引起开发人员的抵触情绪和消极态度。
我们尊重开发人员的个性,不是宣扬个人英雄主义,其行为受到公司规章制度的制约,其风格受到编码规范的制约,其文档受到各种文档模板的制约。如何保证开发人员的个性能在各种制度的制约下得到最大的发挥,关键在于项目经理与开发人员之间的充分、坦诚、友善的沟通。让开发人员做到自动自发,其结果必然是高效、高质量的完成软件开发任务。
8、建立一种开发人员之间、开发小组之间互相协作的工作氛围。
在软件开发过程中,难免会遇到各种障碍和困难,从而影响开发进度,管理上的障碍通常需要公司层面进行协调,但对于技术障碍,项目经理应及时组织相关开发人员进行攻关,此时资深开发人员应利用他们的经验和知识积累发挥应有的作用。当某个开发小组或某个开发人员的开发进度有出现延迟的趋势时,项目经理应及时与开发小组或开发人员沟通,并组织其他已经或快要完成任务的小组或人员一起讨论,尽量分担部分工作任务,这种互帮互助的工作氛围将极大的增强团队的凝聚力。
通过分享开发人员各自的知识积累和开发经验,建立开发人员、开发小组之间的互相协作的工作氛围能加快开发人员的成长过程;通过协作克服了开发中遇到的困难能增强开发团队的自信心。
9、研发经理和项目经理必须为团队成员争取利益最大化和提升空间最大化。
项目经理必须象CEO经营企业一样来经验自己的软件开发团队。我们要把利益让给开发人员,把荣誉让给开发人员,通过出色的完成开发任务来得到公司决策层对项目团队的毫无争议的奖励,从而为团队成员争取最大的经济利益和荣誉。在软件开发项目立项过程中,我们可以明确的提出奖惩措施,同时给出项目的评估方法,公司决策层根据评估方法对项目的开发过程(里程碑)和开发成果(软件产品)进行评估,评估结果作为项目奖惩的依据。
作为研发经理必须观察每一个开发人员,对于工作勤奋、责任心强、具备管理素质、善于沟通的开发人员,要及时提请研发经理和公司决策层得以提升。当开发人员感到领导对自己的工作的认可时,会更加充满激情地投入到开发工作之中。
10、软件开发团队每个成员对软件产品的愿景和要实现的目标拥有一致的理解。
我接触过的很多软件开发组织为了规避软件项目过分依赖开发人员而带来的技术流失风险,往往只有项目经理拥有设计文档的全部权限,开发人员只允许查阅跟自己要开发的那部分工作有关的设计文档。在这样的开发团队中,一方面开发人员感觉不到公司领导对他们的信任感,往往导致工作积极性不高,严重的产生彼此的信任危机,另一方面由于开发人员对所开发的软件缺乏整体的认识,往往导致软件产品质量得不到保证。
我们强调每个开发人员尽早参与到项目的设计中来,即使没有参与系统设计,我们也会邀请他们一起参与软件系统的规划讨论和旁听系统架构和系统设计的评审。只有每个开发人员对开发的软件产品的目标有一致的理解,他们才会在软件开发过程中各自作出正确的决定。