目标
评审退化有三个根因:diff 大到装不进脑子、负载集中在一个人身上、每条评论都像否决权。限制尺寸、轮转分摊、显式区分阻断与建议——修的是根因而不是症状。标记制度还是一种善意:作者能廉价地采纳建议、专门地辩论阻断点。
步骤要点
- 约束 PR 尺寸与目的:设软上限(如 400 行改动)与单一目的规则,并给真正的大变更提供文档化路径(堆叠 PR 或特性切片)。
- 公平分配评审:轮转加负载均衡而不是靠自愿,跟踪每人每周评审数防止资深者包揽一切。
- 落实首响时限:约定一个工作日内首次响应,超时进团队指标而非针对个人升级。
- 区分阻断与建议:评审者必须标记评论类型,合并条件只看阻断集,建议永不设卡。
- 度量评审回路:跟踪首响中位数、复审轮数与超龄 PR,每月按痛点调一个流程变量。
排错提示
评审总落在同一人头上是轮转缺失,把每人的周评审数做成可见指标;每条评论都引发辩论是没打类型标记,blocking 与 suggestion 必须显式标注;大 PR 被草草扫过就是该切片了,堆叠 PR 是沟通选择不是功能牺牲。
适用边界
尺寸限制对机械性重构(批量改名、格式化)应豁免并配自动验证;评审 SLA 受团队时区与值班安排影响,跨时区团队要放宽首响窗口。
代码示例
policy:
soft limit: 400 changed lines (median target: 180)
large change: stacked PRs (base <- feature-slice-1
<- feature-slice-2)
rotation: round-robin, load-balanced
(reviewer A: 11, B: 9, C: 10 this week)
SLA: first response within 1 business day
comment types: [blocking] / suggestion:
"blocking: this swallows the error"
"suggestion: could name this variable `attempts`"
metrics (monthly):
median first response: 4.1h (target: 1 day) OK
median re-review rounds: 1.6
PRs aging > 3 days: 2 (was 14)