انتقل إلى المحتوى
مُعتز مصطفى
الغاية
الفصل 2 من 3

بناء بنية تتيح للمُدمِج أن يدير عملاء كثيرين وفرقًا كثيرة ومشاريع كثيرة داخل منصة واحدة، مع ضمان ألا يرى أحد ما لا يحق له، وأن يجد الجميع من يحتاجون العمل معهم.

السياق

عملاء Cervello مُدمِجون وموردو برمجيات. وهم لا يستخدمون المنصة لإدارة مبنى واحد، بل لبناء حلول وتشغيلها لعملائهم هم، عدة حلول في وقت واحد.

فعميل واحد لـ Cervello قد يدير حل مواقف ذكية لمدينة، وحل مراقبة مرافق لمجموعة متاجر، وتجربة أولية لعميل محتمل، في آن واحد. فرق مختلفة، وعملاء مختلفون، وأشخاص يجب ألا يرى بعضهم عمل بعض.

والمشتري غالبًا ليس هو المستخدم. فمن يوقّع العقد ليس المهندس الذي يضبط الأجهزة في الثانية صباحًا. وبنية تفترض صاحب حساب واحدًا يرى كل شيء لا تصف هذا العمل إطلاقًا.

وهذا هو الجزء الذي أخذته بأكبر جدية في المشروع، والسبب بسيط: المعمار هو القرار الوحيد الذي لا يمكن التراجع عنه لاحقًا. فالبنية الخاطئة لا تُرقّع بإعادة تصميم الشاشات فوقها. وتغييرها لاحقًا يعني نقل النموذج الذهني لكل المستخدمين دفعةً واحدة. فكان يستحق أن أمنحه الوقت، وأن أغطي الحالات المربكة قبل أن يُبنى فوقه شيء.

الصفحة الرئيسة لـ organisation تعرض مشاريعها وفرقها وأعضاءها مرتّبين بالنشاط
الصفحة الرئيسة لـ organisation واحدة. عميل واحد، أو قطاع واحد، وكل ما يجري فيه.
الصفحة الرئيسة للـ instance، تعرض الـ organisations والفرق والأعضاء مع النشاط الأخير
الصفحة الرئيسة للـ instance، وهي الطبقة العليا. الـ organisations والفرق والأعضاء، مرتّبين بما تحرك أخيرًا.
ملف team يعرض مشاريعه قابلة للترتيب بالاسم أو النشاط أو سعة الأجهزة
رؤية الـ team لعمله هو، وأعضاؤه على بُعد تبويب واحد لا في لوحة منفصلة.
قائمة أعضاء الـ instance كاملة ومع كل عضو دوره
قائمة أعضاء الـ instance كاملة، ولا يراها إلا مالكه أو مسؤوله.
تبويب الأعضاء داخل ملف الـ team، يعرض أعضاءه وأدوارهم
قائمة أعضاء الـ team، داخل الـ team نفسه لا في لوحة إدارة منفصلة. هذه هي الفئة التي يحق لمسؤول الـ team أن يتصرف فيها، وكلها.
ملف عضو يعرض الفرق والمشاريع التي ينتمي إليها ونشاطه الأخير
شخص واحد عبر الـ instance كله: الفرق والمشاريع التي يشارك فيها، وما لمسه آخرًا. من-فعل-ماذا، مربوطًا بالشخص.
هرم أصول يعرض الأصول الأب والابن والروابط بينها
الهرم نفسه. الـ belongs ينزل في الشجرة، والـ relates يقطعها عرضًا.
قائمة بكل أصل في المشروع، وكل واحد يعرض ما يقع تحته
كل أصل في المشروع في قائمة واحدة، ومعه ما يقع تحته. المستخدم يتصرف في المجموعة، فيسري ذلك على كل جهاز وكل أصل فرعي تحته.
لوحة أصل واحد وفيها قياساته وإنذاراته وأحداثه وموقعه وسماته
أصل واحد مفتوح: قياساته، وإنذاراته، وأحداثه، وموقعه، وسماته. ما يُبلّغ عنه الجهاز منفردًا، مجموعًا عند المستوى الذي يديره الإنسان فعلًا.
شاشة تتبّع الإنذارات تعرض إنذارات المشروع ومهامها المسندة
تتبّع الإنذارات عبر المشروع كله، من أي جهاز، ومع كل إنذار مهمة الفني التي ترد عليه.
خريطة تعرض الإنذارات والأحداث حسب الموقع ودرجة الخطورة، مجمّعة حسب الوحدات
الإنذارات والأحداث على خريطة، بدرجة خطورتها. فالسؤال ليس أبدًا أي رقم جهاز أخفق.

القرار

أربع طبقات متداخلة

ما وجدته كان مسطحًا. أجهزة تقع داخل organisation، وهذا كل ما في الأمر. ولم يكن أحد يسمي أيًا منهما طبقة. والفريق كان يعرف بالفعل ما سيحتاجه المطور الذي يبني فوقهم. جهاز داخل جهاز. جهاز موصول بجهاز آخر. وما لم يكونوا يرونه هو كيف يُعبّر عن ذلك. فمهندس المعمار كان يملك الفكرة ويكتب الكود، لكن كل اسم في مفرداته thing أو sensor، وأي منهما لا يخبرك بما يجوز أن يحتوي ماذا. وهذه ليست مفردات يستطيع رجل أعمال استخدامها، ولا يستطيعها أحد من خارج الـ IoT. أخذت البُعدين وجعلتهما ثلاثة. Instance ← Organisation ← Team ← Project. الـ organisation كانت موجودة. أضفت الـ instance فوقها والـ team داخلها، وتحتها جميعًا طريقة لتجميع الأجهزة لم تكن موجودة إطلاقًا. وكل طبقة تجيب عن سؤال مختلف: ولكل طبقة صفحة رئيسة خاصة بها، تعرض ما هو جارٍ عند ذلك المستوى، أحدث المشاريع والفرق والأعضاء مرتّبين بالنشاط. فالبنية لا تنفع إلا إذا كان كل مستوى يجيب عن سؤال «ماذا يحدث هنا؟» دون أن يضطر أحد للصعود أو النزول ليعرف. وصفحة الـ team تعرض مشاريعه قابلة للترتيب بالاسم أو بالنشاط أو بسعة الأجهزة، وتبويب ثانٍ يعرض أعضاءه، فتُدار الصلاحيات والنشاط في المكان نفسه الذي فيه العمل، لا في لوحة إدارة منفصلة.

القرار

مشكلة الرؤية، مصوغة بوضوح

من أحدّ ما خرج من البحث، وجاء على لسان مسؤول: وهنا الصعوبة الحقيقية في الصلاحيات المتداخلة. فالتقييد سهل البناء وسهل المبالغة فيه. وإذا أقفلت كل شيء، تتحول البنية إلى قفص: يعجز الناس عن أداء العمل الذي وُجدت أدوارهم من أجله. لذلك جُعلت رؤية الأعضاء محدودة بالطبقة التي أنت مسؤول عنها. فقائمة أعضاء الـ instance كاملة لا يراها إلا مالكه أو مسؤوله. @@MOVED@@ وأعضاء الـ organisation يُرون عند مستواها. وأعضاء الـ team داخل الـ team. أي أن كل مسؤول يرى بالضبط الفئة التي يحق له أن يتصرف فيها. لا أكثر، والأهم لا أقل. وملف العضو يعرضه عبر الـ instance كله: الفرق والمشاريع التي يشارك فيها، ونشاطه الأخير. وهذا هو حل مشكلة التصادم. عدة أشخاص يعملون في المساحة نفسها دون معرفة من فعل ماذا. فالنشاط ليس سجلاً مدفونًا في الإعدادات؛ بل مرتبط بالشخص وبالطبقة.

القرار

الأصول، ونوعان من العلاقة

تحت بنية الصلاحيات تقع بنية ثانية، للعالم المادي. وحين وصلت لم يكن هناك سوى أجهزة. والكلمة نفسها كانت أول المشكلة. فهذا Internet of Things، والـ thing ليس دائمًا شيئًا واحدًا. الحساس الذي يرسل ويستقبل بنفسه هو device، وهو نهاية الخط. وكثير من الحساسات لا تتكلم إطلاقًا. تقرأ، أو تسجل، ويحتاج غيرها أن يحملها إلى المنصة. وذلك الغير يحمل تحته غيره، وتسميته device تقول عكس ما هو. فدخل إلى النموذج مفهوم الأصول (assets). الـ device هو الحساس الذي يتكلم عن نفسه. والـ asset هو العقدة التي تحمل من لا يستطيع. واللمبة الذكية تجعلها ملموسة. بعض اللمبات يكون الراديو داخلها. وبعضها يكون الراديو في الدواية، فأي لمبة تركّبها تبدأ في الإبلاغ. والفرق يظهر عند العطل: إن كان الراديو في اللمبة، فاللمبة التالفة تأخذ الإبلاغ معها. وللهرم نوعان من الروابط: belongs وrelates. الـ belongs يورّث. والـ relates أخوّة. وإنارة الشوارع أوضح حالة مرت بي. العمود يحمل إنارة صباحية وإنارة مسائية، وكلتاهما belongs للعمود. والعمود الأول والعمود الثاني ينوران معًا، فهما relates. وقد تقع كل أعمدة الشارع تحت متحكم واحد، وذلك المتحكم asset. والتشجير حر في كل اتجاه: device بجوار asset، وasset بجوار asset، وdevice بجوار device. ونموذج أب-وابن وحيد كان سيجبر المستخدمين على الكذب على بنيتهم التحتية لتناسب الشكل الذي يتوقعه البرنامج، وكان المطور سيذهب ليبني workaround. ومنصة تنوي أن تحمل كل vertical يُبنى فوقها لا يصح أن تجعل ذلك مشكلة المطور. والمبدأ نفسه يمتد إلى المراقبة: الإنذارات والأحداث تُعرض على خريطة حسب الموقع، مع درجة الخطورة، مجمّعة حسب الوحدات، لأن السؤال الذي يطرحه المشغّل ليس أبدًا «أي رقم جهاز أخفق؟» بل «ما الخلل، وأين، وما مداه؟»

النتيجة

البنية أُطلقت، وهي ما تعمل عليه المنصة في الإنتاج اليوم. وبعد خمس سنين ما زالت هي النموذج، وأنا من رسمها.

والذي يمكن ادعاؤه هو المعمار نفسه: أربع طبقات متداخلة برؤية محدودة عند كل منها، ونموذج نشاط يجيب عن من-فعل-ماذا داخل مساحة مشتركة، وهرم أصول يعترف بأن البنية التحتية لا تتخذ دائمًا شكل شجرة نظيفة.

الفصل التالي: المنهج، والمبادئ، ونظام التصميم، والـ Feature Catalogue.