原文来自于一篇网文,整理成了一段PPT.
谈软件研发组织的部门管理
很多时候我们经常听到,程序员都是很不错的,就是项目做得一点底也没有,这就涉及到一个软件研发的团队具体如何去管理的问题,就中层领导的管理工作来说,主要集中两个方面,即作业和人员,具体下来包括十个要点:
1. 组织结构
2. 岗位职能
3. 方针目标
4. 工作流程
5. 流程控制
6. 危机处理
7. 绩效考核
8. 项目激励
9. 能力培养
10. 团队建设
前六点是针对作业的管理,后四点是针对人本的管理,下面就谈谈软件开发部门在开发管理工作中对管理的要求。
组织结构:
对于从事软件研发的组织来说,就工作类型至少包括项目管理、产品设计、编码、测试、质量保证和软件配置管理,以及其它人员,如文档编制人员和美工人员/系统硬件管理人员等,根据职能需要,可以以半独立方式进行部门和项目的矩阵管理,即职员要对项目经理负责,也要对部门经理负责,工作考核由双方共同完成,标准的组织应包括技术开发部/组(主要是编码和设计人员),产品开发部/组(产品需求和项目管理),测试部/组,配置管理部/组(因为配置管理人员基本上是按20个技术人员配一个配置管理人员,所以一般部门规模较小,或者只是配置管理组),软件质量保障部/组,其它部/组(如系统/文档/美工等)。
当然随着管理的扁平化发展,也可以取消中层管理层,即去掉部门级,而直接由高层经理管理各个项目组,这种情况下减少汇报的环节有助于加强的项目的控制。
因为软件质量保障和软件验收测试的特殊性的要求,软件质量保障部/组和软件测试部/组尽量独立,以方便这两个部门的工作的展开。
就组织的改动来说,一般不赞成一次性大规模的调整,因为在组织中变动过大可能会直接影响到企业的经营,也就是说风险太大,所以合适的时机做合适的调整就很重要。
一般来说,软件研发组织,从零做起的话,那么首先成立研发部,负责设计、编码、测试等,随着项目规模和人员的扩大,会再成立产品部,负责产品需求和项目管理,再之后成立测试部,软件质保部和配置管理部。没有成立部门,可以以组的形式或是兼职的形式存在并挂靠在其它的部中,当然具体一个企业的组织结构还应与其产品特点、公司历史、成员以及公司文化等多种因素相关,它是一个由高级经理总体统筹安排的体系。
岗位职能
明确每个岗位的名称、权利、义务,以及对在岗人员的素质要求和审核办法。做到岗位与能力挂钩,能力与薪金挂钩。
方针目标
工作方针是一切工作活动的基础,它是一个大的指挥棒,应对公司的方针进行充分的理解,它是公司团队活力的源泉;工作目标是对工作方针实施的具体阶段性目标,工作目标要求是经过足够的努力能够实现的,各级管理者应将工作目标在各个层次进行分解和实施。
就具体的过程活动来说,也存在一些过程活动的方针要求,软件开发的过程中,可能会存在:软件需求管理方针、软件项目管理方针、软件配置管理方针、软件质量保证方针等,随着队伍的建设及工作活动的发展,如软件测试管理方针等也将随之而制定。具体的工作方针里限定工作内容、工作方法是最基本也是最重要的要素。例如说软件项目管理方针,就包括对项目的定义,对项目的管理要求,如必须有一个项目经理和一个高层经理。必须依照相应的项目任务书开展项目工作,在项目任务书中应指定项目资源,对项目规模进行估计,制定项目进度计划,评估项目风险制定项目汇报方法等等。
工作流程
准确简洁的流程是高质量高效率的基础,通过规范工作流程,保证工作质量和降低工作成本,明确所有的工作产品,工作的入口和出口,特别是如何保证入口和出口的工作产品的质量。
研发的工作口号应该是质量第一,效率第一,要将质量和成本的意识深入人心。对工作的时间进行管理,对工作的效率进行控制。
软件开发来说,主要的工作过程产品有《客户需求规格说明书》,《软件需求规格说明书》,《软件概要设计说明书》,《软件详细设计说明书》,《软件项目计划》,《软件测试计划》,《软件质量保证计划》,《软件配置管理计划》,工作状态报告以及各种其它的工作产品,包括软件源代码、二进制文件、软件问题报告、软件缺陷报告等,这些工作产品应该在流程图里清晰明确的表达出来,并且应该有确认这些工作产品质量的标准。
就综合管理重点来说,首先放在软件配置管理(首先保证版本能够获得控制),软件需求管理,项目计划管理和开发跟踪的管理。
在制定流程的同时要保证流程的执行,特别是危机发生时流程的正常运行,例如,当用户突然改变需求,而且时间也很紧,这时候仍然必须保证工作的计划性和控制性,重点内容的评审不可忽略,如对测试计划的评审,和对设计更改和工作安排的评审,这也是推行成败的关键。
危机处理
实际上是对工作进行风险控制,包括技术风险,人力风险,资金风险,设备风险,变更风险等,保证项目开始前对风险进行识别和评估,在项目中期对风险进行跟踪,这里特别强调是当风险发生时,要及时,有效地进行控制和处理。
例如,预防人力风险,则应该保证在有风险的职位增加人手,技术如果有风险,则在设计时必须有通过评审的预留方案。
以上六点是对与作业相关的,下面的四点是人相关了。
绩效考核
建立全面的绩效考核制度,直接将月收入与工资挂钩,真正做到明确的多劳多得,少劳少得,绩效制度是对人员成就肯定的基础,也是组织活力的一个基本要素。一般推行绩效分制度,项目组人员由项目负责人进行客观打分,分数的要求是客观,这要求管理者必须有足够的客观证据,另外绩效的分数是建立在每一个人员自己的基础之上的,分数最终转化成员工的薪金。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
项目激励
培养项目经理,将项目的激励权交给项目经理,指导项目经理制定激励政策,通过项目激励来促进项目的效率和质量,会使项目源动力大大增强,而且为了保证项目的成功,员工的责任心,上进心都会获得提升。不同的项目可以采用不同的激励政策,以保证项目成功是第一重要,鼓励职员提高效率,提高自身能力以及提高参与意识。
能力培养
人在企业的目的有两个,一个是为了生存,那就是月收入,而另一个是发展,一个有前途的公司,对培训的建设是必须的,培训的内容包括,专业技能培训、创造性培训、团队意识培训等等,人才是企业发展的基础,留住并发展人才则是企业活力的核心。建立培训制度,加强能力、培训、工作、绩效这几个环节的结合。
团队建设
团队是一个自己纪律约束的组织,是一个建立在技术能力和人与人之间团结理解的组织,团队的核心是团队的管理者,一个基层团队的人员的责任人、自信心、成就感其最大的影响就是来自这个团队的管理者,首先对管理者来说,要做到以诚对人,诚信两个字是最重要的,人和人的关系是平等的,仅仅不过只是分工不同而已,一些从事技术,一些从事管理,没有谁优越谁的说法,第二管理者要做到以身作则,或者是身先士卒,第三加强沟通,加强对团队里人的理解, "能攻心,则反侧自消,自古之兵非好战;不审势,即宽严皆误……"
当员工内部存在矛盾时,及时发现,及时化解。从各方面保证员工的权益,平时组织一些有利于身心健康的集体活动,增加员工之间的感情,另外也应该定期不定期的招开内部沟通的工作会议,如例会等。
最后,量才适用是团队建设的一个重要的内容,足够的范围给足够的权力下放,这是团队发展的重要手段,也是促进人才成长的重要方法。
现在澄清几个有关管理的错误的观念:
<!--[if !supportLists]-->1) <!--[endif]-->我对公司有大的贡献,技术能力也不错,而且是领导的原班人马,所以我应该做管理。技术和管理只是工作的两种分类而已,技术能力强的人不一定管理能力强,这个道理就跟一个JAVA的程序员不一定同时也是数据库的高级程序员一样,是没有可比性的。管理者应该放低心态,这样对自己对团队都有好处。
<!--[if !supportLists]-->2) <!--[endif]-->另一个我什么都不会,所以只能做管理。管理者要求比其它人有更准确和长远的眼光,在这里我赞同微软的做法,管理人员必须编程,这个编程不是象征性的,而是公开的,放低心态,让大家都能看到并且理解管理的工作,这样大家就可以容易的把管理者和自己的关系拉近。
在部门的建设中来说,往往不能兼顾,那么如何把握呢,第一要循序渐进,不论的组织改动还是职责调整以及方法实施,都要遵循要循序渐进的策略,第二公司经营的目的是为了获得成功交易,部门存在的目的也是相同的,部门经理的职责是保证实现公司的利润,这是部门工作的目标,当质量、效率存在矛盾的时候,那么公司的利益就是裁判的准绳,第三要做到知己知彼,要做到对人的了解,对项目的了解以及对公司目标的了解,这样才能够保证在工作的过程中不会顾此失彼。第四就是确定目标,不断前进,只有通过不断实践才能获得部门和企业真正的提高。
- 大小: 240.6 KB
分享到:
相关推荐
软件架构是关于如何组织软件系统的一系列决策,包括系统的主要组成部分、这些部分之间的关系以及指导设计和实现的原则。对于同步群件系统而言,其架构需要考虑的关键因素包括但不限于: - **并发用户支持**:如何...
随着软件系统的复杂度不断增加,人们逐渐意识到需要一种更高层次的设计方法来管理这种复杂性。 - **定义**:软件架构是指构成软件系统的主要组成部分(组件)以及这些组件之间的关系和交互方式。它不仅包括了系统的...
"arch-movie"项目是一个基于Kotlin编程语言的软件开发示例,主要关注于应用程序架构设计,特别是针对电影相关的应用。这个项目可能包含了构建现代移动或Web应用所需的各种组件和最佳实践,旨在帮助开发者理解如何...
《arch-tdd-book:使用Python遍历架构模式》是一本专注于通过Python语言探索和实践软件架构模式的教科书。本书旨在帮助读者深入理解不同架构模式的原理、应用场景及其实施方法,同时也强调了测试驱动开发(TDD)在...
无论是数据库开发人员、运维人员还是对数据库技术感兴趣的学者,都可以从中获得宝贵的参考资料。通过对这个压缩包的详细研究,我们可以更好地理解和掌握这种特殊数据库系统的工作原理和最佳实践。
Linux 内核源码组织结构复杂且庞大,熟悉其目录结构对于进行驱动开发非常重要。 - **`Documentation`**:包含各种文档和教程。 - **`arch`**:存放不同架构(如 arm64、x86)相关的代码。 - **`drivers`**:存放...
通过对这些指导原则和技术细节的深入理解,开发人员可以更好地应对现代软件开发中遇到的各种挑战,从而提高工作效率和项目成功率。 总之,《应用架构指南2.0》为微软平台上的应用程序设计和开发提供了一套全面且...
### Linux内存管理核心知识点 #### 一、内存与硬件接口 ...以上内容综合展示了Linux内存管理的关键知识点,从硬件接口到软件层面的管理机制,再到高级特性和优化实践,旨在为读者提供全面深入的理解。
Android系统基于Linux内核,由Google开发,旨在为移动设备提供一个全面的软件平台。它包含了核心操作系统、中间件、用户界面以及应用程序框架。在2.1版本中,其源码结构被精心组织,便于开发者理解和维护。 #### 1....
RK616开发文档详细介绍了驱动开发的不同部分,包括核心控制、各接口驱动、CODEC驱动以及板级配置参考代码等。 - 核心控制部分代码位于drivers/mfd/rk616-core.c和drivers/mfd/rk616-vif.c。 - LVDS驱动代码位于...
通过细致的源码阅读和移植实践,可以深入了解硬件平台的工作原理和软件开发流程,为后续的系统开发和优化提供坚实基础。在FS2410板上的移植实例,充分展示了如何根据具体硬件进行代码调整和功能实现,这对于其他硬件...
这份"Linux解读[参考].pdf"文档似乎是一份指导如何理解Linux内核源码的入门教程,适合对Linux内核感兴趣的开发者。接下来,我们将深入探讨内核的文件组织结构以及如何实践解读内核源码。 首先,Linux内核源码通常...
MTK AOSP Kernel Overview文档详细介绍了基于MediaTek芯片的安卓开源项目(AOSP)内核开发相关的...由于文档是基于特定时间(2015年)的MTK AOSP内核开发环境,开发者在参考时还应当留意硬件和软件更新所带来的变化。
Linux 内核的开发遵循开源和自由软件的原则,允许全球的开发者参与其改进和扩展。这个早期版本的源代码对理解 Linux 发展历史、内核设计原则以及早期的编程实践具有重要的参考价值。源代码包含了各种子目录,如 `...
如CMSIS( Cortex Microcontroller Software Interface Standard),它是一组用于ARM Cortex-M处理器的软件接口标准,提供了硬件抽象层和驱动程序,方便开发者进行微控制器的软件开发。 3. **arch** "arch"代表...
这套手册分为三卷,每一卷都包含了大量的技术细节和编程指南,对于理解x86体系结构和进行底层软件开发至关重要。 卷一,通常称为“基本架构”,主要介绍了80x86处理器的基本结构、功能和操作。这一部分涵盖了处理器...
**vivi**是一款针对ARM架构的开源Bootloader,广泛应用于嵌入式开发领域。通过本实验的学习与实践,学生能够深入理解Bootloader的基本功能及其启动过程,并掌握vivi的具体编译流程。 #### 实验目的 1. **熟悉...
- **定制性:** 用户可以根据个人或组织的需求定制Linux发行版,满足特定场景的应用。 #### 二、Linux的安装 ##### 2.1 条件 - **思想准备:** 需要对Linux有一定的了解,并且愿意学习新的操作方式。 - **硬件...