Ölü Kod Mezarlığı: Sistemi Yavaşlatan Hayalet İnançlar

Her yazılım sisteminin bodrum katında bir mezarlık vardır. Orada artık çalışmayan fonksiyonlar, yıllar önce terk edilmiş koşullar, kimsenin çağırmadığı sınıflar ve üstüne not düşülmüş kadim büyüler uyur: sakın silme, bir gün lazım olabilir. Ölü kod tam olarak budur; programın yaşayan akışına katkısı olmayan ama depoda yer kaplayan, zihni meşgul eden, bakım maliyetini artıran eski parçalar. İlginç olan şu: Ölü kod teknik bir mesele gibi görünür, ama çoğu zaman psikolojik bir arızanın izidir. Kod çalışmaz; korku çalışır.

Bir ekip düşünün. Beş yıl önce yazılmış bir ödeme modülünün içinde devasa bir if bloğu duruyor. Artık hiçbir müşteri o yolu kullanmıyor, dokümantasyon onu anmıyor, testler ona uğramıyor. Ama biri silmeyi önerdiğinde odada sessizlik oluşuyor. Çünkü kodun kendisinden çok, onun etrafındaki efsane yaşıyor: Eski CTO bunu yazmıştı. Büyük bir müşteride sorun çıkarmıştı. Bir ara kampanya döneminde hayat kurtarmıştı. İşte yazılımda ölü kod, çoğu zaman eski bir savaşın madalyasıdır; paslanmıştır ama kimse duvardan indirmeye cesaret edemez.

Ölü kod neden tehlikelidir?

Çünkü yazılım yalnızca işlemciye verilen talimatlardan oluşmaz; aynı zamanda geliştiricinin zihninde kurduğu modeldir. Sistemde gereksiz kod ne kadar artarsa, bu model o kadar bulanıklaşır. Yeni gelen geliştirici şunu sorar: Bu fonksiyon hâlâ kullanılıyor mu? Bu parametre niye var? Bu hata yakalama bloğu hangi senaryo için? Cevap yoksa, kod artık bilgi değil gürültüdür. Gürültü de karar vermeyi yavaşlatır. Yavaş karar veren ekip, hızlı bozulan sistem üretir.

Ölü kodun maliyeti yalnızca satır sayısı değildir. Derleme süresini uzatabilir, statik analizleri kirletebilir, güvenlik taramalarında yanlış alarm üretebilir, test kapsamını sahte şekilde yükseltebilir. Daha kötüsü, yeni bir özellik geliştirirken yanlış referans noktası sunar. Geliştirici, yaşayan mimariyi değil, fosilleşmiş bir çözümü taklit eder. Böylece ölü kod çoğalır; mezarlık, şehir planına dönüşür.

Burada en kritik ayrım şudur: Eski kod ölü kod demek değildir. Legacy kod, hâlâ değer üretiyorsa yaşlı ama canlıdır. Ölü kod ise artık sistem davranışının parçası olmayan koddur. Onu kutsal yapan yaşlılığı değil, belirsizliğidir. Belirsizlik arttıkça insanlar silmek yerine dokunmamayı seçer. Dokunmamak güvenli görünür, ama uzun vadede en pahalı stratejilerden biridir.

Silmek bir vandalizm değil, bakım disiplinidir

Ölü kodla mücadele romantik cesaretle değil, yöntemle yapılır. Önce kullanım izleri aranır: çağrı grafikleri, loglar, feature flag kayıtları, telemetri, testler, sürüm geçmişi. Kod gerçekten çalışmıyorsa, onu yorum satırına almak çözüm değildir; bu sadece cesedi salona taşımaktır. Versiyon kontrol sistemi zaten hafızadır. Git varsa, mezar taşı olarak yorum satırı bırakmaya gerek yoktur.

İyi bir temizlik süreci küçük ve geri döndürülebilir adımlarla ilerler. Önce şüpheli alan işaretlenir, ardından gözlem süresi tanımlanır. Kullanım yoksa testler güncellenir, bağımlılıklar kaldırılır, kod silinir. Pull request açıklamasında neden silindiği net yazılır. Böylece silme eylemi kişisel bir saldırı değil, izlenebilir bir mühendislik kararı olur. Ölü kodu silmek, geçmişteki geliştiriciyi küçümsemek değildir; onun bir zamanlar çözdüğü problemin artık var olmadığını kabul etmektir.

Bu konu yazılımın dışına da sızar. Kurumların süreçlerinde, ekiplerin alışkanlıklarında, bireylerin düşüncelerinde de ölü kod vardır. Bir zamanlar işe yarayan ama artık sadece refleks olarak sürdürülen kurallar. Kimsenin okumadığı raporlar. Her toplantıda tekrarlanan ama karar üretmeyen cümleler. Eski bir başarının gölgesinde yaşayan inançlar. Yazılım bize acımasız bir ayna tutar: Çalışmayan şeyi sistemde tutarsan, sistem sonunda ona benzemeye başlar.

En sağlıklı kod tabanları, en çok kod yazılanlar değil, gereksiz kodun düzenli olarak eksiltildiği yerlerdir. Çünkü iyi mühendislik eklemek kadar çıkarmayı da bilmektir. Bir satırı silmek bazen yüz satır yazmaktan daha yüksek zekâ ister. Ölü kodun fısıltısı hep aynıdır: Ya lazım olursam? Usta geliştiricinin cevabı ise sakindir: Lazım olursan geçmişten geri çağırırım; bugün yaşamıyorsan, üretimde yerin yok.