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




