🔌 توسعه محصول و اهمیت استفاده از Feature Toggle
🔌 توسعه محصول و اهمیت استفاده از Feature Toggle
(یا Feature Flag یا Release Toggle)
تا حالا شده یه امکان جدید توی نرمافزار رو بخواهید فقط برای عده مشخصی از مخاطبین فعال کنید؟ یکی دو تاش رو شاید بشه با if ولو کثیف پیاده کرد، ولی اگر زیاد شد چی؟ اگر خواستید مثلا از یه جا مدیریت کنید که مثلا ۱۰ درصد از کاربرهای خارج از ایران به جای متد الف، از متد ب استفاده کنند. این قابلیت رو که نرمافزارها قابلیتهایی رو توی خودشون دارن که فقط برای برخی افراد یا در صورت تمایل اونها فعال میشه، این روزها خیلی جاها میشه دید، از پلتفرمهای وب، تا سوییچهای گوگل کروم تا تلگرام... (یک نسخه ولی قابلیتها یا رفتارهای متفاوت بسته به شرایط دلخواه ما)
ارائهی تدریجی ویژگیهای جدید (features) یکی از پایههای Continuous Delivery و توسعه چابک محصوله. بهجای انتشار تغییرات بزرگ و پرریسک، تیمها ترجیح میدهن قابلیتهای جدید رو مرحلهبهمرحله منتشر کنن، و یا در محیط واقعی آزمایش کنن، ولی نه برای همه! نهایتا بر اساس بازخورد کاربران بهبود بدن تا آماده عرضه عمومی بشه یا شایدم از چرخه خارج شه. اینجا جاییه که مفهوم Feature Flags یا Feature Toggles وارد میشه.
❓مفهوم Feature Toggle چیه؟
ما Feature Toggle یا Feature Flag رو مکانیزمی میدونیم که روشن یا خاموش کردن قابلیتهای خاص در نرمافزار، بدون نیاز به انتشار نسخهی جدید رو فراهم میکنه (شبیه سوییچهای گوگل کروم که میشه قابلیتهای آینده رو تست کرد). این یعنی یک قطعه کد در نرمافزار وجود داره ولی فعالسازی یا غیرفعالسازی اون به یک تنظیم یا یه سوییچ ساده بستگی داره.
❓چرا خوبه که از Feature Toggle استفاده کنیم؟
✅ تحویل تدریجی (Progressive Delivery): امکان rollout تدریجی به درصدی از کاربران.
✅ آزمایش A/B: مقایسهی اثربخشی نسخههای مختلف از یک قابلیت.
✅ رفع سریع خطا: در صورت وجود خطا، میتونیم قابلیت رو بدون rollback نسخه غیرفعال کنیم (حتی از راه دور، یا بدون دخالت).
✅ فعالسازی مبتنی بر کاربر یا نقش: قابلیت خاص فقط برای کاربران خاصی فعال باشه (مثلاً کارمندان، beta testerها یا مشتریان ویژه).
✅ آزمایش در محیط production: بدون درگیر کردن همه کاربرها.
✅ کاربردهای دیگه مثل نسخه Canary یا قیمتگذاری پلکانی محصول و... هم از جمله کاربردهاشه...
✨ پلتفرمهای تخصصی برای مدیریت Feature Toggle
خیلی از سازمانها بهجای نوشتن سیستم داخلی، از ابزارهای آماده استفاده میکنن که قابلیتهای پیشرفته مثل UI مدیریتی، rollout تدریجی، آنالیتیکس، logging و SDKهای آماده ارائه میدهند:
➖پلتفرم LaunchDarkly: ابزار محبوب تجاری
➖پلتفرم Unleash: پروژهی متنباز با رابط کاربری قابل قبول.
➖پلتفرم Flagsmith: پلتفرم متنباز و SaaS.
➖ پلتفرم Microsoft Feature Management: در پلتفرم Azure App Configuration.
➖ پلتفرم Split.io: با قابلیتهای تحلیلی قوی.
برای گو لایبری خیلی خوبی هست و داتنت از نسخه ۹ این امکان رو بهصورت بومی داره که اگر کنجکاو بودید بخونید یا بگید تا بیشتر در موردشون گپ بزنیم.
💬 نظر؟ تجربه؟ سوال؟
پینوشت:
دلیل اینکه برخی پُستها ادامه پیدا نمیکنه، استنباط من بر اساس بازخوردها است (برآیندی از view، کامنت، ریاکشن، اشتراکگذاری). این سادهترین بازخورد از میزان مفید یا مورد کنجکاوی قرار گرفتن مطلب برای مخاطبه. لذا امیدوارم حمل بر کمتوجهی یا فراموشی نشه.