امنیت، هویت، استقرار و تاب‌آوری · فصل ۹ — Resource، Provider، Cost و Organizational Failure · 129

Approval Bottleneck

Diagnose an approval bottleneck from policy topology, queue age, reviewer capacity, change risk and rework evidence; distinguish necessary control from avoidable serial waiting; choose bounded alternatives such as authorized reviewer pools, risk-tiered review, automation or escalation without silently bypassing governance; and prove recovery by reducing blocked time while preserving the required control outcome. می‌تواند failure family «Approval Bottleneck» را بازتولید/تشخیص دهد و detection، containment و recovery مناسب را تعیین کند.

Approval Bottleneck — fa-IR

Lesson summary

Diagnose an approval bottleneck from policy topology, queue age, reviewer capacity, change risk and rework evidence; distinguish necessary control from avoidable serial waiting; choose bounded alternatives such as authorized reviewer pools, risk-tiered review, automation or escalation without silently bypassing governance; and prove recovery by reducing blocked time while preserving the required control outcome.

می‌تواند failure family «Approval Bottleneck» را بازتولید/تشخیص دهد و detection، containment و recovery مناسب را تعیین کند.

This lesson produces

می‌تواند failure family «Approval Bottleneck» را بازتولید/تشخیص دهد و detection، containment و recovery مناسب را تعیین کند.

Who it is for

Foundation

Use a guided boundary matrix and one explicit ambiguity repair.

Repair

Re-run only the failed evidence dimension with a smaller deterministic synthetic case.

Experienced

Start from mixed evidence; require competing explanations, negative evidence and transfer.

Prerequisites

1. Do not confuse an approval control with a bottleneck

A required review or Code Owner is not automatically a failure. Approval Bottleneck exists when a technically ready change spends a dominant share of its lead time in approval topology, reviewer-capacity waiting, serial gates, or repeated re-review. First prove the delay comes from approval flow rather than missing tests, unclear requirements, or a justified risk hold.

2. Map policy topology before measuring speed

For every change, record three separate facts: risk tier, the gate actually required, and the reviewers authorized to satisfy it. If everything from a routine dependency update to access-control code is routed through one specialist, the failure may be topology rather than a slow person. Policy authority must remain separate from team habit.

3. Queue age and review latency are different signals

queue_age is the wait before review begins; review_latency is the time from review start to a valid response. A long queue with fast reviews can indicate insufficient capacity. A short queue with many long rounds can indicate rework or re-review churn. Reading both prevents one-metric diagnosis.

4. Separate approval-blocked time from total lead time

Total lead time includes coding, CI, product waiting, review, and deployment. This lesson requires isolating the approval-related share. If a change was mostly stopped by test failures or incomplete evidence, reviewer scarcity is not the dominant blocker. The record keeps the contribution of each blocker auditable.

5. Reviewer capacity is not a headcount

eligible_reviewer_count, actual availability, skill boundary, and authorized substitution must be considered together. Five engineers do not create five units of high-risk review capacity if only one may approve access-control changes. Conversely, an authorized pool for low/medium risk can reserve the specialist for work that truly requires specialist control.

6. Serial approval multiplies waiting

Independent gates executed serially can accumulate delay even when each reviewer responds quickly. Before removing a control, test whether independent reviews can run in parallel, automated evidence can be produced earlier, or each risk tier can enter a more appropriate path. The target is the same control outcome with less avoidable waiting.

7. Stale approval is a distinct failure mode inside this boundary

GitHub can invalidate an approval after a new commit. That behavior may be required to preserve control, but repeated small edits after review can turn the dominant delay from scarcity into a re_review_loop. Adding a second reviewer may have little effect when every update restarts approval.

8. Do not label incomplete technical evidence as an approval bottleneck

If a change lacks required tests, threat analysis, rollout evidence, or acceptance evidence, a reviewer may be correct to hold it. In the third fixture, the queue looks long but several changes would not be merge-ready even with instant reviewers. The classification must remain TECHNICAL_EVIDENCE_GAP or OPEN.

9. Risk-tiered review is not a governance bypass

Low-risk changes can use a broader reviewer pool, automation, or a different approval path when policy explicitly authorizes it. This preserves governance while matching control to risk. The high-risk specialist gate can remain intact while routine changes stop consuming specialist queue capacity.

10. An authorized alternative must be explicit

Every recovery option needs authority: an authorized reviewer pool, an authorized substitute, automation eligibility, an escalation path, or a recorded exception. “Merge it for now” is not recovery. If authority for the alternative is unknown, use DEFER or ESCALATE and preserve UNKNOWN state.

11. Containment, recovery, and closure are separate

Stopping low-risk intake into the specialist queue can be containment. Creating an authorized pool or parallel review can be recovery. Closure requires lower queue age and blocked lead time, controlled re-review behavior, and preservation of the required control outcome. One successful merge is not enough.

12. Approval Flow Bottleneck Diagnosis & Recovery Record v1

The record includes change_risk, required_gate, eligible_reviewer_count, queue_age, review_latency, blocked_lead_time, reviewer_availability, serial_steps, re_review_count, technical_evidence_complete, authorized_substitute, automation_eligibility, escalation_path, control_preserved, closure_probe, and residual_governance_risk. Every claim is labeled OBSERVED, AUTHORITY, INFERRED, or UNKNOWN.

13. Build classification from evidence

HEALTHY_CONTROL_FLOW means the required control exists and queue/rework are proportionate. APPROVAL_CAPACITY_BOTTLENECK means technical evidence is complete but approval capacity or topology dominates waiting. RE_REVIEW_CHURN means reviewer capacity is adequate but stale invalidation and repeated edits dominate delay. TECHNICAL_EVIDENCE_GAP means approval is a symptom, not the cause. If policy or capacity is unknown, remain OPEN.

14. Lab: eight fixtures and 64 assertions

The lab covers specialist serial overload, a justified high-risk hold, incomplete technical evidence, a healthy reviewer pool, stale-approval churn, an unavailable reviewer with an authorized substitute, a low-risk automation candidate, and unknown policy topology. Eight deterministic outputs are checked per case: gate state, capacity state, queue state, re-review state, technical-evidence state, dominant blocker, recovery path, and decision—64 assertions total.

15. Exit checklist and transfer

Before exit, separate policy-required gates from team habit; measure queue age and review latency independently; attribute blocked lead time to actual blockers; record reviewer eligibility and availability; check technical evidence before blaming approvals; choose alternatives only with authority; and prove closure with lead-time improvement plus control_preserved=true. Then rebuild the transfer fixture from blank evidence: a second medium-risk reviewer is added, but every code-changing commit invalidates prior approval. Decide whether scarcity still dominates or re-review churn has taken over.

Assessment

There is no answer key in this lesson pack; answer it yourself and mark honestly. "Needs review" sends the lesson to your review queue.

Q1 retrieval

Why is a required approval not automatically an Approval Bottleneck?

lesson ✗AI ✗notes ✗

Q2 application

All technical checks are green, eight low-risk changes and three medium-risk changes wait behind the same specialist needed for one high-risk change. What should be tested first?

lesson ✗AI ✗notes ✗

Q3 diagnosis

Reviewer capacity is sufficient, but each code-modifying commit invalidates prior approval. What is the likely dominant blocker?

lesson ✗AI ✗notes ✗

Q4 decision

When is automation a valid recovery path for approval delay?

lesson ✗AI ✗notes ✗

Q5 transfer

A second reviewer is added but lead time barely improves because approvals repeatedly become stale. What should the record conclude?

lesson ✗AI ✗notes ✗
Assessment rubric

A sufficient response identifies the required approval topology, separates queue age from review latency, attributes blocked lead time to approval versus technical-evidence gaps, records authorized reviewer capacity and re-review behavior, preserves UNKNOWN state, and selects only authorized recovery paths. Closure requires lower approval-related blocked time while the declared control remains preserved. Transfer must be rebuilt from the changed stale-approval evidence rather than copying the original scarcity diagnosis.

References & freshness

GitHub Docs — Available rules for rulesets
·
Used to support configurable required approvals, Code Owner review, and stale-approval behavior. It does not prove that a particular organization has enough reviewer capacity or that a specific gate is appropriate for every risk tier.
Google Engineering Practices — Speed of Code Reviews
·
Used as Google-specific evidence that slow reviews reduce team velocity and that fast response should not sacrifice code health. It is not a universal SLA.
Google Engineering Practices — The Standard of Code Review
·
Used to reinforce that review speed must be balanced with code-health standards. It does not define MAKNOW approval topology or recovery policy.

Case studies

Lesson visuals

FLR019-V1

Lab files

Implement the bounded evaluator in starter.py for the eight supplied synthetic approval-flow cases. No network calls are needed. Keep required policy gate, technical readiness, reviewer eligibility/availability, queue age, review latency, serial steps, re-review count, and authorized alternatives as separate evidence dimensions. A long queue alone is never enough to classify an approval bottleneck. Preserve OPEN state when policy authority is unknown, and do not treat a faster path as closure unless the required control is preserved.

Run python run_checks.py to verify fixture shape before implementing the evaluator.

Lesson media & slides

MAKNOW_FLR-019_DECISION_EVIDENCE_TABLE_v1.0.svg
DECISION EVIDENCE TABLE v1.0.svg
MAKNOW_FLR-019_FAILURE_REPAIR_v1.0.svg
FAILURE REPAIR v1.0.svg
MAKNOW_FLR-019_PRIMARY_MODEL_v1.0.svg
PRIMARY MODEL v1.0.svg
MAKNOW_FLR-019_WORKED_EXAMPLE_v1.0.svg
WORKED EXAMPLE v1.0.svg

Teaching files (download)

XLSXApproval Flow Bottleneck Diagnosis Recovery Record v1 v1.0.0.xlsxTeaching files (download)
DOCXApproval Flow Bottleneck Diagnosis Recovery Record v1 WORKSHEET v1.0.0.docxTeaching files (download)
PDFApproval Flow Bottleneck Diagnosis Recovery Record v1 WORKSHEET v1.0.0.pdfTeaching files (download)