喜欢由一流人才组成的小型、精干的队伍,而不是那些几百人的大型团队。
1. 问题:如何在有意的进度安排内创建大型的系统?
- 作者观点:需要协同沟通的人员数量影响着开发成本,因为成本的主要组成部分是相互的沟通和交流,以及更正沟通不但引起的不良结果
- 小型精干队伍对于真正意义上的大型系统,它太慢了。
- 矛盾:对于效率和概念的完整性,最好由少数干练的人员来设计和开发 VS 对于大型系统,需要大量人手,以使产品能在时间上满足要求
2. Mills的建议
- 大型项目的每一个部分由一个类似外科手术方式组件的团队解决,由一个人来完成问题的分解,其他人给予支持,以提高效率和生产力。
2.1 首席程序员
- 亲自定义功能和性能技术说明书,设计程序,编制源代码,测试以及书写技术文档。
- 要求极高的天分、丰富的经验和应用数学、业务数据处理或其他方面的大量系统知识和应用知识。
2.2 副手
- 首席的后备,能够完成任何一部分工作,但经验较少。
- 其作为设计的思考者、讨论者和评估人员。
- 代表小组与其他团队讨论有关功能和接口问题。
- 需要详细了解所有的代码,研究设计策略的备选方案
- 可以编制代码,但对代码的任何部分,不承担具体的开发职责
2.3 管理员
- 具有人员、薪酬、办公资源等方面的决定权
- 需要一个控制资源(财务、人力、工作地点和设备)的专业管理,充当与组织中其他管理机构的接口。不需要全职
在有规模公司里,一般情况下并不需要,有专职行政岗位。
2.4 编辑
- 负责对外和对内的文档生成
- 根据首席程序员的草稿或口述,进行分析和重新组织,提供各种参考信息和书目,对多个版本进行维护(文档),并监督文档的生成机制
2.5 两个文秘
- 负责非产品文件和使项目协作一致
在有规模公司里,一般情况下并不需要,有专职行政岗位。
2.6 程序职员
- 负责维护编程产品库中所有团队的技术记录,承担机器码和刻度文件的相关管理职责。
个人认为。在当下该职责可有可无。或者说该职责,应该以编辑的形式存在,或者用以配合测试人员管理测试用例,或者说产品版本的管理维护。
2.7 工具维护人员
- 保证所有产品开发用到的工具,如编辑器、编译器、调试器、版本管理工具,CI/CD,系统环境的可靠稳定。响应首席程序员对这些工具的服务的评价反馈。
该职责是很有必要,尤其是较大的公司,应该有专门的团队来做,我们经常会花时间在开发环境搭建、测试环境搭建的繁琐工作中,遇到多人开发时的如编译器版本、测试环境不一致,导致的质量问题。当然,该职责也可以,作为开发体系构建的实施者,用工具来使得设计、开发、测试、维护整个流程标准化、制度化、流程化。
2.8 测试人员
- 为首席程序员的各个功能,设计系统测试用例,为其日常调试设计测试数据的助手
- 计划测试的步骤和为单元测试搭建测试平台
2.9 语言专家
文中所述的,在当下感觉是没必要的岗位。可能替换成领域专家更为合适,专精于某一个方向的技术,如视觉算法专家、控制系统设计专家、焊接工艺专家等。
3. 如何运作
- 首席程序员和副手了解所有的设计和全部的代码。(确保了工作概念上的完整性)
- 出现观点不一致之处由首席程序员单方面来统一。
4. 团队的扩建
- 大型系统需要分解
- 前提:每个部分的概念完整性得到彻底提高
- 仅协调首席程序员的思路
- 需要一个系统结构师从上至下地进行所有的设计,来确保整个系统的概念完整性
- 系统工程师必须清晰划分体系结构和实现之间的界限
5. 个人观点
- 团队的首要目标是实现产品,但是团队人员的培养也是团队索要承担的重要义务和责任,在该体系下如何让团队的人员得到提升,不可能永远只有一个人是首席程序员。副手可以提升为首席这是显而易见的。但是。但其他人员的提升,如何体现实施??
- 职责的划分可以简化为:首席、副手、测试、编辑,其他职责的必要性有待实践考证