软件研发之管理债
这是即将在Scrum Gathering上海2012大会http://scrumgathering.cn上演讲话题《软件研发中的管理债与债管理》的第一部分。如果你是一位软件研发人员,想了解软件研发为何如此困难,怎样才算做好软件;如果你是一位管理者,想知道哪些管理措施可以奏效,为什么一些管理措施效果不佳;如果你是一名敏捷精益实践者,想深入了解敏捷精益背后的思维模式。你可以来看看,以债出发的视角也许会给你带来惊喜。
在软件研发组织中“管理债”不断堆积,这是因为采用了与软件研发的特点不匹配的管理模式。
软件研发管理债是什么?
“技术债”是一个隐喻,这几年已经被大家熟悉并接受。如果向一个软件系统增加功能时需要额外的工作量或难度,那么这个软件系统存在技术债,这些额外的部分就是为技术债支付的利息。
受到“技术债”的启发,在此提出软件研发“管理债”的概念。当一个软件研发组织达成软件研发目标时需要额外的工作量或难度,我们就认为该软件研发组织存在管理债,这些额外的部分就是为“管理债”支付的利息。
软件研发“管理债”普遍存在于软件研发组织中。随着时间的流逝,债务从开始的小瑕疵变成庞然大物,越来越成为生命不能承担之重。其在软件研发管理上的主要表现为:1)成本越来越难以控制,超出预算;2)达成目标的时间越来越长,超出时间;3)开发出的软件不能达到市场期望,不符合需求;4)质量低下;5)软件越发庞大,难以维护。
谁应该为“管理债”负责?当从软件研发管理的角度去看时,似乎管理应该为此负责。(画外音:命名为管理债,肯定是管理负责啦,这种提法有诱导性,说服力不足。)
“管理债”与40多年前的软件危机非常类似。软件危机的主要表现是:1)软件常常超出预算;2)软件研发超出时间;3)软件不符合需求;4)软件质量低下;5)难以维护。为了应对软件危机,对应的解决方案是软件工程。软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。然而40多年过去了,仍然没有一种得到证明的软件工程方法能够解决软件危机的问题,它仍然以“管理债”的形式大量存在。
是何种假设导致问题在持续?
如果方向是正确的,那么顺着方向走,找到答案只是时间问题。然而,方向不正确的时候再多的努力也不能真正解决问题,就如牛顿力学与相对论,欧几里得几何与非欧几何。
我们认为的正确往往都建立在假设上,如果假设不成立,那么结论亦不成立。那软件工程、软件研发管理对应的假设是什么?
先来审视管理与软件工程的定义。管理是管理者和他人及透过他人有效率且有效能地完成活动的程序。管理就是计划、组织、领导、协调和控制。软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。再观察大多数软件研发组织的做法,常见的包括:以产出为导向、明确的分工、规范的过程、精确到人的绩效管理、计划管理和不断积累的最佳实践过程资产。
可以观察到一个核心假设,那就是:假设存在一种正确的管理方式,这种管理方式能够规范的、定量的解决软件研发中的问题,我们的工作就是积累经验,找到该管理方式,不断修正我们的行为直至完美遵循为止。这个假设是否真的成立?
在软件研发中该假设不成立
假设存在正确的管理方式,假设可以通过系统性的、规范化的、可定量的过程化方法进行软件研发,这是软件工程得以存在的基础。然而,这一假设在软件研发中并不成立。
定量、规范、系统性、过程、管理,这一切是典型的现代管理思路。而现代管理是建立在物质经济的基础上的。物质具备三大特点,首先是可衡量性,产出和中间产物都是物质的,可衡量的;其次是不变性,除加工步骤外,中间产物在传递过程中保持不变;最后是不相关性,产出与原材料不相关,第100个产出和第一个产出间不相关。因为产出可测量,并且不同产出间的生产过程相关性小,可重复性高,从而提升产出效率成为现代管理的核心追求;传递无损耗有利于进行步骤分解,步骤分解后可对步骤进行单独的测量和效率优化,使得精细化分工成为可能,这有带来了整体产出效率的提升。简单总结一下,现代管理的核心思想就是“衡量是基础,产出是追求,分工是核心”。一个典型的例子就是:澳大利亚生产铁矿石,在中国粗炼,到日本精炼,在德国加工成零部件,在美国生产成精密仪器,卖到中国。
现代管理对知识经济的代表-软件研发并不适用,知识的特点与物质截然不同。首先是产出的不可衡量性,知识没有体积、重量和其他任何可见的测量方式,知识与知识间无法直接比较,知识的价值取决于使用这些知识的人而不是生产这些知识的人;其次是高损耗,知识存在与大脑之中,必须转换为信息后才能进行传递,而接收者需要从外界获取信息并将之转换为自己的知识,这一过程存在巨大损耗;最后是强相关性,开发第100个功能和前面的99个功能存在巨大关联,这大大有别于物质生产。这三大特点打破了现代管理的基础,因为这三大特点,产出不可衡量导致分步骤优化的作用受到质疑,如果强行优化仅能带来局部优化,全局作用不一定明显;巨大的传递损耗使得步骤分解变得不合理,使用者决定价值的特点使得步骤间无法隔离,步骤划分难以执行,并且无法衡量步骤划分的价值,这使得建立在步骤划分上的分工不再可行;产出间的强相关性导致做的越多,负担越重,以后做的越慢,所以用做的更多来进行产出衡量意义不大。“衡量是基础,产出是追求,分工是核心”这些现代管理的核心思想被打破,以现代管理思想驱动的软件研发管理迟早陷入困境。
软件研发管理债来源于不匹配的管理模式
将基于物质经济的现代管理应用于知识经济的代表-软件研发是软件研发组织的常见做法,这必将带来软件研发管理债的不断增长。软件研发管理需要不一样的管理模式,这种管理模式应该是什么呢?可否从管理思想和软件研发方法的发展上获得一些启示?后续大家来共同探讨吧。
相关链接,摸索的足迹
从2月份提出管理债到现在,跌跌撞撞摸索之中。重新学习和摸索债、管理、软件工程、经济等基础概念,这种不断学习的感觉实在是太好了,一些博文记录了前期的收获。
《得懂点财务 - 从房奴养成四部曲到管理债》http://www.ituring.com.cn/article/1192
《管理是资产?不,管理是负债》http://www.ituring.com.cn/article/1204
《管理是这样从资产变成负债的》http://www.ituring.com.cn/article/1258