منصة واحدة وستة فروع: ما تعلّمناه
تعدّد الفروع ليس مرشّحًا تضيفه لاحقًا. دروسٌ من بناء المنصة التي تدير العقود والفوترة والحجوزات والأبواب في ستة مواقع.
معظم برمجيات الأعمال تُكتب لموقعٍ واحد، ثم يُطلب منها لاحقًا أن تدير عدّة مواقع. ويصل الطلب عادةً بصيغةٍ صغيرة: «هل يمكن إضافة مرشّح للفروع؟» وهو ليس صغيرًا أبدًا. الفرع ليس مرشّحًا على قائمة، بل خاصيّةٌ في كل سجلٍّ وصلاحيةٍ ومجموعٍ تقريبًا في النظام، وإضافته لاحقًا تمسّ الثلاثة جميعًا.
تعلّمنا هذا كما ينبغي أثناء بناء وتشغيل المنصة التي تدير أكبر مزوّد للمكاتب المخدومة في العراق: العقود والفوترة والحجوزات والتقارير وأبواب قاعات الاجتماعات، في ستة فروع، تعمل في الإنتاج وما زلنا نشغّلها اليوم. وهذه هي الدروس التي انتقلت إلى كل ما بنيناه بعدها.
الفرع ينتمي إلى النموذج لا إلى الاستعلام
إذا كان الفرع يعيش في شرط الاستعلام فقط، فكل تقريرٍ جديد فرصةٌ لنسيانه — وأول مرة يرى فيها مديرُ موقعٍ أرقامَ موقعٍ آخر، تتلقّى الثقة بالنظام كله ضربةً أكبر بكثير من حجم الخلل نفسه.
ضعه في النموذج بدل ذلك: كل سجلٍّ يتبع موقعًا يحمله، وكل استعلامٍ يُقيَّد افتراضيًا ويحتاج خروجًا صريحًا للحصول على رؤية المجموعة. الاتجاه الآمن هو الافتراضي: المبرمج الذي ينسى التقييد يجب أن يحصل على بياناتٍ أقلّ مما ينبغي، لا أكثر.
الصلاحيات سؤالان لا سؤال واحد
«ماذا يستطيع هذا الشخص أن يفعل؟» و«أين يستطيع أن يفعله؟» محوران منفصلان، ودمجهما يُنتج انفجارًا في الأدوار: مدير-فرع-أ، ومدير-فرع-ب، ومحاسب-أ، وهكذا حتى يعجز أحدٌ عن تدقيق أي شيء.
النموذج الذي صمد: الدور يصف القدرة، والنطاق يصف المدى. فالشخص محاسبٌ في هذه الفروع، ومالية المجموعة هي الدور المحاسبي نفسه بنطاقٍ أوسع. فرعٌ جديد لا يعني أدوارًا جديدة، بل توسيع نطاق شخصٍ واحد — ويبقى سجلّ التدقيق ذا معنى.
دفتر واحد وستّ رؤى
الغريزة عند تعدّد المواقع أن يكون لكلٍّ دفاتره، ثم تُجمع في آخر الشهر. وهذا يطابَق بصعوبة، ويجعل رقم المجموعة تمرينًا في جدول بيانات بدل أن يكون حقيقةً يعرفها النظام.
دفترٌ واحد، والفرع بُعدٌ على كل قيد، يمنحك القراءتين من المصدر نفسه: رؤية الفرع مرشّح، ورؤية المجموعة مجموع، ولا يمكن أن تتعارضا لأنهما الصفوف ذاتها. وعندها تصبح التحويلات بين المواقع قيودًا صريحة بدل تسويةٍ يتذكّرها أحدهم. وقد فصّلنا هذا الانضباط في كيف تبدو الفوترة التلقائية حين تُنجَز كما ينبغي.
العالم المادي جزء من نموذج البيانات
قاعة الاجتماعات ليست صفًّا في جدول، بل غرفةٌ لها باب، يتوقّع العضو أن يُفتح عند بدء حجزه.
ربط نظام الحجز بـجهاز الدخول على الباب ألغى فئةً كاملة من العمل اليومي: لا خطوة استقبال، ولا تسليم مفاتيح، ولا «النظام يقول إن القاعة متاحة لكن الباب مقفل». الحجز هو الإذن. ولا ينجح ذلك إلا إذا تشارك النظامان مصدر حقيقةٍ واحدًا بدل مزامنة اثنين — وإلا إذا كان الباب قادرًا على القرار محليًا، لأن تعثّرًا في الشبكة يجب ألّا يعني وقوف عضوٍ خارج قاعةٍ دفع ثمنها.
والدرس العام: حين تتحكّم البرمجيات بشيءٍ مادي، يجب أن تكون القيود المادية من الدرجة الأولى في التصميم. الأبواب والطابعات وأجهزة الدفع لا تعيد المحاولة بأدب.
نقل البيانات هو المشروع لا مقدّمته
كل تطبيقٍ متعدّد المواقع يحمل عقدًا من الترتيبات القائمة: عقودٌ بشروطٍ استثنائية، وأسعارٌ اتُّفق عليها شفهيًا، وعميلٌ تُصدَر فاتورته في الخامس من كل شهر منذ الأزل. والإغراء أن تُنمَّط كلها ويُبدأ من صفحةٍ نظيفة، وهكذا يتعثّر التطبيق — إذ لا تستطيع الشركة ببساطة إعادة التفاوض على دفترها كله ليناسب قاعدة بيانات.
الأجدى أن تُنمذَج الاستثناءات بصدق، ويُستورَد التاريخ كما كان فعلًا، وتُطبَّق القواعد الجديدة على ما هو آتٍ. ونقل البيانات يجب أن يُتمرَّن عليه أكثر من مرة، على بياناتٍ حقيقية، ويتحقّق منه موظفو العميل أنفسهم — فهم يلتقطون في عشر دقائق ما لن يشكّ فيه مبرمجٌ أبدًا.
طبّق فرعًا واحدًا في كل مرة
الإطلاق في كل المواقع صباح اليوم نفسه يضاعف المخاطرة وعبء الدعم معًا، في اللحظة التي يكون فيها فريقك أقلّ خبرةً بالنظام.
فرعٌ أولًا، لمدةٍ تكفي لعبور دورة فوترةٍ كاملة. ثم يصير موظفو ذلك الفرع هم من يدرّبون الموقع التالي، بكلماتهم هم، بالعربية، وبالاختصارات التي اكتشفوها. وعند الموقع السادس يصبح التطبيق روتينًا، وتكون مادة التدريب قد اختبرها من يستعملها فعلًا.
التقارير هي اختبار التبنّي
الموظفون يسامحون شاشةً ثقيلة، أمّا الإدارة فلا تسامح رقمًا لا يستطيع أحدٌ تفسيره. وإذا اختلف تقرير المجموعة مع عدّ الفرع نفسه — ولو لسببٍ وجيه، كأن يُحتسب الحجز عند الحجز في رؤية وعند إتمامه في أخرى — أُنفقت مصداقية المنصة كلها في جدالٍ حول الحساب.
عرِّف ما الذي يعدّه كل رقم، ومتى يعدّه، قبل بناء اللوحة. ثم اعرض ذلك التعريف بجوار الرقم في الواجهة، لا في دليلٍ لا يفتحه أحد.
ما نقوله لمن يبدأ هذا الطريق
- احسم مبكرًا هل تتشارك الفروع العملاء والأسعار والمخزون — فالجواب يشكّل البنية أكثر من أي ميزة.
- اجعل النطاق مفهومًا من الدرجة الأولى في الصلاحيات من اليوم الأول؛ إضافته لاحقًا بأمان شبه مستحيلة.
- أبقِ دفترًا واحدًا. دائمًا.
- تمرّن على النقل ببياناتٍ حقيقية، وليتحقّق منه موظفو العميل.
- طبّق على التوالي، ودع الفرع الأول يدرّب الثاني.
- اتّفق على تعريف كل رقمٍ رئيسي قبل أن يبني أحدٌ مخطّطًا له.
- اكتب النطاق أولًا — فمشروعٌ بهذا الحجم هو بالضبط حيث يتوقّف نطاق العمل المكتوب عن كونه أوراقًا ويصير هو ما يُبقي المشروع قابلًا للتنبؤ.
لا شيء من هذا غريب أو معقّد. إنه الفرق بين برمجيةٍ تتجاوزها شركةٌ نامية خلال سنتين، وبرمجيةٍ ما زالت تدير العمل بعد ستة فروع — وهذا هو الاختبار الوحيد الذي كان له معنى يومًا.