حسین دادخواه
حسین دادخواه
خواندن ۴ دقیقه·۵ ماه پیش

جیغ مدیران و اشک برنامه‌نویسان: بدهی فنی

سلام دوستان، میخوام یه دردی رو مطرح کنم! دردی که مدیرها میشنون جیغ میزنن برنامه نویسها اشک میریزن!

این روزها بحث بدهی فنی مثل همیشه! داغ شده! توی ۱۰ روز گذشته (از ۴ تا ۱۴ مرداد ۴۰۳)، ۵ تا سوال توی استک، ۴ تا توی ردیت و ۳ تا مقاله از سایتهای معتبر دنیا در این مورد منتشر شده و حسابی روشون بحث شده


بر اساس گزارش STX Next، #بدهی_فنی یکی از بزرگترین چالشهای CTOها در سال 2024 هست. بیشتر از 90٪ از CTOهای دنیا بدهی فنی رو بزرگترین مشکل خودشون میدونن که روی کارایی و تحویل پروژه‌ها تاثیر میذاره. مسائل امنیتی و مشکلات استخدام و نگهداری کارکنان هم از چالشهای دیگه هستن اما حدود 14٪ از CTOها بدهی فنی رو یکی از دلایل اصلی #شکست پروژه‌ها میدونن.

یک مثال بزرگ از هزینه‌های ناشی از بدهی فنی، پروژه سیستمهای بانک HSBC در سال 2012 بود که به علت انباشت بدهی فنی و عدم بروزرسانی به موقع، باعث شد تا هزینه‌ای بالغ بر 1.2 میلیارد #دلار براشون داشته باشه و این مشکل باعث شد که هزاران مشتری نتوانند به حسابهای بانکی خودشون دسترسی پیدا کنن و نتونن تراکنش های مالی خودشون را انجام بدن.


این چالشها شامل شناسایی و اصلاح کدهای ناکارآمد و بهبود فرآیندهای توسعه هست تا از ایجاد مشکلات جدید جلوگیری بشه.

حالا بیایید ببینیم چه راه حل‌هایی برای #مدیریت بدهی فنی پیشنهاد شده:

اولین قدم، ثبت و شفافیت بدهی فنی هست. باید مسائل مربوط به بدهی فنی رو به صورت جداگانه و مستقل از تکرارها و اسپرینت‌ها ثبت کنیم تا قابلیت مشاهده و پیگیری داشته باشن. استفاده از ابزارهایی مثل TFS و SonarQube برای ردیابی و مدیریت بدهی فنی خیلی مفیده.

محاسبه بدهی فنی هم خیلی مهمه. و قطعا باید شاخصهای شفافی براش داشته باشیم، برای این کار، SonarQube یکی از ابزارهای محبوبه که مشکلات رو شناسایی و میزان تلاش مورد نیاز برای رفع اونها رو محاسبه میکنه.SonarQube هم شاخصهای مختلفی رو چک میکنه مثل پوشش تست (Test Coverage)، بدهی فنی (Technical Debt)، مسائل بحرانی (Critical Issues)، کد تکراری (Duplicated Code)، نقصهای امنیتی (Security Vulnerabilities) و کدهای بد بو! (Code Smells).

این ابزار کد رو به صورت دورهای و خودکار (این مهمه) اسکن میکنه و نتایج رو به روز رسانی میکنه.از مثالهای code smell هایی که SonarQube شناسایی میکنه میتونیم به توابع طولانی (Long Method)، کلاسهای بزرگ (Large Class)، متدهایی که بیشتر از دادههای کلاسهای دیگه استفاده میکنن (Feature Envy)، کد تکراری (Duplicated Code) و کدهای غیرمفید (Dead Code) اشاره کنیم.

اگه دنبال یک ابزار ساده و سریع برای ارزیابی #پیچیدگی کد PHP هستید، PHPMetrix میتونه گزینه مناسبی باشه. اما برای یک پلتفرم جامع تحلیل کد، شناسایی بدهی فنی و کد بوها، و ادغام با ابزارهای CI/CD، SonarQube گزینه بهتریه.یه ابزار دیگه که میتونه کمک کنه vFunction هست. این پلتفرم به سازمانها کمک میکنه تا بدهی های #معماری رو شناسایی و اولویتبندی کنن. با تحلیل معماری نرمافزار و شناسایی نقاط ضعف، توسعه دهندگان میتونن بدهی فنی رو کاهش بدن و کارایی کد رو بهبود ببخشن.vFunction شاخص هایی مثل پیچیدگی معماری (Architectural Complexity)، اتصال بین اجزاء (Coupling)، انسجام داخلی (Cohesion)، قابلیت نگهداری (Maintainability)، عملکرد (Performance) و مقیاسپذیری (Scalability) رو بررسی میکنه تا مشکلات ساختاری رو شناسایی و پیشنهادات بهبود رو ارائه بده.


شاخص بعدی، تخمین ROI هست که خیلی به درد میخوره. این شامل محاسبه هزینه رفع بدهی و مزایای بالقوه اون هست. مثلاً فرض کنید رفع بدهی فنی در پروژه لاراولی شما 100 ساعت زمان نیاز داره و نرخ ساعتی توسعه دهنده شما 50 دلار هست. بنابراین هزینه بدهی فنی میشه:

100 ساعت * 50 دلار = 5000 دلار.


حالا اگه با رفع بدهی فنی، زمان توسعه برای ویژگیهای جدید 20٪ کاهش پیدا کنه و این باعث صرفه جویی سالیانه 200 ساعت بشه، با نرخ ساعتی 50 دلار، این صرفه جویی معادل 10000 دلار خواهد بود. بنابراین، ROI برای رفع بدهی فنی در این پروژه:

(10000 دلار - 5000 دلار) / 5000 دلار * 100 = 100٪


یعنی شما دو برابر هزینه ای که برای رفع بدهی فنی صرف کردهاید، صرفه جویی خواهید کرد.اگه کسی بتونه به درستی ROI رو حساب کنه باعث میشه مدیرفنی و #مدیر #کسب_و_کار خیلی زود به #زبان_مشترک برسن و راحت تصمیم گیری کنن.البته این محاسبه به این راحتی ها نیست و مدیرهای غیرفنی نتیجه حل این بدهی های فنی رو لمس نمیکنن تا وقتی که خدانکرده بترکن!

اما بهترین سیاستی که میشه با یه کدبیس بزرگ و پر از بدهی داشت، بهبود مستمر و تدریجیهبه قول کن بلانچارد، نویسنده و مشاور مدیریت:

"هیچ چیزی به اندازه بهبود مستمر موفقیت نمیآورد."


ابزارهای SonarQube و… هم خیلی خوبن ولی من برای اینکه کم هزینه تر باشه یه ابزاری رو در قالب لینتر سالهاست نوشتم و با خودم هرجایی که میرم مثل یه میراث میبرم. کار رو راه میندازه و شاید یه روز عمومی منتشرش کردم.

نکته آخر هم اینکه بدهی فنی فقط تو کد نیست! تو ذهن ها هم هست و باید هر دو اصلاح بشه


راستی، اگه راه حل دیگه ای به نظرتون میرسه، حتما باهامون درمیون بذارید!

بدهی فنیمدیریت پروژهمدیریت ریسک
ناجی کسب‌وکارهای نرم‌افزازی، پل ارتباطی بیزینس و صفر و یک
شاید از این پست‌ها خوشتان بیاید