《人月神话》第3章:外科手术队伍(The Surgical Team)

这些研究表明,效率高和效率低的实施者之间个体差别非常大,经常能够达到数量级的水平。

The studies revealed large individual differences between high and low performers, often by an order of magnitude...


技而优则管,技术人员晋升为管理者后,遇到技术问题,往往亲力亲为,而不会让水平更低的下属来干。


软件开发的团队选择往往是一个难题,大部分人喜欢一流人才组成的小型、精干的队伍。事实上,我也喜欢用精兵强将,在沟通和做事的效率上有明显的优势。


诚然,最好的和最差的人在生产率上,往往会有数量级的差距,经验丰富的程序员能起到以一敌十的效果。但对于大型软件系统来说,小而美的团队往往有些力不从心,无法满足项目时间的需求。


对于效率和概念的完整性来说,最好由少数干练的人员来设计和开发,而对于大型系统,则需要大量的人手,以使产品能在时间上满足要求。如何调和这两方面的矛盾呢?


外科手术团队的方式就值得借鉴。


Mills建议大型项目分成小部分,每个小部分由一个团队解决,而团队则是以外科手术团队的方式来构建。也就是说,同每个成员截取问题某个部分的做法相反,由一个人来完成问题的分解,其他人给予他所需要的支持,以提高效率和生产力。

团队成员的职责如下:

序号

团队角色

职责

备注


外科医生 定义功能和性能技术说明书(应该是功能需求和质量属性),设计程序,编写源代码,测试以及书写技术文档。 需要极高的天分,应用数学,业务数据处理或者其他方面的大量系统知识和应用知识

副手

主要作为设计的思考着、讨论者和评估者。外科医生与他沟通设计,但是不受到他建议的限制。副手代表自己团队与其他团队沟通功能和接口问题。了解所有代码,并研究设计策略备选方案。

可能编制代码,但是对代码的任何部分,不承担具体开发职责。

作为外科医生的保险机制。

外科医生的后备,能完成任何一部分工作,但是相对经验较少。


管理员 控制财务、人员、工作地点和办公设备的专业管理人员,充当与组织中其他管理机构的接口

建议在法律、合同、报表和财务方面的需求时,管理员才具有全职责任。

其他情况,可以对多个团队负责


编辑 根据外科医生的草稿或者手术,进行分析和重组,提供各种参考信息和书目,对多个版本进行维护,并监督文档生成的机制。 文档创建的目的是未来最大透明度的考虑,无论对于内部描述还是外部描述

文秘 管理员和编辑都需要一个文秘,负责文档的编写 管理员的文秘负责非产品文件和使项目协作一致。

程序职员

负责维护编程产品库中所有团队的技术记录;

管理机器码文件和可读文件;

进行程序的版本控制,控制程序的运行

按时间顺序归档保存

将程序员从文档等杂事中解放出来

强化团队最有价值的财富 - 工作产品


工具维护人员 维护并保证所有基本服务的可靠性;开发一些实用程序

测试人员 负责计划测试的步骤和为单元测试搭建测试平台,作为外科医生的对手,对程序设计测试用例;作为外科医生的助手,帮助测试

语言专家 乐于掌握负责编程语言的人,为大家提供如何用简洁、有效的办法来解决负责、晦涩或棘手的问题的服务 为多个团队服务

外科手术团队的真正关键是“从个人艺术到公共实践”的编程观念转换。它向所有的团队成员展现了所有计算机的运行和产物,并将所有的程序和数据看做是团队的所有物,而非私人财产。

我也经常强调,沟通不畅,信息不透明是管理最大的问题。需要协作沟通的人员数量影响着开发成本,因为成本的主要组成部分是相互的沟通和交流,以及更正沟通不当所引起的不良结果(系统调试)。因此,一定要保证一个团队内部的沟通顺畅。


在我们甲方的二开项目团队,目前仍然是传统的工作模式,每一位程序员负责一个优化需求,从需求分析,代码开发,测试和交付等都是由同一个人完成。这么做有几个弊端:

1、每一个优化需求只有一个人清楚,团队其它同事并不清楚。程序代码上可能会有冲突,以及需要频繁地合并代码。

2、每个人都参与功能的设计和开发,每个人的设计理念和风格不一致,水平也良莠不齐,这就导致程序没有统一的标准。

3、需求文档,设计文档,测试文档等不完善,所有的信息都装在开发人员的脑袋里,人员变动时,交接会非常困难,后接手的人需要从代码入手。

4、从效率上来讲,专业化分工是高效的关键,成员之间采用非常简单的交流模式,就类似于工厂的流水线,强制节拍就是简单高效。前几年参加一次流程管理的培训,在课堂实践案例中,第一次我们采用的方案是每个人从头到尾负责所有内容,最后的成绩是负400多分;流程优化后,第二次我们采用的方案是每个人只负责一小段工作,一段的输出做为下一段的输入,最后的成本是1000多分,前后差距非常大。


对于大型的系统开发,需要将团队分成若干个外科手术团队,比如200人的团队,仅仅需要协调20个外科医生的思路。

对于协调的问题,还是需要使用分解的技术。整个系统必须具备概念上的完整性,要有一个系统结构师从上至下地进行所有的设计。




猜你喜欢

转载自blog.51cto.com/hichuann/2476322