وقتی مدیر محصول میگوید «پرداخت باید سریع باشد»، مدیر فروش «نسخه حتماً قبل از کمپین بالا بیاید» و تیم فنی «تا رفع ریسک PSP انتشار ندهیم»، مشکل کمبود جلسه یا ضعف فن بیان نیست. سه انتظار داریم که هنوز قابل سنجش، قابل مقایسه و قابل تصمیم نشدهاند. اگر تیم QA فقط آنها را در صورتجلسه ثبت کند، اختلاف تا شب انتشار پنهان میماند؛ همان شبی که هر طرف تصور میکند توافق قبلی دقیقاً به نفع او بوده است.
این راهنما یک روش اجرایی برای مدیریت انتظارات ذینفعان در QA ارائه میکند: نیاز و پیامد را کشف میکنیم، انتظار مبهم را به «قرارداد انتظار کیفیت» تبدیل میکنیم، شاخص و آستانه و شواهد را میبندیم، تعارض را به صاحب تصمیم میرسانیم و پس از انتشار دوباره واقعیت را با قرارداد میسنجیم. هدف راضیکردن همه نیست؛ هدف این است که هیچ وعده، ریسک یا Trade-off مهمی بدون نام، شاهد و تصمیمگیر باقی نماند.
خلاصه اجرایی: از جمله مبهم تا قرارداد انتظار
- مدیریت انتظار با مدیریت آدمها فرق دارد: موضوع، تبدیل برداشتهای متفاوت به قراردادهای آزمونپذیر و تصمیمهای ثبتشده است.
- ذینفع را با عنوان شغلی دستهبندی نکنید: نیاز، پیامد، تصمیمی که میتواند بگیرد و هزینهای که تحمل میکند مهمتر از عنوان اوست.
- هر انتظار نسخهدار است: Outcome، Population، Scenario، Indicator، Target، Window، Evidence، Owner و Review date باید معلوم باشند.
- معیار پذیرش، SLO و SLA یکی نیستند: هرکدام دامنه و پیامد متفاوتی دارد؛ قاطیکردنشان وعدهٔ خطرناک میسازد.
- تعارض، خرابی فرایند نیست: اگر Sales خواهان GO و Engineering خواهان HOLD است، قرارداد خوب اختلاف را زود آشکار میکند تا صاحب اختیار تصمیم بگیرد.
- قبولی تست مساوی رضایت ذینفع نیست: شواهد تست فقط بخشی از Evidence است؛ دادهٔ تولید، تحقیق کاربر، پشتیبانی و مالی هم لازماند.
- تغییر شفاهی ممنوع: هر تغییر باید نسخه، علت، اثر بر زمان/هزینه/ریسک، تأییدکننده و تاریخ بازبینی داشته باشد.
این مقاله دقیقاً چه مسئلهای را حل میکند؟
در این صفحه، «انتظار کیفیت» ادعایی است دربارهٔ نتیجهای که یک ذینفع از محصول، خدمت یا فرایند تحویل انتظار دارد. مثال: «خریدار پس از timeout پرداخت حداکثر تا ۱۵ دقیقه نتیجهٔ قطعی ببیند.» این تعریف از «خواستن یک قابلیت»، «گزارش وضعیت» و «اعلام ریسک» متمایز است.
- برای کشف و آزمونپذیرکردن نیازمندیها، راهنمای تحلیل نیازمندیها در STLC را ببینید.
- برای اولویت تست بر اساس احتمال و پیامد، صفحهٔ تست مبتنی بر ریسک مالک موضوع است.
- برای رساندن یک Signal خطر تا Ack، تصمیم و Closure، از پروتکل ارتباط ریسک کیفیت استفاده کنید.
- برای قالب Status و تصمیم انتشار، راهنمای گزارش تست تصمیممحور را بخوانید.
بنابراین این مقاله قرار نیست همهٔ ارتباطات پروژه را توضیح دهد. مالک یک خروجی مشخص است: قرارداد نسخهدار انتظار کیفیت و چرخهٔ نگهداری آن.
مدیریت انتظارات چه چیزی نیست؟
وعدهدادن برای آرامکردن جلسه نیست
«بله، حتماً سریع میشود» نه تعهد است و نه معیار. بدون تعریف «سریع»، جمعیت اندازهگیری، بار، دستگاه، صدک و پنجرهٔ زمانی، هر نتیجهای میتواند بعداً موفق یا شکستخورده تفسیر شود. پاسخ حرفهای ممکن است «هنوز نمیدانیم؛ تا تاریخ X یک Baseline میسازیم» باشد.
رضایتسنجی سیاسی یا وزندادن به صدای بلندتر نیست
قدرت سازمانی واقعی است و نمیتوان آن را نادیده گرفت، اما بلندترین صدا نباید جای شواهد کاربر، تعهد قانونی یا ریسک غیرقابلبرگشت را بگیرد. QA اختلاف منابع قدرت و شواهد را قابلدیدن میکند؛ اختیار کسبوکاری را تصاحب نمیکند.
قبولکردن Scope creep نیست
درخواست جدید شاید کاملاً معتبر باشد، اما «معتبر» به معنی «رایگان و فوری» نیست. اثر آن بر زمان، هزینه، ریسک، ظرفیت و تعهدهای موجود باید محاسبه شود و سپس صاحب تصمیم یکی از گزینههای افزودن، جایگزینی، تعویق یا رد را انتخاب کند.
گزارش سبز و تعداد Test case نیست
۵۰۰ تست Pass ممکن است هیچ چیز دربارهٔ نتیجهٔ مبهم پرداخت، کاربران صفحهخوان یا مغایرت Ledger نگوید. Evidence فقط زمانی معنی دارد که به انتظار، سناریو، نسخه و Decision مرتبط باشد. پوشش فعالیت با پوشش خطر یکی نیست.
چرا انتظار مبهم هزینهساز میشود؟
| جملهٔ رایج | ابهام پنهان | پیامد محتمل |
|---|---|---|
| سیستم سریع باشد | کدام Journey، کدام کاربر، چه بار و چه صدکی؟ | بهینهسازی Metric آسان ولی بیاهمیت |
| باگ بحرانی نداشته باشیم | تعریف Severity، وضعیت شناختهشده و حدود دامنه چیست؟ | تغییر برچسب برای سبزشدن گزارش |
| همهٔ کاربران بتوانند پرداخت کنند | همه یعنی کدام دستگاه، زبان، توانایی و مسیر خطا؟ | حذف گروههای کمنماینده از Test population |
| نسخه تا کمپین آماده باشد | آماده یعنی Deploy، قابلبازگشت، پذیرش ریسک یا KPI تولید؟ | انتقال ریسک زمانبندی به مشتری |
| پایداری ۹۹٫۹٪ باشد | SLI، رخداد واجد شرایط، Window و Exclusion چیست؟ | محاسبهٔ متفاوت یک عدد مشترک |
راهنمای رسمی Google SRE دربارهٔ SLO نیز تأکید میکند که Indicator باید دقیق تعریف شود، Target و شرایط اعتبارش معلوم باشد و انتخاب هدف صرفاً فنی نیست. انتشار SLO به شکلگیری انتظار کمک میکند؛ هدف ضعیف هم میتواند کار بیهوده یا محصول نامناسب بسازد.
واژگان مشترک: Need، Requirement، Expectation و Commitment
| مفهوم | پرسش محوری | نمونه |
|---|---|---|
| User/Stakeholder Need | چه نتیجهای و چرا لازم است؟ | خریدار بداند پرداختش چه شد تا دوباره پرداخت نکند. |
| Assumption | چه چیزی را هنوز بدون شاهد فرض کردهایم؟ | کاربر بیشتر از ۱۵ ثانیه منتظر نمیماند. |
| Requirement | سیستم در چه شرایطی چه رفتاری باید داشته باشد؟ | پس از timeout، وضعیت تراکنش از Reconciliation بازیابی شود. |
| Acceptance criterion | برای این Increment چه شاهدی قبولی را نشان میدهد؟ | callback تکراری برداشت یا Ledger دوم نسازد. |
| Expectation contract | چه Outcome با چه Target/Evidence و به تصمیم چه کسی متصل است؟ | نرخ نتیجهٔ نامعلوم بعد از ۱۵ دقیقه ≤۰٫۱٪؛ Release Owner تصمیم میگیرد. |
| Commitment | چه وعدهای رسماً پذیرفته شده و پیامد نقض چیست؟ | SLA قراردادی یا تاریخ کمپین تأییدشده. |
راهنمای GOV.UK دربارهٔ نیاز کاربر پیشنهاد میکند نیاز از مسئله و Outcome شروع شود، نه از راهحل پیشنهادی؛ نظرهای فاقد شواهد نیز Assumption محسوب شوند و در طول Discovery تا Live دوباره اعتبارسنجی شوند. این تفکیک، Stakeholder request را بیارزش نمیکند؛ آن را در جای درست قرار میدهد.
مدل چرخهٔ بسته مدیریت انتظار کیفیت
Discover → Qualify → Contract → Negotiate → Decide
↑ ↓
Review ← Learn ← Observe production ← Verify/Accept
- Discover: نیاز، پیامد، فرض و محدودیت را از کاربران و ذینفعان کشف کنید.
- Qualify: منبع، دامنه، تصمیم، قدرت اثرگذاری و شواهد را مشخص کنید.
- Contract: انتظار را به Indicator، Target، Window، Evidence و Owner تبدیل کنید.
- Negotiate: تعارض صفات کیفیت، هزینه و زمان را با گزینهها آشکار کنید.
- Decide: صاحب اختیار تصمیم و ریسک باقیمانده را ثبت کند.
- Verify/Accept: شاهد متناسب با ریسک را تولید و محدودیت آن را اعلام کنید.
- Observe: رفتار تولید و Outcome واقعی را بسنجید.
- Learn/Review: قرارداد، Target یا کنترل را با شواهد تازه نسخهبندی کنید.
این چرخه بهعمد بسته است. Contractی که پس از انتشار بازبینی نشود، به آرشیو وعدههای قدیمی تبدیل میشود. از سوی دیگر، هر دادهٔ جدید نباید بیقاعده Target را جابهجا کند؛ تغییر به دلیل، نسخه و تصمیم نیاز دارد.
گام اول: Context Card را پیش از فهرست ذینفعان بسازید
ماتریس Power/Interest بهتنهایی کافی نیست. ممکن است کاربری قدرت سازمانی کمی داشته باشد اما پیامد شکست برای او غیرقابلبرگشت باشد؛ یا رگولاتور علاقهٔ روزانهای به Sprint نداشته باشد اما اختیار توقف خدمت داشته باشد. ابتدا Context را ببندید:
Context Card v1 Product/Journey: Checkout / پرداخت سفارش Decision horizon: انتشار 6.4 در 30 مرداد 1405 Users/affected parties: خریدار، فروشنده، پشتیبانی، مالی Legal/business commitments: قرارداد PSP، کمپین، نگهداری اسناد Irreversible harms: برداشت اضافه، افشای داده، سفارش بدون تسویه Quality attributes: correctness, reliability, security, usability, accessibility System boundaries: App → API → PSP → Callback → Ledger → Reconciliation Known unknowns: رفتار PSP هنگام timeout-after-commit Decision owner: Release Owner Review date: 7 روز پس از انتشار
مدل ISO/IEC 25010:2023 برای نامگذاری صفات کیفیت محصول و ساخت معیارهای ارزیابی مفید است؛ ولی خود استاندارد Target کسبوکار شما را تعیین نمیکند. از آن بهعنوان Vocabulary استفاده کنید، نه چکلیستی که با تیکزدن همهچیز را حل کند.
گام دوم: Stakeholder را با Decision، Outcome و Consequence تحلیل کنید
فهرست «مدیر محصول، توسعه، QA، فروش» اطلاعات کمی میدهد. یک Stakeholder Map مفید دستکم این ستونها را دارد:
| ذینفع/نماینده | Outcome مورد نیاز | Evidence معتبر برای او | Decision/Authority | پیامد شکست | Cadence |
|---|---|---|---|---|---|
| خریدار | نتیجهٔ قطعی و مبلغ درست | تحقیق کاربر + رخداد Client/Ledger | ادامه/ترک Journey | برداشت تکراری، بیاعتمادی | Discovery و دادهٔ Live |
| مالی | تطبیق IRR با PSP | Ledger و Reconciliation | تأیید تسویه/مغایرت | زیان و گزارش نادرست | روزانه |
| پشتیبانی | وضعیت قابلتوضیح | Ticket taxonomy و Timeline تراکنش | Escalate مورد | تماس تکراری و پاسخ متناقض | هفتگی/رخداد |
| فروش/مارکتینگ | زمان کمپین قابل اتکا | Forecast و گزینههای Scope | کمپین/تعویق | هزینهٔ رسانه و اعتبار | Milestone |
| Release Owner | تعادل ارزش و ریسک | Evidence bundle و گزینهها | GO/HOLD/Scope split | پذیرش ریسک باقیمانده | Gate |
چهار پرسش بهتر از Power/Interest
- اگر این انتظار نقض شود، چه کسی آسیب یا هزینه را تحمل میکند؟
- چه کسی دربارهٔ Trade-off اختیار قانونی یا سازمانی دارد؟
- چه کسی Evidence دستاول دارد، حتی اگر عنوان مدیریتی ندارد؟
- چه کسی باید تغییر، ریسک یا تصمیم را Acknowledge کند؟
نمایندگی کاربر با «مدیر محصول گفته است» کامل نمیشود. لاگ جستوجو، تحلیل تماسهای پشتیبانی، مشاهدهٔ کاربر، مطالعهٔ دسترسپذیری و نمونههای کاربران کمنماینده را وارد کنید. نبود کاربر در جلسه، نیاز او را حذف نمیکند.
گام سوم: جملهٔ انتظار را بدون تحریف بازنویسی کنید
از زنجیرهٔ «نقلقول → نیاز → Outcome → خطر → پرسش قابلآزمون» استفاده کنید:
نقلقول: «پرداخت سریع باشد.» نیاز: خریدار پس از اقدام، بلاتکلیف نماند. Outcome: نتیجهٔ قطعی و قابلفهم، بدون اقدام تکراری. خطر: timeout پس از commit باعث تلاش دوم و برداشت تکراری شود. پرسش: چه نسبتی از تلاشهای واجد شرایط تا 15 دقیقه نتیجهٔ قطعی ندارند؟
این بازنویسی را با منبع انتظار Playback کنید: «من از حرف شما این را فهمیدم… کدام بخش غلط یا ناقص است؟» Playback برای تأیید معناست، نه گرفتن امضای صوری. اختلاف نظر را حذف نکنید؛ آن را به دو Contract یا یک Decision conflict تبدیل کنید.
گام چهارم: قرارداد انتظار کیفیت بنویسید
قالب زیر حداقل پیشنهادی است. برای انتظار کمریسک میتوان نسخهٔ سبکتری داشت؛ اما حذف فیلد باید آگاهانه باشد.
Quality Expectation Contract v1 ID / Version: Source / affected parties: Need / intended outcome: In scope / out of scope: Population / journey / scenario: Quality attribute / risk: Indicator + exact formula: Target / tolerance / guardrail: Measurement window / environment: Evidence source + freshness + limitations: Decision supported / decision owner: Consequence if missed: Exception / risk acceptance / expiry: Assumptions / unknowns: Review date / change history:
نمونهٔ تکمیلشده برای نتیجهٔ نامعلوم پرداخت
ID/Version: QEC-PAY-04 / v3 Source: Support + Product; affected: buyer, finance, seller Outcome: خریدار پس از timeout بداند پرداخت موفق، ناموفق یا در حال بررسی است Population: تلاشهای واجد شرایط Checkout در App 6.4، PSP-A، ایران Scenario: timeout پس از commit؛ callback تکراری/دیررس Indicator: unresolved_15m / eligible_attempts × 100 Target: <= 0.1% در پنجرهٔ rolling هفتروزه Guardrails: duplicate charge = 0؛ اختلاف canonical IRR = 0 Evidence: Client event + API trace + PSP inquiry + Ledger + Reconciliation Decision: Gate انتشار / Release Owner If missed: HOLD یا Scope split به PSP-B؛ پذیرش شفاهی مجاز نیست Unknown: رفتار inquiry در اختلال منطقهای PSP Review: 2026-08-27T10:00:00+03:30
چگونه یک Metric واقعاً قابل مناقشه نسازیم؟
عدد بدون Measurement contract فقط ظاهر دقت دارد. برای هر Indicator این اجزا را ببندید:
- Numerator: دقیقاً چه Eventی شکست یا موفقیت است؟
- Denominator: جمعیت واجد شرایط چیست و چه مواردی حذف میشوند؟
- Unit: درخواست، کاربر، سفارش، تراکنش یا دقیقه؟
- Aggregation: Mean، median، percentile، rate یا count؟
- Window: هر Build، ۳۰ دقیقه، rolling هفتروزه یا ماه تقویمی؟
- Segmentation: PSP، نسخه، دستگاه، شبکه، زبان یا گروه دسترسپذیری؟
- Source of truth: Client، Server، Ledger، Warehouse یا Vendor؟
- Freshness/late data: داده چه زمانی کامل میشود و Event دیررس چگونه Backfill میشود؟
- Target و Tolerance: حد مطلوب، محدودهٔ هشدار و خط قرمز چیست؟
- Guardrail: برای بهترکردن این Metric چه Outcome دیگری نباید خراب شود؟
مثال فرمول
eligible_attempt = app_version == "6.4" AND country == "IR" AND psp == "A" AND amount_irr > 0 unresolved_15m = eligible_attempt AND no_terminal_state_within(15 minutes) unresolved_rate = count(unresolved_15m) / count(eligible_attempt)
در ایران، واحد پول را صریح بنویسید: مقدار قانونی/Canonical میتواند IRR باشد، درحالیکه UI تومان نمایش میدهد. ارقام فارسی، عربی و لاتین؛ تفاوت «ی/ی» و «ک/ک»؛ نیمفاصله؛ منطقهٔ زمانی UTC و Asia/Tehran؛ و نمایش تاریخ شمسی میتوانند روی جمعیت، Matching و گزارش اثر بگذارند. اینها جزئیات تزئینی نیستند.
معیار پذیرش، Definition of Done، SLO و SLA را جدا کنید
| ابزار | دامنه | نمونه | اگر نقض شد |
|---|---|---|---|
| Acceptance criterion | رفتار یک Story/Feature | callback تکراری Ledger دوم نسازد | Increment آن بخش پذیرفته نمیشود |
| Definition of Done | کیفیت مشترک همهٔ Incrementها | Review، تستهای الزامی و Observability تکمیل باشد | کار Done محسوب نمیشود |
| SLI | اندازهگیری سطح خدمت | نسبت نتیجهٔ قطعی تا ۱۵ دقیقه | داده برای مقایسه با Objective |
| SLO | Target داخلی/اعلامشدهٔ خدمت | حداقل ۹۹٫۹٪ در هفت روز | اقدام مهندسی/اولویت/بودجهٔ خطا |
| SLA | توافق با پیامد قراردادی | سطح خدمت و جریمه/اعتبار | پیامد صریح تجاری/حقوقی |
| Release gate | تصمیم یک نسخه | برداشت تکراری صفر و Risk High دارای پذیرش منقضیشونده | HOLD، Scope split یا پذیرش رسمی |
راهنمای رسمی Scrum ۲۰۲۰، Definition of Done را توصیف رسمی وضعیت Increment هنگام برآوردهشدن معیارهای کیفیت میداند و میگوید کار ناسازگار با آن نباید Release یا حتی ارائه شود. این با Acceptance criterion یک Story و با SLA مشتری تفاوت دارد.
سطح الزام را شفاف بنویسید
کلماتی مانند «بهتر است»، «لازم است» و «در صورت امکان» در تیمها معناهای متفاوت دارند. یک Legend محلی تعریف کنید:
- MUST / باید: الزام مطلق؛ نقض آن به Exception و صاحب اختیار نیاز دارد.
- SHOULD / بهتر است: پیشفرض قوی؛ عدول فقط با علت و پیامد ثبتشده.
- MAY / میتواند: انتخاب مجاز، نه تعهد.
- UNKNOWN: شاهد کافی نداریم؛ باید Discovery یا آزمایش برنامهریزی شود.
این واژگان از منطق RFC 2119 الهام میگیرند، اما استفاده در قرارداد داخلی QA یک اقتباس است و بهخودیخود سند شما را استاندارد IETF نمیکند. مهم، درج Legend و سازگاری در تفسیر است.
گام پنجم: Evidence contract را قبل از اجرای تست ببندید
برای هر انتظار توافق کنید چه شواهدی لازم، کافی و تازه است. «QA تأیید کرد» بدون Artifact و Boundary قابل ممیزی نیست.
| خطر/ادعا | Evidence مناسب | محدودیت مهم |
|---|---|---|
| درستی مبلغ | Oracle دامنه + API/DB/Ledger/Reconciliation | UI Pass، Settlement را ثابت نمیکند |
| Latency کاربر | تست کنترلشده + RUM بخشبندیشده | Server latency برابر تجربهٔ Client نیست |
| قابلیت استفاده | مشاهدهٔ کاربران نماینده روی Journey | نظر داخلی جای رفتار کاربر نیست |
| دسترسپذیری | قواعد خودکار + ارزیابی دستی + فناوری کمکی | اسکنر خودکار پوشش کامل ندارد |
| امنیت | Threat model، تست کنترل، Review تخصصی | نبود Finding به معنی نبود Vulnerability نیست |
| پایداری PSP | Fault injection امن + رخداد تولید + Inquiry | Sandbox ممکن است رفتار تولید را مدل نکند |
برای دسترسپذیری، WCAG 2.2 معیارهای موفقیت آزمونپذیر و مستقل از فناوری ارائه میکند؛ بااینحال Conformance یک سطح و دامنهٔ مشخص دارد و نباید از قبولی چند Rule خودکار، «برای همه قابل استفاده است» نتیجه گرفت.
Traceability: هر انتظار باید تا شاهد و تصمیم قابل دنبالکردن باشد
Need N-12
└─ Expectation QEC-PAY-04 v3
├─ Risk R-27: timeout-after-commit
├─ Requirement PAY-88
├─ Test/Experiment T-901..T-918
├─ Evidence bundle E-44 (commit hash + env manifest)
├─ Decision D-19: CONDITIONAL GO
└─ Production review PR-07
Traceability نباید به لینکسازی نمایشی تبدیل شود. با نمونهگیری دوطرفه آن را ممیزی کنید: از انتظار به Test/Evidence/Decision بروید و از یک Test یا Finding به Need/Risk برگردید. راهنمای NASA Systems Engineering Handbook Appendix نیز بر شفاف، صحیح، شدنی، بدونابهام و قابلاعتبارسنجیبودن Requirement و Traceability دوطرفه تأکید دارد. اقتباس این اصول برای محصول نرمافزاری، جای فرایند ایمنی مأموریتهای NASA را نمیگیرد.
گام ششم: تعارض انتظارات را به Trade-off قابل تصمیم تبدیل کنید
تعارض را با جملهٔ «با هم هماهنگ کنید» به تیمها پس ندهید. یک Decision packet کوچک بسازید:
Decision: انتشار Checkout 6.4 پیش از کمپین؟ Deadline: 2026-08-19T16:00:00+03:30 Facts: duplicate charge test=0؛ unresolved timeout evidence ناکافی Unknown: PSP inquiry هنگام اختلال منطقهای Options: A) GO کامل — ارزش سریع، ریسک نتیجه نامعلوم B) Scope split به PSP-B — ارزش کمتر، ریسک/تغییر متوسط C) HOLD — ریسک مشتری کمتر، هزینه کمپین Recommendation: B Guardrail/Rollback: unresolved_15m >0.1% یا هر duplicate charge Decision owner: Release Owner Dissent: Sales=A؛ Engineering=C
QA کیفیت Evidence و حدود ادعا را Challenge میکند؛ Product ارزش و دامنه را نمایندگی میکند؛ Engineering امکانپذیری را توضیح میدهد؛ Finance/Security/Legal در حوزهٔ خود نظر میدهند؛ و صاحب نامدارِ تصمیم، ریسک باقیمانده را میپذیرد یا رد میکند. برای مرزبندی کاملتر، رهبری کیفیت و مالکیت همگانی بدون ابهام را ببینید.
مذاکره روی گزینه، نه روی شخصیت
- موضع «حتماً منتشر کن» را به Outcome «کمپین زمانحساس» برگردانید.
- موضع «هرگز منتشر نکن» را به خطر، احتمال، پیامد و Reversibility بشکنید.
- حداقل سه گزینه با هزینه و Guardrail بسازید؛ انتخاب دوگانهٔ مصنوعی نسازید.
- Fact، Interpretation، Assumption و Unknown را جدا نمایش دهید.
- Dissent را ثبت کنید؛ ثبت مخالفت بیاحترامی یا شکست اجماع نیست.
Risk acceptance باید نامدار، محدود و منقضیشونده باشد
Risk Acceptance RA-14 Risk: نتیجه نامعلوم timeout-after-commit در PSP-A Scope: فقط 5% rollout، App 6.4، تا 48 ساعت Evidence/unknowns: E-44؛ اختلال منطقهای آزموده نشده Compensating controls: feature flag، PSP-B fallback، reconciliation هر 5 دقیقه Trigger: هر duplicate charge یا unresolved_15m > 0.1% Action on trigger: rollback + incident protocol Owner: Release Owner Accepted at / expires at: Review result / closure evidence:
«مدیر در جلسه گفت مشکلی نیست» Risk acceptance نیست. اختیار، دامنه، زمان انقضا، کنترل جبرانی و Trigger باید ثبت شوند. برای تعریف معیار کفایت Evidence و Gate، راهنمای سند استراتژی تست و برای انتخاب GO/HOLD/Scope split، چارچوب کیفیت بهاندازه کافی خوب مکمل این بخشاند.
گام هفتم: Change control سبک اما واقعی بسازید
Expectation contract «سند یخزده» نیست. اما ویرایش بیردپا باعث میشود تیم پس از مشاهدهٔ نتیجه، Goalpost را جابهجا کند. هر تغییر باید این Diff را داشته باشد:
Change QEC-PAY-04 v3 → v4 Requested by / date: Old → new value: Reason and new evidence: Impact on scope / time / cost / risk / existing commitments: Affected tests, dashboards, alerts and documents: Options considered: Approved/rejected by: Effective from / review date: Stakeholders to acknowledge:
تغییر مشروع Target چه زمانی است؟
- شاهد کاربر نشان داده Proxy قبلی Outcome را نمایندگی نمیکند.
- جمعیت یا Journey محصول واقعاً تغییر کرده است.
- Baseline اولیه ناکافی بوده و Target آزمایشی از ابتدا زمان بازبینی داشته است.
- تعهد قانونی/قراردادی یا خطر جدید اضافه شده است.
- هزینهٔ هدف قبلی در برابر ارزش، آگاهانه دوباره تصمیمگیری شده است.
تغییر برای سبزکردن Dashboard پس از Miss، مشروع نیست مگر Miss، علت و تصمیم پذیرش آن شفاف بماند. Baseline و Target دو چیزند: عملکرد فعلی توضیح میدهد کجا هستیم؛ بهتنهایی تعیین نمیکند کجا باید باشیم.
برنامهٔ ارتباطی را از روی Event و Decision طراحی کنید
| Event | مخاطب | پیام/Artifact | زمان/کانال | Ack لازم؟ |
|---|---|---|---|---|
| Contract جدید | منبع، Owner، مجریان | QEC + سؤالهای باز | قبل از Commitment / System of record | بله |
| تغییر Target | همهٔ متأثران | Diff + Impact + تصمیم | پیش از اثرگذاری | بله |
| Evidence gap | Decision owner | Known/Unknown + گزینه | قبل از Gate؛ Push | بله |
| Miss تولید | Owner و عملیات | Signal نسخهدار + Trigger | طبق Urgency | بله |
| Review دورهای | منابع و مالکان | Outcome، Drift و پیشنهاد | Cadence قرارداد | طبق تغییر |
Dashboard برای Pull و فهم Trend مناسب است، اما تغییر فوری یا خطر زمانحساس را نباید به امید دیدهشدن روی Dashboard رها کرد. کانال را بر اساس Urgency، حساسیت، ماندگاری، دسترسپذیری و قابلیت Ack انتخاب کنید. صورتجلسه بدون Owner و موعد، آرشیو گفتگو است نه حلقهٔ مدیریت.
نمونهٔ کامل ایرانی: انتشار Checkout پیش از کمپین
یک Marketplace فرضی میخواهد نسخهٔ ۶٫۴ را پیش از کمپین پایان ماه منتشر کند. UI مبلغ «۱۰۰٬۰۰۰ تومان» نشان میدهد، API و Ledger مقدار Canonical برابر ۱٬۰۰۰٬۰۰۰ IRR نگه میدارند و PSP گاهی پس از Commit با timeout پاسخ میدهد. callback ممکن است تکراری یا دیررس باشد.
انتظارات اولیه
- Product: «نتیجه پرداخت سریع و قابلفهم باشد.»
- Sales: «نسخه قبل از کمپین حتماً منتشر شود.»
- Finance: «اختلاف مبلغ و تسویه نداشته باشیم.»
- Support: «کاربر بلاتکلیف تماس نگیرد.»
- Engineering: «تا حل رفتار timeout نسخه منتشر نشود.»
- Accessibility: «نتیجه با صفحهخوان و بدون اتکای صرف به رنگ فهمیده شود.»
تبدیل به Portfolio انتظار
| ID | Indicator/Target | Evidence | Owner/Trigger |
|---|---|---|---|
| QEC-۰۱ سرعت نتیجه | p95 Tap→terminal ≤۳ ثانیه برای مسیر عادی | Client event + server trace | Product؛ افت دو Window |
| QEC-۰۲ بلاتکلیفی | unresolved_15m ≤۰٫۱٪ | PSP inquiry + Ledger + Reconciliation | Release Owner؛ عبور از حد |
| QEC-۰۳ درستی | برداشت تکراری=۰؛ اختلاف IRR=۰ | Oracle + Ledger/settlement | Finance؛ هر رخداد |
| QEC-۰۴ دسترسپذیری | سناریوهای بحرانی مصوب=۱۰۰٪ | Rule + keyboard + screen reader | Product؛ هر شکست |
| QEC-۰۵ زمان کمپین | گزینهٔ مطلوب GO تا موعد | Forecast و Gate packet | Sales/Release Owner |
سناریوهای Evidence
- موفقیت عادی، عدم موجودی و لغو کاربر با مبلغ IRR/تومان.
- timeout پیش و پس از Commit؛ Inquiry موفق، ناموفق و دیررس.
- callback یکسان، callback با Event ID جدید و delivery خارج از ترتیب.
- Retry کاربر و سرویس با Idempotency key ثابت/متفاوت.
- قطع شبکه، بازگشت App، Refresh و مشاهدهٔ نتیجه روی دستگاه دوم.
- Reconciliation، Outbox، DLQ و اصلاح مغایرت بدون سفارش یا برداشت دوم.
- ارقام ۱۲۳، ۱۲۳ و ۱۲۳؛ ی/ی، ک/ک و فاصله/نیمفاصله در دادههای متنی.
- UTC در ذخیره، Asia/Tehran در عملیات و نمایش شمسی بدون تغییر Instant.
- Keyboard، Focus، اعلان وضعیت و صفحهخوان برای Success/Failure/Pending.
تصمیم نهایی سناریو
شواهد برداشت تکراری و اختلاف مبلغ را صفر نشان میدهد، اما رفتار Inquiry در اختلال منطقهای PSP نامعلوم است. گزینهٔ انتخابی «Scope split و rollout پنجدرصدی روی PSP-B» است؛ Feature flag، Reconciliation پنجدقیقهای و Rollback trigger دارد. Sales با GO کامل و Engineering با HOLD کامل مخالف/موافقاند و Dissent ثبت میشود. Release Owner ریسک محدود ۴۸ساعته را میپذیرد. پس از هفت روز، Contract با دادهٔ تولید بازبینی میشود. این تصمیم فرضی نسخهٔ آمادهای برای کپیکردن در پروژهٔ واقعی نیست؛ شیوهٔ آشکارکردن Boundaries را نشان میدهد.
آزمایش قطعی: یادداشت جلسه در برابر قرارداد انتظار
برای بررسی یک ادعای محدود—اینکه قالب ساختاری، فیلدهای تصمیم را قابل ممیزی میکند—یک اسکریپت Node.js روی هشت انتظار ساختگی اجرا شد. داده شامل انتظارهای Product، Support، Finance، Operations، Security، Accessibility، Sales و Engineering بود. ۱۲ فیلد الزامی برای هر رکورد بررسی شد: ID، Version، Source، Outcome، Population، Scenario، Indicator، Target، Window، Evidence، Decision owner و Review date.
Runtime: Node.js 24.18.0 Dataset: 8 fictional expectations × 12 required fields = 96 slots Meeting notes: filled fields 16/96 complete records 0/8 traceable records 0/8 routed records 0/8 Expectation contracts: filled fields 96/96 complete records 8/8 traceable records 8/8 routed records 8/8 Surfaced decision conflicts: 1 Conflict choices: GO vs HOLD
این خروجی چه چیزی را نشان میدهد و چه چیزی را نه؟
نتیجه نشان میدهد با Rule ازپیشتعریفشده میتوان Completeness، Traceability و Routing قالب را روی این Dataset شمرد و تعارض صریح GO/HOLD را پنهان نکرد. این آزمایش ثابت نمیکند ذینفع Contract را فهمیده، Target درست است، تیم به آن متعهد میماند یا Outcome محصول بهتر میشود. دادهها ساختگی، فیلدها انتخاب نویسنده، مقادیر Common ازپیشپرشده و Ruleها صرفاً Presence check هستند؛ صحت معنا، کیفیت Evidence، سوگیری قدرت، مذاکره، هزینه، رفتار انسانی و تغییرات واقعی مدل نشدهاند. بنابراین این یک Demonstration خاصیت پروتکل است، نه Benchmark سازمانی یا اثبات ROI.
چگونه انتظارهای غیرواقعی را پاسخ دهیم؟
- Outcome را تأیید کنید: «میفهمم که قطعنشدن کمپین مهم است.»
- ابهام را دقیق کنید: Population، Window، معیار و پیامد را بپرسید.
- Fact و Unknown را جدا کنید: «روی دادهٔ فعلی p95 برابر X است؛ رفتار اختلال PSP را نمیدانیم.»
- گزینه بسازید: Target کمتر، Scope محدود، زمان بیشتر، کنترل جبرانی یا Discovery.
- اثر هر گزینه را نشان دهید: ارزش، هزینه، ریسک، Reversibility و Opportunity cost.
- تصمیم را به Authority درست Route کنید: QA نباید وعدهٔ بودجه، زمان یا SLA بدهد.
- نتیجه و Dissent را نسخهدار ثبت کنید: بهویژه اگر Target عمداً Relax شد.
پاسخ ضعیف «نمیشود» یا «هر کاری باشد انجام میدهیم» است. پاسخ حرفهای Boundary و انتخاب میسازد. اگر «۱۰۰٪ Availability» خواسته شد، بپرسید چه رخدادهایی واجد شرایطاند، Window چیست، وابستگیها کداماند، هزینهٔ نزدیکشدن به هدف چقدر است و آیا Correctness/Security Guardrail دارد.
وقتی ذینفع همکاری نمیکند چه کنیم؟
- مانع را تشخیص دهید: کمبود زمان، ترس از Accountability، اختلاف Vocabulary، محرمانگی یا نبود اختیار؟
- پیشنویس کوچک بسازید و بهجای صفحهٔ خالی، درخواست Correction کنید.
- سؤال را به Decision واقعی متصل کنید: «اگر پاسخ ندهیم، Default گزینه B و موعد فرداست.»
- منبع جایگزین Evidence را بیابید؛ نمایندهٔ پشتیبانی یا دادهٔ کاربر شاید از مدیر دوردست مفیدتر باشد.
- عدم پاسخ را Unknown ثبت کنید، نه Consent.
- طبق Operating model به صاحب اختیار Escalate کنید؛ Escalation تنبیه نیست، Routing تصمیم است.
- اگر خطر برای کاربر، امنیت یا تعهد قانونی جدی است، از سکوت برای دورزدن Gate استفاده نکنید.
Cadence پیشنهادی در چرخهٔ محصول
| مرحله | خروجی مدیریت انتظار | پرسش کنترلی |
|---|---|---|
| Discovery | Need، Assumption، آسیب و Outcome | شاهد از کاربر/عملیات داریم یا فقط نظر داخلی؟ |
| Planning | QEC نسخهدار و Trade-off | Target، Evidence و Owner معلوماند؟ |
| Refinement | Acceptance criteria و Trace | مثال مرزی و Failure state داریم؟ |
| Build/Test | Evidence bundle و Unknown | محیط/نسخه/داده قابل بازتولید است؟ |
| Release gate | گزینه، Dissent، Risk acceptance | تصمیمگیر نامدار است؟ |
| Live | SLI/Outcome و Trigger | دادهٔ دیررس و Segmentها مدیریت شدهاند؟ |
| Review | Keep/Tighten/Relax/Retire | تغییر بر اساس شواهد است یا Goalpost moving؟ |
Metricهای سالم برای خود فرایند مدیریت انتظار
- Decision-ready rate: درصد انتظارهای نمونهبرداریشده که Outcome/Target/Evidence/Owner کامل دارند.
- Unknown aging: سن Unknownهای اثرگذار بر تصمیم، با تفکیک ریسک.
- Expectation churn: تغییر Target یا Scope و علت آن، نه صرفاً تعداد تغییر.
- Decision latency: زمان از Conflict-ready تا تصمیم؛ با Countermetric کیفیت تصمیم.
- Unacknowledged change: تغییرهای اثرگذار که ذینفع متأثر Ack نکرده است.
- Evidence freshness: سهم تصمیمها با Evidence داخل Window معتبر.
- Post-release surprise rate: Outcomeهای مهم تولید که هیچ Contract/Unknown قبلی نداشتهاند.
- Exception expiry hygiene: پذیرشهای ریسک منقضیشده اما باز.
- Traceability sample pass: موفقیت نمونهگیری دوطرفهٔ Need↔Evidence↔Decision.
- Representation gap: گروههای متأثر بدون شاهد یا نمایندهٔ معتبر.
این Metricها را برای رتبهبندی افراد استفاده نکنید. اگر تیم را بر «تعداد Contract کامل» پاداش دهید، Contractهای کوچک و کمارزش تولید میکند. Completeness را با کیفیت نمونهای معنا، Outcome واقعی، Age و Surprise جفت کنید.
حریم خصوصی، امنیت و دسترسپذیری Artifactها
- در Contract و Dashboard دادهٔ شخصی، Token، شماره کارت یا Trace خام غیرضروری قرار ندهید.
- Source را تا حد لازم مشخص کنید؛ نقلقول حساس یا بازخورد فردی را بیجهت عمومی نکنید.
- Role-based access، Retention و Audit متناسب با حساسیت Decision/Evidence تعریف کنید.
- نسخهٔ قابلخواندن با صفحهخوان، Contrast مناسب و جدول غیرتصویری ارائه دهید.
- برای تیم چندزبانه، واژگان، واحد و تاریخ را صریح نگه دارید؛ ترجمهٔ خلاصه نباید Target را عوض کند.
- AI میتواند Draft یا خلاصه بسازد، اما نباید Target، Consent، Risk acceptance یا Decision را از سکوت استنتاج کند.
نقشها و مرز مسئولیت
| نقش | مسئولیت اصلی | نباید بهتنهایی |
|---|---|---|
| Product | Outcome، ارزش، Priority و Scope | Evidence فنی را معتبر اعلام کند |
| QA/QE | Testability، Risk/Evidence، Oracle و Challenge مستقل | مالک تمام کیفیت یا پذیرندهٔ ریسک کسبوکار شود |
| Engineering | Feasibility، طراحی کنترل و شواهد فنی | نیاز کاربر را صرفاً با Metric سیستم جایگزین کند |
| SRE/Ops | SLI، Observability، Trigger و پاسخ عملیاتی | SLA تجاری را یکطرفه تعیین کند |
| Security/Privacy/Legal | الزام و Risk تخصصی در دامنهٔ خود | نتیجهٔ حقوقی را به QA واگذار کند |
| Release/Risk owner | تصمیم و پذیرش ریسک باقیمانده | Evidence gap را بهعنوان Pass بازنویسی کند |
اگر معلوم نیست سرویس QA، Team API و Decision boundary چگونه بین تیمها تقسیم میشود، مقالهٔ مدل عملیاتی QA و ساختار Centralized/Embedded/Federated را ببینید. مدیریت انتظار بدون Operating model معمولاً در Routing و Capacity شکست میخورد.
ضدالگوهای رایج
- همه ذینفعاند، پس همه Approver هستند: مشورت گسترده را با Authority تصمیم یکی نکنید.
- Power/Interest تنها مدل است: آسیبپذیری، Evidence و Consequence را حذف میکند.
- Happy path بهعنوان انتظار کل: Pending، partial failure و recovery فراموش میشوند.
- عدد بدون Population: Target در هر جلسه معنای تازهای پیدا میکند.
- Average به جای Tail/Segment: گروه آسیبدیده پشت میانگین پنهان میشود.
- SLA شفاهی: تیم فنی ناخواسته تعهد تجاری میسازد.
- QA بهعنوان وعدهدهنده: اختیار زمان، بودجه و Risk به نقشی بدون Authority منتقل میشود.
- جلسه مساوی Agreement: سکوت یا حضور را Consent فرض میکند.
- تغییر بدون Diff: Goalpost پس از مشاهدهٔ Outcome جابهجا میشود.
- Risk acceptance ابدی: Exception به معماری دائمی بدل میشود.
- Dashboard به جای Push: خطر فوری دیده نمیشود و Ack ندارد.
- Pass count به جای Evidence sufficiency: فعالیت زیاد، Unknown مهم را میپوشاند.
- رنگ سبز بدون Limitation: دامنهٔ آزمون به کل محصول تعمیم داده میشود.
- AI بهعنوان صاحب تصمیم: خلاصهٔ احتمالی جای Authority انسانی و Trace را میگیرد.
- ثبت همهچیز: Portfolio شلوغ میشود و انتظارهای حیاتی گم میشوند.
- عدم پاسخ مساوی پذیرش: Unknown به موافقت جعلی تبدیل میشود.
- Target مساوی Baseline: محدودیت فعلی سیستم به نیاز کاربر تحمیل میشود.
- هدف ۱۰۰٪ بدون تحلیل: هزینه و Trade-off یا تعریف جمعیت پنهان میماند.
برنامهٔ ۳۰روزه پیادهسازی
هفته اول: Baseline و انتخاب Pilot
- یک Journey پرریسک و یک Decision owner انتخاب کنید.
- ۱۰ تصمیم اخیر را برای Expectation، Evidence، Unknown و Surprise نمونهگیری کنید.
- Context Card و Vocabulary مشترک را با تیم بسازید.
- از Scope سراسری یا خرید ابزار شروع نکنید.
هفته دوم: قرارداد و Trace
- ۵ تا ۱۰ انتظار حیاتی را به QEC تبدیل کنید.
- Metric contract و Evidence source را ببندید.
- Need↔Risk↔Test↔Evidence↔Decision را در ابزار فعلی لینک کنید.
- Template را برای انتظار کمریسک سبک نگه دارید.
هفته سوم: Decision rehearsal و Change
- یک سناریوی GO/HOLD/Scope split را Tabletop کنید.
- Unknown، Dissent، Expiry و Rollback trigger را تمرین کنید.
- Change diff و Ack را روی یک Target آزمایشی اجرا کنید.
- مشاهده کنید کدام فیلد واقعاً تصمیم را بهتر میکند و کدام Toil است.
هفته چهارم: Live review و اصلاح سیستم
- Outcome تولید را با Contract و Limit مقایسه کنید.
- Traceability دوطرفه را نمونهگیری کنید.
- یک Target را Keep/Tighten/Relax/Retire کنید و دلیل را ثبت کنید.
- Capacity، نقشها و Cadence را برای چرخهٔ بعد اصلاح کنید.
معیار موفقیت Pilot «تعداد فرم پرشده» نیست. باید نشان دهد Conflict زودتر آشکار شد، Unknown قبل از Gate دیده شد، Decision صاحب داشت یا Surprise پس از انتشار قابلتوضیحتر شد. اگر Toil بیشتر و وضوح ثابت ماند، Template را کوچک کنید.
چکلیست جلسهٔ بازبینی انتظار
- آیا Need و Outcome از Solution جدا شدهاند؟
- آیا کاربر یا گروه متأثر و شواهد نمایندگی او مشخص است؟
- آیا نقلقول، Assumption، Fact و Unknown تفکیک شدهاند؟
- آیا In scope/Out of scope و System boundary معلوماند؟
- آیا Quality attribute و Risk پیامدی نامگذاری شدهاند؟
- آیا Population، Scenario و واحد دقیقاند؟
- آیا فرمول Numerator/Denominator نوشته شده است؟
- آیا Target، Tolerance، Window و Guardrail داریم؟
- آیا Source of truth، Freshness و محدودیت Evidence روشناند؟
- آیا Acceptance criterion، DoD، SLO، SLA و Gate قاطی نشدهاند؟
- آیا Decision و صاحب اختیار نامدارند؟
- آیا Consequence نقض و Default عدم تصمیم معلوم است؟
- آیا Conflict و Dissent ثبت شدهاند؟
- آیا Exception دامنه، کنترل، Trigger و Expiry دارد؟
- آیا تغییرها Version/Diff/Ack دارند؟
- آیا Trace دوطرفه قابل نمونهگیری است؟
- آیا دادهٔ شخصی/حساس حداقلی و دسترسی کنترلشده است؟
- آیا Artifact برای مخاطبان قابلفهم و دسترسپذیر است؟
- آیا Post-release review و Keep/Tighten/Relax/Retire زمان دارد؟
- آیا Metricهای فرایند به رتبهبندی افراد تبدیل نشدهاند؟
پرسشهای متداول
۱. تفاوت مدیریت انتظارات ذینفعان با مدیریت نیازمندی چیست؟
مدیریت نیازمندی بر رفتار و ویژگیهای لازم سیستم، Trace و تغییر آنها تمرکز دارد. مدیریت انتظار دامنهٔ وسیعتری دارد: Outcome، برداشت ذینفع، Target خدمت، Evidence، Trade-off، Decision، Risk acceptance و بازبینی تولید را هم پوشش میدهد. این دو همپوشانی دارند، اما یکی جای دیگری را نمیگیرد.
۲. آیا تیم QA مسئول برآوردهکردن تمام انتظارات کیفیت است؟
خیر. QA/QE به آزمونپذیری، تحلیل خطر، طراحی Evidence، Challenge مستقل و آشکارکردن محدودیت کمک میکند. Product، Engineering، Operations، Security، Finance و دیگر نقشها در Outcome سهم دارند و صاحب نامدار تصمیم، ریسک باقیمانده را میپذیرد. مسئولیت مشترک نباید Accountability را بینام کند.
۳. اگر ذینفع Target عددی نداند چه کنیم؟
از Outcome و پیامد شروع کنید، سپس Baseline و Segmentها را بسنجید و چند گزینه با هزینه/ریسک پیشنهاد دهید. میتوان Target آزمایشیِ شلتر با تاریخ بازبینی تعیین کرد. عدد فعلی سیستم را خودکار به هدف تبدیل نکنید و نبود دانش را توافق جعلی ننامید؛ آن را Unknown با Owner و موعد Discovery ثبت کنید.
۴. چند وقت یکبار قراردادهای انتظار باید بازبینی شوند؟
Cadence به ریسک و تغییرپذیری بستگی دارد: انتظار Release-specific در Gate و پس از rollout؛ SLO خدمت در Window عملیاتی و Review دورهای؛ تعهد قراردادی هنگام تغییر قرارداد؛ و هر Contract پس از تغییر Journey، جمعیت، معماری، Vendor، قانون یا Evidence مهم. تاریخ مشخص بهتر از «بهصورت منظم» است.
۵. بهترین ابزار برای مدیریت انتظارات چیست؟
ابزاری که Version، Link، Owner، History، دسترسی و جستوجو را پشتیبانی کند کافی است: Issue tracker، Wiki یا Repository. Dashboard برای مشاهدهٔ Indicator خوب است، اما جای Contract و Decision log را نمیگیرد. ابتدا Workflow و حداقل Schema را روی Pilot درست کنید؛ مهاجرت ابزار بدون Authority و Review cadence فقط Toil را جابهجا میکند.
جمعبندی: انتظار خوب، وعده نیست؛ واحد تصمیم است
مدیریت انتظارات ذینفعان زمانی ارزش میسازد که جملههای مبهم را به واحدهای قابلپیگیری تصمیم تبدیل کند: Outcome روشن، Population و Scenario دقیق، Indicator و Target قابل سنجش، Evidence با محدودیت، Owner دارای اختیار، Exception منقضیشونده و Review پس از تولید. چنین سیستمی اختلاف را پنهان نمیکند؛ آن را زود، محترمانه و مبتنی بر گزینهها آشکار میکند.
از یک Journey و پنج انتظار حیاتی شروع کنید. اگر در جلسهٔ بعد بتوانید بگویید «چه چیزی را میدانیم، چه چیزی را نمیدانیم، کدام گزینهها داریم و چه کسی تا چه زمانی تصمیم میگیرد»، مدیریت انتظار از مهارت نرمِ مبهم به یک قابلیت عملیاتی QA تبدیل شده است.

