بسیاری از سازمانها هزینهٔ نرمافزار را با هزینهٔ ساخت اولیه یکی میگیرند، اما واقعیت این است که بخش بزرگتر هزینه پس از تحویل و در طول سالهای نگهداری پرداخت میشود. نرمافزار یک ساختمان نیست که یکبار ساخته شود و تمام؛ یک موجود زنده است که باید پیوسته با محیط متغیرش سازگار بماند.
نگهداری چند نوع است و همهاش رفع باگ نیست. نگهداری اصلاحی به خطاها میپردازد، نگهداری انطباقی نرمافزار را با تغییر محیط — مثل نسخهٔ جدید سیستمعامل یا مرورگر — همگام میکند، و نگهداری تکاملی قابلیتهای تازه را در پاسخ به نیاز جدید کسبوکار اضافه میکند. بخش بزرگی از کار، همین نوع آخر است.
بدهی فنی، عامل اصلی بالا رفتن هزینهٔ نگهداری است. هر میانبری که هنگام توسعه برای تحویل سریعتر زده میشود، مثل یک وام است که بهرهاش را در آینده میپردازید. اندکی بدهی فنی آگاهانه طبیعی است، اما اگر مدیریت نشود، روزی میرسد که هر تغییر کوچک هم پرهزینه و پرریسک میشود.
هزینهٔ نگهداری را با تصمیمهای درست در زمان ساخت میتوان کنترل کرد: کد تمیز و خوانا، پوشش تست کافی، مستندسازی تصمیمهای مهم و معماری ماژولار. سرمایهگذاری روی این موارد در ابتدا کندتر به نظر میرسد، اما هزینهٔ کل مالکیت نرمافزار را در طول عمرش بهشکل چشمگیری کاهش میدهد.