یکی از اشتباههای پرهزینه در تیمهای نرمافزاری، نگاه به پیشنمونه (Prototype)، نسخهی آزمایشی (Pilot) و محیط عملیاتی (Production) صرفاً بهعنوان مراحلی از تمیزی یا صیقلخوردگی کد است. در واقعیت، این سه فاز محیطهای یادگیری متفاوتی هستند که هرکدام برای پاسخ به مجهولی خاص طراحی شدهاند.
وقتی مرزهای فنی و سازمانی این مراحل شفاف نباشد، پدیدهای به نام «لغزش مرحلهای» رخ میدهد؛ پیشنمونهای که صرفاً برای اعتبارسنجی اولیه ساخته شده بود، آرامآرام کاربر، دادهی حساس و دسترسی اجرایی میگیرد، بدون آنکه تعهدات عملیاتی و مالکیت پایش آن مشخص شده باشد.
این درس به شما کمک میکند با تکیه بر متغیرهایی چون میزان مجهول، مخاطب، داده، پیامد و آمادگی عملیاتی، مرحلهی مناسب را آگاهانه انتخاب کنید و پیش از واگذاری اختیارات واقعی، کنترلهای فنی لازم را اعمال نمایید.
اینها محیطهای یادگیری متفاوتی هستند، نه صرفاً درجات مختلفی از صیقلخوردگی نرمافزار. مرحلهای را انتخاب کنید که مجهولِ فعلی را با کمترین پیامد ناخواسته پاسخ دهد.
اهداف یادگیری
- انتخاب مرحلهی ساخت بر اساس مجهول، مخاطب، داده، پیامد و میزان آمادگی.
- تعریف کنترلها و معیارهای خروج مختص هر مرحله.
- جلوگیری از تبدیل بیسروصدای پیشنمونهها به سیستمهای عملیاتی.
- به تعویق انداختن اختیارات واقعی تا زمانی که شواهد و عملیات توجیهکنندهی آن باشند.
سه پرسش متفاوت
| مرحله | پرسش اصلی |
|---|---|
| پیشنمونه (Prototype) | آیا این سازوکار اصلاً میتواند شواهد تولید کند؟ |
| آزمایشی (Pilot) | آیا با مخاطب محدود و شرایط واقعی، به شکلی امن کار میکند؟ |
| عملیاتی (Production) | آیا میتوانیم پایداری و ریسک آن را بهصورت مداوم در سطح وعدهدادهشده مدیریت کنیم؟ |
یک پیشنمونه میتواند از نظر فنی کامل باشد و همچنان دورریختنی بماند. یک نسخهی آزمایشی میتواند از دادههای عملیاتی استفاده کند و در عین حال مخاطب و اختیاراتش محدود باشد. فاز عملیاتی زمانی آغاز میشود که سازمان مسئولیت ادامهدار آن را میپذیرد.
پیشنمونه
زمانی از پیشنمونه استفاده کنید که پاسخ به مجهول نیازی به کاربران واقعی یا دادههای واقعی ندارد. پیشنمونه را اینگونه نگه دارید:
- دورریختنی؛
- ایزولهشده؛
- با رفتاری محدود؛
- شفاف دربارهی پرسش یادگیری مدنظر؛
- عاری از تعهدات عملیاتی کاذب.
پیش از آنکه سازوکار، شایستگیِ رفتن به مرحلهی بعدی را پیدا کند، معماری آن را بهینهسازی نکنید.
آزمایشی
زمانی از پایلوت استفاده کنید که پاسخ به مجهول نیازمند رفتار واقعی، دادههای واقعگرایانه یا یک جریان کاری واقعی است، اما پیامدها یا میزان آمادگی هنوز با انتشار گسترده سازگار نیست.
یک پایلوت نیاز دارد به:
- مخاطب مشخص؛
- یک مالک انسانی؛
- مدت زمان و اختیارات محدود؛
- قابلیت بازرسی (Audit) و بازگشت به عقب (Rollback)؛
- آستانههای دستاورد و گاردریل (ریل ایمنی)؛
- معیارهای خروج برای گسترش، بازنگری یا توقف.
عملیاتی
محیط عملیاتی به چیزی بیش از استقرار نیاز دارد:
- هدف سطح خدمات (SLO)؛
- نوبت آنکال (On-call) و مالکیت مدیریت حوادث؛
- بازبینی امنیت و حریم خصوصی؛
- کنترلهای هزینه و ظرفیت؛
- بازگشت به عقب و بازیابی؛
- پایش مداوم؛
- مسیری مشخص برای بازنشستگی سیستم.
لغزش مرحلهای (Stage Drift)
کد پیشنمونه زمانی خطرناک میشود که بدون پذیرش مالکیت، کاربران، دادهها یا اختیارات را جذب کند. مرزهای پیشنمونه و پایلوت را در پیکربندی، کنترل دسترسی، تلهمتری و مستندات مشخص کنید. یک بنر هشداردهنده اصلاً کافی نیست.
مرحلهی سیستم باید از درون خود سیستم قابلمشاهده باشد.
پیادهسازی عملی
این محیط آزمایشگاهی، مرحله را بر اساس بستر تصمیمگیری انتخاب میکند، کنترلهای لازم را بازمیگرداند و فایل outputs/stage-decisions.json را مینویسد.
python3 code/main.py
python3 -m unittest discover code/tests -v
مثال پایلوت را به پیامد پایین همراه با آمادگی عملیاتی تغییر دهید. توضیح دهید چه شواهد مضاعفی رفتن به محیط عملیاتی را توجیه میکند.
تمرینها
- سه پروژهی فعلیتان را بر اساس مرحلهی یادگیری دستهبندی کنید، نه وضعیت استقرار آنها.
- معیارهای خروج پایلوت را بنویسید؛ طوری که شامل تصمیم برای توقف هم باشد.
- یک کنترل فنی اضافه کنید که مانع از دسترسی پیشنمونه به دادههای عملیاتی شود.
- اولین مسئولیت عملیاتیای را مشخص کنید که این ساخت را به یک سیستم عملیاتی تبدیل میکند.
- رسید بازگشت به عقب را برای پایلوتی با اختیارات محدود طراحی کنید.
برای مطالعهی بیشتر
- Barry Boehm, A Spiral Model of Software Development and Enhancement، برای هماهنگسازی میزان تعهد هر تکرار با ریسکهای برطرفشده.
- Fagerholm et al., Building Blocks for Continuous Experimentation، برای شرایط سازمانی و فنی لازم برای اجرای مداوم آزمایشها.
آنچه پیش خود نگه میدارید
فایل outputs/stage-decisions.json را نگه دارید. این فایل ثبت میکند که چرا هر مرحله توجیهپذیر است و کدام کنترلها باید پیش از رفتن به مرحلهی بعد وجود داشته باشند.
