Bir kod tabanının kalitesini ölçmek için araçlar giderek gelişiyor: satır başına hata sayısı, sikloматik karmaşıklık, test kapsamı yüzdesi, tekrarlı kod oranı. Bu metrikler somut, izlenebilir, raporlanabilir. Ama kod kalite metrikleri sınırları tartışıldığında ortaya çıkan soru şudur: bu ölçütler gerçekten kodu iyi yapan şeyi yakalıyor mu? Test kapsamı yüzdesi bu tartışmada sık kullanılan bir örnek. Yüzde seksen kapsamı olan bir kod tabanı, yüzde elli kapsamlıya göre daha güvenli midir? Mutlaka değil. Testlerin neyi test ettiği, kapsamdan çok daha belirleyicidir. Çıktıyı değil implementasyon detaylarını test eden testler, rakamı artırır ama kodun güvenilirliğini değil. Refactoring yapıldığında kıran ama gerçek bir hatayı yakalamayan testler, yüksek bir kapsam yüzdesiyle var olmaya devam edebilir. Kod kalite metrikleri sınırları arasında belki en az ölçülen ama en fazla değer taşıyan şey, kodun okunabilirliğidir. Bir geliştirici altı ay sonra bu koda döndüğünde ne kadar sürede anlayabilir? Bir yeni ekip üyesi sistem hakkında ne kadar hızlı zihinsel model oluşturabilir? Bu sorular sayıya dönüştürülmesi güç sorulardır; bu yüzden metrik dashboardlarına girmez. Bir başka kör nokta, mimari kararlardır. İki kod tabanı benzer metrik değerler üretebilir; ama biri gelecekteki değişikliklere kolayca uyum sağlarken diğeri her küçük değişiklikte geniş çaplı yeniden yazmayı gerektirebilir. Bu fark, statik analiz araçlarının yakalayamayacağı bir tasarım kalitesi sorunudur. Metriklerin varlığı değerli bir şey yapar: tartışmayı ortak bir zemine taşır, kör noktaları görünür kılar ve zaman içindeki eğilimleri izlemeyi mümkün kılar. Ama bu araçlar, yerlerine oturduğunda faydalıdır. Metrik hedefi kalite hedefinin yerini aldığında, testler kapsam yüzdesini artırmak için yazıldığında, kod karmaşıklığı azaltmak için anlaşılmaz biçimde yeniden yapılandırıldığında, araçlar ölçtükleri şeyi bozar. Gerçek kalite sorusu şudur: bu kod ekibin problemi çözmesine yarıyor mu, bakımı ne kadar maliyetli, değiştirmesi ne kadar güvenli? Bu sorular metriklerin başlangıç noktasını oluşturabilir; ama onların yerine geçemez.