انتشار تدریجی، یک تفکر استراتژیک

چند سالی می‌شه که توسعه‌دهندگان اپلیکیشن‌، نسخه‌های جدید برنامه‌هاشون رو بر اساس روشی جدید منتشر می‌کنند. این روش که Partial Release یا Staged Release نام داره و ما اون رو در فارسی «انتشار تدریجی» خطاب می‌کنیم، روشیه که اولین بار توسط Play Store معرفی شد.اوایل، توضیح سازوکار«انتشار تدریجی»، اهداف، مزیت‌ها و چند و چون ماجرا برای توسعه‌دهندگان کمی دشوار بود. به طوری که استفاده از روش Staged Release یا همون انتشار تدریجی جهت انتشار نسخه‌های جدید اپلیکیشن برای توسعه‌دهنده، شبیه به یک فانتزی غیر قابل اجرا بود. اما رفته‌رفته مزیت‌های انتشار اپلیکیشن‌ بر اساس این روش بر همه آشکار شد. به طوری که در حال حاضر وجود امکان «انتشار تدریجی» برای توسعه‌دهنده‌ اپ، به یکی از بایدها و نشونه‌های استاندارد بودن اپ‌استور‌ها تبدیل شده‌.من همراز آهنگرزاده قصد دارم در این یادداشت به کمک خدیجه مشایخ مدیر فنی مایکت به این سوال جواب بدم که partial release چیه و چه مزیت هایی داره و ما در مایکت با استفاده از این شیوه چه شرایطی رو برای توسعه دهنده ایجاد کردیم.انتشار تدریجی یک تفکر استراتژیکانتشار تدریجی دقیقا چیست و برای رفع چه نیازی به وجود آمده‌است؟هر توسعه‌دهنده‌ای، بعد از اولین نسخه منتشر شده از اپلیکیشن خود، با توجه به بازخوردی که از کاربر می‌گیره، دست به انجام یک سری بهینه‌سازی‌ها می‌زنه. حالا این بهینه‌سازی‌ها و تغییرات می‌تونه در قسمت‌های مختلف اپلیکیشن اتفاق بیفته. زمانی که توسعه‌دهنده برای نسخه IOSاپلیکیشن خودش یک به‌روزرسانی ارائه میده، آزمودن صحت عملکرد این نسخه، کار چندان سختی نیست. چون در ابتدایی‌ترین حالت ممکن، کافیه توسعه‌دهنده، نسخه جدید اپلیکیشن خودش رو توی چند تا گوشی آیفون با نسخه‌های مختلف IOS بررسی کنه و در صورتی که متوجه مشکلی در به‌روزرسانی اپلیکیشن نشد، خیالش راحت باشه که اپلیکیشن روی همه گوشی‌های سیستم‌عامل IOS به درستی کار می‌کنه. (البته تو واقعیت فرآیند تولید و تست نرم‌افزار مراحل و سختی‌های بیشتری داره.)اما زمانی که توسعه‌دهنده، می‌خواد برای نسخه اندرویدی اپلیکیشن خودش یک به‌روزرسانی ارائه بده، نمی‌تونه تمام گوشی‌های اندرویدی رو از تمام برندهای موجود با تمام نسخه‌های سیستم عامل اندروید، جمع کنه و صحت عملکرد نسخه جدید اپلیکیشن خودش رو روی اونا امتحان کنه.پس به یه راهکار هوشمندانه‌تر نیاز داره!در مراحل مختلف Release یا نوشتن یک نرم افزار یا اپلیکیشن، Pipe Lineهای مختلفی وجود داره که همه این Pipe Lineها تلاش می‌کنن یک خروجی با کمترین bugممکن رو ارائه بدن. اما بدیهی است که نرخ وجود bug با این روش هرگز به صفر نمیرسه. هرقدر هم که تست‌های اتوماتیک یا دستی فنی مختلف انجام بشه یا از تیم Test و Quality Assuranceاستفاده بشه، باز هم ممکن است در حالت‌هایی bugهایی وجود داشته باشد که در این فرایند تست و بررسی با آن‌ها برخورد نشده‌است.از طرف دیگه همونطور که قبلا اشاره کردم، موضوع دیگه‌ای که درباره تست نسخه‌های جدید اپلیکیشن‌ها برای اندروید وجود داره، اینه که گاهی ممکنه نسخه جدید اپلیکیشن مثلا روی گوشی سامسونگ کاملا درست و بی‌نقص کار کنه اما روی گوشی شیائومی ایراداتی داشته باشه. پس تنوع وندورها هم یکی از مسائلی هست که فرایند تست رو برای نسخه‌های جدید اپلیکیشن‌ها سخت کرده.حالا فرض کنید که یک توسعه‌دهنده، نسخه جدیدی از اپلیکیشن خودش رو در تمام ابعاد ممکن تست کرده باشه و بخواد اون رو برای کاربرها منتشر کنه. اگه احیانا مشکلی توی برنامه وجود داشته باشه که توسعه‌دهنده توی فاز تست اپلیکیشن نتونسته باشه باهاش برخورد کنه و این نسخه به دست کاربرا برسه، میتونه باعث نارضایتی اونها و ریزش کاربران بشه و یا حتی توی شرایطی باعث ضرر مالی بشه.انتشار تدریجی، روشی است که دقیقا برای جلوگیری از این اتفاق به وجود اومده. انتشار تدریجی به توسعه‌دهنده این امکان رو میده که نسخه جدید اپلیکیشن خودش رو برای یک جامعه آماری کوچک ارائه بده و باگ‌هایی که از این جامعه آماری به دست میاره رو برطرف کنه و بعد بره سراغ یه جامعه آماری بزرگتر و باز اگر باگی مشاهده کرد برطرفش کنه و قطره قطره پیش بره تا بتونه با خیال راحت نسخه جدید اپلیکیشنش رو با کمترین احتمال وجود باگ در سالم‌ترین حالت ممکن برای همه کاربرهاش در دسترس قرار بده.درواقع استور به توسعه‌دهنده می‌گه که: تو نسخه جدید اپلیکیشنت رو آماده کن و کارهایی که برای تستش لازم میدونی رو انجام بده. بعد اپلیکیشنت رو بذار توی استور، من برات قطره قطره منتشرش می‌کنم. مثلا اون رو برای 3% کاربرهای استور قابل نمایش و دانلود می‌ذارم. توی این مدت بشین و شرایط اپلیکیشن خودت رو مانیتور کن و ایراداتی که سمت سرورت میاد رو برطرف کن. هر زمان که لازم دونستی بهم بگو که اپلیکیشنت رو در معرض دید کاربرهای بیشتری قرار بدم و مثلا اون رو برای 7% کاربرای استور قابل نمایش و دانلود بذارم تا باگ‌های بیشتری رو شناسایی و رصد کنی.انتشار تدریجی در پنل توسعه‌دهندهزمانی که مطمئن شدی دیگه ایراد و باگی وجود نداره که به اعتبار اپلیکیشن تو خدشه وارد کنه، بیا اپلیکیشن رو ریلیز نهایی کن. اینطوری خیالت راحته که بیشتر کاربرها اپلیکیشن تو رو بدون خطا و با بالاترین حالت عملکرد دریافت کردن.در آخر از منظر یک developerمی‌تونم بگم که به طور کلی انتشار تدریجی یا Partial Release یک آخر هفته آرامش بخش رو برای دولوپرها فراهم می‌کنه. چون قرار نیست باگ‌های موجود در نسخه جدید اپلیکیشن به طور همزمان در معرض دید همه کاربر‌های اون اپ قرار بگیره. به خصوص اگر باگ در قسمت پرداخت و فروش یک اپلیکیشن وجود داشته باشه، آسیب بزرگی به سیستم وارد نمی‌کنه چون دولوپر با دریافت بازخورد از تعداد کمی از کاربر‌ها، به باگ موجود پی می‌بره و برطرفش میکنه. به این ترتیب برند اون بیزینس با انتشار یک آپدیت نامناسب خدشه‌دار نمیشه. در بدترین حالت به راحتی میشه Release اپلیکیشن رو لغو کرد چون تعداد زیادی از کاربرها این نسخه سرشار از ایراد رو اصلا ندیدن.اولین بار کدام استور به فکر فراهم کردن امکان Staged Release افتاد؟حدود 4 سال پیش که Google Playاین امکان رو برای توسعه‌دهنده‌ها فراهم کرد، عده زیادی هنوز نسبت به این امکان آگاهی کاملی نداشتند و بیشتر به اون به چشم یک فانتزی نگاه می‌کردند. اما در این 2 سال اخیر توسعه‌دهنده‌های حرفه‌ای کاملا با فرهنگ استفاده از Staged Releaseکنار اومدن و نسخه‌های جدید اپلیکیشن‌های خودشون رو با استفاده از این روش در اپ استورها منتشر می‌کنند.در حال حاضر این امکان به یکی از بایدها و استانداردهای استورهای مطمئن و معتبر تبدیل شده است.مایکت درصد تعیین شده توسط توسعه‌دهنده رو به چه شکل بین کاربرها توزیع می‌کنه؟مایکت سعی می‌کنه بر اساس الگوریتم‌هایی که داره، نسخه جدید اپلیکیشن رو بین اعضای جامعه آماری به نحوی توزیع کنه که از هر وندور یا نسخه اندروید در اون جامعه آماری موجود باشه. برای مثال زمانی که توسعه‌دهنده از مایکت می‌خواد که اپلیکیشن رو برای 4% از کاربرها قابل نمایش و دانلود قرار بده، مایکت سعی می‌کنه تمام برندهای مختلف گوشی اندروید و بیشتر نسخه‌های اندروید به نحوی در این جامعه آماری 4 درصدی قرار داشته باشند تا توسعه‌دهنده بتونه بازخورد دقیق‌تری از ایرادات احتمالی اپلیکیشن رو دریافت کنه.شرایط لازم برای اینکه یک توسعه‌دهنده بتواند از امکان انتشار تدریجی برای انتشار نسخه جدید اپلیکیشن خود استفاده نماید چیست؟برای اپلیکیشن‌های کم دانلود، این ویژگی کارایی خاصی ندارد. برای مثال اپلیکیشنی که بیشترین تعداد نصب آن 1000 بار بوده‌است، در یک جامعه آماری 4 درصدی نمی‌تونه بازخورد مناسب توسعه‌دهنده رو ارائه بده.به همین دلیل مایکت امکان استفاده از انتشار تدریجی رو برای اپلیکیشن‌هایی که زیر 10،000 بار نصب و دانلود دارن، ارائه نمی‌ده. در واقع اون‌ها در پنل توسعه‌دهندگی خودشون در مایکت، امکان دسترسی به تنظیمات بخش انتشار تدریجی رو ندارن.برای مثال اگر توسعه‌دهنده‌ای در پنل خود 3 عدد اپلیکیشن داره، این امکان رو فقط برای اپلیکیشنی که بالای 10،000 دانلود داره، می‌بینه.مایکت در روند انتشار تدریجی چه نقشی دارد؟روند کار به این شکل است که توسعه‌دهنده فایل APKاپلیکیشن خودش رو برای مایکت ارسال می‌کنه. تیم مایکت فایل ارسالی رو بررسی می‌کنه و اگر مشکل خاصی در اون مشاهده نکنه فایل رو تایید و در وضعیت قابل انتشار قرار میده. از این لحظه به بعد تصمیم با توسعه‌دهنده است که می‌خواهد این فایل در معرض دید چند درصد از کاربرهاش قرار بگیره.اگر برای شروع با 4% از کاربرها شروع کنه مایکت هم این نسخه از اپلیکیشن رو به 4 درصد از کاربرا نشون میده. هر ساعت از شبانه روز که توسعه‌دهنده تصمیم بگیره نرخ بازه کاربرانی که نسخه جدید رو می‌بینن افزایش بده، مایکت هم از همون ساعت اون نسخه رو به همون درصد کاربرهای مد نظر توسعه‌دهنده نمایش می‌ده.