Teknik borç (technical debt) nedir? Ekipte teknik borcu nasıl yönetir ve iş tarafına nasıl anlatırsınız?
Cevap
Teknik borç, bugün daha hızlı ilerlemek için seçilen kestirme çözümlerin gelecekte yarattığı ek maliyettir. Ward Cunningham'ın benzetmesiyle, borcun faizi her yeni özellikte ödenen fazladan efor, yavaşlama ve hata riskidir. Her teknik borç kötü değildir; bilinçli ve geri ödeme planıyla alınan borç, pazara hızlı çıkmak için meşru bir araçtır.
Martin Fowler'ın teknik borç dörtlüsü
| Bilinçli (deliberate) | Bilinçsiz (inadvertent) | |
|---|---|---|
| Tedbirli (prudent) | "Şimdi yayına çıkalım, sonrasını biliyoruz" | "Şimdi nasıl yapılması gerektiğini öğrendik" |
| Pervasız (reckless) | "Tasarıma vaktimiz yok" | "Katmanlı mimari de ne?" |
Türleri
- Kod borcu: tekrar, karmaşık fonksiyonlar, eksik testler.
- Mimari borç: sıkı bağlı modüller, ölçeklenmeyen tasarım.
- Altyapı borcu: eski framework/kütüphane sürümleri, manuel deploy.
- Dokümantasyon ve bilgi borcu: sadece bir kişinin bildiği sistemler.
Yönetim yöntemleri
- Görünür kılın: borçları backlog'a etiketli iş olarak ekleyin; kod içine dağılmış
TODO'lar yeterli değildir. - Etkiye göre önceliklendirin: sık değişen ve hata üreten bölgeler (hotspot) önce.
git logile değişiklik sıklığı ve karmaşıklık birlikte analiz edilebilir. - Kapasite ayırın: her sprint'in sabit bir yüzdesi (ör. %15-20) bakım ve borca ayrılabilir.
- Boy Scout kuralı: dokunduğunuz kodu bulduğunuzdan biraz daha temiz bırakın.
- Yeni borcu sınırlayın: Definition of Done'a test ve review kriterleri, CI'da statik analiz.
- Büyük borçlar için plan: Strangler Fig deseniyle kademeli değişim; "her şeyi baştan yazalım" projelerinden kaçının.
İş tarafına anlatmak
Teknik jargon yerine iş metrikleri kullanın:
- "Ödeme modülünde her yeni özellik iki kat uzun sürüyor; son çeyrekte bu modül kaynaklı 6 production hatası oldu."
- "İki sprint'lik bir yatırımla bu alandaki teslim süresini yarıya indirebiliriz."
- Riskleri somutlaştırın: desteği biten bir framework sürümü güvenlik açığı demektir.
Örnek senaryo
Sık değişen bir faturalama servisinde testler olmadığı için her değişiklik manuel regresyon gerektiriyordu. Ekip, yeni özellik geliştirirken dokunulan her fonksiyona karakterizasyon testi ekleme kuralı koydu ve her sprint'in %20'sini bu alana ayırdı. Üç ayda servis kaynaklı hata sayısı ve regresyon süresi belirgin şekilde düştü.
İlgili Yazılım Geliştirme Süreçleri soruları
- Testi olmayan büyük bir legacy kod tabanında değişiklik yapmanız gerekiyor. Nasıl ilerlersiniz?
- Semantic Versioning (SemVer) nedir? 2.4.1 sürümündeki her sayı neyi ifade eder?
- CI/CD nedir? Continuous delivery ile continuous deployment arasındaki fark nedir? Tipik bir pipeline'da hangi adımlar olur?
- TDD (Test-Driven Development) nedir? Red-Green-Refactor döngüsünü bir örnekle anlatın.
- Test piramidi nedir? Unit, integration ve end-to-end testler arasındaki farklar nelerdir?
- Code review'da nelere dikkat edersiniz? İyi bir pull request nasıl hazırlanır?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.