{T}

全栈团队的角色构成

0. 引言

本专栏一直在讲基于 Web 的全栈工程师,这里的"全栈团队"并非指一群全栈工程师组成的团队,而是说一个团队具备较多方面、较多层次的技能,联合协作去解决某一具体领域的问题。本文结合作者在华为、Amazon、Oracle 三家公司的实际经历,梳理全栈团队中常见的角色构成及其协作方式。

1. 华为:基线团队与定制团队

像华为这样的公司做产品,最大的优势就是"全面":具备足够的人力和财力去打造全渠道、完整体系的解决方案。整个产品团队后来分为基线团队定制团队两部分:

  • 基线团队:打造具备基础功能的产品,是产品交付的基础;
  • 定制团队:有多个,将基线版本根据不同的业务需求定制化(功能裁剪、添加、专项优化),卖到不同的国家和市场。

当时基线产品研发团队中有几个核心角色:

角色职责
项目经理项目总负责人,跟随项目走,一个版本(约一个多月)可指定不同项目经理;基层项目经理多为程序员出身,对技术决策有较大影响力
SE(系统工程师)相当于现在大多数公司的产品经理:从市场部门承接需求,做业务系统的"系统性设计",不关心技术实现但精通业务流程;一个项目一般只有一个 SE
测试华为早期测试和开发在组织架构上完全分开,通过"转测试"流程交付;测试与开发比例约 1:2 到 1:3
架构师分平台架构师和解决方案架构师,像幕后高手,只在重大项目中带领 SE 搞定架构设计
UCD 工程师与用户沟通紧密,主导界面设计和使用设计,输出设计方案文档
美工负责设计的美工将方案落实为 psd 设计文件,负责快速原型的美工再落实为 HTML 原型
QA不做测试,专门监管流程质量,检查测试覆盖率、圈复杂度、代码重复率等指标
开发人数最多的程序员大军,按功能特性划分任务而非软件层次,技术栈上看是真正的"全栈"

不同公司中不同角色的"地位"有差异:腾讯产品经理话语权更大,Google 工程师占主导,华为市场部门是老大,SE 是二者沟通的桥梁。

2. Amazon:Dev Manager 与 SDE

在亚马逊,作者经历了两个较大的全栈团队——销量预测团队和成本利润计算团队。二者实时性高、数据量大,技术栈涉及机器学习、大数据处理、分布式任务管理、数据可视化等,角色构成也较为丰富:

角色职责
Dev Manager团队经理,多数是软件工程师出身;一般规模的项目由其牵头,小项目由资深工程师自己牵头,项目经理角色并不常提起
TPM(Technical Project Manager)担任产品经理角色,负责业务需求的分析、设计和跟踪;跨团队项目由专职 TPM 负责协调
SDE(Software Development Engineer)主力军也是粘合剂,从需求澄清、功能分解、任务跟踪到开发、测试、部署、维护全部承包;亚马逊戏称"Someone Does Everything"
WDE(Web Development Engineer)类似国内"前端工程师"的角色,当前端工作量需求特别大时规划招聘;内部对其衡量标准颇受争议
Data Analyst数据分析师,与软件工程师比例约 1:3,SQL 熟练,经常扎到数据堆里调查业务问题
Data Scientist更多涉足机器学习,基于数据建立模型;戏称"Data Scientist is Data Analyst in California"
Program Manager擅长和用户打交道,回答用户问题,很少负责用户需求
Supporting Engineer做运维(Ops)的活儿,在 SDE 干不过来时(尤其非工作时间)处理线上问题

亚马逊的团队普遍很小,每个团队只有几个人,被称为"Pizza Team"——团队的人用两张披萨就能喂饱,规模扩张到超过这个程度就要拆分。

有趣的是,亚马逊大多数团队没有设置 QA 职位:SDE 把测试的活儿承包了,也把大部分运维的活儿干了,通过运维的痛苦来反哺开发,即所谓"吃自己的狗食"(Eat Your Own Dog Food)——自己开发的坑自己要半夜爬起来响应解决。

3. Oracle:SDE 承担更多

作者所在的 OCI 团队依然是一个全栈团队,主要角色类型与 Amazon 差不多。但由于团队普遍比较新,一些以往需要专职角色干的活儿,目前还是由 SDE 来完成。

4. 小结

从华为的 SE 驱动的层次化分工,到 Amazon 的 SDE 全栈承包 + Pizza Team 模式,再到 Oracle 的新团队 SDE 承担更多,不同公司的全栈团队在角色构成上差异明显:大型公司分工细致(项目经理、SE、架构师、QA、测试各司其职),而互联网风格团队则更强调工程师的"全栈"能力,让开发自己承担测试与运维。团队的文化决定了角色构成,角色构成又反过来塑造工程师的能力模型。

下一章我们将讲解渐进式增强与优雅降级——一种让网站在不同环境(有无 JavaScript、新旧浏览器)下都能保持核心功能可用的前端设计理念。