谈软件研发组织的部门管理
很多时候我们经常听到,程序员都是很不错的,就是项目做得一点底也没有,这就涉及到一个软件研发的团队具体如何去管理的问题,就中层领导的管理工作来说,主要集中两个方面,即作业和人员,具体下来包括十个要点:
1. 组织结构
2. 岗位职能
3. 方针目标
4. 工作流程
5. 流程控制
6. 危机处理
7. 绩效考核
8. 项目激励
9. 能力培养
10. 团队建设
前六点是针对作业的管理,后四点是针对人本的管理,下面就谈谈软件开发部门在开发管理工作中对管理的要求。
组织结构:
对于从事软件研发的组织来说,就工作类型至少包括项目管理、产品设计、编码、测试、质量保证和软件配置管理,以及其它人员,如文档编制人员和美工人员/系统硬件管理人员等,根据职能需要,可以以半独立方式进行部门和项目的矩阵管理,即职员要对项目经理负责,也要对部门经理负责,工作考核由双方共同完成,标准的组织应包括技术开发部/组(主要是编码和设计人员),产品开发部/组(产品需求和项目管理),测试部/组,配置管理部/组(因为配置管理人员基本上是按20个技术人员配一个配置管理人员,所以一般部门规模较小,或者只是配置管理组),软件质量保障部/组,其它部/组(如系统/文档/美工等)。
当然随着管理的扁平化发展,也可以取消中层管理层,即去掉部门级,而直接由高层经理管理各个项目组,这种情况下减少汇报的环节有助于加强的项目的控制。
因为软件质量保障和软件验收测试的特殊性的要求,软件质量保障部/组和软件测试部/组尽量独立,以方便这两个部门的工作的展开。
就组织的改动来说,一般不赞成一次性大规模的调整,因为在组织中变动过大可能会直接影响到企业的经营,也就是说风险太大,所以合适的时机做合适的调整就很重要。
一般来说,软件研发组织,从零做起的话,那么首先成立研发部,负责设计、编码、测试等,随着项目规模和人员的扩大,会再成立产品部,负责产品需求和项目管理,再之后成立测试部,软件质保部和配置管理部。没有成立部门,可以以组的形式或是兼职的形式存在并挂靠在其它的部中,当然具体一个企业的组织结构还应与其产品特点、公司历史、成员以及公司文化等多种因素相关,它是一个由高级经理总体统筹安排的体系。
岗位职能
明确每个岗位的名称、权利、义务,以及对在岗人员的素质要求和审核办法。做到岗位与能力挂钩,能力与薪金挂钩。
方针目标
工作方针是一切工作活动的基础,它是一个大的指挥棒,应对公司的方针进行充分的理解,它是公司团队活力的源泉;工作目标是对工作方针实施的具体阶段性目标,工作目标要求是经过足够的努力能够实现的,各级管理者应将工作目标在各个层次进行分解和实施。
就具体的过程活动来说,也存在一些过程活动的方针要求,软件开发的过程中,可能会存在:软件需求管理方针、软件项目管理方针、软件配置管理方针、软件质量保证方针等,随着队伍的建设及工作活动的发展,如软件测试管理方针等也将随之而制定。具体的工作方针里限定工作内容、工作方法是最基本也是最重要的要素。例如说软件项目管理方针,就包括对项目的定义,对项目的管理要求,如必须有一个项目经理和一个高层经理。必须依照相应的项目任务书开展项目工作,在项目任务书中应指定项目资源,对项目规模进行估计,制定项目进度计划,评估项目风险制定项目汇报方法等等。
工作流程
准确简洁的流程是高质量高效率的基础,通过规范工作流程,保证工作质量和降低工作成本,明确所有的工作产品,工作的入口和出口,特别是如何保证入口和出口的工作产品的质量。
研发的工作口号应该是质量第一,效率第一,要将质量和成本的意识深入人心。对工作的时间进行管理,对工作的效率进行控制。
软件开发来说,主要的工作过程产品有《客户需求规格说明书》,《软件需求规格说明书》,《软件概要设计说明书》,《软件详细设计说明书》,《软件项目计划》,《软件测试计划》,《软件质量保证计划》,《软件配置管理计划》,工作状态报告以及各种其它的工作产品,包括软件源代码、二进制文件、软件问题报告、软件缺陷报告等,这些工作产品应该在流程图里清晰明确的表达出来,并且应该有确认这些工作产品质量的标准。
就综合管理重点来说,首先放在软件配置管理(首先保证版本能够获得控制),软件需求管理,项目计划管理和开发跟踪的管理。
在制定流程的同时要保证流程的执行,特别是危机发生时流程的正常运行,例如,当用户突然改变需求,而且时间也很紧,这时候仍然必须保证工作的计划性和控制性,重点内容的评审不可忽略,如对测试计划的评审,和对设计更改和工作安排的评审,这也是推行成败的关键。
危机处理
实际上是对工作进行风险控制,包括技术风险,人力风险,资金风险,设备风险,变更风险等,保证项目开始前对风险进行识别和评估,在项目中期对风险进行跟踪,这里特别强调是当风险发生时,要及时,有效地进行控制和处理。
例如,预防人力风险,则应该保证在有风险的职位增加人手,技术如果有风险,则在设计时必须有通过评审的预留方案。
以上六点是对与作业相关的,下面的四点是人相关了。
绩效考核
建立全面的绩效考核制度,直接将月收入与工资挂钩,真正做到明确的多劳多得,少劳少得,绩效制度是对人员成就肯定的基础,也是组织活力的一个基本要素。一般推行绩效分制度,项目组人员由项目负责人进行客观打分,分数的要求是客观,这要求管理者必须有足够的客观证据,另外绩效的分数是建立在每一个人员自己的基础之上的,分数最终转化成员工的薪金。
项目激励
培养项目经理,将项目的激励权交给项目经理,指导项目经理制定激励政策,通过项目激励来促进项目的效率和质量,会使项目源动力大大增强,而且为了保证项目的成功,员工的责任心,上进心都会获得提升。不同的项目可以采用不同的激励政策,以保证项目成功是第一重要,鼓励职员提高效率,提高自身能力以及提高参与意识。
能力培养
人在企业的目的有两个,一个是为了生存,那就是月收入,而另一个是发展,一个有前途的公司,对培训的建设是必须的,培训的内容包括,专业技能培训、创造性培训、团队意识培训等等,人才是企业发展的基础,留住并发展人才则是企业活力的核心。建立培训制度,加强能力、培训、工作、绩效这几个环节的结合。
团队建设
团队是一个自己纪律约束的组织,是一个建立在技术能力和人与人之间团结理解的组织,团队的核心是团队的管理者,一个基层团队的人员的责任人、自信心、成就感其最大的影响就是来自这个团队的管理者,首先对管理者来说,要做到以诚对人,诚信两个字是最重要的,人和人的关系是平等的,仅仅不过只是分工不同而已,一些从事技术,一些从事管理,没有谁优越谁的说法,第二管理者要做到以身作则,或者是身先士卒,第三加强沟通,加强对团队里人的理解, "能攻心,则反侧自消,自古之兵非好战;不审势,即宽严皆误……"
当员工内部存在矛盾时,及时发现,及时化解。从各方面保证员工的权益,平时组织一些有利于身心健康的集体活动,增加员工之间的感情,另外也应该定期不定期的招开内部沟通的工作会议,如例会等。
最后,量才适用是团队建设的一个重要的内容,足够的范围给足够的权力下放,这是团队发展的重要手段,也是促进人才成长的重要方法。
现在澄清几个有关管理的错误的观念:
1) 我对公司有大的贡献,技术能力也不错,而且是领导的原班人马,所以我应该做管理。技术和管理只是工作的两种分类而已,技术能力强的人不一定管理能力强,这个道理就跟一个JAVA的程序员不一定同时也是数据库的高级程序员一样,是没有可比性的。管理者应该放低心态,这样对自己对团队都有好处。
2) 另一个我什么都不会,所以只能做管理。管理者要求比其它人有更准确和长远的眼光,在这里我赞同微软的做法,管理人员必须编程,这个编程不是象征性的,而是公开的,放低心态,让大家都能看到并且理解管理的工作,这样大家就可以容易的把管理者和自己的关系拉近。
在部门的建设中来说,往往不能兼顾,那么如何把握呢,第一要循序渐进,不论的组织改动还是职责调整以及方法实施,都要遵循要循序渐进的策略,第二公司经营的目的是为了获得成功交易,部门存在的目的也是相同的,部门经理的职责是保证实现公司的利润,这是部门工作的目标,当质量、效率存在矛盾的时候,那么公司的利益就是裁判的准绳,第三要做到知己知彼,要做到对人的了解,对项目的了解以及对公司目标的了解,这样才能够保证在工作的过程中不会顾此失彼。第四就是确定目标,不断前进,只有通过不断实践才能获得部门和企业真正的提高。