بدهی فنیتون رو پرداخت کنید وگرنه زمین میخورید!
بدهیفنی چیست؟
فرض کنید میخواهید یک قابلیت بسیار کاربردی را به پلتفرمتان اضافه کنید و برای این کار دو راه حل وجود دارد! راه حل اول آسان است و زمان کمی میخواهد, ولی راه حل دوم سخت و زمانبر است, اما بهینه هم هست و قدرت و سرعت سیستم را نه تنها کاهش نمیدهد بلکه افزایش هم میدهد!
شما باید بین این دو گزینه انتخاب کنید. انتخاب گزینه اول برای شما یک بدهی فنی ایجاد میکند و شما باید در اسرع وقت این بدهی فنی را بازپرداخت کنید. یعنی از یک راه حل بهینه استفاده کنید.
اصطلاح بدهی فنی توسط Ward Cunningham ساخته شده است. این اصطلاح به این اشاره دارد که ما با استفاده از راه حلهای سریع و نابهینه بدهیهایسی به بار میآوریم که دقیقا مثل بدهیهای مالی هستند. چرا میگوییم مثل بدهیهای مالی هستند؟ چون دقیقا مثل بدهیهای مالی شامل بهره میشوند و بهرهی این بدهیها را باید پرداخت کنید! و هرچه از زمان بازپرداخت بگذرد مجبور به پرداخت بهره بیشتری میشوید!
انتخاب با ماست که چطور با این بدهیها رفتار کنیم, میتوانیم بازپرداخت را به تعویق ییندازیم و شاهد بیشتر شدن لحظهای بهره باشیم, یا شروع به بازپرداخت کنیم و بجای راهحلهای سریع و نابهینه از راه حلهای بهتر و بهینه استفاده کنیم! گرچه این بازپرداخت ما را وادار به هزینه کردن میکند, اما از افزایش بهره در آینده و مصادره اموالمان (توقف پروژه) جلوگیری میکند!
چرا با اینکه میدانیم راهکارمان مناسب نیست آن را انتخاب میکنیم و از نظر فنی بدهکار میشیم؟
پیشتر گفتم که انتخاب راهکارها دست خود ماست, پس این خود ما هستیم که بدهی فنی را انتخاب میکنیم! اما چرا؟
شرکتها برای توسعه بازار و استفاده از فرصتها هر از چند گاهی وامهایی از بانکها دریافت میکنند که برای توسعه بازار, سازمان یا … هزینه میشه! این وامها تنها به بانکها خلاصه نمیشه و گاهی اوقات برای رسیدن به رقیب و استفاده از فرصتها, از استانداردهای توسعه هم وامهایی گرفته میشه! این وامها باعث رعایت نکردن استانداردها و استفاده از راهکارهای نابهینه و متعاقبا بدهی فنی میشه!
بدهی فنی به خودی خود بد نیست, بازپرداخت نکردن بدهی هست که باعث ایجاد مشکلات میشه.
چرا باید بدهی فنی را پرداخت کنیم؟
نکته جالب درباره بدهیهای فنی این است که ممکن نیست مثل بدهیهای مالی به درستی اندازه گیرد شود. پس هیچ وقت حجم بدهیهای فنی برای ما مشخص نیست, پرداخت بهره بدهیهای فنی بهرهوری تیم را کاهش میده و چون ما نمی تانیم حجم بدهیهای فنی را مشخص کنیم میزان دقیق کاهش بهرهوری هم مشخص نیست! همچنین شما در آغاز برای افزایش درآمد و کاهش هزینه یا مثلا افزایش سرعت توسعه تن به این بدهیهای فنی دادید اما امراز با کاهش بهرهوری تیم و افزایش بهره بدهیها توان مالی شما کاهش پیدا میکند و برای ایجاد ویژگیهای جدید در محصول یا سازمان (ویژگی جدید در اون چیزی که داری توسعه میدید) با مشکل مواجه خواهید شد که این موضوع هم درآمد شما را کاهش یا هزینههای سازمان شما را افزایش میدهد!
به تصویر زیر دقت کنید, هرچه به پایان پروژه نزدیکتر میشویم میزان بدهی ما افزایش میابد و امکان بازپرداخت کاهش پیدا میکند, تاجایی که تمام توان تیم فنی سازمان را به خود اختصاص میدهد و ادامه راه را غیر ممکن میکند. پس هرچه سریعتر بدهی فنی را پرداخت کنید!

بدهی فنی شامل چه چیزایی میشه؟
بدهی فنی به خودی خود بد نیست, مثل وامهای بانکی که در مرحله اول بد نیستند اما با بازپرداخت نکردن اقساط مشکل آفرین میشوند. بدهیهای فنی میتوانند خوب باشند, فرض کنید که سازمان شما نیاز به توسعه سریع در یک بخش است یا مثلا یکی از محصولات شرکت شما نیاز به یک ویژگی جدید دارد و شما باید این ویژگی را هرچه سریعتر ایجاد و منتشر کنید تا از رقبای خود پیشی بگیرید. در این شرایط استفاده از بدهی فنی نه تنها بد نیست بلکه توصیه هم میشود. اما با این حال همیشه باید بدهی فنی را بازپرداخت کرد!!!
آقای مارتین فاولر بدهی فنی رو از نظر علت به دو دسته ناشی از بیدقتی (reckless) و مصلحت (prudent) و از نظر نوع به دو نوع عمدی (deliberate) و سهوی (inadvertent) تقسیم میکند.

توجه داشته باشید که یک خرابکاری (کثیف کاری), بدهی فنی نیست! همانطور که پیشتر گفتیم بدهی فنی را خود ما انتخاب میکنیم و چه بهتر که بدهی فنی ما یک بدهی تمیز و منظم باشد. فرض کنید بجای استفاده از یک جعبه تقسیم برای هر خانه و خیابان یک رشته سیم استفاده کنید, چه بهتر که این سیم ها به طور منظم کنار یکدیگر قرار گیرند تا در آینده بتوان آنها را بهتر مدیریت کرد و به جعبه تقسیم انتقال داد. یا فرض کنید درحال توسعه یک وب سایت هستید و بجای استفاده از یک فریم ورک Ajax کدها را از صفر مینویسید (pure code) و خب اگر اصول مهندسی نرمافزار و توسعه را رعایت نکنید و کد تمیزی ننویسید هرگز نمیتوانید این بدهی را تسویه کنید! پس کثیفکاری بدهی فنی نیست!!!
بدهی فنی شامل چه چیزایی نمیشه؟
بدهی فنی شامل کثیف کاری نمیشه!!!
چطور بدهی فنی را پرداخت کنیم؟
مسلما از بیشتر بدهیها از قبل خبر دارید چون خیلی از بدهیها رو خودتان انتخاب کردید! اما خیلی از بدهیها هم سهوی هستند, برای بازپرداخت این بدهیهای سهوی بهترین راهکار تحلیل مداوم پروژه است. همچنین شما میتوانید از تحلیلگران خارجی (خارج از سازمان یا تیم فنی) هم برای تحلیل و ارائه راهکار برای بهینه سازی پروژه استفاده کنید!

حرف آخر
بدهیهای فنی پروژه رو هرچه سریعتر پرداخت کنید!