第1章 软件工厂
1.1 软件的生产力
软件行业的发展至今不足百年的时间,相比传统行业,尤其是工业,成熟度还不算高,软件工程的学者和从业人员一直在摸索成熟的行业解决方案。从早年的软件质量工程、CMMI(Capability Maturity Model Integration,能力成熟度模型集成)到2018年流行的敏捷、精益等方法,无不在尝试解决软件行业的诸多痛点,但效果不是非常理想,这印证了Fred Brooks所说的“没有银弹”。
“没有银弹”是Fred Brooks在1987年发表的一篇关于软件工程的经典论文。该论文强调真正的银弹并不存在,而所谓的没有银弹则是指没有任何一项技术或方法可以让软件工程的生产力在十年内提高十倍。
Fred Brooks的理念触碰到了软件行业的本质问题之一:软件工程的生产力。
生产力是衡量某行业发展水平的重要指标,当今软件行业生产力低下,多为手工作坊模式的生产过程,例如,某移动运营商客户的BOSS系统因为规模庞大、业务复杂、业务流程关联性强、业务步骤多,致使新需求无法快速、高效、准确地得到满足,往往一个需求需要经过2~3个月的开发才能上线。加之软件行业衍生出来的所谓外包行业,价格无序竞争及管理混乱导致的质量逆向选择,致使国内的软件生产力极端低下。
生产力的三要素包括劳动力、劳动工具和劳动对象,其中劳动力是最活跃的因素,劳动工具的变化即代表技术进步的快慢。
以银行软件外包行业的现状来看劳动力,我们认为人员(劳动力)这个最活跃的因素并未被有效激活。某银行外包开发测试,通常采用招投标并派驻人员的方式进行,在国内缺乏行会结构的商业模式下,价格无序竞争,导致供应商以低于成本价的方式取得订单,以被迫提供低于软件生产质量水平要求的方式提供人力。而派驻到甲方场所的劳动力,在甲方不成熟的软件生产过程管理下,无法高效发挥生产力,缺乏归属感。甲方原本就不是专业的软件生产商,只能提供笨拙的生产管理规范和约束,加之生产场所往往处于租金昂贵的商务区,大规模生产软件所需的劳动力只能在拥挤不堪的环境中工作。《人件》一书中所提倡的得到高效项目团队的条件(管理人力资源、创建健康的办公环境、雇用并留用正确的人、高效团队形成、改造企业文化和快乐工作等)就无从谈起了。
思考和管理软件开发的最大问题是人(而不是技术),为了得到工作高效的项目和团队,这是软件行业必须考虑的问题。我们倡导软件行业要摒弃软件作坊的工作方式,转向成熟的工厂生产模式,以解放劳动力,在专业化、标准化的流水线上才能有效地释放劳动者的生产力。
不可否认,软件生产与传统工业生产很大的一个区别在于,软件生产过程中相当大的一部分劳动属于脑力劳动,如何激发脑力劳动者的积极性,让他们能在更舒适、更轻松的环境下工作,是必须考虑的问题之一。
我们认为,从根本上提升软件生产力,提高软件制作水平的方式是“软件工厂”。
只有在软件工厂规模化、大批量的软件生产过程中,才能提炼和总结各生产要素,以及生产要素的最佳实践。举一个简单的例子:村里成立了一个纳鞋作坊,把能纳鞋的老老少少都召集在一起,顶多能比比谁纳鞋快、谁纳鞋好,并不能从根本上提升鞋的工艺水平,更不要提促进鞋业的生产力了。