در فرآیند توسعه محصولات نرمافزاری مقیاسپذیر، یک دوگانه دائمی میان «سرعت عرضه به بازار (Time-to-Market)» و «معماری بینقص سیستم» وجود دارد. وقتی برای رسیدن به یک موقعیت تجاری یا اعتبارسنجی فرضیات محصولی دست به پیادهسازی سریع و میانبر میزنیم، در واقع وامی از آینده گرفتهایم. وارد کانینگهام (Ward Cunningham) این مفهوم را بدهی فنی (Technical Debt) نامید؛ اما برای درک ملموستر آن در مدیریت محصول، بهتر است آن را «بهای سرعت» بنامیم.
بدهی مالی به خودی خود بد نیست؛ استارتاپها و شرکتهای بزرگ برای رشد سریع وام میگیرند تا ارزشآفرینی کنند. بدهی فنی نیز دقیقاً همین است؛ ابزاری برای تسریع ورود به بازار. اما اگر سود مرکب این بدهی مدیریت نشود، روزی فرا میرسد که تمام ظرفیت مهندسی تیم صرفاً صرف سرپا نگهداشتن سیستم و برطرف کردن باگهای ریشهای خواهد شد.
ماتریس ۴ مدل از بهای سرعت (Technical Debt Quadrant)
مارتین فاولر برای طبقهبندی تصمیمات مهندسی، بدهیهای فنی را روی دو محور رویکرد تصمیمگیری (هوشمندانه در برابر بیفکر) و میزان آگاهی تیم (آگاهانه در برابر ناآگاهانه) ترسیم میکند:
تیم میداند میانبر میزند تا زودتر فیچر را به بازار برساند؛ معماری سادهتر پیاده شده اما ریسکها و نقاط نیازمند ریفکتور، شفاف در بکلاگ فنی ثبت شدهاند.
تیم بهترین معماری روز را پیاده کرده است، اما پس از ماهها کار و شناخت بهتر دامنه کسبوکار (Domain)، متوجه کاستیها میشود. این بدهی طبیعی و نشانه یادگیری تیم است.
تیم اصول طراحی و تست را میداند، اما با شعار «الان فقط ریلیز کنیم و بعداً درستش میکنیم» کدی آشفته مینویسد؛ «بعداً»یی که معمولاً تا زمان بحران هرگز نمیرسد.
تیم حتی متوجه خطرات و ضعف طراحی خود نیست. این وضعیت به دلیل ضعف در مهارتهای پایهای، نبود Design Pattern و عدم نظارت معمار نرمافزار ایجاد میشود.
چگونه بهای سرعت را در تیمهای محصولی مدیریت کنیم؟
پرداخت بدهی فنی به معنای متوقف کردن توسعه محصول و بازنویسی کامل (Rewrite) نیست. تیمهای بالغ از روشهای تدریجی و پیوسته استفاده میکنند:
جمعبندی
سرعت در تحویل محصول یک مزیت رقابتی حیاتی است، اما اگر این سرعت بدون درک بهای آن باشد، به سرعت به توقف کامل تیم مهندسی ختم میشود. تصمیمگیری برای پذیرش بدهی فنی باید مثل گرفتن وام بانکی باشد: سنجیده، با هدف مشخص و با توانایی پرداخت اقساط.
مدیریت بدهی فنی: چگونه تعادل بین سرعت و کیفیت را پیدا کنیم؟