ما هو الدَّين التقني؟ كي٠تقيسه وكي٠تتعامل معه
الدَّين التقني هو Ø§Ù„ØªÙƒÙ„ÙØ© الخÙية للاختصارات التي ØªÙØªÙŽÙ‘خَذ ÙÙŠ تطوير البرمجيات — ويتراكم كما يتراكم الدَّين المالي. إليك كي٠تتعر٠عليه، وتقيسه، وتتخذ قراراً مدروساً بشأن سداده.
كل ÙØ±ÙŠÙ‚ برمجيات عملنا معه ÙŠØÙ…Ù„ قدراً من الدَّين التقني. معظمهم يعلم بذلك. كثيرون منهم تعلّموا العيش معه. وقليل منهم يتآكل بصمت ØªØØª وطأته.
الدَّين التقني من تلك Ø§Ù„Ù…ÙØ§Ù‡ÙŠÙ… التي تقع عند تقاطع الهندسة والأعمال بطريقة تجعل Ø§Ù„ØØ¯ÙŠØ« عنه Ø¨ÙˆØ¶ÙˆØ Ø£Ù…Ø±Ø§Ù‹ عسيراً. يستخدمه المهندسون اختصاراً للإشارة إلى أي اضطراب ÙÙŠ قاعدة الكود. يسمعه مديرو المنتجات بوصÙÙ‡ طلباً للوقت الذي لا يملكونه. وكثيراً ما ÙŠÙØªÙ‚ر المؤسسون غير التقنيين إلى أي تصور ذهني له — ØØªÙ‰ يأتي اليوم الذي يستغرق Ùيه طلب ميزة بسيطة ثلاثة أشهر لتسليمها دون أن يستطيع Ø£ØØ¯ ØªÙØ³ÙŠØ± السبب بصورة واÙية.
استعارة الدَّين المالي دقيقة وموÙّقة، وسنعود إليها طوال هذا المقال. الÙكرة الجوهرية هي: كل اختصار ÙŠÙØªÙŽÙ‘خذ أثناء تطوير البرمجيات ÙŠÙÙØ±Ø² التزاماً مالياً مؤجلاً. هذا الالتزام لا يختÙÙŠØŒ بل يمكث ÙÙŠ قاعدة الكود يتراكم عليه Ø§Ù„ÙØ§Ø¦Ø¯Ø© بصمت — Ù…ÙØ¨Ø·Ùّئاً كل تغيير مستقبلي، ÙˆÙ…ÙØ¯Ø®Ùلاً الهشاشة، ÙˆÙ…ÙØ¹Ù‚Ùّداً Ùهم النظام. ÙˆÙÙŠ نقطة ما، ØªØµØ¨Ø Ù…Ø¯Ùوعات Ø§Ù„ÙØ§Ø¦Ø¯Ø© Ø§Ù„ØªÙƒÙ„ÙØ©ÙŽ Ø§Ù„Ø³Ø§Ø¦Ø¯Ø© لتشغيل Ø§Ù„ÙØ±ÙŠÙ‚ الهندسي. ÙˆÙÙŠ نقطة أخرى، يبلغ الرصيد الأصلي من الضخامة ØØ¯Ø§Ù‹ يجعل Ø§Ù„ÙØ±ÙŠÙ‚ ÙÙŠ ØØ§Ù„Ø© شبه شلل.
الهد٠من هذا الدليل هو تزويدك بصورة شاملة وعملية عن الدَّين التقني: ما هو، وكي٠ينشأ، وكي٠يÙقاس، وكي٠تتخذ قرارات رشيدة بشأن معالجته.
ما هو الدَّين التقني؟
صاغ هذا Ø§Ù„Ù…ØµØ·Ù„Ø ÙˆØ§Ø±Ø¯ كانينغهام عام 1992ØŒ ÙÙŠ الأصل Ù„ØªÙØ³ÙŠØ± سبب ازدياد صعوبة تغيير البرمجيات بمرور الوقت. كان تشبيهه مقصوداً: تماماً كما ÙŠØªÙŠØ Ù„Ùƒ الدَّين المالي Ø§Ù„ØØµÙˆÙ„ على شيء الآن ÙˆØ§Ù„Ø¯ÙØ¹ لاØÙ‚اً، ÙŠØªÙŠØ Ø§Ù„Ø¯ÙŽÙ‘ÙŠÙ† التقني Ù„ÙØ±ÙŠÙ‚ البرمجيات تسليم الوظائ٠بسرعة أكبر الآن مقابل قبول جودة تنÙيذ أدنى — ثم ÙŠÙØ³Ø¯ÙŽÙ‘د الثمن لاØÙ‚اً، ÙÙŠ كل مرة ÙŠØØªØ§Ø¬ Ùيها ذلك الكود إلى المساس أو التوسيع أو الإصلاØ.
كانت صياغة كانينغهام الأصلية دقيقة النبرة بطريقة ØªÙØ³Ø·Ù‘ØÙ‡Ø§ الاستخدامات الشائعة ÙÙŠ الغالب. كان يص٠سيناريو Ù…ØØ¯Ø¯Ø§Ù‹: Ø´ØÙ† كود يعمل لكنه لم ÙŠÙÙهم بالكامل بعد، مع النية ÙÙŠ العودة لإعادة هيكلته ØÙŠÙ† يتعمق الÙهم. وهذا خيار مشروع بل ذكي. الدَّين متعمَّد ÙˆØ§Ù„ÙØ±ÙŠÙ‚ واع٠به.
قام مارتن ÙØ§ÙˆÙ„ر لاØÙ‚اً بتقنين التصني٠الأشمل للدَّين التقني Ùيما ÙŠÙØ¹Ø±Ù بمصÙÙˆÙØ© الدَّين التقني، التي ØªÙØµÙ†Ùّ٠الدَّين على Ù…ØÙˆØ±ÙŠÙ†: هل جرى تØÙ…ّله عن قصد أم عن غير قصد، وهل كان القرار طائشاً أم ØÙƒÙŠÙ…اً.
طائش ومتعمَّد: ÙŠØ¹Ø±Ù Ø§Ù„ÙØ±ÙŠÙ‚ الأسلوب الصØÙŠØ ويتجاهله عمداً. "ليس لدينا وقت لكتابة الاختبارات." "Ø³Ù†ÙØ«Ø¨Ùّت هذه القيمة الآن مباشرة." هذا النوع من الدَّين هو الأكثر Ø¥Ù„ØØ§Ù‚اً للضرر على المدى البعيد، وغالباً ما يكون نتاج ضغط التسليم ÙÙŠ المدى القصير وهو يطغى على ØÙƒÙ… المهندسين.
طائش وغير مقصود: يتخذ Ø§Ù„ÙØ±ÙŠÙ‚ قراراً سيئاً دون إدراك سوئه. كثيراً ما يكون ذلك نتيجة قلة الخبرة، أو عدم الإلمام بالمجال، أو الجهل بأنماط Ø£ÙØ¶Ù„. "ماذا تعني بأن ثمة طريقة قياسية لمعالجة هذا؟ لقد بنينا نظامنا الخاص." الدَّين ØÙ‚يقي لكنه لم يكن مقايضة واعية — كان خطأً ارتÙكب Ø¨ØØ³Ù† نية.
ØÙƒÙŠÙ… ومتعمَّد: ÙŠØ¹Ø±Ù Ø§Ù„ÙØ±ÙŠÙ‚ الأسلوب الصØÙŠØ لكنه يختار مساراً أسرع مع نية ÙˆØ§Ø¶ØØ© للعودة ÙˆØªØØ³ÙŠÙ†Ù‡ لاØÙ‚اً. هذه هي ØØ§Ù„Ø© كانينغهام الأصلية. إنه قرار تجاري مشروع ØÙŠÙ† ÙŠÙØªÙŽÙ‘خذ بتمØÙŠØµ ÙˆÙŠÙØªØªØ¨ÙŽÙ‘ع بعناية. ÙŠØµØ¨Ø Ø§Ù„Ø¯ÙŽÙ‘ÙŠÙ† مشكلة إذا لم يأت٠ذلك "اللاØÙ‚" قط.
ØÙƒÙŠÙ… وغير مقصود: اتخذ Ø§Ù„ÙØ±ÙŠÙ‚ Ø£ÙØ¶Ù„ قرار ممكن بالمعلومات Ø§Ù„Ù…ØªØ§ØØ© آنذاك. لاØÙ‚اً، اكتشÙوا شيئاً — عن المجال، عن أنماط Ø£ÙØ¶Ù„ØŒ عن متطلبات المنتج Ø§Ù„ÙØ¹Ù„ية — كش٠أن النهج السابق دون المستوى الأمثل. هذا ليس ÙØ´Ù„اً. هكذا يسير تطوير البرمجيات. الاستجابة الصØÙŠØØ© هي الإقرار بذلك والتخطيط لمعالجته.
Ùهم أي ربع تقع Ùيه ديونك مسألة جوهرية، لأنه ÙŠÙØ´ÙƒÙّل طريقة Ø§Ù„ØØ¯ÙŠØ« عنها، ÙˆØªØØ¯ÙŠØ¯ المسؤول، وما تستلزمه معالجتها.
كي٠يتراكم الدَّين التقني
الدَّين التقني لا يأتي Ø¯ÙØ¹Ø©Ù‹ ÙˆØ§ØØ¯Ø© ÙÙŠ الغالب. يتراكم ÙÙŠ طبقات، كل طبقة مبررة بذاتها، وبمجملها Ù…ÙØ´ÙŽÙ„َّة.
ضغط التسليم هو السبب الأكثر شيوعاً. ØÙŠÙ† يقترب إطلاق منتج، أو موعد تسليم عميل، أو عرض أمام مستثمرين، تكون معايير الهندسة أول ما ينكسر. تتراجع تغطية الاختبارات. ØªØµØ¨Ø Ù…Ø±Ø§Ø¬Ø¹Ø© الكود سطØÙŠØ©. قرارات معمارية كانت تستØÙ‚ أسبوعاً من التÙكير ØªÙØªØ®Ø° ÙÙŠ غضون بعد ظهر. لا يبدو أيٌّ من هذه الاختصارات ذا أهمية ÙÙŠ ØÙŠÙ†Ù‡. وبعد عام، تتضاع٠آثاره.
قرارات "Ø³Ù†ÙØµÙ„ØÙ‡Ø§ لاØÙ‚اً" التي لا ØªÙØ±Ø§Ø¬ÙŽØ¹ أبداً. هذه هي Ø§Ù„ØØ§Ù„Ø© الكلاسيكية. الØÙ„ المؤقت الذي ÙŠÙØµØ¨Ø بنية ØªØØªÙŠØ© دائمة. قيمة الإعداد Ø§Ù„Ù…ÙØ¶Ù…َّنة ÙÙŠ الكود التي تÙنسَخ ÙÙŠ ثلاثة أماكن أخرى قبل أن ÙŠÙكر Ø£ØØ¯ ÙÙŠ مركزتها. تعليق TODO الذي يسكن قاعدة الكود أربع سنوات.
غياب مراجعة الكود أو ضعÙها. مراجعة الكود هي الآلية الأساسية التي ÙŠÙØØ§ÙØ¸ بها Ø§Ù„ÙØ±ÙŠÙ‚ على معاييره المشتركة ÙˆÙŠÙØØ³Ùّنها. ØÙŠÙ† ÙŠÙØªØ¬Ø§ÙˆÙŽØ² هذا الإجراء ØªØØª الضغط، أو ÙŠÙØ¹Ø§Ù…ÙŽÙ„ كإجراء شكلي لا ÙƒØÙˆØ§Ø± تقني ØÙ‚يقي، تنجر٠قاعدة الكود تدريجياً بعيداً عن أي معيار متسق.
الاعتماديات القديمة. المكتبات والأطر البرمجية لا ØªØØªÙظ بجودتها مع مرور الوقت. تÙكتشَ٠ثغرات أمنية. ØªÙØØ³ÙŽÙ‘Ù† الأداءات ÙÙŠ الإصدارات Ø§Ù„Ø£ØØ¯Ø«. تتغير واجهات البرمجة. قاعدة الكود التي لم ØªØØ§Ùظ على ØªØØ¯ÙŠØ« اعتمادياتها بصورة معقولة تراكم عليها نوع Ù…ØØ¯Ø¯ من المخاطر ÙŠØµØ¨Ø ÙÙŠ نهاية المطا٠طارئاً ØÙŠÙ† تظهر ثغرة أمنية ÙÙŠ ØØ²Ù…Ø© ØØ±Ø¬Ø©.
غياب الاختبارات. هذا سبب ÙˆÙ…ÙØ¶Ø§Ø¹Ù٠للدَّين التقني ÙÙŠ Ø¢Ù†Ù ÙˆØ§ØØ¯. الكود غير Ø§Ù„Ù…ÙØ®ØªØ¨ÙŽØ± أصعب ÙÙŠ التغيير الآمن، مما يعني أن التغييرات تستغرق وقتاً أطول وتنطوي على مخاطر أكبر، مما يعني أن المطورين ÙŠÙØ³Ø±Ø¹ÙˆÙ† أكثر ويأخذون اختصارات أكثر، مما يعني مزيداً من الدَّين التقني. دَين الاختبارات يتراكم على Ù†ÙØ³Ù‡.
غياب التوثيق. الكود الذي لم يوثقه Ø£ØØ¯ — على مستوى البنية المعمارية، وعلى مستوى ØØ¯ÙˆØ¯ واجهة البرمجة، وعلى مستوى المنطق المعقد — لا يمكن صيانته إلا من Ù‚ÙØ¨ÙŽÙ„ Ù…ÙŽÙ† كتبه. ØÙŠÙ† يغادر ذلك الشخص، تغادر Ù…Ø¹Ø±ÙØªÙ‡ معه.
تغيÙّر المطورين. ØÙŠÙ† يغادر مطور ÙŠÙهم نظاماً جيداً، لا تنتقل Ù…Ø¹Ø±ÙØªÙ‡ المؤسسية تلقائياً. ما يبقى هو كود يعمل لكنه غير Ù…Ùهوم، والÙهم شرط مسبق لكل تغيير. كل مغادرة بلا نقل Ù…Ø¹Ø±ÙØ© مناسب تزيد من غموض النظام.
علامات وجود مشكلة دَين تقني ÙÙŠ قاعدة كودك
ربما لم ØªÙØ¬Ø±Ù تدقيقاً رسمياً ÙÙŠ الدَّين بعد، لكن الأعراض التالية مؤشرات موثوقة على أن المشكلة جوهرية.
بناء الميزات يستغرق وقتاً غير متناسب. ØÙŠÙ† يستغرق تغيير يجب أن يأخذ يومين أسبوعين، ÙØ§Ù„سبب الأكثر شيوعاً هو أن الكود القائم هش للغاية، أو غير Ù…Ùهوم بما Ùيه Ø§Ù„ÙƒÙØ§ÙŠØ©ØŒ أو مترابط بعمق لدرجة أن ØØªÙ‰ تغييراً Ù…ØØ¯ÙˆØ¯Ø§Ù‹ يستلزم التنقل ÙÙŠ Ù…Ø³Ø§ØØ© واسعة من المخاطر.
كل تغيير يكسر شيئاً آخر. ÙŠÙØ³Ù…Ù‰ هذا Ø£ØÙŠØ§Ù†Ø§Ù‹ Ø§Ù„Ø¬Ø±Ø§ØØ© بالرصاص — الكود مترابط بإØÙƒØ§Ù… لدرجة أن تغيير شيء ÙˆØ§ØØ¯ يتسبب ÙÙŠ أعطال غير متوقعة ÙÙŠ أماكن أخرى. ØÙŠÙ† يخشى المطورون لمس أجزاء بعينها من النظام، ÙØ¥Ù† ذلك Ø§Ù„Ø®ÙˆÙ Ø¨ØØ¯ ذاته بيانات ذات معنى.
المطورون الجدد لا ÙŠÙنتجون Ø¨ÙØ§Ø¹Ù„ية. قاعدة الكود الصØÙŠØ© لها منØÙ†Ù‰ تعلم، لكن المطور الأول يجب أن ÙŠÙقدم مساهمات ذات قيمة ÙÙŠ غضون أسابيع قليلة من انضمامه. ØÙŠÙ† تستغرق عملية الإعداد أشهراً من تعلم Ø§Ù„Ù…Ø¹Ø±ÙØ© القبلية غير الموثقة، أو ØÙŠÙ† ÙŠÙØØ°ÙŽÙ‘Ø± الأعضاء الجدد ØµØ±Ø§ØØ©Ù‹ من أجزاء معينة من الكود، ÙØ§Ù„نظام يعاني من مشكلة هيكلية.
ثغرات أمنية ÙÙŠ اعتماديات قديمة. إذا كش٠تدقيق الاعتماديات عن ØØ²Ù… بها ثغرات Ù…Ø¹Ø±ÙˆÙØ© لم ØªÙØØ¯ÙŽÙ‘Ø«ØŒ ÙØ§Ù„ÙØ±ÙŠÙ‚ ÙŠØÙ…Ù„ مخاطر ستتØÙˆÙ„ ÙÙŠ نهاية المطا٠إلى ØØ§Ø¯Ø«Ø©. هذا شائع بشكل خاص ÙÙŠ قواعد كود Node.js ÙˆPython ÙˆPHP الأقدم التي غادرها المطور الأصلي.
لا تغطية اختبارات ذات معنى. ØÙŠÙ† لا توجد اختبارات، أو كانت الاختبارات سطØÙŠØ© لدرجة أنها ØªÙ†Ø¬Ø Ø¨ØµØ±Ù Ø§Ù„Ù†Ø¸Ø± عن ØµØØ© الكود، يكون كل نشر مخاطرة Ù…ØØ³ÙˆØ¨Ø©. Ø§Ù„ÙØ±Ù‚ ÙÙŠ هذا الوضع ØªÙØ·ÙˆØ± ÙÙŠ الغالب تجميداً غير رسمي على التغييرات ÙÙŠ الأجزاء Ø§Ù„ØØ³Ø§Ø³Ø© من النظام.
قاعدة الكود مرهوبة لا Ù…Ùهومة. هذا المؤشر الأكثر دلالة من بين الجميع. ØÙŠÙ† يص٠المهندسون أجزاء من نظامهم الخاص بأنها "الجزء المخيÙ" أو "الصندوق الأسود الذي لا يلمسه Ø£ØØ¯"ØŒ ÙØ§Ù„دَّين التقني قد Ø£ØµØ¨Ø Ù‚ÙŠØ¯Ø§Ù‹ تنظيمياً Ø¨Ø§Ù„ÙØ¹Ù„.
كي٠تقيس الدَّين التقني
ما لا يمكن قياسه لا يمكن إدارته. الدَّين التقني يصعب ØªØØ¯ÙŠØ¯Ù‡ الكمي بدقة، لكن ثمة مجموعة من المقاييس والمؤشرات التي تقدم صورة Ù…Ùيدة وقابلة للتنÙيذ.
مقاييس جودة الكود. يمكن لأدوات التØÙ„يل الثابت إظهار إشارات كمية عدة: التعقيد الدوري (عدد المسارات المستقلة عبر دالة — التعقيد العالي يعني صعوبة الاختبار والتغيير)ØŒ تكرار الكود (منطق Ù…Ùنسَخ يجب تغييره ÙÙŠ أماكن متعددة ØÙŠÙ† تتطور المتطلبات)ØŒ وتغطية الكود (نسبة قاعدة الكود التي تÙمارسها الاختبارات الآلية). لا يروي أي من هذه المقاييس القصة كاملة Ø¨Ù…ÙØ±Ø¯Ù‡ØŒ لكنها مجتمعةً تÙنشئ خطاً أساسياً يمكن تتبعه بمرور الوقت.
أدوات التØÙ„يل الثابت. ØªÙØ¬Ù…Ùّع أدوات مثل SonarQube ÙˆCode Climate هذه المقاييس ÙÙŠ واجهة ÙˆØ§ØØ¯Ø© وتÙقدم تقديراً للدَّين — ÙŠÙØ¹Ø¨ÙŽÙ‘ر عنه عادةً كوقت للإصلاØ. سيخبرك SonarQube على سبيل المثال بأن قاعدة كودك ØªØØªÙˆÙŠ Ø¹Ù„Ù‰ ما ÙŠÙقدَّر بـ 47 يوماً من عمل Ø§Ù„Ø¥ØµÙ„Ø§Ø Ø§Ù„Ù…ØªØ±Ø§ÙƒÙ…ØŒ Ù…ÙØµÙ†ÙŽÙ‘ÙØ§Ù‹ ØØ³Ø¨ Ø§Ù„ÙØ¦Ø©. هذه التقديرات ليست دقيقة، لكنها تقدم رؤية توجيهية وطريقة متسقة لتتبع التقدم.
تدقيق عمر الاعتماديات. شغÙّل تدقيقاً على مل٠قائمة Ø§Ù„ØØ²Ù… — npm audit أو pip-audit أو bundle-audit ØØ³Ø¨ بيئتك — وانظر ÙÙŠ Ø§Ù„ØØ²Ù… القديمة، بكم تأخرت، وهل بها إشعارات أمنية Ù…Ø¹Ø±ÙˆÙØ©. هذه لقطة ملموسة وقابلة للتنÙيذ يمكن إنتاجها ÙÙŠ دقائق.
الوقت ØØªÙ‰ الإنتاجية كمقياس بديل. اسأل ÙØ±ÙŠÙ‚Ùƒ: كم استغرق آخر مطور جديد ÙØ¹Ù„ياً قبل تقديم أول مساهمة ذات قيمة؟ إذا كانت الإجابة أطول من أربعة إلى ستة أسابيع لمطور أول، Ùقاعدة الكود ليست منظمة أو موثقة بصورة جيدة. هذا قياس نوعي لكنه موثوق بصورة Ù„Ø§ÙØªØ©.
عامل Ø§Ù„ØØ§Ùلة. يسأل عامل Ø§Ù„ØØ§Ùلة (الذي ÙŠÙلطَّ٠أØÙŠØ§Ù†Ø§Ù‹ بـ"عامل اليانصيب"): كم شخصاً يجب أن ÙŠÙØµØ§Ø¨ Ø¨ØØ§Ø¯Ø«Ø© ØØªÙ‰ ÙŠØµØ¨Ø Ø¬Ø²Ø¡ ØØ±Ø¬ من النظام غير قابل للصيانة؟ عامل ØØ§Ùلة يساوي ÙˆØ§ØØ¯Ø§Ù‹ — شخص ÙˆØ§ØØ¯ ÙŠÙهم مكوناً ما ÙˆØØ¯Ù‡ — يمثل مخاطرة مركّزة. ØÙŠÙ† يغادر ذلك الشخص، وسيغادر ÙÙŠ نهاية Ø§Ù„Ù…Ø·Ø§ÙØŒ يخسر Ø§Ù„ÙØ±ÙŠÙ‚ Ù…Ø¹Ø±ÙØ© لا ØªÙØ¹ÙˆÙŽÙ‘ض. ØªØØ¯ÙŠØ¯ المكونات ذات عامل Ø§Ù„ØØ§Ùلة Ø§Ù„ÙˆØ§ØØ¯ خطوة مهمة ÙÙŠ تدقيق الدَّين.
أنواع الدَّين التقني وأثرها
ليس الدَّين التقني متساوياً. نوع الدَّين ÙŠÙØØ¯Ø¯ مدى ØªÙƒÙ„ÙØ© ØÙ…له ومدى ØªÙƒÙ„ÙØ© إصلاØÙ‡.
الدَّين المعماري هو الأغلى ثمناً. يتراكم ØÙŠÙ† يكون الهيكل الأساسي للنظام — كي٠تتواصل المكونات، وكي٠تتدÙÙ‚ البيانات، وكي٠يتوزع النظام ÙÙŠ طبقات — Ù…ÙØµÙ…َّماً بصورة Ø¶Ø¹ÙŠÙØ© أو قد Ø£ØµØ¨Ø Ù…ØªÙ‚Ø§Ø¯Ù…Ø§Ù‹ مع تطور المنتج. لا يمكن Ø¥ØµÙ„Ø§Ø Ø§Ù„Ø¯ÙŽÙ‘ÙŠÙ† المعماري بإعادة هيكلة دالة. يتطلب إعادة ترتيب أجزاء كبيرة من النظام، وهذا العمل ينطوي على مخاطر عالية ويستهلك وقتاً طويلاً. ØªÙƒÙ„ÙØ© ØÙ…له تتراكم: كل ميزة ØªÙØ¨Ù†Ù‰ على معمارية Ø¶Ø¹ÙŠÙØ© أصعب ÙÙŠ البناء وتØÙ…Ù„ دَيناً Ù…ØÙ„ياً خاصاً بها.
دَين مستوى الكود هو الأكثر ظهوراً. منطق مكرر، متغيرات Ù…ÙØ³Ù…َّاة بصورة رديئة، دوال تؤدي أشياء كثيرة، أنماط غير متسقة عبر قاعدة الكود. ÙŠÙØ¨Ø·Ùّئ المطورين بصورة تراكمية ÙÙŠ كل تغيير، ويمكن معالجته تدريجياً ÙÙŠ الغالب دون Ø¥ØØ¯Ø§Ø« اضطراب كبير.
دَين الاختبارات خطير لأنه ÙŠÙØ®ÙÙŠ ديوناً أخرى. بدون اختبارات، لا يمكنك Ù…Ø¹Ø±ÙØ© ما إذا كان التغيير قد أدخل Ø§Ù†ØØ¯Ø§Ø±Ø§Ù‹. دَين الاختبارات ÙŠÙØµØ¹Ùّب سداد كل نوع آخر من الديون، لأن إعادة الهيكلة الآمنة تستلزم بنية اختبارات.
دَين التوثيق سهل Ø§Ù„Ø§Ø³ØªØ®ÙØ§Ù به وغالي الإهمال. ØªÙØ¯Ùع ØªÙƒÙ„ÙØªÙ‡ ÙÙŠ كل مرة ينضم مطور جديد، ÙˆÙÙŠ كل مرة يعود مطور ØØ§Ù„ÙŠ إلى جزء غير مألو٠من الكود، ÙˆÙÙŠ كل مرة ÙŠØØªØ§Ø¬ ØµØ§ØØ¨ Ù…ØµÙ„ØØ© من الأعمال إلى Ùهم آلية عمل شيء ما لاتخاذ قرار بشأن المنتج.
دَين البنية Ø§Ù„ØªØØªÙŠØ© يتراكم ØÙŠÙ† ØªÙØ¯Ø§Ø± إعدادات Ø§Ù„Ø³ØØ§Ø¨Ø© يدوياً بدلاً من إدارتها بالكود، ÙˆØÙŠÙ† تكون البيئات غير متسقة، ÙˆØÙŠÙ† تكون عمليات النشر يدوية وقبلية. المعيار Ø§Ù„ØØ¯ÙŠØ« هو البنية Ø§Ù„ØªØØªÙŠØ© كأكواد — Terraform ÙˆPulumi ÙˆCDK — لكن كثيراً من الأنظمة الأقدم ØªØØªÙˆÙŠ Ø¹Ù„Ù‰ سنوات من الإعدادات اليدوية المتراكمة التي يستØÙŠÙ„ تدقيقها أو إعادة إنتاجها بصورة موثوقة.
دَين الاعتماديات متميز ÙÙŠ أنه ينطوي على مل٠مخاطر خارجي. ØØ²Ù…Ø© كتبتها أنت لن ØªÙØ·ÙˆØ± ÙØ¬Ø£Ø© ثغرة تنÙيذ كود عن Ø¨ÙØ¹Ø¯. ØØ²Ù…Ø© كتبها طر٠ثالث تستطيع. الاعتماديات القديمة ÙÙŠ برمجيات نشطة الصيانة ساعة توقيت تدق.
تقديم Ø§Ù„ØØ¬Ø© التجارية لسداد الدَّين التقني
هنا تتعثر كثير من Ø§Ù„ÙØ±Ù‚ الهندسية. Ø§Ù„ØØ¬Ø© لمعالجة الدَّين التقني ÙˆØ§Ø¶ØØ© للمهندسين وغامضة للجميع الآخرين. إليك كي٠تÙقدÙّمها.
إطار مدÙوعات Ø§Ù„ÙØ§Ø¦Ø¯Ø© هو الأكثر ÙØ§Ø¦Ø¯Ø© Ù„Ø£ØµØØ§Ø¨ Ø§Ù„Ù…ØµÙ„ØØ© غير التقنيين. كل شهر تØÙ…Ù„ Ùيه دَيناً معمارياً كبيراً، أنت تÙÙ†ÙÙ‚ نسبة من طاقتك الهندسية على العبء الذي يخلقه — تسليم أبطأ للميزات، أخطاء أكثر، دورات تصØÙŠØ أطول، نشر أكثر ØØ°Ø±Ø§Ù‹. قدÙّر ما يكلÙÙ‡ ذلك العبء. إذا كان ÙØ±ÙŠÙ‚Ùƒ الهندسي يكل٠50,000 جنيه إسترليني شهرياً وكان تقديرك المعقول أن Ø§ØØªÙƒØ§Ùƒ الدَّين يستهلك 30% من طاقتهم الإنتاجية، ÙØ£Ù†Øª ØªØ¯ÙØ¹ 15,000 جنيه إسترليني شهرياً ÙƒÙوائد. هذا الإطار يجعل Ø®ÙØ¶ الدَّين Ù…ØØ§Ø¯Ø«Ø© عائد على الاستثمار مباشرة.
ØªÙƒÙ„ÙØ© عدم Ø§Ù„ÙØ¹Ù„ هي الجانب الآخر من المعادلة. الدَّين التقني لا يبقى ثابتاً. يتراكم Ùوائد. قاعدة الكود القابلة للإدارة اليوم ستكون أصعب ÙÙŠ العمل عليها العام المقبل وربما متعذرة العام الذي يليه. الإطار الصØÙŠØ ليس "نطلب ثلاثة أشهر لتنظي٠الكود." الإطار الصØÙŠØ هو "أمامنا خياران: نستثمر ثلاثة أشهر الآن ونستعيد طاقة التسليم الكاملة، أو نتقاعس ونشهد طاقة التسليم تتراجع باستمرار، مع تنامي عمل Ø§Ù„Ø¥ØµÙ„Ø§Ø ÙˆØªØ²Ø§ÙŠØ¯ مخاطره ÙÙŠ كل ربع نتأخر Ùيه."
عند التعامل مع Ø£ØµØØ§Ø¨ Ø§Ù„Ù…ØµÙ„ØØ© غير التقنيين، ØÙˆÙّل ما يمكن تØÙˆÙŠÙ„Ù‡ إلى أرقام وكن ØµØ±ÙŠØØ§Ù‹ بشأن عدم اليقين Ùيما لا يمكن. رسم بياني لسرعة تسليم الميزات بمرور الوقت ÙŠÙØ¸Ù‡Ø± اتجاهاً تنازلياً متسقاً أكثر إقناعاً من أي ØØ¬Ø© تقنية.
استراتيجيات معالجة الدَّين التقني
لا يوجد نهج ÙˆØ§ØØ¯ صØÙŠØ لسداد الدَّين التقني. الاستراتيجية المناسبة تعتمد على مدى ØØ¯Ø© الدَّين، وما Ù…ØªØ§Ø Ù„Ù„Ø´Ø±ÙƒØ© من وقت، ومستوى تØÙ…Ù„ Ø§Ù„ÙØ±ÙŠÙ‚ للمخاطر.
قاعدة الكشا٠هي النهج الأخ٠وطأةً: اترك كل قطعة كود تلمسها Ø£ÙØ¶Ù„ مما وجدتها قليلاً. Ø£Ø¹ÙØ¯ تسمية متغير Ù…ØÙŠØ±. استخرج كتلة مكررة ÙÙŠ دالة مشتركة. أضÙ٠اختباراً للمنطق الذي غيّرته. يتطلب هذا النهج انضباطاً لكنه لا يضي٠عبئاً إضاÙياً — يجري العمل ضمن التدÙÙ‚ الطبيعي لتطوير الميزات. بالنسبة Ù„Ù„ÙØ±Ù‚ التي تعاني من دَين معتدل ÙˆØ«Ù‚Ø§ÙØ© الجودة، ÙØ¥Ù†Ù‡ يكÙÙŠ ÙÙŠ الغالب للØÙاظ على الخط ÙˆØ§Ù„ØªØØ³ÙŠÙ† التدريجي.
عدّاءات إعادة الهيكلة المخصصة — تخصيص نسبة من كل عدّاء، أو عدّاءات كاملة بصورة دورية، Ù„Ø®ÙØ¶ الدَّين — مناسبة ØÙŠÙ† يكون الدَّين كبيراً بما يكÙÙŠ لاستهداÙÙ‡ مباشرة. النمط الأكثر شيوعاً هو تخصيص 20% من طاقة العدّاء Ù„Ù„ØªØØ³ÙŠÙ†Ø§Øª التقنية. يخلق هذا إيقاعاً يمكن التنبؤ به دون وق٠تطوير الميزات، ÙˆÙŠÙØ¬Ø¨Ø± Ø§Ù„ÙØ±ÙŠÙ‚ على ترتيب أولويات الدَّين المراد معالجته بدلاً من Ù…ØØ§ÙˆÙ„Ø© Ø¥ØµÙ„Ø§Ø ÙƒÙ„ شيء Ø¯ÙØ¹Ø©Ù‹ ÙˆØ§ØØ¯Ø©.
نمط شجرة الخانق هو النهج المناسب للدَّين المعماري الذي لا يمكن معالجته تدريجياً. ÙŠÙØ³Ù…Ù‰ تيمناً بشجرة التين التي تنمو ØÙˆÙ„ شجرة قائمة وتØÙ„ Ù…ØÙ„ها ÙÙŠ نهاية Ø§Ù„Ù…Ø·Ø§ÙØŒ ويتضمن النمط بناء نظام جديد منظم بصورة جيدة بجانب النظام القديم، مع توجيه الوظائ٠تدريجياً إلى النظام الجديد ØØªÙ‰ يمكن تÙكيك القديم. هذا بديل أقل خطورة من إعادة الكتابة الكاملة Ø¯ÙØ¹Ø©Ù‹ ÙˆØ§ØØ¯Ø© لأن النظام القديم يستمر ÙÙŠ العمل طوال ÙØªØ±Ø© الترØÙŠÙ„ØŒ ويمكن التØÙ‚Ù‚ من النظام الجديد تدريجياً.
الترØÙŠÙ„ التدريجي مقابل إعادة الكتابة الشاملة هو الاختيار الاستراتيجي المØÙˆØ±ÙŠ ØÙŠÙ† يكون الدَّين ØØ§Ø¯Ø§Ù‹. ÙÙŠ ما يكاد يكون جميع Ø§Ù„ØØ§Ù„ات، يكون الترØÙŠÙ„ التدريجي أكثر أماناً. تنطلق إعادة الكتابة الشاملة من Ø§ÙØªØ±Ø§Ø¶ أنك تستطيع تجميد النظام القديم، وبناء بديل كامل، والتØÙˆÙ„ ÙÙŠ Ù„ØØ¸Ø© Ù…ØØ¯Ø¯Ø©. ÙÙŠ الواقع، تتغير المتطلبات أثناء إعادة الكتابة، ويستمر النظام القديم ÙÙŠ تراكم التغييرات، ولا تصل Ù„ØØ¸Ø© التØÙˆÙ„ أبداً بصورة Ù†Ø¸ÙŠÙØ©.
متى ØªÙØ¹ÙŠØ¯ الكتابة ومتى ØªÙØ¹ÙŠØ¯ الهيكلة
إعادة الكتابة الكاملة ليست الإجابة الصØÙŠØØ© تقريباً أبداً. غير أنها Ø£ØÙŠØ§Ù†Ø§Ù‹ تكون الإجابة الصØÙŠØØ©. الشروط التي ØªÙØ¨Ø±Ø± إعادة الكتابة الكاملة Ù…ØØ¯Ø¯Ø©.
قاعدة الكود مكتوبة بلغة أو إطار لم يعد له نظام بيئي نشط، ولا يمكن ترØÙŠÙ„ها تدريجياً، ولا تستطيع دعم متطلبات المنتج ØØªÙ‰ مع إعادة هيكلة جوهرية. النظام تعرّض لتعديلات متكررة من أيد٠متعددة ØØªÙ‰ Ùقد أي تماسك داخلي، ÙˆØªÙƒÙ„ÙØ© Ùهمه أكبر من ØªÙƒÙ„ÙØ© إعادة بنائه. متطلبات الأعمال تغيرت جذرياً لدرجة أن نموذج البيانات والبنية الأساسية لم يعودا صالØÙŽÙŠÙ’Ù† — ليسا مجرد Ùوضويَّيْن، بل خاطئَيْن.
ØØªÙ‰ ØÙŠÙ† تتØÙ‚Ù‚ جميع هذه الشروط، يجب أن تكون إعادة الكتابة ÙÙŠ أضيق نطاق ممكن. إعادة بناء مكوّن ÙˆØ§ØØ¯ من Ø§Ù„ØµÙØ± بواجهات Ù…ØØ¯Ø¯Ø© جيداً مع بقية النظام أأمن تصنيÙياً من Ù…ØØ§ÙˆÙ„Ø© إعادة بناء التطبيق بأكمله ÙÙŠ آن ÙˆØ§ØØ¯. "Ù„Ù†ÙØ¬Ø±Ù إعادة كتابة كاملة" يجب أن ÙŠÙØ¹Ø§Ù…ÙŽÙ„ ÙƒÙ…Ù‚ØªØ±Ø ÙŠØ³ØªÙ„Ø²Ù… تدقيقاً جدياً — لأن تاريخ عمليات إعادة الكتابة الكاملة للبرمجيات، Ø¨ØµØ±Ø§ØØ©ØŒ ليس مشجعاً.
كي٠نساعد العملاء ÙÙŠ الدَّين التقني ÙÙŠ Cyberbeak
نعمل بانتظام مع شركات منتجاتها قد تراكمت Ùيها ديون تقنية كبيرة — ÙÙŠ Ø£ØÙŠØ§Ù† كثيرة دون أن ÙŠÙØ¯Ø±Ùƒ Ø§Ù„ÙØ±ÙŠÙ‚ Ø§Ù„ØØ§Ù„ÙŠ مدى عمق هذه الديون.
تدقيق قاعدة الكود الذي Ù†Ùقدمه هو تعاون منظم ÙˆÙ…ØØ¯Ø¯ زمنياً ÙŠÙØµÙ…َّم لإعطاء Ø§Ù„ÙØ±ÙŠÙ‚ التقني وقيادة الأعمال معاً صورة ÙˆØ§Ø¶ØØ© عن أين يكمن الدَّين، وكم ÙŠÙكلÙÙ‘ÙØŒ وما الذي يلزم لمعالجته. نراجع البنية المعمارية وهيكل الكود، ÙˆÙ†ÙØ´ØºÙّل أدوات التØÙ„يل الثابت، ÙˆÙ†ÙØ¯Ù‚Ù‚ ÙÙŠ شجرة الاعتماديات، ونÙقيÙّم تغطية الاختبارات، ÙˆÙ†ÙØ¬Ø±ÙŠ Ù…Ù‚Ø§Ø¨Ù„Ø§Øª مع Ø§Ù„ÙØ±ÙŠÙ‚ الهندسي بشأن الأجزاء التي ØªÙØ³Ø¨Ø¨ أكبر قدر من Ø§Ù„Ø§ØØªÙƒØ§Ùƒ ÙÙŠ التطوير اليومي. Ù†ØªÙØØµ عامل Ø§Ù„ØØ§Ùلة، وتجربة الإعداد، وممارسات النشر والبنية Ø§Ù„ØªØØªÙŠØ©.
المخرج هو تقرير مكتوب يتجنب Ø§Ù„Ù…ØµØ·Ù„ØØ§Øª التقنية قدر الإمكان، ويÙقدم رؤية Ù…ÙØ±ØªÙŽÙ‘بة Ø¨ØØ³Ø¨ الأولوية للدَّين ØØ³Ø¨ النوع والأثر، ويتضمن خارطة طريق Ø¥ØµÙ„Ø§Ø ÙˆØ§Ù‚Ø¹ÙŠØ©. نكون صريØÙŠÙ† بشأن ما نوصي به ولماذا، ونكون Ø¨Ù†ÙØ³ Ø§Ù„ØµØ±Ø§ØØ© ØÙŠÙ† تكون الإجابة الصØÙŠØØ© هي التعايش مع دَين معين بدلاً من سداده — ليس كل دَين يستØÙ‚ المعالجة الÙورية.
ØÙŠÙ† يرغب العملاء ÙÙŠ المضي ÙÙŠ Ø§Ù„Ø¥ØµÙ„Ø§ØØŒ Ù†ÙØØ¯Ø¯ نطاق العمل بعناية، ونتÙÙ‚ على الاستراتيجية المناسبة لكل ÙØ¦Ø© من الدَّين، ونعمل جنباً إلى جنب مع Ø§Ù„ÙØ±ÙŠÙ‚ القائم ØÙŠØ«Ù…ا أمكن. نؤمن بترك Ø§Ù„ÙØ±Ù‚ أكثر ÙƒÙØ§Ø¡Ø© مما وجدناها، مما يعني أن الهد٠ليس مجرد Ø¥ØµÙ„Ø§Ø Ø§Ù„ÙƒÙˆØ¯ بل إرساء الممارسات التي تمنع تراكم الدَّين ذاته من جديد.
الأسئلة الشائعة
هل كل دَين تقني سيئ؟
لا. الدَّين الذي ÙŠÙØªØÙ…َّل عن عمد، ÙˆÙŠÙØªØªØ¨ÙŽÙ‘ع بعناية، ÙˆÙŠÙØ³Ø¯ÙŽÙ‘د ØÙŠÙ† ØªØ³Ù…Ø Ø§Ù„Ø¸Ø±ÙˆÙ Ù‡Ùˆ أداة هندسية مشروعة. المشكلة ÙÙŠ الدَّين غير Ø§Ù„Ù…ÙØ¯Ø§Ø± — الدَّين الذي يتراكم دون وعي، ولا ÙŠÙØªØªØ¨ÙŽÙ‘ع، ولا ÙŠÙØ¹Ø§Ù„َج ØØªÙ‰ ÙŠØµØ¨Ø Ø£Ø²Ù…Ø©. إطار الأرباع الأربعة Ù…Ùيد هنا: الدَّين الØÙƒÙŠÙ… المتعمَّد Ø§Ù„Ù…ÙØªØÙ…َّل بنية إعادة الهيكلة ØÙŠÙ† يتعمق الÙهم يختل٠نوعياً عن الدَّين الطائش المتراكم بتجاهل معايير الهندسة ØªØØª ضغط المواعيد.
كم يستغرق Ø¥ØµÙ„Ø§Ø Ø§Ù„Ø¯ÙŽÙ‘ÙŠÙ† التقني؟
يعتمد ذلك كلياً على نوع الدَّين ÙˆØØ¬Ù…ه، ÙˆØØ¬Ù… Ø§Ù„ÙØ±ÙŠÙ‚ØŒ والنهج المتبع. دَين الكود والاختبارات يمكن معالجته تدريجياً ÙÙŠ أسابيع وأشهر دون انقطاع تسليم الميزات. الدَّين المعماري — لا سيما ÙÙŠ قواعد الكود الكبيرة الناضجة — يمكن أن يستغرق أشهراً ØØªÙ‰ سنوات، خاصةً إذا كان Ø§Ù„ÙØ±ÙŠÙ‚ يعالجه تدريجياً بالتوازي مع العمل الطبيعي على المنتج. لم نرَ دَيناً تقنياً لا يمكن تخÙيضه بصورة ملموسة ÙÙŠ غضون ستة أشهر من الجهد المركّز، لكننا رأينا أيضاً دَيناً ØØ§Ø¯Ø§Ù‹ بما يكÙÙŠ لجعل الØÙ„ الكامل برنامجاً متعدد السنوات.
هل يمكن Ø¥ØµÙ„Ø§Ø Ø§Ù„Ø¯ÙŽÙ‘ÙŠÙ† التقني دون وق٠تطوير الميزات؟
ÙÙŠ معظم Ø§Ù„ØØ§Ù„ات، نعم. ØªÙØªÙŠØ قاعدة الكشا٠ونموذج تخصيص 20% من العدّاء كلاهما Ø®ÙØ¶ الدَّين بالتوازي مع عمل الميزات. الاستثناء هو ØÙŠÙ† يكون الدَّين ØØ§Ø¯Ø§Ù‹ لدرجة أنه ÙŠÙØ¹ÙŠÙ‚ ÙØ¹Ù„ياً تطوير الميزات — ÙˆÙÙŠ هذه Ø§Ù„ØØ§Ù„Ø© غالباً ما ÙŠÙØ¨Ø±ÙŽÙ‘ر عدّاء Ø¥ØµÙ„Ø§Ø Ù…Ø±ÙƒÙ‘Ø²ØŒ لأن الاستمرار ÙÙŠ Ø¥Ø¶Ø§ÙØ© ميزات على أساس غير موثوق ÙŠÙØ¶ÙŠÙ ببساطة مزيداً من الدَّين على مستوى التطبيق Ùوق المشاكل الهيكلية القائمة. Ø§Ù„ØØ¬Ø© التجارية لتجميد الميزات المؤقت كثيراً ما تكون Ø£ÙˆØ¶Ø Ù…Ù…Ø§ تتوقع Ø§Ù„ÙØ±Ù‚ ØÙŠÙ† ØªÙØ·Ø¨ÙŽÙ‘Ù‚ صياغة مدÙوعات Ø§Ù„ÙØ§Ø¦Ø¯Ø©.
كي٠نمنع الدَّين التقني ÙÙŠ بناء جديد؟
لا يمكنك منعه كلياً، لكن يمكنك منع تراكمه بتهور. الأسس هي: ÙØ±Ø¶ مراجعة الكود بوصÙها ØÙˆØ§Ø±Ø§Ù‹ تقنياً ØÙ‚يقياً من اليوم الأول؛ وضع خط أساسي لتغطية الاختبارات والتمسك به؛ الØÙاظ على ØªØØ¯ÙŠØ« الاعتماديات بإيقاع منتظم لا على Ø¯ÙØ¹Ø§Øª طارئة؛ كتابة سجلات قرارات البنية المعمارية ØÙŠÙ† ØªÙØªØ®Ø° قرارات جوهرية؛ التعامل مع قاعدة الكود بوصÙها أصلاً مشتركاً يتØÙ…Ù„ كل عضو ÙÙŠ Ø§Ù„ÙØ±ÙŠÙ‚ مسؤولية ØªØØ³ÙŠÙ†Ù‡ تدريجياً. البناء بهيكل ÙˆØØ¯ÙˆÙŠ Ù†Ø¸ÙŠÙ â€” ØØªÙ‰ ÙÙŠ البنية المتكاملة — يجعل عمل إعادة الهيكلة Ø§Ù„ØØªÙ…ية أرخص وأأمن ØÙŠÙ† يأتي.
إذا كان منتجك ÙŠÙØ¸Ù‡Ø± علامات الدَّين التقني المتراكم — تسليم متباطئ، مطورون خائÙون، قاعدة كود تجاوزت قدرة أي شخص على Ø§Ù„Ø¥ØØ§Ø·Ø© بها — يسعدنا إجراء Ù…ØØ§Ø¯Ø«Ø© مباشرة بشأن ما نتعامل معه ÙØ¹Ù„اً وما يبدو عليه المسار الواقعي إلى الأمام. قمنا بهذا العمل مرات عديدة. سنخبرك بصدق بما نجد، ولن نوصي بأكثر من Ø§Ù„Ø¥ØµÙ„Ø§Ø Ù…Ù…Ø§ ÙŠÙØ¨Ø±Ø±Ù‡ الوضع التجاري.
تحدث مع فريقنا حول مشروعك
نعمل مع الشركات في المملكة المتحدة والولايات المتحدة والإمارات والمملكة العربية السعودية وكندا وأستراليا وألمانيا لبناء برامج مخصصة ومنصات SaaS وأنظمة السوق.