任何需要某人审批才能推进的流程都创造了一种结构性权力不对称。审批者永远可以说不,举证责任永远在寻求审批的人身上。当这种不对称被利用,有意或无意,审批门就变成了武器。以下反模式来自代码审查但适用于任何守门流程:编辑审查、设计评审、法务签字、采购审批。

每种模式的危险在于它与正当的尽职尽责无法区分。 守门人永远可以声称自己”只是在彻底一些”。

模式

千次往返之死

只读到够发现一个鸡蛋里挑骨头的地方就停下。等修好。再往下读一点。发现另一个第一次就能提的问题。停下。再等。每一个往返耗费一天。工作以尽可能慢的速度演进而审查者在技术上”对每一次修改都及时回应了”。

这是以程序进行的破坏:审查者正确地遵循了流程,回应每一个版本,提出合理的问题。功能障碍在于串行了本可并行的,而没有规则要求并行反馈。

勒索信

提交者急需这个特定的变更。审查者不急。不对称创造了杠杆:只有在提交者完成无关的、对审查者有利的工作之后才批准。人质是提交者的紧迫性。

双人夹击

两个审查者提出不兼容的要求。各自把反馈指向提交者,从不指向另一个审查者。提交者在矛盾的要求之间弹来弹去直到放弃。审查者通过用提交者做缓冲来回避彼此之间的直接冲突。

这是组织形式的三角化陷阱:不是直接解决分歧,双方都迫使第三方吸收他们冲突的代价。

猜谜游戏

以模糊理由批评方案,“设计原则”、“未来兼容性”、“架构考虑”,而不明确什么样才可接受。提交者猜测,实现了不同的东西,又被拒绝。审查者从不亮出立场,所以永远不会错。

这是评判而不产出高地位操作:审查者通过保持在评估模式来维持权威,而提交者在生成选项中耗尽自己。

优先级倒置

前几轮花在琐碎问题上,变量名、注释错别字。等这些全部修好,然后揭示一个需要重写你刚让他们打磨过的部分的根本性架构问题。传达的信息是:你的时间不被重视。

迟到的设计评审

一大块工作已经半提交了。审查者没有被咨询过原始设计,或者被咨询过但输了。现在他们把一个小但阻塞性的变更扣为人质,直到整个之前的设计被重新论证。他们把一次战术审查变成了战略否决。

第22条军规

如果变更是一个大补丁,“太难审查了,拆开”。如果是很多小补丁,“这些单独没意义,合起来”。任何权衡都能被武器化:可读的代码”性能不可接受”;优化过的代码”不可维护”。审查者靠在两个合理关切之间来回切换来赢,让同时满足两者成为不可能。

翻转

突然反对一个你已经批准过三次的模式。当提交者指出不一致时回应:“你说得对,那些也该改。“不主动去改。运气好的话,提交者把这理解为要追溯修复所有之前的实例的指示,免费劳动,用一次突然的品味改变购得。

审查剧场

流程给出了检测和解决错误的幻觉而没有任何效果证据。审查发生了,评论留了,批准授予了,但仪式与质量没有可衡量的关系。流程存在因为它看起来像质量控制,而看起来像质量控制对组织舒适来说就够了。实际质量不被衡量因为衡量它有暴露剧场的风险。

为什么这些持续存在

每种反模式管用是因为守门人有合理否认空间。彻底不管是被质量驱动还是被权力驱动看起来都一样。CIA破坏手册辨认了完全相同的动态:最有效的破坏与尽职尽责无法区分。合理否认空间就是驱动CYA 文化的同一种货币——守门人和掩护屁股的人是同一种原型穿着不同戏服,都在用真正的判断换取免于下行的安全感。

救火员陷阱使其复合:当组织已经缺少能对糟糕审查说不的高级工程师时,初级提交者没有权威来挑战守门人。他们唯一的选择是服从,这教会他们发声是徒劳的,加速了摧毁团队的发声萎缩

死海效应是长期结果:最在乎做好工作的工程师最不能忍受武器化的审查。他们蒸发。残渣,那些学会了讨好守门人而非建好软件的人,成为下一代审查者。

常见误读

低水平理解:“代码审查坏了,直接不审查就发布。”

中等水平理解:“这些只是人际问题,制定更清楚的审查指南。”

更好的理解:审批门创造了守门的结构性激励,再多的流程文档都无法阻止权力动态通过被批准的渠道流动。 修复不是更多规则而是让审查者对吞吐量的影响可问责,不仅衡量抓到了什么,还衡量什么被阻塞、延迟或杀死了。

核心收获

模式被编目不是为了指责个别审查者而是为了让结构性动态可见。大多数守门人不会有意识地武器化他们的权威。他们在做系统激励的事:通过批评而非贡献来展示价值。审批门奖励发现问题,不奖励解决问题。一旦你看到这一点,每个组织中的每个门,编辑的、法务的、合规的、采购的,都显现同样的模式。

参考: