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

Single-person Dependency

failure را بعد از وقوع و به‌صورت موردی تحلیل می‌کند و هنوز detection، containment و repair path از قبل طراحی نشده است. موضوع جاری: «Single-person Dependency». می‌تواند failure family «Single-person Dependency» را بازتولید/تشخیص دهد و detection، containment و recovery مناسب را تعیین کند.

Single-person Dependency — en-US

خلاصهٔ درس

failure را بعد از وقوع و به‌صورت موردی تحلیل می‌کند و هنوز detection، containment و repair path از قبل طراحی نشده است. موضوع جاری: «Single-person Dependency».

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

خروجی این درس

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

پیش‌نیازها

1. خرابی پنهان: سیستم تا وقتی فرد کلیدی حاضر است سبز می‌ماند

Single-person dependency وقتی شکل می‌گیرد که یک workflow حیاتی فقط با حضور یک نفر قابل انجام باشد: deployment، rollback، migration، credential operation، incident escalation یا final approval. این failure معمولاً در dashboard دیده نمی‌شود، چون سرویس تا وقتی primary در دسترس است عادی کار می‌کند. آزمون واقعی زمانی است که primary عمداً از تمرین حذف شود و ببینیم آیا workflow بدون او کامل می‌شود، safely escalate می‌شود یا متوقف می‌ماند.

2. مالکیت تخصصی با single point of failure یکی نیست

داشتن یک subject-matter expert بد نیست. مشکل وقتی است که دانش، authority، credential، runbook یا تجربه اجرایی طوری متمرکز شده باشد که نبود یک نفر recovery را متوقف کند. بنابراین سؤال درست «چند نفر اسمشان owner است؟» نیست؛ سؤال این است که «چند نفر می‌توانند با مجوز مستقل و evidence فعلی، workflow را واقعاً اجرا یا به مسیر امن دیگری escalate کنند؟»

3. Critical workflow را قبل از شمارش افراد تعریف کنید

ریسک را روی workflowهای مبهم مثل «backend» یا «production» نسنجید. واحد سنجش باید عملیاتی باشد: deploy service A، rotate rollback credential، restore database from failed migration یا approve critical module change. ممکن است یک تیم برای deploy پوشش خوب داشته باشد اما برای data repair هنوز فقط یک نفر داشته باشد. Record باید این مرز را صریح نگه دارد.

4. Backup اسمی با qualified backup متفاوت است

Backup فقط وقتی برای این درس «qualified» است که knowledge لازم، authorization مستقل، access فعلی، procedure قابل استفاده و evidence rehearsal داشته باشد. اگر همکار procedure را می‌داند ولی production access ندارد، qualified نیست. اگر access دارد اما rollback را هرگز اجرا نکرده و هیچ rehearsal یا safe-escalation evidence ندارد، qualification هنوز OPEN است. اسم در rota یا CODEOWNERS فقط routing evidence است، نه capability proof.

5. Independent access یک بعد جدا از دانش است

دانش و دسترسی را در یک ستون ادغام نکنید. کسی ممکن است migration playbook را خوب بفهمد ولی MFA device، break-glass path یا role لازم را نداشته باشد. برعکس، داشتن permission بدون دانش عملیاتی هم closure نیست. Record باید knowledge, independent_access و authority_boundary را مستقل نگه دارد تا repair دقیقاً روی gap واقعی انجام شود.

6. Runbook باید current و executable باشد

وجود فایل runbook کافی نیست. procedure باید با state فعلی سیستم هم‌خوان باشد، dependencyها و safety checks را نشان دهد و مسیر escalation را مشخص کند. Counterexample این درس runbookی است که هنوز به deployment step بازنشسته‌شده اشاره می‌کند؛ backup access دارد اما rehearsal به‌درستی fail می‌شود. این failure evidence ارزشمندتر از یک document checklist سبز است.

7. CODEOWNERS و rota فقط بخشی از evidence هستند

GitHub اجازه می‌دهد برای یک مسیر چند code owner تعریف شود و در صورت required review، approval یکی از ownerهای فهرست‌شده requirement را برآورده کند. این برای routing و reviewer redundancy مفید است، اما نشان نمی‌دهد هر owner production access، incident knowledge یا credential custody لازم را دارد. پس این سیگنال را به‌عنوان authority/configuration evidence ثبت کنید، نه closure proof.

8. Rotation، shadowing و backup escalation قابلیت را منتقل می‌کنند

راهنمای Google SRE on-call از rotation، documentation، shadow shift و backup escalation برای انتقال مسئولیت استفاده می‌کند. الگوی مهم این است که backup ابتدا کنار فرد باتجربه تمرین می‌کند، سپس primary می‌شود و مسیر escalation هنوز وجود دارد. این یک practice example است، نه نسبت اجباری نیروی انسانی. در Record، shadow/rotation evidence باید به workflow مشخص و تاریخ تمرین bind شود.

9. Rehearsal باید primary-absent باشد

اگر primary کنار backup نشسته و هر قدم را می‌گوید، ما knowledge transfer را تمرین کرده‌ایم اما independence را ثابت نکرده‌ایم. closure rehearsal باید primary را از execution path حذف کند. backup باید با access مستقل و runbook قابل ممیزی workflow را complete کند یا طبق مسیر تعریف‌شده correctly escalate کند. اگر escalation دوباره به همان primary ختم شود، dependency بسته نشده است.

10. Safe escalation می‌تواند outcome معتبر باشد

همه backupها لازم نیست عمیق‌ترین repair را به‌تنهایی انجام دهند. برای بعضی workflowها، outcome معتبر این است که backup incident را تشخیص دهد، blast radius را محدود کند و به یک تیم مستقل و authorized escalate کند. شرط مهم این است که escalation path خودش single-person dependency جدید نسازد و recovery time با نیاز workflow سازگار باشد. Record باید این distinction را آشکار نگه دارد.

11. Containment با closure فرق دارد

افزودن یک backup name، دادن temporary access یا نوشتن runbook می‌تواند containment باشد. closure فقط وقتی رخ می‌دهد که evidence مستقل نشان دهد critical workflow بدون primary قابل انجام یا safe escalation است. اگر rehearsal هنوز اجرا نشده، classification باید OPEN یا حداکثر REDUCED بماند. یک mitigation سبز، causal proof یا حذف residual risk نیست.

12. Key-person Dependency Resilience & Handoff Record v1

Record این درس حداقل این fieldها را نگه می‌دارد: critical workflow، primary owner، qualified backup count، independent access، credential/authority boundary، runbook current، shadow/rotation evidence، last rehearsal، primary-absent result، escalation path، recovery time، knowledge transfer، role coverage، residual gap و closure status. هر decisive claim باید به observation یا authority evidence trace شود؛ UNKNOWN را به fact تبدیل نکنید.

13. Classification: OPEN، REDUCED یا CLOSED

OPEN یعنی workflow هنوز روی primary متوقف می‌شود یا evidence کافی نداریم. REDUCED یعنی بخشی از gap repair شده اما یک branch، access boundary یا rehearsal gap باقی است. CLOSED یعنی برای همان bounded workflow حداقل یک backup authorized با procedure فعلی در primary-absent rehearsal workflow را کامل کرده یا به escalation مستقل و معتبر رسانده است. این classification جهانی نیست؛ به scope همان workflow محدود است.

14. Lab: هشت fixture و 64 assertion

Lab هشت سناریو دارد: primary-only، backup اسمی بدون access، access بدون knowledge، runbook stale با rehearsal fail، backup با safe escalation مستقل، backup با rehearsal کامل، دو backup qualified، و transfer fixture که در آن همه access و runbook دارند اما rare data-repair فقط نزد primary تجربه شده است. برای هر case هشت خروجی قطعی بررسی می‌شود: qualified backup count، access independence، runbook readiness، rehearsal result، workflow state، dependency classification، closure status و decision. مجموعاً 64 assertion اجرا می‌شود.

15. Exit checklist و انتقال

قبل از خروج، workflow را دقیق نام‌گذاری کنید؛ primary و backupها را از روی evidence ثبت کنید؛ knowledge و access را جدا بسنجید؛ current بودن runbook و آخرین rehearsal را بررسی کنید؛ primary-absent result و escalation path را ثبت کنید؛ containment را closure جا نزنید؛ residual gap را نگه دارید. سپس transfer fixture را از صفر ارزیابی کنید: سه نفر access و runbook فعلی دارند اما فقط primary rare data-repair را انجام داده است. برای همان branch تصمیم بگیرید CLOSED، REDUCED یا OPEN و evidence لازم برای تغییر state را بنویسید.

ارزیابی

پاسخ‌نامه‌ی این درس در بسته‌ی آموزش وجود ندارد؛ خودت جواب بده و صادقانه علامت بزن. «نیاز به مرور» درس را به صف تکرار می‌فرستد.

Q1 retrieval

Why do two names in CODEOWNERS or a backup rota not prove single-person dependency is closed?

lesson ✗AI ✗notes ✗

Q2 application

A backup knows rollback but lacks production authorization. How should the record classify the gap?

lesson ✗AI ✗notes ✗

Q3 diagnosis

A backup has access and a runbook, but the runbook references a retired deployment step and rehearsal fails safely. What does the failure show?

lesson ✗AI ✗notes ✗

Q4 decision

When can safe escalation count as a successful primary-absent outcome?

lesson ✗AI ✗notes ✗

Q5 transfer

All three engineers have production access and current runbooks, but only the primary has executed a rare data-repair escalation. What is the bounded conclusion?

lesson ✗AI ✗notes ✗
ملاک‌های ارزیابی (rubric)
  • Boundary: the learner names a bounded critical workflow rather than a global team label.
  • Evidence: backup knowledge, independent access, procedure currency, rehearsal and escalation are traced separately.
  • Uncertainty: unsupported dimensions remain UNKNOWN/OPEN instead of being inferred from names or documents.
  • Containment vs closure: added owners, permissions or runbooks are not treated as closure without a primary-absent oracle.
  • Transfer: the rare data-repair branch is rebuilt from changed evidence rather than inheriting the prior team classification.

منابع و تازگی

GitHub Docs — About code owners
·
Current CODEOWNERS semantics are used only as evidence of configured review routing/redundancy. Multiple owners do not prove production access, operational knowledge, or independent recovery capability.
Google SRE Workbook — On-Call
·
Used for examples of on-call rotation, documentation, shadow shifts and backup escalation during transfer of operational responsibility. Not treated as a universal staffing or certification rule.
Google Engineering Practices — Introduction to Code Review
·
Used only to support the idea that reviewers should be qualified and reasonably responsive and that different parts may require different reviewers. It does not prove production-operational resilience.

مطالعهٔ موارد (case studies)

تصاویر درس

FLR022-V1

فایل‌های آزمایشگاه

Implement the bounded evaluator in starter.py for the eight supplied synthetic workflow cases. No network calls are needed. Keep knowledge, authorization/access, runbook currency and primary-absent rehearsal as separate evidence dimensions. A named backup is not automatically qualified. Closure is allowed only for the bounded workflow when independent execution or an independent safe escalation is proven.

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

رسانه و اسلایدهای درس

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

فایل‌های آموزشی (دانلود)

XLSXKey person Dependency Resilience Handoff Record v1 v1.0.0.xlsxفایل‌های آموزشی (دانلود)
DOCXKey person Dependency Resilience Handoff Record v1 WORKSHEET v1.0.0.docxفایل‌های آموزشی (دانلود)
PDFKey person Dependency Resilience Handoff Record v1 WORKSHEET v1.0.0.pdfفایل‌های آموزشی (دانلود)