软件开发危机因何而起?如何在软件开发管理中做好绩效管理?

软件开发危机的主要表现是:1)软件常常超出预算;2)软件开发超出时间;3)软件不符合需求;4)软件质量低下;5)难以维护。为了应对软件开发危机,对应的解决方案是软件工程。软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。然而40多年过去了,仍然没有一种得到证明的软件工程方法能够解决软件开发危机的问题,它仍然以“管理债”的形式大量存在。

如果方向是正确的,那么顺着方向走,找到答案只是时间问题。然而,方向不正确的时候再多的努力也不能真正解决问题,就如牛顿力学与相对论,欧几里得几何与非欧几何。我们认为的正确往往都建立在假设上,如果假设不成立,那么结论亦不成立。那软件工程、软件开发管理对应的假设是什么?

先来审视管理与软件工程的定义。管理是管理者和他人及透过他人有效率且有效能地完成活动的程序。管理就是计划、组织、领导、协调和控制。软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。再观察大多数软件开发组织的做法,常见的包括:以产出为导向、明确的分工、规范的过程、精确到人的绩效管理、计划管理和不断积累的最佳实践过程资产。

可以观察到一个核心假设,那就是:假设存在一种正确的管理方式,这种管理方式能够规范的、定量的解决软件开发中的问题,我们的工作就是积累经验,找到该管理方式,不断修正我们的行为直至完美遵循为止。这个假设是否真的成立?

假设存在正确的管理方式,假设可以通过系统性的、规范化的、可定量的过程化方法进行软件开发,这是软件工程得以存在的基础。然而,这一假设在软件开发中并不成立。

定量、规范、系统性、过程、管理,这一切是典型的现代管理思路。而现代管理是建立在物质经济的基础上的。物质具备三大特点,首先是可衡量性,产出和中间产物都是物质的,可衡量的;其次是不变性,除加工步骤外,中间产物在传递过程中保持不变;最后是不相关性,产出与原材料不相关,第100个产出和第一个产出间不相关。因为产出可测量,并且不同产出间的生产过程相关性小,可重复性高,从而提升产出效率成为现代管理的核心追求;传递无损耗有利于进行步骤分解,步骤分解后可对步骤进行单独的测量和效率优化,使得精细化分工成为可能,这有带来了整体产出效率的提升。简单总结一下,现代管理的核心思想就是“衡量是基础,产出是追求,分工是核心”。一个典型的例子就是:澳大利亚生产铁矿石,在中国粗炼,到日本精炼,在德国加工成零部件,在美国生产成精密仪器,卖到中国。
现代管理对知识经济的代表-软件开发并不适用,知识的特点与物质截然不同。首先是产出的不可衡量性,知识没有体积、重量和其他任何可见的测量方式,知识与知识间无法直接比较,知识的价值取决于使用这些知识的人而不是生产这些知识的人;其次是高损耗,知识存在与大脑之中,必须转换为信息后才能进行传递,而接收者需要从外界获取信息并将之转换为自己的知识,这一过程存在巨大损耗;最后是强相关性,开发第100个功能和前面的99个功能存在巨大关联,这大大有别于物质生产。这三大特点打破了现代管理的基础,因为这三大特点,产出不可衡量导致分步骤优化的作用受到质疑,如果强行优化仅能带来局部优化,全局作用不一定明显;巨大的传递损耗使得步骤分解变得不合理,使用者决定价值的特点使得步骤间无法隔离,步骤划分难以执行,并且无法衡量步骤划分的价值,这使得建立在步骤划分上的分工不再可行;产出间的强相关性导致做的越多,负担越重,以后做的越慢,所以用做的更多来进行产出衡量意义不大。“衡量是基础,产出是追求,分工是核心”这些现代管理的核心思想被打破,以现代管理思想驱动的软件开发管理迟早陷入困境。

将基于物质经济的现代管理应用于知识经济的代表-软件开发是软件开发组织的常见做法,这必将带来软件开发管理债的不断增长。软件开发管理需要不一样的管理模式,这种管理模式应该是什么呢?可否从管理思想和软件开发方法的发展上获得一些启示?后续大家来共同探讨吧。

陕西弈聪软件信息技术股份有限公司
电话:13679229477    02989322522
陕西省西安航天基地神州四路科为城墅20栋4301