对于通常的软件项目,参与角色,比如可以有用户,消费者,产品团队,研发团队(研发团队包括开发和测试),运营团队,运维团队,管理团队。
通常认为,用户,负责购买服务的群体,而消费者,负责使用业务的群体。这两个群体,不在本文的讨论范围之内,因此后续的介绍中,除非明确说明,否则默认均不涉及。
产品团队,研发团队(研发团队包括开发和测试),运营团队,运维团队,管理团队,可以归纳为产品交付团队。
关于各团队的简单的说明:
- 产品团队,负责定义产品,规划路标,收集和定义需求的团队。
- 研发团队,可以细分为架构团队,设计团队,开发团队,测试团队。
- 架构团队,依据产品定义,路标规划,定义并看护产品的架构。
- 设计团队,依据需求定义,结合架构方案,输出设计方案,指导开发团队交付需求,指导测试团队完成功能验证,指导运维团队在生产实施和维护。
- 开发团队,依据需求方案,按照一定的节奏交付特性。
- 测试团队,依据需求方案,实施功能验证,确认是否达成一定的质量要求。
- 管理团队,产品团队、研发团队、运营团队、运维团队等的管理组织,制订计划,跟进计划的执行,全程参与产品的交付,并对产品最终的结果负责。
- 运营团队,负责产品的推广、用户拓展和经营、用户培训、宣传方案、使用资料等。
这几个团队的规模视情况而定,职能和人员可能存在一定的重叠,比如
- 有些公司没有专职的运营人员,相关的职能由产品团队和运维团队承担;
- 有些公司没有专职的产品团队,相关的职能由管理团队以及研发团队中的架构、设计团队一起承担。
具体到ASR的交付,由于涉及到了机器学习算法,依据职责和人员技能,新增了如下团队:
- 数据团队,负责采集、清洗、转换数据。
- 算法设计团队,负责设计模型的结构、模型的训练算法、算法的评测指标和评测方法,同时决定训练平台。
- 算法训练团队,依据设计好的模型结构和训练算法,执行训练任务,输出、评测模型。
- 算法工程化团队,依据设计好的模型结构,综合考虑训练平台,选型推断代码的运行平台,输出推断代码,并负责调优,满足工程交付的要求。
- 模型测试团队,依据事先确定的评测方法,执行评测工作,输出相应的指标数据。
为了区分,原有的设计、开发、测试团队,则分别命名为业务设计、业务开发、业务测试团队。
组织很庞大,分工很细致,因此平衡各方面的利益和诉求,非常考验管理团队和架构团队。
为了完成产品的交付,各团队之间存在相互依赖和诉求。
比如:
- 数据团队
- 依赖算法工程化团队,提供采集、清洗、转换的工具。
- 依赖算法设计团队,提供数据的标准和来源。
- 依赖算法训练和模型测试等团队,提供对数据质量的反馈。
- 算法设计团队
- 依赖数据团队,提供样例数据。
- 依赖产品团队,提供需求和优先级。
- 依赖算法训练团队,反馈训练算法、模型存在的问题。
- 算法训练团队
- 依赖数据团队,提供训练数据。
- 依赖算法设计团队,提供模型定义、训练算法。
- 依赖算法测试团队,反馈模型的问题。
- 模型测试团队
- 依赖数据团队,提供测试数据。
- 依赖算法工程化团队,提供支撑测试的工具。
- 算法工程化团队
- 依赖业务设计、算法设计团队,提供接口定义。
- 业务设计团队
- 依赖算法设计团队,定义算法的能力,协同定义集成方案,交互的接口。
- 业务开发团队
- 依赖架构团队,给出架构方案、技术选型等。
- 依赖业务设计团队,给出集成方案和接口文档等。
- 依赖算法工程化团队,协同完成集成。
- 依赖算法训练团队,提供符合要求的模型。
- 业务测试团队
- 依赖业务设计团队、算法设计团队,提供设计方案。
- 依赖数据团队,提供发布验证的数据。
- 依赖业务开发团队,提供转测试的版本。
- 管理团队
- 依赖架构、设计、开发、测试团队,各自给出计划,关键时间点,内、外部的风险和困难等。
前述各团队的分工、职责、人员可能未必可以划分的如此清晰,在项目的实际运作过程中,经常存在重合的现象,需要各团队、各成员相互之间补位,凡事以达成产品的交付目标为重。
为了提高各团队之间的沟通效率,团队之间需要统一语言,相互之间学习基本的概念和业务,增进相互的理解,此外在沟通时注重就事论事,减少无意义的PK,这样才能提高沟通效率,改善生活质量。