每个项目都是分布式系统
计算机科学里有一个结论,讲的是在很多台机器上保存同一份信息。当机器之间联系不上时,每台都得选择:停下来等到能达成一致,或者接着干、冒着意见不一的风险。两样不能兼得。
大项目也是这样,只不过机器换成了人。每个人脑子里都有一份项目的副本:已经决定了什么,各部分该怎么拼在一起,谁在做什么。这些副本从来不会完全同步。有人在睡觉,有人埋头在别的事里,有人昨天才来。今天早上做的决定,对还没听说的人来说,其实还没有发生。
所以每当一个决定改变,你就面对同一个选择。让所有人停下来等大家跟上,这样一致,但慢。或者让大家继续干,接受其中一部分会建立在一件已经不再成立的事上。
更难的是,决定之间是互相倚靠的。改了一个,别的就得挪一挪给它腾地方,有时挪到离起点很远的地方。某个部分被认真地造出来,忠实于早先的一个选择。选择变了,那个认真的部分就错了,压在它上面的东西也错了。没有人犯错。对过去的忠实,从里面看,就是漂移的样子。
当然,这只是个类比。那个结论讲的是一种特定的机器,而团队不是那种机器。但感觉是一样的。
有一个老比喻,说水手们只能在海上修自己的船,一块木板一块木板地换,永远没法靠港。大项目就是这样。你没法让一切停下来使它一致,只能判断哪些决定重要到值得停下来,然后把它们写在每个人都找得到的地方。