استارتاپ شما از دو Squad به هشت Squad رسیده، اما هر Release هنوز از همان یک صف QA، یک محیط Staging و یک نفرِ دارای دسترسی داده عبور می‌کند. افزودن تستر، Runner یا Test case شاید خروجی محلی را بیشتر کند؛ اگر گلوگاه جای دیگری باشد، Lead time کل تکان نمی‌خورد و فقط WIP، هزینه و هماهنگی رشد می‌کند. مقیاس‌دادن QA یعنی پیدا کردن و جابه‌جاکردن محدودیت سیستم، نه بزرگ‌کردن بی‌هدف یک دپارتمان.

این راهنما یک مسیر عملی برای تیم‌های در حال رشد می‌سازد: Growth signal → Demand map → Flow baseline → Constraint → Capability option → Pilot → Evidence → Scale / Rebalance / Stop. خروجی آن نقشهٔ تقاضا، قرارداد خدمت، مدل ظرفیت، Capabilityهای مشترک و تصمیم مرحله‌ای است؛ نه نسخهٔ جهانی «همه‌چیز را خودکار کن» یا «QA را Embedded کن».

پاسخ کوتاه: مقیاس‌پذیری QA چیست؟

مقیاس‌پذیری QA توان سیستم محصول و مهندسی برای جذب رشدِ تغییر، تیم، کاربر، Dependency و ریسک است، بدون اینکه هزینه و نیروی انسانی الزاماً به همان نسبت رشد کند یا کیفیت شواهد، زمان تصمیم، Guardrailهای مشتری و سلامت تیم فروبپاشد. QA مقیاس‌پذیر الزاماً QA سریع‌تر در هر فعالیت نیست؛ جریان پایان‌به‌پایان را برای تصمیم درست‌تر و به‌موقع‌تر طراحی می‌کند.

Scalable quality system
absorbs: more change × more variants × more dependencies × more risk
while protecting: decision evidence + customer guardrails + team health
and avoiding: proportional toil + hidden queue + orphan platform + false green

«مقیاس» نیز مطلق نیست. سیستمی که برای ۲۰ تغییر استاندارد در هفته مناسب است ممکن است برای Launch نوروز، مهاجرت PSP یا الزام امنیتی تازه کافی نباشد. بازه، نوع Demand، Service class، Population و هدف تصمیم را همراه واژهٔ Scale بنویسید.

رشد محصول با رشد تقاضای کیفیت یکی نیست

تعداد کاربران ممکن است ده‌برابر شود اما اگر معماری، Risk و نرخ تغییر ثابت بماند، Demand تست الزاماً ده‌برابر نمی‌شود. برعکس، افزودن دو Integration مالی یا سه Squad مستقل می‌تواند بدون رشد کاربر، بار Evidence و هماهنگی را شدیداً تغییر دهد. Growth vectorها را جدا ببینید:

بردار رشد نمونه Signal تقاضای احتمالی کیفیت دام اندازه‌گیری
نرخ تغییر PR/Deploy/Feature بیشتر Risk review و Feedback بیشتر تعداد PR نمایندهٔ اندازه یا ریسک نیست
سطح محصول Workflow، API یا Client بیشتر مدل ریسک، Oracle و Testability تازه Line of code معیار پوشش تصمیم نیست
تیم و مالکیت Squad و Service بیشتر Interface، Handoff و Enablement Headcount به‌تنهایی ظرفیت نیست
Dependency PSP، Vendor، Queue و Partner بیشتر Contract، Virtualization و Failure mode Integration count شدت وابستگی را نمی‌گوید
ترافیک و Cohort کاربر، شهر، Device یا Tenant بیشتر Performance، Resilience و Segment evidence میانگین کل Tail و Cohort را پنهان می‌کند
تنوع Locale، مرورگر، نسخه و Plan بیشتر Combinatorial selection و Pairwise/Risk ضرب همهٔ حالت‌ها Strategy نیست
تعهد و ریسک مالی، Privacy، Security یا Accessibility Guardrail، استقلال Evidence و Retention Checklist مساوی کنترل مؤثر نیست
عملیات Incident، Ticket و Failure demand Production learning و Prevention فقط Defect count علت و Impact را حذف می‌کند

مرز این مقاله با راهنماهای نزدیک

این صفحه «ساختار سازمانی»، «اتوماسیون» یا «بودجه» را دوباره آموزش نمی‌دهد. آن‌ها اهرم‌های احتمالی‌اند و باید پس از Constraint انتخاب شوند:

راهنما مالک تصمیم رابط آن با Scale
مدل عملیاتی QA Centralized / Embedded / Federated، Team API و Service catalog پس از شناخت Demand، ساختار و تعامل را انتخاب می‌کند
بودجه‌بندی QA TCO، Dependency، Portfolio و Funding gate گزینهٔ Capability را در کنار تعهدات تأمین می‌کند
سبد Unit/Integration/E2E مرز Evidence با Risk، Fidelity، سرعت و هزینه بار را به کوچک‌ترین مرز مسئول منتقل می‌کند
مدیریت دادهٔ تست Subset، Synthetic، Mask، Provision و Reset صف داده را به Capability مشترک تبدیل می‌کند
مدیریت محیط تست IaC، Manifest، Drift، Booking و Readiness انتظار و ناسازگاری محیط را کنترل می‌کند
تست در CI Pipeline، JUnit، Artifact، Runner و امنیت Execution evidence را عملیاتی می‌کند

این مقاله مالک رشد سیستم کیفیت است: تقاضا را قابل‌مشاهده می‌کند، Constraint را پیدا می‌کند، اهرم مناسب را آزمایش می‌کند و پس از هر بهبود دوباره سیستم را متوازن می‌سازد.

Scale با چه چیزی اشتباه گرفته می‌شود؟

  • بزرگ‌شدن: Headcount، Runner و Suite بیشتر؛ ممکن است هزینه را Scale کند، نه Capability را.
  • سرعت محلی: Execution سریع‌تر؛ ممکن است Queue داده یا تصمیم بدون تغییر بماند.
  • استانداردسازی: یک Template برای همه؛ در Riskهای متفاوت می‌تواند Waste یا Gap بسازد.
  • تمرکززدایی: Embedded کردن QA؛ اگر تخصص کمیاب و Platform ندارید، Duplication رشد می‌کند.
  • پلتفرم‌سازی: ساخت Portal یا Kubernetes؛ بدون Journey مصرف‌کننده فقط محصول داخلی بی‌مصرف است.
  • اتوماسیون: اجرای ماشینی؛ اگر Oracle، داده و Result semantics ضعیف باشد False green را سریع‌تر می‌کند.
  • پوشش بیشتر: Test count یا Code coverage بالاتر؛ نسبت آن با Risk و Decision باید روشن باشد.

واحد تقاضا را پیش از مدل ظرفیت تعریف کنید

«تعداد تست» واحد مناسبی برای تقاضای QA نیست؛ یک تست Unit و یک بررسی مهاجرت Ledger قابل‌جمع‌زدن نیستند. Work item را حول خروجی تصمیم تعریف کنید: Risk assessment، Dataset آماده، Evidence یک تغییر، بررسی دسترس‌پذیری، Performance study، Incident learning یا Release memo.

Quality Demand Card
ID / requested date / requester:
Product / service / change identity:
Decision needed:
Risk class and impact:
Population / segment / environment:
Required evidence / oracle:
Service class: Expedite / Fixed-date / Standard / Discovery
Dependencies: data / environment / specialist / vendor
Ready criteria:
Start / finish definition:
Expected artifact:
Authority / risk acceptor:
Due reason, not just due date:
Blocked reason / owner:
Rework or failure-demand flag:
Privacy / security / retention:
Review / expiry:

Start و Finish را سخت‌گیرانه تعریف کنید. «Ticket ساخته شد» Start نیست اگر هفته‌ها در Backlog منتظر است؛ «Test executed» Finish نیست اگر Result نامعتبر، تصمیم نامشخص یا Artifact گم است.

Demand را طبقه‌بندی کنید، نه اینکه همه را Urgent بنامید

کلاس نمونه سیاست ریسک سوءاستفاده
Expedite Incident مالی فعال یا آسیب مشتری محدود، معیار ورود سخت، مسیر Stop دیگر کارها هر مدیر کار خود را Incident بنامد
Fixed-date Cutover PSP یا الزام تاریخ‌دار برنامهٔ معکوس، Dependency و Scope guardrail Deadline ساختگی جای Risk را بگیرد
Standard تغییر معمول محصول FIFO مشروط به Risk و SLE آیتم بزرگ و کوچک قابل‌قیاس فرض شوند
Discovery ابهام Oracle یا تکنیک تازه Timebox، سؤال و Evidence خروجی تحقیق بی‌پایان بدون Decision
Enablement آموزش Contract test یا Testability ظرفیت رزروشده و Consumer outcome کمک موردیِ دائمی و پنهان
Obligation Security، Privacy یا Audit evidence حداقل کنترل و Authority مستقل چک‌لیست بدون اثربخشی

Service class برای اولویت‌دهی شفاف است، نه امتیاز ارزش فرد. تعداد Expedite، علت و کارهای متوقف‌شده را ثبت کنید تا مسیر اضطراری به Lane عادی تبدیل نشود.

Failure demand و Toil؛ رشد پنهانی که خودمان تولید می‌کنیم

Failure demand کاری است که به‌خاطر درست‌نشدن یا روشن‌نبودن کار قبلی برمی‌گردد: Re-run به‌علت محیط، بازسازی Dataset، توضیح دوبارهٔ Requirement، Artifact ناقص، Defect تکراری یا نتیجهٔ Unknown. Toil کار دستی، تکراری، قابل‌اتوماسیون، تاکتیکی و بدون ارزش پایدار است؛ هر کار دستی Toil نیست.

فصل کاهش Toil در کتاب Google SRE توضیح می‌دهد Engineering برای رشد زیرخطی نسبت به اندازهٔ Service لازم است و هدف ۵۰٪ آن، سیاست بافت خود Google است؛ این عدد نسخهٔ عمومی برای QA یا استارتاپ ایرانی نیست. اصل قابل‌انتقال این است: اگر Run همهٔ ظرفیت را می‌بلعد، زمانی برای حذف علت Run باقی نمی‌ماند.

Gross capacity
- planned run/obligation
- interrupts and support
- failure demand and rework
- coordination/handoff
- leave/learning
= visible change capacity

Never infer capacity from headcount × 8 hours.
Measure ranges and protect engineering time that removes future demand.

Baseline جریان؛ چهار سنجهٔ حداقلی

راهنمای فارسی Kanban چهار معیار WIP، Throughput، Work Item Age و Cycle Time را حداقل سنجه‌های جریان معرفی می‌کند. استفادهٔ این مقاله از آن‌ها به معنی پیاده‌سازی کامل Kanban نیست؛ برای نام Kanban باید Definition of Workflow، کنترل WIP، سیاست‌های صریح و SLE آن راهنما نیز رعایت شود.

  • WIP: آیتم شروع‌شده اما تمام‌نشده؛ تعداد زیاد، Context switching و Age را بالا می‌برد.
  • Throughput: تعداد آیتم تمام‌شده در واحد زمان؛ Mix و اندازه را همراهش گزارش کنید.
  • Work Item Age: زمان گذشته از Start برای آیتم باز؛ Aging سریع‌تر از Average مشکل را نشان می‌دهد.
  • Cycle Time: Start تا Finish برای آیتم تمام‌شده؛ Distribution و percentile از Mean مفیدترند.
Flow Contract v1
Item: one decision-evidence request, not test case
Population: Standard Checkout changes
Start: Ready criteria passed and active work accepted
Finish: evidence valid + decision recorded + artifact linked
Clock: elapsed hours; weekends included
Segments: risk class / PSP / data dependency / rework
WIP: started not finished at 18:00 UTC daily
Throughput: finished items per rolling 14 days
Age: now - start for open items
Cycle: finish - start for closed items
Late/cancelled/duplicate rules:
Source/version/owner:
SLE: 85% ≤ X days, derived from comparable historical items
Prohibited use: individual ranking or cross-team league table

Arrival، Throughput و Backlog را با یک واحد ببینید

اگر در یک Population مشابه، میانگین ۳۰ درخواست در هفته وارد و ۲۴ درخواست تمام می‌شود، Backlog به‌طور حسابی حدود ۶ آیتم در هفته رشد می‌کند؛ این پیش‌بینی دقیق آینده نیست چون Mix و Variation عوض می‌شود. اگر Arrival و Throughput را با واحدهای متفاوت—مثلاً Feature در برابر Test case—مقایسه کنید، عدد بی‌معناست.

Utilization صددرصد هدف سالمی برای کار دانشیِ متغیر نیست. با نزدیک‌شدن ظرفیت اسمی به مصرف کامل، کوچک‌ترین تنوع، Block یا Expedite صف می‌سازد. Reserve برای Incident، Learning و Constraint removal اتلاف نیست؛ بخشی از قابلیت پاسخ است.

SLE، Deadline و SLA یکی نیستند

  • SLE: پیش‌بینی احتمالی Flow برای آیتم مشابه، مانند «۸۵٪ در ۶ روز یا کمتر»؛ ترجیحاً از تاریخچه.
  • Deadline: تاریخ نیاز یک آیتم و دلیل آن؛ احتمال یا سطح خدمت نیست.
  • SLA: توافق رسمی خدمت با Scope، ساعت، استثنا و پیامد؛ برای هر تعامل داخلی لازم نیست.
  • Target: وضعیت مطلوب برای Improvement؛ نباید تاریخچه را جعل کند.

SLE را با یک Average و بدون Probability اعلام نکنید. آیتم Expedite، Discovery و Standard Distribution یکسان ندارند. اگر Instrumentation تازه است، Best guess را به‌عنوان حدس برچسب بزنید و با داده بازنگری کنید.

Value Stream کیفیت؛ صف‌ها را پایان‌به‌پایان ببینید

Signal / change
→ Intake & risk framing
→ Testability / design evidence
→ Data & environment readiness
→ Build / deploy / execution
→ Triage / diagnosis
→ Decision / risk acceptance
→ Release / production observation
→ Learning / prevention

برای هر مرحله، Touch time، Wait، Blocked reason، Rework، Owner، ورودی/خروجی و Artifact را ثبت کنید. بیشتر Lead time ممکن است انتظار باشد، نه اجرا. بهینه‌سازی ۲۰٪ Execution در فرایندی که ۷۰٪ آن انتظار داده است، نتیجهٔ سیستم را نجات نمی‌دهد.

Constraint را از روی شواهد پیدا کنید

نشانه شاهد لازم Constraint محتمل راه‌حل شتاب‌زده
Ready work کم است Blocked reason، Requirement churn Intake/Oracle/Testability استخدام Executor
Dataset دیر می‌رسد Queue age، handoff، invalid rate Data access/provision Runner بیشتر
محیط سبز ولی نامعتبر است Manifest، drift، readiness Environment contract Re-run
Execution واقعاً صف دارد Runner wait، duration distribution Boundary/suite/infrastructure Parallel بی‌حد
نتیجه Unknown است First failure artifact، taxonomy Oracle/observability/identity Retry
تصمیم منتظر یک مدیر است Decision wait، authority absence Governance/rights تست بیشتر
Incident تکرار می‌شود mechanism/action effectiveness Learning/prevention Regression case انباشته
متخصص مدام Interrupt می‌شود arrival/mix/context switch Service model/self-service gap Embedded کردن همان فرد در همه جا

Constraint Card؛ قرارداد تشخیص محدودیت

Constraint Card — C-08
Population/window: Standard Checkout evidence; 6 weeks
Observed symptom: p90 cycle=11.8d; 63% elapsed time blocked
Stage: Test data provisioning
Queue evidence: age p50=2.1d / p90=5.4d / WIP=17
Demand/mix: 42 requests; 31 PSP-state datasets
Capacity: 1 authorized operator; 18h/w nominal
Failure demand: 29% invalid/collision/recreate
Upstream/downstream effects: QA idle then batch execution; DBA interruption
Alternative explanations: environment booking, missing Ready fields
Proposed lever: versioned self-service dataset for 3 common states
Expected mechanism: remove handoff + validate before delivery
Outcome: p90 valid-data-ready ≤1d
Guardrails: PII=0; collision=0; invalid≤2%; DBA toil not higher
Pilot/rollback: 2 teams, 21d; manual path retained
Owner/authority/review:
What would falsify this constraint:

Constraint «آدم» نیست. عبارت «DBA کند است» تشخیص سیستم نیست؛ صفِ مجوز، سیاست دسترسی، Workflow دستی و تنوع Dataset را مدل کنید. با برطرف‌شدن یک محدودیت، Constraint معمولاً مهاجرت می‌کند؛ کارت را بازنشسته و Baseline را دوباره بگیرید.

نردبان اهرم‌ها؛ پیش از Add capacity، Demand را مهندسی کنید

  1. Eliminate: آیا کار لازم است؟ Test یا Report بدون مصرف‌کننده را حذف کنید.
  2. Prevent: آیا Testability، Contract یا Design می‌تواند Failure demand را نسازد؟
  3. Reduce variety: Happy pathهای یکسان، Template و Golden path؛ بدون حذف Risk واقعی.
  4. Move boundary: Evidence را به Unit/Component/Contract یا Production منتقل کنید، اگر Fidelity کافی است.
  5. Self-service: Data، Environment و Diagnostics را با Guardrail به مصرف‌کننده بدهید.
  6. Automate: کار تکراری با Oracle پایدار را ماشینی کنید؛ Error handling و Ownership لازم است.
  7. Parallelize: فقط وقتی Execution Constraint است و Isolation/هزینه/Rate limit تحمل می‌کند.
  8. Pool/specialize: مهارت کمیاب را Service شفاف کنید، نه صف نامرئی.
  9. Add capacity: Hire/borrow/buy پس از سنجش Ramp، Coordination و TCO.
  10. Shape demand: WIP limit، Service class و Risk appetite؛ کار کم‌ارزش را Defer/Stop کنید.

ترتیب بالا قانون جهان‌شمول نیست، اما جلوی پاسخ خودکار «نیروی بیشتر» را می‌گیرد. بعضی Obligationها حذف‌پذیر نیستند؛ بعضی Incidentها فوراً ظرفیت انسانی می‌خواهند. دلیل عبور از هر پله را ثبت کنید.

Capability Map؛ چیزی بسازید که چند تیم واقعاً مصرف کنند

Capability Consumer outcome Foundation Health/guardrail
Risk framing تغییر با Evidence scope روشن شروع شود Taxonomy، authority، template Rework و missed critical risk
Testability کنترل، مشاهده و Isolation بدون Heroics hooks، IDs، logs، fault controls Production exposure و misuse
Test data Dataset معتبر در زمان پیش‌بینی‌پذیر schema، synthetic/mask، access PII، collision، invalidity
Environment محیط Ready و نسخه‌دار IaC، manifest، health، cleanup drift، orphan cost، secret
Trusted feedback نتیجه سریع و توضیح‌پذیر boundary، oracle، identity، CI flaky، false green، missing artifact
Specialist service Security/Performance/A11y بدون صف پنهان intake، SLE، enablement، backup single point، wait، overload
Production learning Risk با مشاهدهٔ واقعی بسته شود telemetry، cohort، rollback privacy، alert fatigue، attribution

پلتفرم کیفیت، Portal نیست

راهنمای Platform Engineering در DORA پلتفرم داخلی را یک محصول با کاربر می‌داند و بر Journeyهای بحرانی و بازخورد روشن از نتیجهٔ Task تأکید می‌کند. هم‌بستگی‌های پژوهشی DORA نسخهٔ قطعی برای سازمان شما نیستند؛ اصل عملی این است که Platform را با Outcome مصرف‌کننده، Adoption و Support burden بسنجید، نه تعداد Component.

Quality Platform Service Card
Consumer: squad engineers / QA / release owner
Journey: create valid PSP dataset → run risk suite → inspect evidence
Entry/API/UI:
Ready criteria and supported scope:
Time-to-first-success / SLE:
Output and evidence identity:
Guardrails and prohibited use:
Support class / escalation:
Owner / backup / capacity:
Version / deprecation / migration:
Usage / retention / abandonment:
Run cost / consumer cost:
Exit / export / sunset:

Golden path باید مسیر رایج را آسان کند و Escape hatch کنترل‌شده برای نیاز مشروع داشته باشد. Platformی که همه را مجبور می‌کند اما Task success پایین دارد، Adoption واقعی ندارد. تیم Platform نباید پیچیدگی را فقط از خود پنهان و به Debugging مصرف‌کننده منتقل کند.

Foundation پیش از Consumer؛ Dependency را آشکار کنید

Identity / access / audit
          ↓
Versioned data + environment manifest
          ↓
Stable oracle + run identity + evidence schema
          ↓
CI execution / self-service / specialist service
          ↓
Dashboard / decision automation / scale

ساخت ده Dashboard روی Resultهای بی‌هویت Scale نیست. NIST در Secure Software Development Framework بر رویکرد Risk-based و Outcome-based تأکید می‌کند و می‌گوید هزینه، امکان‌پذیری، کاربردپذیری، قابلیت خودکارسازی و Dependencyهای Foundation در انتخاب Practiceهای Scale مهم‌اند. SSDF راهنمای امنیت توسعه است، نه چارچوب عمومی QA؛ اینجا فقط منطق Risk/Foundation آن با مرز روشن تطبیق داده شده است.

سبد Evidence را بر اساس Mechanism بازطراحی کنید

هرم با نسبت جادویی مقیاس نمی‌دهد. برای هر Risk بپرسید کوچک‌ترین مرزی که Mechanism و Oracle را با Fidelity کافی می‌بیند چیست. سپس چند Evidence مستقل برای ناشناخته‌های مهم حفظ کنید.

Risk/سؤال مرز مسئول شاهد مکمل چیزی که حذف نمی‌شود
گردکردن IRR Unit/property Contract نمونه‌های مرزی نمایش تومان در UI
Idempotency Callback Component/integration با DB Fault injection و reconciliation رفتار PSP واقعی محدود
Schema سازگار Consumer-driven contract Integration smoke semantic mismatch خارج schema
Journey پرداخت System/E2E محدود Production cohort Risk انسانی و مرورگر
تاب‌آوری در اوج Performance/resilience Canary و telemetry ظرفیت واقعی Dependency

Parallel execution چه زمانی مقیاس می‌دهد؟

  • Runner wait سهم معناداری از Lead time و Execution واقعاً Constraint باشد.
  • تست‌ها State و Data مستقل، Resource budget و shard balance داشته باشند.
  • PSP/Vendor rate limit، DB connection، License و Cloud cost تحمل کنند.
  • Artifact، shard failure، cancellation و missing report به Result دروغین منجر نشود.
  • Queue پیش و پس از Execution دوباره اندازه‌گیری شود؛ Constraint ممکن است مهاجرت کند.

اگر Data serialization تنها یک Dataset مشترک می‌دهد، شش Runner پنج Worker منتظر تولید می‌کند. اگر Test duration بسیار نامتوازن است، shard count زیاد الزاماً makespan را خطی کم نمی‌کند. هزینهٔ cold start، cache، network، flakiness و diagnosis را در TCO بیاورید.

آزمایش قطعی: Runner بیشتر یا رفع صف داده؟

یک شبیه‌سازی قطعی با Node.js ۲۴.۱۸.۰، ۲۴ کار کاملاً ساختگی را از Intake، Data، Execution و Decision عبور داد. Arrival و زمان هر مرحله از قبل در کد ثابت بودند. چهار Policy مقایسه شدند:

Policy تغییر ساختگی Mean lead p90 lead Makespan Constraint مشاهده‌شده
BASELINE Data×۱، Runner×۲، Decision×۱ 24.81 41.55 53.15 Data
MORE_RUNNERS فقط Runner از ۲ به ۶ 24.81 41.55 53.15 Data
DATA_FOUNDATION Data×۲ و زمان Data ×۰.۶ 10.60 15.35 25.01 Execution
BALANCED Data×۲، Runner×۳، Decision×۲ و عوامل کمتر 6.91 9.50 18.45 Data
BASELINE total wait
intake=7.95 | data=474.25 | execution=0 | decision=1.10

MORE_RUNNERS total wait
intake=7.95 | data=474.25 | execution=0 | decision=1.10

DATA_FOUNDATION total wait
intake=7.95 | data=71.13 | execution=72.58 | decision=10.38

BALANCED total wait
intake=6.24 | data=72.54 | execution=1.51 | decision=2.35

در Dataset نویسنده، Execution در Baseline صف نداشت؛ بنابراین چهار Runner اضافی هیچ عددی را عوض نکرد. بهبود Data، Constraint را به Execution منتقل کرد و تنظیم متوازن نتیجه را دوباره تغییر داد. اینکه در BALANCED مجموع انتظار Data کمی از DATA_FOUNDATION بیشتر است تناقض نیست: Intake سریع‌تر کار را زودتر به صف Data رسانده و Queue interaction تغییر کرده است.

محدودیت آزمایش: Jobها، Arrival، Duration، Capacity، ضرایب و ترتیب FCFS همگی ساختگی و قطعی‌اند. اندازه/ریسک واقعی، اولویت، Preemption، Absence، Learning، Failure، Rework، Dependency، Batch، هزینه، رفتار انسان و عدم‌قطعیت حذف شده‌اند. نتیجه Benchmark، Staffing formula، اثبات علیت یا وعدهٔ بهبود نیست؛ فقط نشان می‌دهد در این مدل، افزایش ظرفیتِ مرحلهٔ بدون صف بی‌اثر است و Constraint پس از Intervention می‌تواند مهاجرت کند.

Model ظرفیت؛ Gross time را با Delivery time یکی نگیرید

Capacity Envelope — weekly range
People/roles: 5 QE + 0.5 Security + shared Data
Gross available: 150–170h
Run & obligation: 45–60h
Support/interrupt: 15–35h
Failure demand/rework: 20–40h
Learning/leave/coordination: 20–30h
Change/constraint removal: 25–60h
Specialist bottleneck: Data authorization 18h
Demand arrival: 22–38 comparable items/week
Historical throughput: 20–27/week
Reserve policy: 15% for Expedite/unknown
Assumptions/expiry: no Nowruz launch; valid 30 days

Range از عدد نقطه‌ای صادقانه‌تر است. ظرفیت Specialist را با جمع ساعت کل پنهان نکنید. پنج مهندس عمومی جای نیم‌روز Authority امنیت را نمی‌گیرند. Ramp استخدام، Mentoring، Access، Context و Coordination ممکن است ابتدا ظرفیت خالص را کاهش دهد.

Build، Buy، Borrow، Hire یا Design away؟

گزینه مناسب وقتی هزینهٔ پنهان شاهد Pilot
Build Capability تمایزبخش/تکراری و مالک Run دارید نگهداشت، Support، Exit داخلی Task success و Run toil
Buy مسئله Commodity و دسترسی پایدار است FX، تحریم، داده، Vendor lock-in PoC مصرف‌کننده و Export
Borrow/contract تقاضا موقت یا مهارت کمیاب است انتقال دانش و Availability Artifact و Handoff کامل
Hire تقاضای پایدار و Role واقعی است Ramp، mentoring، coordination Capacity بعد از Ramp، نه offer count
Enable کار باید در Stream team بماند Support نامحدود و skill decay استقلال با Evidence
Design away Demand از پیچیدگی قابل‌حذف می‌آید تغییر محصول/معماری Failure demand حذف‌شده

Operating model را از روی Interaction انتخاب کنید

هیچ مدل Embedded، Centralized یا Federated ذاتاً «مقیاس‌پذیرترین» نیست. Stream-aligned ownership برای Feedback روزمره مفید است؛ Pool تخصصی برای Performance/Security پراکنده اقتصادی‌تر است؛ Platform برای Journey تکراری و Self-service ارزش دارد؛ Enabling team باید Capability منتقل کند و از وابستگی دائمی خارج شود.

  • چه کاری باید نزدیک Context محصول باشد؟
  • کدام مهارت کمیاب و اشتراک‌پذیر است؟
  • چه تقاضایی تکرارپذیر و مناسب X-as-a-Service است؟
  • کجا استقلال Evidence یا Risk authority لازم است؟
  • Interaction چه زمانی Collaboration و چه زمانی Service/Facilitation است؟
  • Sunset یا Exit از کمک مرکزی چیست؟

جزئیات طراحی Team API، Service class و گذار سازمانی در راهنمای مدل عملیاتی QA آمده است.

حاکمیت کیفیت در Scale؛ مالکیت همگانی بدون رقیق‌شدن

«کیفیت مسئولیت همه است» اگر حق تصمیم و خروجی نام‌دار نداشته باشد، در Scale به «مسئولیت هیچ‌کس» تبدیل می‌شود. راهنمای رهبری تضمین کیفیت و مالکیت همگانی این تفکیک را عمیق‌تر می‌کند.

تصمیم Owner نمونه QA contribution Risk acceptor
Scope محصول Product Risk/unknown evidence Product/business در مرز خود
Design/implementation Engineering Testability و mechanism challenge Tech authority
Evidence sufficient Evidence owner Integrity، coverage و limitation جدا از ساخت در Risk بالا
Release/rollout Release/service owner Residual risk memo Authority نام‌دار
Security/privacy gate Qualified owner Test artifact مجاز و مستقل طبق سیاست
Operate/sunset capability Service owner Health و consumer evidence Portfolio/service authority

Security و Privacy با «بعداً در Scale» سازگار نیستند

  • Access least privilege، Environment isolation و Audit از Foundation باشند.
  • Artifact، Log، Screenshot و Dataset طبقه‌بندی و Retention داشته باشند.
  • Runner، Container image، Dependency و Secret مسیر Supply-chain کنترل‌شده داشته باشند.
  • Self-service حق تولید داده یا Fault خارج Scope ندهد.
  • Automation نتیجهٔ Security/Privacy را بدون Authority مجاز Accept نکند.
  • Tool SaaS از نظر Data residency، export، network/payment access و Exit آزموده شود.

Risk-based یعنی کنترل را حذف کنیم نیست؛ یعنی Context، Impact، Requirement، Foundation و شواهد اثربخشی را روشن کنیم. مشاورهٔ حقوقی و سیاست سازمانی را با مقاله جایگزین نکنید.

سناریوی ایرانی: Scale کردن کیفیت Marketplace پیش از نوروز

Marketplace فرضی از دو به شش Squad و از یک به سه PSP می‌رسد. Change arrival از ۱۸ به ۳۴ Evidence request در هفته افزایش یافته، اما Throughput مقایسه‌پذیر ۲۲ است. ۴۶٪ Cycle time در انتظار داده/محیط، ۲۱٪ Failure demand و ۱۷٪ کارها Expedite نامیده می‌شوند. پاسخ اولیهٔ مدیر خرید Runner بیشتر است.

نقشهٔ Demand و Constraint

Signal Evidence تفسیر محدود اقدام آزمایشی
PSP state data wait p90=۴.8d؛ invalid=۲۴% Data candidate constraint سه Dataset synthetic نسخه‌دار
Staging drift ۱۳/۳۰ Run با Manifest mismatch Environment evidence invalid Readiness gate + immutable manifest
UI regression duration Runner wait=۰؛ execution=90m فعلاً Queue constraint نیست Runner خریداری نشود؛ boundary review
Decision wait p90=۲.1d؛ owner غایب Authority bottleneck Risk-class delegate + expiry
Duplicate callback defects سه mechanism تکراری Regression pile کافی نیست Idempotency invariant + fault simulator

قرارداد داده و Evidence پرداخت

Canonical money: amount_irr integer
Displayed toman: explicit derived value; never ambiguous string
Identity: order_id + attempt_id + psp_reference + idempotency_key
States: initiated / committed / callback / ledgered / reconciled
Faults: timeout-before-commit ≠ timeout-after-commit
Duplicate: same callback identity; Retry identity separately recorded
Oracles: PSP + Order + Ledger + Outbox + Reconciler
Digits: Persian / Arabic / Latin preserved and normalized by contract
Text: Unicode normalization version; half-space/RTL tested
Time: UTC event instant + Asia/Tehran display
Calendar: Jalali presentation; business rule source named
Segments: PSP / bank / device / network / order type
Data: synthetic IDs; no production PAN/token/phone
Versions: dataset / environment / API / oracle / runner / test code

طرح ۶ هفته‌ای فرضی

  1. هفته ۱: Start/Finish، Service class و Flow baseline را اصلاح کنید.
  2. هفته ۲: Ready policy، WIP limit و Authority map را Shadow اجرا کنید.
  3. هفته ۳: Dataset service را برای دو Squad و یک PSP Pilot کنید.
  4. هفته ۴: Environment manifest/readiness و Artifact identity را Gate کنید.
  5. هفته ۵: Constraint را دوباره اندازه بگیرید؛ اگر Execution صف شد، shard Pilot محدود.
  6. هفته ۶: Outcome/Guardrail/Toil/Cost را مرور و Scale/Adapt/Stop کنید.

Guardrailهای فرضی شامل PII leak=۰، collision=۰، false-green بحرانی=۰، Reconciliation mismatch بدون owner=۰، DBA toil بیشتر نشود و Team health افت معنادار نکند. عددهای این سناریو نمونه‌اند و Target واقعی از Baseline و Risk appetite سازمان می‌آید.

متریک‌های سیستم مقیاس‌پذیری QA

لنز سنجهٔ تصمیم‌پذیر Countermetric / محدودیت
Demand Arrival برحسب class/risk/source Feature/test count Mix را پنهان نکند
Flow WIP، Age، Throughput، Cycle distribution Start/Finish و cancelled روشن باشد
Queue Wait/blocked time به تفکیک stage/reason Touch time با Lead time قاطی نشود
Failure demand Rework/re-run/invalid artifact share گزارش کمتر با پنهان‌کاری بازی نشود
Capability Time-to-first-success، self-service completion Adoption اجباری، support burden و abandonment
Evidence Trusted-result freshness، Unknown، traceability Pass rate و automation % جای Risk ننشیند
Risk/outcome critical mechanism evidence، customer task/incident cohort Attribution و severity/population روشن
Economics cost/use، run/change/toil، avoided commitment صرفه‌جویی فرضی و benefit overlap
Health interrupt load، after-hours، focus، learning نظارت فردی و survey cohort کوچک ممنوع

متریک ضدبازی و قرارداد داده

هدف «Throughput بیشتر» می‌تواند کار را خرد، Risk را کم‌اظهار و Finish را زود اعلام کند. Cycle time تنها می‌تواند کار دشوار را از پذیرش خارج کند. Defect escape می‌تواند با کاهش مشاهدهٔ Production ظاهراً بهتر شود. هر KPI باید Population، identity، formula، window، segment، late data، Quality state، تصمیم، Countermetric و استفادهٔ ممنوع داشته باشد.

  • افراد را با Test count، Defect count، Throughput، Automation percentage یا Utilization رتبه‌بندی نکنید.
  • یک Health score تجمیعی اجازه ندهد Critical guardrail را جبران کند.
  • UNKNOWN/STALE/INVALID را صفر یا سبز نمایش ندهید.
  • قبل و بعد را با تغییر Mix، Season، تیم، Instrumentation و Release بررسی کنید.
  • Mean را کنار p50/p85/p90، Tail و Segment نشان دهید.

Scale Review؛ چه زمانی یک Capability را گسترش دهیم؟

Scale Review
Decision and scope requested:
Original constraint and evidence:
Pilot population / exclusions:
Before/after flow distribution:
Outcome / risk evidence:
Guardrails / adverse effects:
Adoption / retention / abandonment:
Failure demand / support / toil:
Run capacity / owner / backup:
TCO / FX / vendor / opportunity cost:
Security / privacy / accessibility:
Dependencies / migration / exit:
Alternative explanations / uncertainty:
Options: Scale / Adapt / Hold / Stop / Retire
Authority / dissent / conditions / expiry:

بهبود محلی کافی نیست. اگر Dataset service زمان QA را کم ولی Toil تیم Data را دوبرابر کند، کار فقط جابه‌جا شده است. Scale باید جریان کل و هزینهٔ کل را ببیند.

نقشهٔ ۳۰/۶۰/۹۰ روزه مقیاس‌دادن QA

روز ۱ تا ۳۰: مشاهده و مهار WIP

  • Population، Demand card، Start/Finish و Service class را تعریف کنید.
  • شش هفته Flow، Queue، Block، Failure demand و Expedite را Baseline بگیرید.
  • Value stream را با مصرف‌کننده، Product، Engineering، Ops و متخصصان رسم کنید.
  • یک Constraint Card، WIP policy و SLE آزمایشی بسازید.
  • Runner/Tool/Hire بزرگ را تا روشن‌شدن Constraint متوقف یا مرحله‌ای کنید.

روز ۳۱ تا ۶۰: Pilot یک Capability

  • سه گزینهٔ Eliminate/Prevent/Self-service/Add capacity را مقایسه کنید.
  • یک Pilot با Outcome، Guardrail، Blast radius، Rollback و Owner اجرا کنید.
  • Run identity، Environment/Data version و Evidence artifact را قابل‌ردیابی کنید.
  • Adoption، Support burden، Failure demand و Team health را کنار Flow بسنجید.

روز ۶۱ تا ۹۰: Rebalance و مالکیت

  • Constraint را دوباره اندازه بگیرید؛ فرض نکنید همان جا مانده است.
  • برای Capability موفق، Service card، Runbook، Capacity، SLO/SLE، Backup و Exit بسازید.
  • Interaction و Operating model را بر اساس Demand تازه تنظیم کنید.
  • Stop/Holdهای منقضی و Platformهای بی‌مصرف را ببندید.
  • Portfolio و بودجهٔ فصل بعد را با Evidence بازتخصیص دهید.

ضدالگوهای مقیاس‌پذیری تضمین کیفیت

  1. برابرگرفتن رشد User با رشد خطی Demand QA؛
  2. Headcount × ساعت به‌عنوان ظرفیت واقعی؛
  3. افزودن Runner وقتی Execution صف ندارد؛
  4. Automation coverage یا Test count به‌عنوان Scale outcome؛
  5. ۱۰۰٪ Utilization و حذف Reserve؛
  6. شروع همه‌چیز و تمام‌نکردن؛ WIP بی‌حد؛
  7. نامیدن همهٔ کارها Expedite؛
  8. SLE بدون Probability، Population و تاریخچه؛
  9. بهینه‌سازی Touch time و نادیده‌گرفتن Wait؛
  10. Retry به‌جای تشخیص Failure demand؛
  11. یک Staging مشترک بدون Booking/Manifest/Reset؛
  12. Parallel بدون Isolation، shard balance و Cost guardrail؛
  13. Embedded را مدل جهانی و Pool تخصصی را شکست دانستن؛
  14. Platform به‌عنوان Portal/Tool project بدون Consumer journey؛
  15. Self-service بدون Access، Audit، Support و Prohibited use؛
  16. ساخت Consumer پیش از Identity/Data/Oracle Foundation؛
  17. انتقال Toil از QA به Dev/Data و اعلام صرفه‌جویی؛
  18. Scale کردن Prototype بی‌مالک و بی‌Runbook؛
  19. KPI فردی بر اساس Throughput، Defect یا Automation؛
  20. نادیده‌گرفتن FX، تحریم، شبکه، PSP، IRR/تومان، Unicode و زمان تهران.

چک‌لیست تصمیم برای Scale کردن QA

  • Growth vector، Population، Window و Risk را نام برده‌ایم؟
  • واحد Demand خروجی تصمیم است، نه Test count؟
  • Start/Finish و Ready criteria قابل‌ممیزی‌اند؟
  • Arrival، WIP، Age، Throughput و Cycle distribution را داریم؟
  • Service class و Expedite policy محدود و صریح است؟
  • Wait/Block/Rework/Failure demand از Touch time جداست؟
  • Constraint با Queue evidence مشخص و Alternative explanation ثبت شده؟
  • آیا Eliminate، Prevent، Design away و Self-service پیش از Hire بررسی شده‌اند؟
  • Foundation و Dependency پیش از Consumer scale روشن‌اند؟
  • Boundary هر Evidence با Risk و Fidelity دفاع‌پذیر است؟
  • Parallel فقط در Execution constraint و با Isolation انجام می‌شود؟
  • Model ظرفیت Range، Specialist، Interrupt، Ramp و Reserve را دارد؟
  • Operating model بر اساس Interaction انتخاب شده، نه مد بازار؟
  • Platform Consumer، Owner، SLE، Support، Version و Exit دارد؟
  • Security/Privacy/Accessibility Hard gate مستقل‌اند؟
  • Outcome، Guardrail، Adoption و Support burden Pilot را سنجیده‌ایم؟
  • Toil به تیم دیگری منتقل نشده یا دست‌کم شفاف است؟
  • Constraint پس از Intervention دوباره اندازه‌گیری می‌شود؟
  • متریک برای رتبه‌بندی افراد یا Score جبرانی استفاده نمی‌شود؟
  • تصمیم Scale/Adapt/Hold/Stop، Authority، Dissent و Expiry ثبت شده است؟

پرسش‌های متداول درباره مقیاس‌پذیری QA

اولین قدم برای مقیاس‌دادن QA در استارتاپ چیست؟

خرید ابزار یا استخدام نیست. واحد Demand، Start/Finish و چهار Flow metric را برای یک Population تعریف کنید؛ سپس Wait، Block و Failure demand را روی Value stream ببینید. اولین Constraint را با Evidence انتخاب و یک Intervention محدود آزمایش کنید.

آیا اتوماسیون تست شرط اصلی مقیاس‌پذیری QA است؟

اتوماسیون یک اهرم مهم است، نه شرط کافی یا همیشه نخستین Constraint. اگر مسئله داده، محیط، Oracle، Authority یا Testability باشد، Automation می‌تواند Failure را سریع‌تر تکثیر کند. کاندید را با Risk، تکرار، ثبات، Fidelity، نگهداشت و Evidence انتخاب کنید.

چه زمانی باید تستر یا SDET بیشتری استخدام کنیم؟

وقتی تقاضای پایدار و هم‌واحد از ظرفیت پس از حذف Failure demand و اصلاح Workflow بیشتر است، Role/مهارت محدودکننده روشن است و Ramp/mentoring/coordination در مدل آمده است. Headcount برای Queue ناشی از Access یا تصمیم، درمان مستقیم نیست.

تیم QA متمرکز بهتر مقیاس می‌گیرد یا Embedded؟

هیچ‌کدام به‌طور جهانی. Context روزمره و Feedback نزدیک ممکن است Embedded را مناسب کند؛ مهارت کمیاب، استقلال Evidence و Economy of scale ممکن است Pool مرکزی بخواهد؛ Journey تکراری می‌تواند Platform شود. اغلب ترکیب Federated با Team API شفاف بهتر آزموده می‌شود، نه به‌عنوان حکم ثابت.

موفقیت Scale را با چه KPIهایی بسنجیم؟

یک KPI کافی نیست. Demand و Flow، Queue/Failure demand، Evidence integrity، Risk/outcome، Consumer adoption، Run cost و Team health را با Countermetric ببینید. بهبود p90 Lead time اگر false green، Incident، Toil یا Support burden را بالا برده، موفقیت کامل نیست.

جمع‌بندی: QA را با Constraint مقیاس دهید، نه با هیجان ابزار

سیستم کیفیت زمانی مقیاس می‌گیرد که رشد را به Demand قابل‌مشاهده تبدیل کند، WIP و Queue را ببیند، محدودیت واقعی را به‌جای پرصداترین علامت پیدا کند و Capability را با مصرف‌کننده و Guardrail بسازد. افزودن Runner، تستر، Platform یا Embedded QA ممکن است پاسخ باشد؛ هیچ‌کدام پیش از Evidence پاسخ پیش‌فرض نیست.

از یک Population، یک Flow Contract و یک Constraint Card شروع کنید. کوچک‌ترین تغییر قابل‌بازگشت را اجرا کنید، نتیجهٔ کل سیستم را بسنجید و آماده باشید که Constraint جابه‌جا شود. مقیاس‌پذیری یک Migration یک‌باره نیست؛ چرخهٔ مداوم Observe → Constrain → Enable → Verify → Rebalance است.

دیدگاهتان را بنویسید