One self-hosted console to run your entire business — commerce, ERP, HRM, CRM & manufacturing

المخاطر الخفية في برامج الأعمال القديمة: دليل عملي من مهندس معماري للتحديث دون هدم كل شيء دفعة واحدة

عشرة عوامل خطر تجعل أنظمة الأعمال القديمة خطيرة، والمتاعب اليومية التي تسببها، وخريطة حرارية بسيطة تجمع الاحتمالية والأثر، ونمط «شجرة التين الخانقة» لاستبدال النظام القديم وظيفةً تلو الأخرى.

Author

Anichur Rahaman

منذ شهرين10 min read3 views
المخاطر الخفية في برامج الأعمال القديمة: دليل عملي من مهندس معماري للتحديث دون هدم كل شيء دفعة واحدة

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

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

ستجد فيه عشرة عوامل خطر ينبغي فحصها، والمتاعب اليومية التي يسببها كل منها، وخريطة حرارية بسيطة لتقييمها، ونهجًا للتحديث يُعرف بـنمط شجرة التين الخانقة (Strangler Fig)، يستبدل النظام القديم جزءًا بعد جزء بدل المراهنة بكل شيء على إعادة كتابة شاملة.

ما المقصود فعلًا بـ«النظام القديم»؟

القِدم هنا لا يُقاس بالعمر. قد يكون نظام عمره خمس سنوات حديثًا تمامًا إذا كانت له اختبارات وتوثيق ويعمل على برمجيات مدعومة، وقد يصبح نظام عمره سنتان «قديمًا» إذا لم يعد أحد يجرؤ على تعديله. وإليك تعريفًا عمليًا:

النظام القديم هو أي نظام يعتمد عليه العمل، لكنه لا يمكن تعديله بأمان أو بسرعة أو بتكلفة معقولة.

بهذا المعنى، لا يكون السؤال «كم عمر النظام؟»، بل «ما مدى خطورة تغييره، وما مدى خطورة تركه على حاله؟»، ولكلا الخيارين ثمن.

عوامل الخطر العشرة

خريطة حرارية لعشرة مخاطر في الأنظمة القديمة حسب الاحتمالية والأثر
خريطة حرارية نموذجية لنظام تجاري خلفي عمره عشر سنوات؛ والمشكلة القادمة ستأتي من الخلية العلوية اليمنى.

1. بيئة تشغيل أو إطار عمل انتهى دعمه

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

المتاعب اليومية: «لا يمكننا إضافة بوابة الدفع تلك؛ مكتبتها تحتاج إلى إصدار أحدث من PHP».

2. الاعتماد على شخص واحد

مطوّر واحد أو متعاقد واحد يعرف كيف يعمل النظام، ولا شيء مكتوب، فإذا غادر غادرت المعرفة معه. وهذا غالبًا أخطر المخاطر أثرًا، وآخر ما ينتبه إليه أصحاب الأعمال.

المتاعب اليومية: الإصدارات والإصلاحات، بل وحتى تصحيح بيانات بسيط، كلها تنتظر وقت شخص واحد.

3. غياب الاختبارات المؤتمتة

من دون اختبارات يصبح كل تعديل مقامرة، فيكتفي الفريق بأقل قدر ممكن من التغيير، وتُرقَّع المشكلات من حولها بدل علاجها من جذورها، ويزداد تعديل الشيفرة صعوبة عامًا بعد عام.

المتاعب اليومية: «أصلحنا تقريب مبالغ الفواتير، فصار تقرير الخصومات خاطئًا».

4. قاعدة بيانات واحدة مشتركة بلا حدود

مئات الجداول تقرؤها وتكتب فيها أجزاء التطبيق كلها، وأحيانًا سكربتات خارجية أيضًا. وتعديل عمود واحد قد يعطّل شاشة لم يعد أحد يتذكر وجودها.

المتاعب اليومية: تعديل حقل بسيط يتحول إلى أسبوع كامل من تتبّع آثاره الجانبية.

5. ديون أمنية متراكمة

كلمات مرور مخزّنة بأساليب تجاوزها الزمن، ومفاتيح API مكتوبة داخل الشيفرة، ولوحات إدارة بلا تحقق بخطوتين، وصفحات أخطاء تكشف تفاصيل قاعدة البيانات، ولا حدّ لمحاولات تسجيل الدخول. كل واحدة منها تبدو صغيرة، لكنها مجتمعة بابٌ مفتوح.

المتاعب اليومية: لا أحد يرغب في الإجابة عن الاستبيان الأمني الذي يرسله عميل كبير.

6. بيانات مبعثرة ونسخ متعددة من الحقيقة

بيانات العملاء في المتجر وفي نظام CRM وفي جدول بيانات، وأرصدة المخزون في النظام وفي دفتر أمين المستودع. وحين تتضارب الأرقام، يفقد الناس الثقة بها جميعًا.

المتاعب اليومية: اجتماعات تُستهلك في الجدال حول أي التقارير هو الصحيح.

7. تكاملات هشّة

ملفات CSV تُرسل ليلًا عبر FTP، وسكربتات تسحب البيانات من موقع أحد الموردين، وتكاملات تتوقف بصمت حين تنتهي صلاحية كلمة مرور. تعمل إلى أن تتوقف، ثم لا يلاحظ أحد لأيام.

المتاعب اليومية: «لم تتحدّث حالات الشحن منذ يوم الثلاثاء».

8. سقف للأداء

استعلامات تجلب سجلًا واحدًا في كل دورة من حلقة تكرار، ولا ذاكرة مؤقتة، وتقارير تمسح الجداول كاملة. يمر الأمر بسلام مع ألف طلب، ويصبح مؤلمًا مع مليون.

المتاعب اليومية: تقارير نهاية الشهر تعمل طوال الليل، ويتباطأ المتجر في أثنائها.

9. ثغرات في الامتثال والتدقيق

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

المتاعب اليومية: سؤال واحد من المدقق يستغرق أسبوعًا للإجابة عنه.

10. الارتهان للمورّد وشروط الترخيص

نظام مغلق يتحكم مورّده في تصدير بياناتك، أو يرفع الأسعار عند التجديد، أو يتوقف عن تطوير المنتج. وأحيانًا يكون العقد نفسه هو الخطر الأكبر.

المتاعب اليومية: «نريد الانتقال إلى نظام آخر، لكننا عاجزون عن إخراج بياناتنا بصيغة قابلة للاستخدام».

قيّم المخاطر في جلسة واحدة

لست بحاجة إلى مستشار لتبدأ. اجمع من يستخدمون النظام ومن يتولّون صيانته، وامنحوا كل خطر درجة من 1 إلى 5 على محورين:

  • الاحتمالية: ما مدى احتمال أن يتسبب هذا الخطر في حادث فعلي خلال الأشهر الاثني عشر القادمة؟
  • الأثر: إن وقع، فما حجم الضرر: مبيعات ضائعة، أو بيانات مفقودة، أو مساءلة قانونية، أو ضرر بالسمعة؟

اضرب الدرجتين. ما يحصل على 15 فأكثر يُعالَج هذا الربع، وما بين 8 و14 يُدرج في خطة التحديث، وما دون 8 يكفي أن يبقى تحت المراقبة. والخريطة الحرارية أعلاه ليست إلا هذا الجدول مرسومًا، وهي أنجح شريحة عرض أعرفها لإقناع مجلس الإدارة بتمويل التحديث.

الخطرالاحتمالية (1–5)الأثر (1–5)الدرجةالإجراء
بيئة تشغيل بلا دعم5525هذا الربع
الاعتماد على شخص واحد4520هذا الربع
الديون الأمنية4520هذا الربع
غياب الاختبارات المؤتمتة4416هذا الربع
تكاملات هشّة339خطة التحديث
الارتهان للمورّد248خطة التحديث

هذه الدرجات مثال للتوضيح لا معيار ثابت؛ ستخرج ورشتكم بدرجات مختلفة، والنقاش نفسه نصف الفائدة.

لماذا تفشل إعادة الكتابة الشاملة؟

حين تتضح المخاطر، يبدو الحل الأكثر إغراءً: «لنُعِد بناء النظام من الصفر كما ينبغي». لكن إعادة الكتابة الشاملة تفشل أكثر بكثير مما تنجح، ولأسباب يمكن توقعها:

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

نمط شجرة التين الخانقة: حدّث جزءًا واحدًا في كل مرة

شجرة التين الخانقة نبات يلتف حول شجرة مضيفة وينمو حولها إلى أن يستطيع الوقوف وحده. وفي البرمجيات، ينمو النظام الجديد حول القديم ويتسلّم منه مهمة بعد أخرى، إلى أن يصبح بالإمكان إيقاف النواة القديمة نهائيًا.

الترحيل بنمط شجرة التين الخانقة في ثلاث خطوات: وضع واجهة توجيه في المقدمة، ونقل جزء واحد، ثم إحالة النواة القديمة إلى التقاعد
واجهة التوجيه تسمح للنظامين القديم والجديد بالعمل جنبًا إلى جنب، وتنتقل الحركة جزءًا بعد جزء.

الخطوة 1 — ضع واجهة توجيه في المقدمة (الأشهر 0–2)

ضع طبقة توجيه أمام النظام القديم، كبوابة API أو وسيط خفيف (proxy)، توجّه في البداية 100% من الحركة إلى النظام القديم. وفي الوقت نفسه:

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

الخطوة 2 — انقل جزءًا واحدًا (الأشهر 2–8)

اختر جزءًا مهمًا وحدوده واضحة، مثل الكتالوج والمخزون أو الطلبات، ثم ابنِ الوحدة الجديدة أو اعتمد وحدة جاهزة، ووجّه هذه المهمة إليها.

  • طبقة مكافحة الفساد (Anti-corruption Layer) تترجم بين نموذج البيانات القديم والجديد، كي لا تتسرب غرائب النظام القديم إلى الشيفرة الجديدة.
  • التشغيل المتوازي يرسل المدخلات نفسها إلى النظامين ويقارن النتائج، إلى أن تتطابق تمامًا.
  • مفاتيح الميزات (Feature Flags) تنقل فرعًا واحدًا أو متجرًا واحدًا أو شريحة من العملاء في كل مرة، مع طريق عودة فوري.

الخطوة 3 — أحِل النواة القديمة إلى التقاعد (من الشهر 8 فصاعدًا)

حين ينتقل آخر جزء، أرشف البيانات التاريخية في تخزين للقراءة فقط، وأوقف ما تبقى من الشاشات القديمة، واحذف الشيفرة القديمة. احتفظ بالبيانات، وتخلّص من الخطر.

إعادة هيكلة، أم نقل إلى منصة جديدة، أم استبدال، أم إيقاف؟

لا يستحق كل جزء من النظام القديم المعاملة نفسها؛ فثلاثة أسئلة تحدد مسار كل جزء:

شجرة قرار: إيقاف ما لم يعد مطلوبًا، واستبدال ما هو عام، وإعادة هيكلة ما هو مدعوم وقابل للاختبار، وإلا فالنقل إلى منصة جديدة
المهام العامة كالطلبات والمخزون والدفاتر والرواتب نادرًا ما تستحق أن تُبنى من الصفر.
  • أوقف ما لم يعد أحد بحاجة إليه، فهذا أرخص تحديث ممكن.
  • استبدل المهام العامة — الطلبات والمخزون والمحاسبة والرواتب والموارد البشرية — بوحدات مجرَّبة؛ فميزتك التنافسية نادرًا ما تكمن في طريقة ترحيل قيد محاسبي.
  • أعِد هيكلة ما هو خاص بك وما زال سليمًا: أضف الاختبارات ورقِّه على خطوات صغيرة.
  • انقل إلى منصة جديدة ما هو خاص بك لكنه عالق على تقنية بلا دعم: انقل قواعده خلف واجهة التوجيه.

دروس من عمليات ترحيل حقيقية

بعض الدروس لا تأتي من الكتب، بل من التجربة:

  • اختبر على قاعدة البيانات نفسها التي تعمل في الإنتاج. قاعدة بيانات اختبار سريعة في الذاكرة قد تُخفي فروقًا في البحث الحساس لحالة الأحرف، وفي مقارنة الأنواع، وفي القيود. وقد رأيت بعضًا من أسوأ المفاجآت تجتاز كل الاختبارات، ثم تنهار عند أول طلب حقيقي.
  • كل إجراء يجب أن يرد برسالة مفهومة. رسالة «500 Server Error» المجرّدة أثناء الترحيل تهدم ثقة المستخدمين أسرع من أي ميزة ناقصة. تحقّق من المدخلات قبل تنفيذ أي خدمة، وحوّل الأخطاء إلى رسائل يفهم منها الناس ما عليهم فعله.
  • أدخل البيانات المرجعية مرة واحدة، وسجّل ذلك. سكربتات الإعداد التي تعمل مع كل تحديث ستمحو يومًا ما إعدادًا عدّله أحدهم يدويًا.
  • قِس الأداء قبل الترحيل وبعده. من دون رقم «قبل» لن تستطيع إثبات أن النظام الجديد أسرع، وسيقول أحدهم حتمًا إنه أبطأ.
  • احتفظ بسجل تدقيق منذ اليوم الأول. معرفة من غيّر ماذا ومتى تحسم نصف خلافات الترحيل في دقائق.

أين يناسب StoreConsole خطة التحديث؟

بُني StoreConsole على مجموعة من الوحدات المستقلة — الكتالوج والمخزون والطلبات والتوصيل والمحاسبة والموارد البشرية والرواتب وCRM وغيرها — تتواصل فيما بينها عبر الأحداث فقط. ولهذا فهو خيار طبيعي لمسار «الاستبدال»: ضع وحدة واحدة خلف واجهة التوجيه، وغذِّها من الصندوق الصادر في النظام القديم، ثم انتقل إلى الوحدة التالية حين تستقر الأولى. وفي كل وحدة سجل للنشاط وصلاحيات قائمة على الأدوار وتحقق بخطوتين، ما يُغلق عدة مخاطر مما سبق منذ اليوم الأول. وتعرض الجولة القصيرة أدناه الأدوار والتحقق بخطوتين وسجل التدقيق.

جولة المستخدمين والأدوار (0:47): صلاحيات حسب الدور، وتحقق بخطوتين، وسجل تدقيق كامل.

أيامك الثلاثون الأولى

  1. الأسبوع 1: اعقد ورشة المخاطر وارسم خريطتك الحرارية.
  2. الأسبوع 2: عالج أولًا البنود الأعلى درجة والأقل تكلفة: فعّل التحقق بخطوتين، وغيّر المفاتيح المسرَّبة، وجرّب استعادة نسخة احتياطية.
  3. الأسبوع 3: اكتب اختبارات توصيفية لأهم ثلاث عمليات لديك.
  4. الأسبوع 4: اختر الجزء الذي ستنقله أولًا، واتفقوا على طريقة قياس النجاح.

الخلاصة

  • «قديم» تعني «لا نستطيع تعديله بأمان»، لا «إنه عتيق».
  • قيّم عوامل الخطر العشرة حسب الاحتمالية والأثر، وعالج كل ما تبلغ درجته 15 فأكثر خلال هذا الربع.
  • تجنّب إعادة الكتابة الشاملة، واعتمد واجهة توجيه وصندوقًا صادرًا للأحداث ونمط شجرة التين الخانقة.
  • استبدل المهام العامة بوحدات مجرَّبة، واحتفظ بالشيفرة المخصصة لما يميّزك فعلًا.
  • اختبر على قاعدة بيانات الإنتاج نفسها، ولا تسمح لأي شاشة بأن ترد بخطأ مجرّد.

Anichur Rahaman مهندس برمجيات معماري ومؤسس StoreConsole، يصمّم أنظمة التجارة وERP للشركات النامية، ويهتم خصوصًا بالبنية القائمة على الأحداث وسلامة البيانات وتشغيل الأنظمة على خوادم الشركة نفسها.

About the Author

Anichur Rahaman

Continue Reading