74.1 康威定律及其逆定律

一句话

系统架构必然长成组织沟通结构的影子——因为模块边界就是协商边界;逆定律是唯一的主动招式:先画出想要的架构,再把团队边界改成它的形状。

原始表述与它真正的分量

Melvin Conway 1968 年发表于《How Do Committees Invent?》:

“Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations.”

设计系统的组织,受限于其产出的设计必然是这些组织沟通结构的副本。

关键词不是 “倾向于”,是 constrained to (被迫)。这不是管理建议,是被反复验证的结构性约束:

观察到的组织形状 长出来的系统形状
前端组 / 后端组 / DBA 组 严格分层架构,交接处是交付瓶颈
三个团队分别管订单、库存、支付 三个服务,边界恰好是三个团队的边界
一个大团队管全部 单体(这未必是坏事)
每个团队都自建一套工具 内部重复建设,成本 × 团队数
两个团队共管一个服务 变更排队、发布协调会、谁都不敢重构

为什么是 “被迫”:三个机制

  1. **接口即合同,合同靠协商。**两个模块之间的接口,必须由能直接对话的人谈出来。跨团队谈不出来的接口,最终会退化成 “各自实现一份” 或者 “共享数据库”。
  2. **信息跨边界衰减。**每经过一次转述,需求与约束都会丢细节。团队边界越多,系统里 “对齐成本” 的代码就越多 (防腐层、数据同步、兼容逻辑)。
  3. **局部理性。**每个团队的 KPI 是自己的交付速度,于是优化都会落在 “让自己边界内的事变简单”——边界就自然长在自己的舒适区,而不是业务需要的地方。

🔑 康威定律不是在描述 “架构应该怎样”,而是在描述 “架构一定会怎样”。忽视它,你设计的架构会在 6–18 个月里被组织慢慢改回它本来的形状。

沟通路径数:为什么团队不能太大

全连接沟通路径 = n(n-1)/2
团队规模 沟通路径数 现实感受
5 人 10 面对面能同步
8 人 28 开始需要例会
10 人 45 需要文档与流程
20 人 190 靠流程和层级,信息严重失真
50 人 1225 只能靠架构与接口替代沟通
100 人 4950 必须有部门墙

结论直接指向架构:组织规模每翻倍,沟通路径涨 4 倍。当沟通成本超过写代码的成本时,唯一的出路是用明确的模块边界 / 接口契约替代口头沟通——这正是 “架构” 的起源。

逆康威定律 (Inverse Conway Maneuver)

定义:主动调整组织结构,让期望的架构成为 “自然产物”,而不是等它自然长歪。

执行顺序 (顺序反了会失败):

① 目标架构(画 C2 容器图:想要哪几个服务、谁依赖谁)
        ↓
② 团队边界(每个服务一个 owner 团队,一对一)
        ↓
③ 依赖方向(服务依赖 = 团队依赖;被依赖方要能被依赖方「要求」)
        ↓
④ 所有权(代码库、发布权、on-call、SLO 都归 owner)
        ↓
⑤ 平台能力(把重复建设的部分收编成平台团队)
步骤 具体动作 判据
① 目标架构 先画目标状态的容器图(80.2 架构图规范) 元素 ≤ 12,每个容器一句话职责
② 团队边界 一个容器一个团队(Team Topologies 四类,见 74.2 四种团队类型,待补) 团队能独立发布该服务
③ 依赖方向 让「被依赖」的团队先成为平台团队 依赖方不需要开协调会
④ 所有权 服务目录里 owner 字段唯一 on-call 轮值表唯一
⑤ 平台能力 日志、发布、监控、脚手架收编 新服务 1 天内能上线

💡 逆定律最常见的失败方式:只重组团队,不转移所有权。团队名字改了,代码库、发布权限、on-call 还在原团队手里,架构一点没变——组织图变了,康威定律照旧生效。

用案例说话

组织动作 架构结果 时间尺度
Amazon 推行「两个披萨团队」+ 强制 API 化 服务化 + 内部 API 经济 2–3 年
Netflix 按流媒体域重组,每个域全栈 数百个微服务,团队自治理 3 年
银行按「业务能力」重组(账户 / 支付 / 风控) 从大核心系统拆出业务中台 2–4 年
一家公司原地不动,只下「拆微服务」的命令 拆完仍是分布式单体(30.3 分布式单体反模式) 6–12 个月后回滚
两个团队合并成一个 两个服务半年内被合并或共享数据库 6–12 个月

最后两行是同一枚硬币:组织不动,架构白拆;组织一合,架构必合。

错配的症状表:拿它做诊断

症状 组织病因 架构后果
一个团队维护 12 个服务 认知负荷超载(健康值:每人 1–2 个服务) 谁都不熟,改 A 崩 B
一个服务被 5 个团队修改 无明确 owner 变更排队、发布协调会、谁都不重构
每次发版都要跨 3 个团队开会 接口未契约化,或依赖方向错了 交付周期 = 会议周期
每个团队都有一套 CI / 日志 / 网关 缺平台团队 重复建设,成本 × N
业务需求总要「协调多个团队」才能上线 边界按技术分层,不按业务能力 交付周期以月计
数据库被 6 个服务共享 边界没画清(32.6 共享数据库反模式) 谁都不敢改表
重构提案永远排不上优先级 没有架构治理与决策机制(58.1 ADR 实践 / 58.3 架构评审) 技术债持续累积

怎么把它用在日常决策里

你想得到 组织上该做 反面例子
微服务化 按业务能力建全栈小团队,每队拥有 1–3 个服务 先拆 40 个服务,团队不动
模块化单体 一个大团队 + 明确的模块 owner 拆成 5 个团队共管一个单体
平台化 建平台团队,把重复建设收编 让每个业务团队「顺便」维护平台
快速集成 把两个系统放进同一团队或同一部落 靠每周对齐会维持集成
统一技术栈 技术委员会 + 平台团队落地 发一份规范文档,无落地机制

代价:逆定律不是免费的重构

代价 量级 说明
重组期生产力下降 10%–20%,持续 1–2 个季度 招聘、交接、新协作模式磨合
见效周期 2 个季度(边界清晰)→ 1 年(行为习惯) 架构图很快改,人的协作习惯很慢
知识流失风险 核心成员流失率短期上升 重组常伴随离职
频繁重组的伤害 每次重组都要付一次成本 一年一改 = 组织抖动,比错误架构更伤

⚠️ 技术约束无法靠组织解决:合规要求、遗留系统、只能有一个的共享数据库,不会因为团队重组而消失。逆定律改变的是 “人怎么协作”,不是 “物理定律”。

反模式

反模式 后果
只改架构图,不动团队 6–18 个月后架构被组织改回原形
只重组团队,不转移所有权 组织图变了,交付边界没变;康威定律照旧生效
按技术分层分团队(前端组 / 后端组 / DBA 组) 分层架构 + 交接瓶颈,交付周期被拉长
按服务数量分团队(一人一服务) 认知负荷与协调成本反向爆炸,服务水平下降
先拆微服务,再「以后补团队」 分布式单体,跨服务事务遍地,回滚成本极高
两个团队共管一个服务 变更冲突、责任真空、谁都不敢重构
一年重组三次 组织抖动,交付能力持续低位
用「架构委员会」代替所有权 决策权与交付责任分离,架构评审变成盖章

自检

Q1 公司决定 “明年做微服务改造”,但团队仍是前端组、后端组、DBA 组三个职能团队。按康威定律,一年后最可能出现什么?为什么?

▸ 答案:出现分层架构 + 服务外壳的混合体:按职能分的团队只能在自己的职能边界内画边界,于是 “服务” 被切成 “前端服务 / 后端服务 / 数据库服务”,跨服务的每次改动仍要走三层交接。更常见的结果是拆完之后又合并回去,或者退化成共享数据库的分布式单体。根因是:服务边界必须与团队边界同构;团队没变,服务边界就只能沿职能线切,而职能线恰好是交付最慢的方向。

Q2 逆康威定律听起来是 “先改组织,架构自然就对”。它最容易在哪一步失效?

▸ 答案:在第 ④ 步 “所有权” 失效。改组织结构 (改名、换汇报线) 是几周的事,但代码库归属、发布权限、on-call 责任、SLO 指标如果仍留在原团队,新团队就没有真正的决策权,遇到跨团队问题还是会回去找原团队拍板——沟通结构没变,架构就不会变。判定方法很硬:**新团队能不能在没有任何人审批的情况下,把这个服务发布到生产?**不能,就说明所有权没转移。

Q3 一个 8 人团队维护 12 个微服务,成员抱怨 “每次上线都怕”。这违反的是康威定律还是别的东西?

▸ 答案:这不是康威定律被违反,而是认知负荷超过了团队容量 (74.4)。康威定律说的是 “架构反映沟通结构”,这里沟通结构没问题 (就一个团队),问题是这个团队被要求承担超出其认知能力的边界——12 个服务的依赖、发布、告警、on-call 全压给 8 个人。解法的方向不是继续拆团队 (会更碎),而是:合并服务 (把 12 个收敛到 3–5 个)、或引入平台团队承接通用能力、或按服务重要性做取舍。康威定律解释 “边界在哪”,认知负荷决定 “边界能有多大”。