反向 Conway 操作

现在我们已经知道了团队的最佳规模,我们可以进行一种叫做逆康威操控(Inverse Conway Maneuver)的操作(Forsgren N., Humble, J., 和 Kim, G., 2018,第102页)。如果你将组织结构进化为自治的两块披萨团队,系统架构将会进化成一个更加松耦合的架构。

但这不仅仅是团队规模的问题!如果你根据功能创建团队,最终会导致层次化或多层架构。如果你将前端开发人员和数据库专家分到同一个团队,架构会在这些沟通点上解耦(见图17.5):

image 2024 12 27 17 43 43 005
Figure 1. 图17.5 – 功能团队导致的层次化架构

为了实现一个可部署和可测试的架构,赋能团队,你必须创建负责业务成果的跨职能团队。这将导致你所期望的架构,帮助你快速推进(见图17.6):

image 2024 12 27 17 43 57 507
Figure 2. 图17.6 – 围绕业务能力进行对齐的跨职能团队,快速交付价值

有四种团队拓扑结构对系统架构产生积极影响,从而改善软件交付性能(Skelton M., 和 Pais M., 2019):

  • 价值流对齐的团队:这是最重要的团队拓扑结构——跨职能团队,能够在不依赖其他团队的情况下为客户交付显著的价值。这些团队需要具备所有交付价值所需的技能——例如,UX、QA、DBA 和运营技能。

  • 平台团队:构建平台的团队,能够通过简化软件交付过程和减少复杂性,帮助价值流对齐的团队交付价值。

  • 启用团队:帮助其他团队接手责任的团队,通常是在入职、过渡或培训阶段。

  • 子系统团队:这种类型的团队应该仅在绝对必要时创建!如果某个子系统过于复杂,无法由价值流对齐的团队或平台团队处理,那么最好由一个功能性团队来处理该子系统。

重要的是,每个团队都有明确的责任,并且可以在不依赖其他团队完成某些任务的情况下交付价值。

但是,为了达到对性能的预期效果,你必须限制团队之间的互动模式为以下三种之一:

  • 协作:两个或多个团队在一定时间内密切合作,共同分担责任。

  • 自服务:一个团队将其价值作为服务提供给另一个团队,责任清晰划分,且服务可以尽可能地简便和自动化地被消费。

  • 促进:一个团队在一定时间内帮助另一个团队,帮助他们学习新知识或培养新习惯。

建立有效的团队拓扑结构,确保良好的沟通和互动定义,对于系统架构的影响是巨大的,同时也能显著提高工程的执行效率。