مقدمه:
قرار بود متنی را گروهی به فارسی برگردانیم. ابتدا یکی از دوستان متن را ترجمه میکرد و بعد از آن برای بازنگریی متن در اختیارم قرار میگرفت.
هنگام خواندن متن به عبارت «بوی اسکات» رسیدم. متن بدین گونه بود:«قاعدهی بوی اسکات را انجام دهید: بازپرداخت بدهی هنگام کشف اتفاقی آن»
نگاهی به متن انگلیسی انداختم و کلی خندیدم. بعد به شوخی از دوستم پرسیدم که این بوی اسکات چیست؟
بخش اول: بدهی فنی چیست؟
بدهی بیانگر تعهد یک شخص حقیقی یا حقوقی (بدهکار) به شخص حقیقی یا حقوقی دیگر (طلبکار) است. بدهی معمولاً به دارایی واگذارشدهی طلبکار به بدهکار اشاره دارد، اما میتواند به عنوان استعاره برای بیان تعهدات اخلاقی یا سایر تعاملات اقتصادی نیز استفاده شود. بازپرداخت بدهی معمولاً شامل دو بخش «اصل بدهی» و «بهره»ی آن است. [ویکیپدیا]
مفهوم بدهی فنی نخستین بار توسط کانینگهام مطرح شد. وی بدهی فنی را اینگونه تعریف کرد:
«وقتی کدی را برای اولین بار تحویل میدهید مثل این است که خود را بدهکار کرده باشید. هر بدهی کوچکی باعث افزایش سرعت توسعه میشود به شرطی که آن را در اسرع وقت و با بازنویسی کد، بازپرداخت کنید… زمانی این موضوع خطرناک میشود که بدهی بازپرداخت نشود. هر دقیقهای که از عمر این کد که کاملا ًدرست نوشته نشده است میگذرد، مانند بهرهای است که به بدهی قبلی افزوده میشود. کل شرکتهای مهندسی زیر فشار بدهی ناشی از بیتوجهی به اینگونه پیادهسازیهای بازنویسینشده ممکن است زمینگیر شوند و پیشرفت آنها متوقف شود.»
کانینگهام برای این که به تیم کسبوکار خود نشان دهد ساخت سریع نرمافزار برای دریافت بازخورد روش خوبی است، از استعارهی بدهی فنی استفاده کرد. برای این کار، وی بر دو نکتهی کلیدی تأکید کرده است: تیم و سازمان باید با افزایش درک و شناخت خود از حوزهی کسبوکار، مراقب بازپرداخت بدهیها باشند؛ و با افزایش شناخت تیم و برای استفاده از آموختههای جدید، طراحی و پیادهسازی سیستم باید تغییر کند و تکمیل گردد.
از زمان معرفی این واژه در اوایل دههی ۱۹۹۰، صنعت نرمافزار برداشتهای آزادی از تعریف کانینگهام داشته است. امروزه بدهی فنی هم به میانبرهایی (shortcut) که آگاهانه و عامدانه انتخاب میشوند و هم به موضوعات نادرستی که به سیستم نرمافزاری آسیب میزنند گفته میشود. این موضوعات شامل موارد زیر هستند:
○ طراحی نامناسب یا بد : بخشی از طراحی که زمانی معقول و قابل قبول بود اما به دلیل تغییرات مهم کسبوکار یا تکنولوژی، دیگر معقول و قابل قبول نیست.
○ نقصها(defect) : مشکلات شناختهشدهای در نرمافزار که تاکنون زمانی برای رفع آنها گذاشته نشده است.
○ پوشش ناکافیِ آزمونها : بخشهایی که میدانیم به آزمونهای بیشتری نیاز دارند اما تاکنون کاری برای آنها انجام ندادهایم.
○ آزمون دستیِ بیش از حد : آزمونها دستی انجام میشوند در حالی که آزمونها باید خودکار شوند.
○ یکپارچهسازی و مدیریت ضعیف انتشار: این فعالیتها به گونهای انجام میشوند که زمانبر و خطازا هستند.
○ کمتجربگی در استفاده از سکو (platform): برای نمونه برنامههای کاربردی برای رایانههای بزرگ و به زبان کوبول نوشته شدهاند، در حالی که برنامهنویس باتجربه و مسلط به کوبول به تعداد کافی نداریم.
و موارد دیگری از این دست؛ چرا که امروزه اصطلاح بدهی فنی به عنوان استعارهای برای بیان مشکلات چند وجهی مورد استفاده قرار میگیرد. [Essential Scrum]
مارتین فاولر بدهی فنی را از طرفی ناشی از بیدقتی یا بیملاحظه بودن (reckless) یا ناشی از مصلحت یا دوراندیشی (prudent) میداند و از طرف دیگر آن را به دو دستهی عمدی (deliberate) و سهوی یا غیرعمدی (inadvertent) تقسیم میکند. به عنوان نمونه وقتی برنامهنویسی، کد موجود را بدون توجه به تأثیرات جانبی آن حذف میکند، بدهی فنی از نوع inadvertent و reckless ایجاد کرده است یا وقتی تیم پس از کسب تجربه، مبادرت به تغییر کد قبلی میکند، بدهی deliberate و prudent ایجاد کرده است. [martinfowler.com]
رابرت مارتین (عمو باب) نویسندهی کتاب Clean Code و ابداعکنندهی واژهی mess در برنامهنویسی اعتقاد دارد که کد کثیف با بدهی فنی متفاوت است. برای اطلاعات بیشتر به نوشتهی زیر مراجعه نمایید.
https://sites.google.com/site/unclebobconsultingllc/a-mess-is-not-a-technical-debt
بخش دوم: بازپرداخت بدهی فنی
روشهای مختلفی برای بازپرداخت بدهی وجود دارد که یکی از آنها «اجرای قانون پیشاهنگی» است.
«قانون پیشاهنگی»: «همیشه وقتی اردوگاه را ترک میکنید، تمیزتر از زمان ورودتان باشد.» اگر زبالهای روی زمین دیدید، بدون آن که دنبال این باشید که چه کسی آن را ریخته است، زباله را بردارید و آن جا را تمیز کنید. با این کار، آگاهانه محیط را برای گروه بعدی آمادهتر میکنید.
باب مارتین به زیبایی توضیح دادهاند که چرا از این قانون میتوان در توسعهی محصول و بدهی فنی نیز استفاده کرد [Clean Code]. با اجرای این قانون همواره تلاش میکنیم تا هر بار که به سراغ کد میرویم، طراحی و پیادهسازی آن را کمی بهتر از گذشته کنیم و نه بدتر.
بخش سوم: بوی اسکات چیست؟
چون اسکات اسم خانوادگی هم هست شاید بهتر بود میپرسیدم «بوی اسکات» کیست.
در هر صورت «بوی اسکات» تلفظ فارسی عبارت انگلیسی «Boy Scout» یا «Boy Scout rule» یا همان «قانون پیشاهنگی» است.
حالا این اتفاق به خاطرهای تبدیل شده است که یادآوری آن باعث خنده همهی ما میشود.
بخش چهارم: پرسش
تیم شما چقدر بدهی دارد؟ خود شما چطور؟ منظور بدهی فنی است و نه بدهی مالی!
گزیده:
“The old adage ‘People are your most important asset’ is wrong. People are not your most important asset. The right people are.” Jim Collins, author of Good to Great
موج
۲۷ آذر ۱۳۹۲ در ۰۰:۰۰واقعا لذت بردم از این پست
خیلی به موقع بود چون امروز صبح با همکاران به پرداخت بخشی از بدهی های فنی مان داشتیم فکر می کردیم
علیرضا
۲۷ آذر ۱۳۹۲ در ۰۰:۰۰😉
مسعود
۹ بهمن ۱۳۹۲ در ۰۰:۰۰😆
یکـ مهندص باصـواد!
۱۰ بهمن ۱۳۹۲ در ۰۰:۰۰حرف از بدهی نزنید که لرز میگیریم!