由于软件研发工作的复杂性、不可视性、可变性和一致性,研发一个给用户一个满意的,缺陷更少的,灵动而又符合用户各类偏好的软件系统,是一个艰辛和匆忙了挑战的过程。关于复杂性等问题,在数十年前在《人月神话》中就提出了著名的银弹说,可以说至今都没有彻底解决,任何项目都起作用的所谓银弹。
所以研发管理我觉得是一个非常综合的能力,每个公司都在按照自己的人力资源、管理能力、研发技能水平等来制定适合自己的管理模式,公司之间直接进行复制管理模式的方式都可能会导致很大的风险。我们在判断软件研发能力时,很容易对现实的情况判断产生各类偏差,可能高估了自己的能力,或者低估了,或者在某些局部的判断不准确,但是不管是哪种情况,清楚的认识自己,对研发管理的改进、提升产品质量都是有很好的帮助的。
一、软件研发能力的几个重要方面
就如同架构设计一样,把复杂的事情细化和分解是一个分析问题的经典做法。我们经常在听到的抱怨是这个系统因为架构设计有问题,导致修改非常困难。研发缺乏过程管理,你看在某些方面文档都不齐全,我就是按照跟你说的来实现的。或者是这个开发的功能不完全是用户需要的啊。后面一大堆讨论,总结是我们的研发水平还很低有很多很多的问题。为了分析这些情况,我把软件研发的核心能力做了一个分解。
产品管理:是我们定义产品和管理产品的能力,决定了我们去发现市场机会,在什么样的时机,以怎么样的顺序提供给客户的能力,产品管理的与开发能力、开发过程和组织管理是一个交集关系,总的来说产品管理就是公司在有限的资源情况下,提供符合客户需求的产品的能力。
开发技能:按照既定的产品和需求目标,采用合适的技术实现产品的能力。