هذا المقال يتطلّب مستوى متوسط — تحتاج معرفة بأساسيات Node.js و Express، تعرف تكتب SQL بسيط، وفاهم فكرة الـ middleware في تطبيقات الويب.
اعمل Feature Flags في PostgreSQL في 100 سطر — بديل LaunchDarkly بصفر تكلفة
لو فريقك بيأجّل deploy فيتشر جديدة ليلة الجمعة لأن الـ rollback لو حصلت مشكلة هياخد ساعة كاملة، Feature Flags بتنزّل الـ rollback من 45 دقيقة لـ 3 ثواني. ضغطة زر من dashboard، بدون CI/CD، بدون touch للسيرفر.
المشكلة باختصار
الـ deploy التقليدي بيربط نشر الكود بتفعيل الفيتشر للمستخدم. لو الفيتشر فيها bug، قدامك خياران: rollback كامل للـ commit (وبيرجّع معاه fixes تانية اتشحنت في نفس الـ release) أو hotfix جديد بـ 20 دقيقة build وtests وdeploy. الاتنين بطيئين والاتنين فيهم مخاطرة.
اللي محتاجه فعلاً: تفصل قرار "نشر الكود" عن قرار "تشغيل الفيتشر". الكود ينزل production وهو مطفّي، لما تتأكد إنه شغّال تفتحه على شريحة من المستخدمين، لو حصلت مشكلة تقفله دون ما تعمل deploy تاني. ده اللي بيعمله Feature Flags بالظبط.
مفهوم Feature Flag — مثال مفتاح الكهربا
تخيّل إنك ركّبت ثريّا جديدة في الصالة. الكهربجي وصّل الأسلاك، مشى. الثريّا فعلاً متركّبة، بس مفتاح النور لسه طافي. أي ضيف دخل البيت مش هيلاحظ حاجة جديدة. لمّا تيجي أنت بكرا تتأكد إن التركيب سليم، بتضغط المفتاح، الثريّا بتنوّر. لو حصلت قصرة، بترجع تطفي المفتاح في ثانيتين، وما حدّش بياتأذى.
Feature Flag بنفس المنطق بالظبط: الكود متركّب على السيرفر، الـ build شُحن، السيرفر شغّال، بس "المفتاح" قافل. لمّا تتأكد إن كل حاجة تمام، بتفتح المفتاح من dashboard، المستخدمين يبدأوا يستخدموا الفيتشر. لو لقيت bug، بتقفل المفتاح، لحظتها يرجعوا للسلوك القديم. مفيش deploy، مفيش CI build جديد، مفيش انتظار.
التعريف العلمي والأنواع الأربعة
Feature Flag (أو Feature Toggle) هو متغيّر boolean — أو ستراكت أكبر — مخزّن في data store (DB، KV store، أو in-memory) وبيتقري وقت تنفيذ الكود ليقرّر: تشغّل المسار الجديد ولا القديم. Pete Hodgson في الـ catalog الشهير على martinfowler.com صنّفها لأربع أنواع، كل واحد له عمر ومتطلّبات مختلفة.
- Release Toggles — تفصل الـ deploy عن الـ release. عمرها قصير (أسابيع). دي اللي هنبنيها اليوم.
- Experiment Toggles — لـ A/B testing. الـ flag بترجع true لـ X% من المستخدمين بشكل ثابت لكل مستخدم.
- Ops Toggles — kill switch لخصائص ثقيلة (مثلاً تعطيل recommendation engine لما الـ DB تكون تحت ضغط).
- Permission Toggles — تفعيل خصائص لمستخدمين معينين (premium, beta testers). عمرها طويل لأنها جزء من الـ business logic.
الافتراض في الكود اللي تحت إنك بتبني النوع الأول مع دعم gradual rollout للنوع الثاني. الأنواع الأخرى ممكن تنبني فوقه بتعديل بسيط.