للمجموعات وعدة براندات
شركات كتير، تنصيب واحد، من غير عملاء مشتركين
المجموعات عادةً بتحل المشكلة ده مرتين بطريقة وحشة: يا خمسة تنصيبات منفصلة وخمسة كل حاجة منفصلة، أو تنصيب واحد ووعد رسمي إن التطبيق بيفلتر صح دايمًا. الأولى غالية. التانية وعد، والوعود مش نموذج أمان.
لو بتشغّل أكتر من شركة — هولدنج ليها شركات تابعة، فرانشايز، براندين لسوقين مختلفين، وكالة والحاجة اللي الوكالة طلعتها — انت عارف شكل المشكلة من زمان. البراندات بتتشارك الناس والأدوات وإدارة المالية. مش بتتشارك العملاء، ومش المفروض تبان إنها بتتشارك.
iKonekt بيشتغل بيهم كلهم من تنصيب واحد، والفصل بينهم محفوظ في قاعدة البيانات مش في الكود. التفرقة دي شكلها أكاديمية لحد اليوم اللي مبقاش فيها كده.
ليه الطبقة دي مهمة
الفلتر على مستوى التطبيق جملة في كويري. بيشتغل ما دام كل كويري هتتكتب في المستقبل فيها — بما فيهم اللي هيتكتب على عجل، واللي هيكتبه المطور الجديد، واللي هيتكتب لتقرير كان هيستخدم مرة واحدة بس.
لما تنقل الحد لقاعدة البيانات، الحسبة بتتقلب. السياسة بتشتغل على كل قراءة وكل كتابة، تحت كل حاجة. الكويري اللي بينسى الشركة مش بترجع صفوف غلط؛ بترجع ولا حاجة. نمط الفشل بيبقى شاشة فاضية ومطور متلخبط، وده نمط الفشل الصح.
الشاشات الفاضية ميزة. نفضّل نشرح شاشة فاضية لمهندس من عندنا على إننا نشرح قايمة عملاء لعميلين مكانوش متوقعين يلاقوا بعض.
- 1العملاء والمحادثاتمحدود النطاق. بائع في البراند A مش يقدر يوصل لبراند B، بالتصميم مش بالإعدادات.
- 2الادعاءات على العميل"احنا عندنا الحساب ده بالفعل" قفل محتجز لكل شركة — فبراندين يقدروا يشتغلوا في نفس السوق من غير ما يتصادموا.
- 3البرومبتات والإعداداتكل شركة بتعدل بتاعتها. المكان الوحيد اللي كان متشارك هناك كان باج، وده الباج اللي النظام فخور أكتر من أي حاجة إنه لقاه.
- 4برامج الشركاءموديول لكل شركة، مش موديول عام الكل بيرثه.
الحد مفروض تحت التطبيق
إيه اللي المجموعة فعلاً بتتشاركه
الفصل مش عزل عشان العزل نفسه. الحاجات اللي تستاهل تتشارك على مستوى المجموعة بتتشارك بشكل مقصود، وأغلبها الحاجات المملة — وده صح بالظبط، لأن الحاجات المملة هي اللي فيها التكلفة المكررة:
- تنصيب واحد تشغله وتحدّثه. نشر واحد، مجموعة بيانات اعتماد واحدة تتابعها، حاجة واحدة تحافظ على تحديثاتها.
- فريق واحد من الناس، لابسين قبعات مختلفة. الشخص يقدر يشتغل في أكتر من شركة؛ اللي مش يقدر عليه إنه يشوف الاتنين مع بعض من خلال كويري نسيت تسأل.
- مجموعة عادات واحدة. طريقة توزيع الليد، طريقة كتابة الملاحظة، طريقة ما الشغلانة توصل لفاتورة — تتعلم مرة، وتتطبق في كل حتة، وده بيخلي التهيئة حوالي يوم واحد بالصبح.
- علاقة واحدة مع باقي العيلة. castomAPI تحتي، نفس الحساب، نفس الموصلات — بتتظبط لكل شركة في اللي يهم.
السؤال اللي المجموعة دايمًا بتسأله تاني
"نقدر نعمل تقارير على كلهم؟" أيوه — من وجهة نظر المجموعة نفسها، بشكل مقصود وصريح، مش كأثر جانبي لحد مسرّب. التفرقة دي هي التصميم كله: عبور الخط لازم يكون فعل حد عمله بقصد، وبالصلاحية اللي تخليه يعمله. عمره ما يبقى حاجة معرّف ضايع يقدر يعملها بالغلط.
والسؤال اللي بيسألوه تالت: "إيه اللي هيحصل لو بعتنا واحد من البراندات؟" الحد اللي قاعدة البيانات محتفظة بيه هو كمان حد تقدر تطلع منه نسخة نظيفة. ده مش صدفة — الفصل وقابلية النقل هما نفس الخاصية من اجتماعين مختلفين.
تحت الأرضية
إيه اللي ماسك الخط بالتحديد
مش ادعاء، قايمة. لو المورّد مش قادر يطلّع القايمة دي عن منتجه هو، فده حاجة تستاهل تاخد بالك منها.
26
جداول شايلة الشركة بتاعتها، مع علبة التأكيد متفعلة غصب عنهم مش مجرد متاحة.
72
سياسات مكتوبة واحدة واحدة عشان كل واحدة يبقى قراها إنسان، مش متولدة في لوب.
942
اختبارات بتشتغل على قاعدة بيانات بتتبني من الصفر كل مرة أي حاجة تتغير.
0
شركات افتراضية. أي طلب من غير scope بيرمي خطأ قبل ما يوصل للداتا — مفيش fallback ينسى حد يقفله.

«خمس شركات، خمس نسخ منصبة، خمس فواتير منكم.»
نسخة واحدة منصبة. خمس حدود قاعدة البيانات حافظة عليها.
ناس مشتركة، عادات مشتركة، منصة مشتركة — ومفيش ولا عميل مشترك. إن حد يعدي الخط ده لازم يكون قرار مقصود من إنسان، مش حاجة معرّف اتعملها بالغلط.
إزاي العزل مبني ←