十年前我第一次接触Scrum的时候觉得这东西理念特别好。后来慢慢明白不管什么流程最终都还是取决于执行的人。CMM是足够官僚,但Scrum这样的敏捷流程如果使用的人素质不够的话依然会变成官僚主义的产物。所以流程其实都无所谓,只要人够牛一切都不是问题。
问题在于,一般的公司,特别是小公司,想找到牛人哪儿那么容易。通常是一群虾兵蟹将,在一两个牛或不牛半牛不牛的稍有一点经验的三脚猫的带领下呼啦啦一波人就上了。反正互联网的时代业务优先,不管做出来的东西咋样,得先有个东西抢占市场才是硬道理。如果做的东西不被市场接受那么就换个坑接着挖,成本最低的方式自然首先是要快。雷军的七字诀,专注极致口碑快,我看快还得是排在第一位的。
那么如何做到快,敏捷的概念肯定是老板所喜欢的。老板会想,敏捷这个东西好,我们要的就是这个。然而这种东西如果让外行去推动,似乎又将不可避免地流于形式。最终结果,东西肯定是能做出来,然而能做成什么样,恐怕不太会符合当初的期待。当然这也未必是什么要紧的事情,跟千钧一发的时间期限相比质量可以往后排排。大不了把问题交给下一次迭代。
那么如何才能做出好的软件?问题的根本在于,编程还是一项富有创造性的工作,软件开发是科学和艺术的结合。所以一切试图将编程工作量化和预先定义的方法终究会跟编程这项工作存在内在的冲突。因此过于拘泥形式的流程只会给项目和团队带来不必要的反作用。这也是我现在觉得没有流程才是最好的流程的原因。
敏捷的核心,或者说软件开发的核心,其实都在于人,在于敲下这一行行代码的程序员。那么减少一些代码垃圾的方式就是尊重每一个程序员,充分信任授权,发挥程序员的主动性。好的代码是创造出来的,不是生产出来的。试图用规模化精益生产的方式组织编写代码,或许能减少一些企业的成本,但终究创造不出伟大的软件。