3158 字
约 10 分钟
14
S03-A04 · 架构评审机制:什么时候评、评什么、怎么收尾

"评审会开完没人改"是评审机制最典型的失败形态。它通常被归因为"大家不重视",但真实原因几乎总是机制缺口:没有触发条件,于是什么都评、每周都在开会;没有必答项,于是讨论滑向个人偏好;没有收尾规则,于是"基本同意"变成谁也不用动的结论。

评审的价值不在当场说服谁,而在于把不可逆的决定在还便宜的时候定下来,并留下能被半年后的自己读懂的判断依据。


1. 该拦的三类风险,不该拦的所有东西

评审会失控的第一步是范围失控。判断某议题是否值得进评审,只看它是否命中三类风险之一。

类别 具体形态 为什么必须拦
不可逆决策 数据模型、存储选型、对外契约、部署形态 事后改造代价按季度计
跨团队边界 服务拆分、职责归属、共享库、同步调用方向 影响别人的排期与故障面
容量与成本 峰值容量假设、扩容路径、第三方按量计费 上线后才发现的账单无法回收

不该拦的同样要明确:实现细节(类怎么拆、用什么设计模式)、个人偏好(命名风格、日志格式细节)、可随时回退的局部改动(加个索引、调个超时)。把这些放进评审,评审就会变慢,然后被绕过——被绕过的评审比没有评审更糟,因为它制造了"已评审"的错觉。


2. 触发条件:把"要不要评"变成查表

触发项 判据 例外
新系统 / 新服务 引入新的运行时、存储或对外入口 一次性脚本、内部工具不算
跨服务改动 改动后调用方需同步变更 纯增量且调用方无感
数据模型变更 表结构、字段语义、留存周期变化 加可选字段且无回填
第三方引入 新增外部依赖、数据出境、SLA 依赖 仅开发期依赖
容量级变化 预期 QPS 或存储量跨数量级 线性增长内的常规扩容

触发条件写死成表,好处是可被审计:任何一次线上事故,事后能回答"当时该不该评、评了没有"。"什么都评"是形式化的起点——当评审变成每周固定议程,参与者会用最低成本通过它,评审就退化成签字。


3. 材料的四个必答项

材料不合格,评审必然发散。四项必答缺一项就不排会。

必答项 写清什么 缺失后果
问题 现状的哪个具体约束不满足(带量级) 讨论变成"要不要做"而不是"怎么做"
选项 至少两个真实可选方案,含"不做" 变成单向汇报,评审无从判断
取舍 每个选项放弃了什么,用 A 换 B 只剩优点罗列,隐性代价后置爆发
验证方式 上线后用什么指标判断决策是否成立 无法事后回看,同类决策重复犯错
## 决策请求
问题: 订单查询 P99 在促销期从 300ms 涨到 1.8s,索引已无优化空间
选项: A 分库(改造成本高) / B 读副本+缓存(一致性让步) / C 不做(接受 1.8s)
取舍: B 用"读到滞后数据"换延迟,滞后窗口按秒级估计
验证: 上线后 P99 < 400ms 且不一致投诉 < 阈值;否则回滚到 A 方案评估

"含不做选项"这一条最常被省,但它是评审质量的支点:没有"不做",就没有真正的比较。


4. 角色分工:谁提供什么,谁拍板

角色 职责 不该做的事
提出者 写材料、列选项、给出推荐与理由 把评审当审批流程走
领域专家 指出材料中与事实不符的假设 用偏好替代判据
运维/安全视角 补齐容量、故障面、依赖与合规约束 只在最后提"要注意安全"
决策人 定结论、定条件项与责任人 让会议以"再讨论"收场

只有一个决策人是关键设计。多人共同决策的结果通常是"谁都不用负责",而评审最需要的产出恰恰是明确的、可追责的取舍。

review:
  id: AR-2026-11-09-orders
  decision_owner: ROLE_A            # 单一拍板人
  required: [proposer, domain_expert, ops, security]
  quorum: 3                         # 缺席不影响结论有效性
  async_window_hours: 48            # 异步意见期

5. 异步评审往往比开会更有效

会议的价值是分歧收敛,不是信息传递。把材料阅读放到会前异步完成,会议只处理仍有分歧的点,能同时降低成本与提高质量。

环节 异步 会议
材料阅读 48 小时窗口,逐条留意见 现场念 PPT,多数人首次看到
事实澄清 文字记录,可回查 口头问答,事后无人记得
分歧识别 按意见条数自动汇总 取决于谁嗓门大
结论形成 决策人书面定稿 现场"基本同意"

判断标准很实用:如果会议的前 30 分钟在讲背景,这场会就该改成异步。


6. ADR:写什么、放哪里

ADR 不是会议纪要,而是决策的不可变记录。四段结构够用:背景、决策、后果、替代方案。

# ADR-017 订单查询采用读副本 + 缓存

## 背景
促销期 P99 1.8s,分库改造成本按季度计,索引已无空间。

## 决策
读请求走副本,热点键加缓存,接受秒级不一致。

## 后果
- 正面: 延迟目标可达,改造周期两周
- 负面: 用户可能看到滞后状态;需新增不一致投诉监控
- 回滚: 关闭缓存开关即回到旧路径(保留一个发布周期)

## 替代方案
A 分库:彻底但与本次排期冲突,留作下一阶段的候选。
存放位置 优点 风险
代码仓库(与实现同目录) 与代码同版本,改动可追溯 跨仓库决策分散
Wiki / 文档系统 集中易检索 与代码脱节,容易过期
工单系统 与排期绑定 检索差,难以形成序列

务实做法:ADR 放代码仓库,索引放 Wiki。ADR 一旦定稿不改正文,后续变更用新 ADR 覆盖并互相链接——这才是"决策有历史"。


7. 结论的三种形态与条件项跟踪

结论 含义 后续动作 退出条件
通过 方案可执行,无条件 进入排期 无
有条件通过 方向可行,但需补齐若干项 条件项进待办,指定责任人与期限 条件项全部关闭才允许上线
打回 材料或方案不成立 明确缺什么、下次评审前补什么 补齐后重新提交

"有条件通过"是最容易烂尾的一类:条件项写进了纪要,却没进任何人的待办。对策是把条件项做成带责任人与截止日期的条目,并与上线门禁挂钩。

[AR-2026-11-09-orders] 条件项
C1 补容量测算(峰值按 3 倍)   owner=ROLE_B  due=2026-11-20  status=open
C2 不一致投诉监控 + 告警阈值 owner=ROLE_C  due=2026-11-25  status=open
规则: C1..Cn 未全部 closed 前,发布流水线拒绝该服务的生产部署

8. 意见质量的判定与事后验证

评审意见分三等,只有前两等值得回应。

等级 形态 处理
可执行 "若读副本延迟超过 X,会与主库语义冲突,需给出兜底" 必须回应并落到材料或条件项
需澄清 "这里的容量假设从哪来" 补充数据后回到评审
泛泛而谈 "建议考虑扩展性""要关注稳定性" 记录但不阻塞,避免稀释注意力

事后验证是评审闭环里最常缺的一环。决策落地后的固定回看(例如上线后一个月)只回答一个问题:当初的验证指标达到了吗?没达到,说明判据错了或假设错了,两者都该写进下一次评审的输入。

# 回看记录与 ADR 互链,一个季度扫一遍未闭合项
ADR-017  verify_at=+30d  metric=P99<400ms  result=met  note=促销期峰值仍需观察
ADR-012  verify_at=+30d  metric=不一致投诉<阈值  result=missed → 触发 ADR-017 复核

9. 流于形式的五个信号

信号 含义 纠偏
材料永远在会前十分钟发出 评审变成通报 设材料截止时间,否则不排会
每次结论都是"通过" 门槛失效或议题选错 抽查一次被否的案例是否存在
参与者固定为同一批人 领域专家缺位,靠通才判断 按议题拉人,非常设委员会
条件项从不关闭 结论没有约束力 条件项与发布门禁绑定
讨论集中在命名与格式 议题越界到实现细节 用第 1 节的三类风险筛议题

10. 排错:评审机制本身的六种故障

现象 根因 处理
会开完没人动 结论无责任人、条件项无期限 结论必须带 owner 与 due
评审成为排期瓶颈 触发条件过宽 收窄到三类风险,其余走轻量走查
意见互相矛盾无人裁决 缺单一决策人 指定 decision_owner
同一问题反复评审 无 ADR,决策不可追溯 决策入 ADR,索引化
材料质量参差 无必答项模板 四项缺一不排会
参与者不读材料 异步窗口太短或材料太长 材料限一页结论 + 附录

11. 边界:这些情况不该走评审

场景 判断 做法
小改动(加索引、调超时、改文案) 可逆且影响面局部 走代码评审即可
单人项目 流程成本超过收益 保留 ADR 记录,跳过会议
紧急故障修复 时间是第一约束 先修,事后 48 小时内补评审
探索性原型 结论未定,评了也白评 明确标注 experiment,禁止直接上生产
已被更高层约束锁死的决策 无可选项 只做记录与影响说明,不做评审

评审的成立前提是存在真实选项。当选项已被预算、合规或组织决定锁死,评审能做的只剩把约束写清楚——硬开一场会,只会生产一份没人再读的纪要。


12. 自测

  1. 判断一个议题该不该进评审,看哪三类风险?
  2. 为什么"含不做选项"是评审质量的支点?
  3. 决策人只有一个,解决了什么问题?
  4. "有条件通过"为什么最容易烂尾,怎么绑定?
  5. 什么信号说明评审已经形式化?
  6. 紧急故障修复为什么走事后评审而不是当场评审?
S03-A04 · 架构评审机制:什么时候评、评什么、怎么收尾
https://www.clxhxhhr.top/posts/6110/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。