因此,软件开发组织也就会按照这样的职能组织进行设计。基于这种认识,我们会在软件开发中推行瀑布模式,希望通过标准化流程,让每个环节最大化提高生产效率。
按“软件开发是设计过程”的世界观。软件代码是设计文档,它被编译、部署后,指导计算机工作。这用户使用这些应用后,用户所需要的窗体、数据等信息被计算机自动生产了出来。
这样软件开发就要按设计思想进行组织,而设计需要的是要不断尝试,把需求、设计、开发、运维、测试等工作放到一个团队里,组成跨职能团队才是更高效的做法。基于这种认识,提出了敏捷开发的理念,让不同职能在一起开发,面对共同的业务目标。

那么究竟应该是设计还是生产呢?我们可以从几个方面来看。
可重复性生产过程一般是可重复的。工人生产一个零件,或者组装成一个产品,这个过程是预定义的。
比如一台洗衣机被设计出来以后,就被拆分为若干零件以及组装工序。每台生产出来的洗衣机都是一模一样的。软件开发结果是可重复的吗?如果生产结果是代码,程序员每天要编写的代码,极少是可重复的,每天面临的问题都是不同的。
创造性生产过程是不需要多大创造性的。你操作机器,按照设计规格要求组装或者生产零件。而试图把程序员的工作变为非创造性的活动,也就是所谓程序员蓝领化,这个口号提了有20年了吧,很遗憾,到现在为止没有看到一个是成功的。
不管什么样的组织,最后不得不把创造性还给程序员,才能一定程度上完成工作。
成本生产过程是成本比较重的,生产一个零件或者组装产品都是如此。而软件中生产窗体、数据都是计算机自动完成的。生产信息的的成本接近于0。如果一个程序运行中崩溃了,用户只要重新打开就可以得到新生产的。
可预测性我们生产机器、用品、建筑物,这些东西我们都可以在生产前进行预测,我们需要哪些功能,要达到哪些指标,价格要多少钱。这些可以被预测、限制。
而我们在开发软件中,极少有人(我怀疑是没有)可以在一开始就把软件的范围进行精确地框定。我们往往知道一些大概,通过在开发中一些问题才逐渐浮现并变得清晰。
你觉得软件开发是重设计还是重生产?