الديون التقنية
Technical Debt
التكلفة المستقبلية التراكمية الناتجة عن اختيار حلول سريعة اليوم بدلاً من حلول صحيحة هندسياً.
التصنيف: طبقة الهندسة والمعمارية
Technical Debt | الديون التقنية
التعريف
صاغ وارد كانينغهام هذا المصطلح عام ١٩٩٢ كاستعارة مالية: الحلول السريعة هي “قروض” تُسرّع التسليم اليوم لكنها تتراكم عليها “فوائد” يجب سدادها لاحقاً. الديون التقنية ليست بالضرورة سيئة — لكن الديون غير الموثّقة وغير المعترف بها هي الخطيرة.
- ديون مقصودة: “نعرف أن هذا ليس الحل الأمثل، لكننا سنُصلحه في Sprint القادم” ← مقبولة إذا وُثّقت
- ديون غير مقصودة: كود سيئ ناتج عن نقص المعرفة أو ضغط الوقت ← خطيرة
- ديون بيئية: تبعيات قديمة، إصدارات غير محدّثة ← تتراكم بصمت
أظهرت الأبحاث أن الديون التقنية تستهلك ٢٣-٤٢٪ من وقت التطوير في المؤسسات المتوسطة.
مقياس DX
- يُقلّل: سرعة التطوير والثقة بالكود ↓
- يزيد: الحمل المعرفي والاحتكاك ↑
- الفرق التي تُخصص ٢٠٪ من كل Sprint لسداد الديون تحافظ على سرعة مستدامة
سيناريو عملي
Low DX — ديون تقنية متراكمة (Laravel):
// "TODO: إصلاح هذا لاحقاً" — مكتوب منذ 2021
// لا أحد يعرف لماذا يعمل هذا الكود
public function handle($request)
{
// ⚠️ لا تحذف هذا السطر — التطبيق يتوقف بدونه
sleep(2);
$data = json_decode(file_get_contents('php://input'), true);
// ← بدلاً من $request->all()
if ($data['type'] == 1 || $data['type'] == '1' || $data['type'] === true) {
// ← ٣ شروط لأن أحداً لم يعرف نوع البيانات الفعلي
}
}
High DX — ديون مُدارة (Laravel):
// app/Http/Requests/WebhookRequest.php
// ← FormRequest مع validation واضح
public function handle(WebhookRequest $request): JsonResponse
{
return match ($request->webhookType()) {
WebhookType::Payment => $this->handlePayment($request),
WebhookType::Refund => $this->handleRefund($request),
default => response()->json(['error' => 'Unknown type'], 422),
};
}
// ✅ الأنواع واضحة (Enum)
// ✅ التحقق في FormRequest
// ✅ لا sleep()، لا file_get_contents
حالات واقعية
Stripe — إعادة كتابة نظام المدفوعات
في ٢٠١٨، اتخذت Stripe قراراً جريئاً: إعادة كتابة نظام المدفوعات الأساسي من الصفر. النظام القديم كان يعمل، لكن الديون المتراكمة جعلت إضافة ميزة جديدة تستغرق ٠× مما يجب. بعد إعادة الكتابة (٩ أشهر)، انخفض زمن إضافة ميزة جديدة بـ ٥×.
McKinsey — دراسة تكلفة الديون التقنية
تقرير McKinsey عام ٢٠٢٠ على +١٠٠ مؤسسة وجد أن ٢٠-٤٠٪ من القيمة التقنية للمؤسسة مُقيدة بالديون التقنية. التوصية: تخصيص ١٠-٢٠٪ من كل Sprint لسداد الديون يُحقق ROI إيجابي خلال ٣-٦ أشهر.
Linux Kernel — إدارة الديون المستمرة
Linux Kernel يُدير الديون عبر “Stabilization Cycles” — كل إصدار يتبعه فترة تثبيت تُركز فقط على إصلاح الديون. النتيجة: +٣٠ عاماً من التطوير المستدام على قاعدة كود تحوي +٢٨ مليون سطر.
Shopify — إعادة هيكلة React Native
راهنت Shopify على React Native لتطبيق الموبايل، لكن بعد ٢ سنتين تراكمت ديون جعلت التحديث لأي إصدار جديد يستغرق ٣ أسابيع. القرار: تخصيص فريق كامل لـ “الأساسيات” (Foundations) يعمل فقط على سداد الديون. النتيجة: زمن التحديث انخفض إلى يومين.
إحصائيات رئيسية
| المقياس | القيمة | المصدر |
|---|---|---|
| وقت التطوير الضائع في الديون | ٢٣-٤٢٪ | McKinsey (2020) |
| القيمة التقنية المُقيدة | ٢٠-٤٠٪ | McKinsey (2020) |
| التخصيص الموصى به لسداد الديون | ١٠-٢٠٪/Sprint | Agile Best Practice |
| ROI لسداد الديون | إيجابي خلال ٣-٦ أشهر | McKinsey (2020) |
رُباعية الديون التقنية (Martin Fowler)
متهورة (Reckless) حكيمة (Prudent)
─────────────────────────────────────────────
مقصودة "لا وقت للتصميم" "نعرف المخاطر ونختارها"
(Deliberate) → خطيرة → مقبولة إذا وُثّقت
─────────────────────────────────────────────
غير مقصودة "لم نكن نعرف" "الآن نعرف كيف كان يجب"
(Inadvertent) → خطيرة جداً → تعلّم طبيعي
مفاهيم مرتبطة
- الحمل المعرفي — الديون تزيد الحمل المعرفي (workarounds، كود غامض)
- الاحتكاك — مصدر رئيسي للاحتكاك التقني
- المسار الذهبي — يمنع تراكم الديون بتوفير أنماط صحيحة من البداية
نصيحة Monochrome
لا تسأل “هل لدينا ديون تقنية؟” — بالتأكيد لديكم. اسأل: “هل نعرف أين هي، وهل لدينا خطة لسدادها؟”