软件工程笔记之 - 外科手术队伍
有些研究表明,效率高和效率低的实施者之间的个体差异非常大,经常能够达到数量级的水平。
――Sackman , Erikson and Grant
较好的程序员和较差的程序员生产率是有令人吃惊的差异的。Sackman.Erikson和Grant曾对一组具有经验的程序人员进行测量。在该小组中最好的和最差的表现在生产率上平均为10:1;在编程速度和空间上具有5:1的惊人差异!简言之,20000美元/年的程序员生产率可能是10000美元/年的程序员的10倍。反之亦然。
对于一个小型项目来说10人以下的精干的队伍固然是一件好事,但对于大型的项目,此安排不再合理。一拥而上只能是浪费资源。
Harlan Mills的提议提供了一个崭新的、创造性的解决方案。建议大型项目的每一个部分由一个团队解决,但是该队伍以类似外科手术的方式组建,而并非一拥而上。
- 外科医生。首席程序员,此角色需要极高的天分、十年的经验和应用数学、业务数据处理或其他方面的大量系统知识和应用知识。
- 副手。外科医生的副手,能完成任何一部分工作,但相对具有较少的工作经验。
- 管理员。外科医生是老板,他可以在人员、薪酬、办公空间具有完全的决定权,但它绝对不能在这些方面浪费时间,所以需要管理员来帮助解决这些问题。
- 编辑。外科医生负责文档的生成,处于最大透明度考虑,需要大量的文档,这些文档都需要编辑来完成。
- 两个文秘。
- 程序职员。他负责编程产品库中所有团队的技术记录。
- 工具维护人员。负责保障团队能高效的利用工具工作。
- 测试人员。协助外科医生进行相关测试用例的操作。
- 语言专家。负责精通编程语言,提供有用的咨询
而在大型的系统建设当中,怎样运用这种外科队伍构架呢,我们如果具有上百上千人的项目,怎样来协调呢?
扩建过程的成功依赖于这样一个事实,即每个部分的概念完整性得到了彻底的提高――决定的设计人员只占有全部人员的很少一部分,所以大部分人在解决问题,而仅仅需要协调极少部分人即那些“外科医生”的思路。
总的来说,上述的角色分工和技术是可行的,在实际工作中,具有非常高的效率。