系统开发是一项系统工程,从系统工程角度出发,系统开发可以分成三大部分,即软件实现、项目管理和过程改进。管理维度则从工程性管理角度出发,包括软件的开发过程和软件经济学等内容,从中我们抽象成项目管理、研发过程和组织管理三个子维度。
1.项目管理子维度
项目管理的切入点在于从范围、时间、成本等角度出发讨论如何在一定的约束条件下实现系统并完成最终成果的交付。这其中涉及项目管理的通用性知识体系,但也需要根据软件开发的特征进行分析。
对于系统开发而言,需求工程、计划管理、质量管理、风险管理是项目管理重点需要实施和管理的对象。相较其他行业,需求以及系统建模、软件开发范围的分解和工作量评估、技术评审的实施方法以及持续交付思想和工具的应用贯穿整个软件开发的进程。
2.研发过程子维度
系统开发是一系列过程的集合,过程改进围绕这些过程,提出持续优化的方法和实践确保得到令人满意的结果。过程改进的切入点在于通过理解代表性的过程模型,并结合团队目前以及未来的开发状况找到适合自身的过程模型。
研发过程的建设包括过程管理的模型以及研发相关的工程实践,而过程改进同样也有一整套的方法论,无论是传统型的瀑布还是当下流行的敏捷,都崇尚过程改进。而对于特定团队,这些模式和方法都不一定适用,不能照抄照搬,所以研发过程建设的实施方法首先是过程裁剪,通过裁剪建立起符合自身团队发展的轻量级过程模型。研发过程的建设包括过程管理的模型以及研发相关的工程实践,而过程改进同样也有一整套的方法论,无论是传统型的瀑布还是当下流行的敏捷,都崇尚过程改进。而对于特定团队,这些模式和方法都不一定适用,不能照抄照搬,所以研发过程建设的实施方法首先是过程裁剪,通过裁剪建立起符合自身团队发展的轻量级过程模型。
3.组织管理子维度
组织管理的切入点在于明确一个组织中需要技术管理者进行管理的视角和边界。对于系统开发而言,向下的团队管理和向外的协商沟通管理是最基本的组织管理视角,但我们也应该注意到向上管理的重要性以及提升管理者本身的自我管理意识。
对于向下管理,实施过程中需要理解技术人员,并通过领导、激励、培训和绩效管理等手段提升团队整个工作效率。对于向上管理,更多则关注结果导向和目标管理。向外管理上,沟通是关键。而对于自我管理,则需要培养个人的管理风格以及处事能力。以上各个维度和子维度虽然各自表现技术管理的某个方面,但也存在依赖关系。图1描述的是三个维度之前最基本的依赖关系。从图中可以看到行业分析帮助定义产品,技术体系为产品提供实现方法,而管理体系从过程角度为产品开发提供保障。因此,技术体系和管理体系的建立本质上都是为了实现产品,也就是说技术管理的本质需求是完成产品目标。
不同的行业、不同的业务、不同的系统对于技术管理的维度而言具有不同的展示要求。以互联网行业为例,目前各个领域变化迅速,从行业分析到产品发布的周期也较短,意味着在开发过程管理上适合采用比较轻量级、快速迭代的研发模式,这就需要在项目管理、组织管理上采用与之匹配的模式。另一方面,互联网产品或服务通常面向多个领域,按应用类型区分,通常行业门槛并不高,如果想要快速占据市场,通过技术创新来推动产品化是常见的手段。而面向企业级应用的软件产品中,由于业务复杂且具有一定的行业壁垒,技术更多时候是为了实现业务需求,一个产品的开发周期普遍较长,相应的研发节奏和过程也偏向于采用重量级框架,这些都与互联网产品有较大差别。