在读David Anderson《看板方法》一书时,注意到书中隐性知识说法。随着软件复杂度的增加,开发工作需要的知识也急剧增加。这些知识是很难在系统里记录,即使记录成本也是很高,查找也是很费劲的。这些知识就存在于开发团队之中,在团队不间断的协作过程中,不停地迁移知识,扩散知识。
传统的一些做法如记录,分享,对隐性知识的传播很难奏效。就拿分享来说,过于细节的分享,其实是很容易被遗忘的。敏捷的方法是有利于隐性知识的积累和传播的,一个敏捷团队是需要能坐在一起,面对面的交流,团队成员互相了解,彼此熟悉谁在哪个领域有专长,遇到问题能找到合适的人询问,项目过程中隐性知识得以扩散。结对编程,更是有利于隐性知识的传播,结对编程做的很高级的团队,他们的结对对象是经常变换的,在日常结对项目中,隐性知识得到很好的扩散。
团队中的共有的知识和隐性知识,成为共享记忆。共享记忆是应对隐性知识丢失的最好办法。既然是记忆,记忆是有可能被遗忘的。记忆的特性是,如果频繁的使用某个记忆片段,那这个记忆片段将被记得很牢。如果团队的开发迭代越小,则记忆将被反复加深。设想传统的普遍模型,一个项目3个月的需求,3个月设计,3个月代码,3个月测试。第二个项目在写代码的时候,已经距离上一次写代码时间至少9个月了。共享记忆也将受到巨大挑战。如果迭代周期至少2周呢?情况不言而喻。