DRY prensibi eleştiri söz konusu olduğunda çoğu yazılımcı savunmaya geçer. "Kendini tekrar etme" kuralı o kadar içselleştirilmiştir ki sorgulamak bile yanlış hissettirilebilir. Oysa kanıtlar farklı bir tablo ortaya koyuyor. DRY'ı mekanik biçimde uygulamak, kodun okunabilirliğini düşürür, bağımlılık ağını karmaşıklaştırır ve değişiklik maliyetini artırır. İddia açık: Her tekrar bir kötülük değildir. Kanıt nedir? İki kod bloğu yüzeysel olarak benzer görünse de farklı iş mantıklarını temsil ediyorsa bunları birleştirmek kısa vadede temiz görünür, uzun vadede felakete yol açar. Bir e-ticaret uygulamasında ödeme doğrulama mantığı ile giriş doğrulama mantığı aynı regex'i paylaşabilir. DRY savunucusu bu ikisini tek fonksiyonda toplar. Altı ay sonra ödeme tarafında değişen bir iş kuralı, giriş ekranını da etkiler. Bug'ın kaynağını bulmak için bütün soyutlama zincirini takip etmek gerekir. Tekrar eden kod bu senaryoda daha az tehlikeliydi. Bu durum, DRY prensibi eleştiri perspektifinden "yanlış soyutlama" problemi olarak adlandırılır. Sandi Metz'in deyimiyle, tekrar etme maliyeti yanlış soyutlamanın maliyetinden düşüktür. Çünkü tekrar eden kodu okumak kolaydır; yanlış soyutlanmış kodu anlamak ise zihinsel bir yük getirir. Her çağrıda hangi dal çalışacak, hangi parametre hangi davranışı tetikleyecek diye araştırmak gerekir. Üstelik DRY uğruna yapılan soyutlamalar zamanla parametre cehennemi üretir. Başlangıçta iki satırı birleştiren fonksiyon, yeni gereksinimler geldikçe bayrak parametreleriyle şişer. Sekiz bayrak alan bir fonksiyon, aynı işi sekiz kez tekrar eden sekiz sade fonksiyondan daha mı temizdir? Hayır. Sonuç şudur: DRY bir araçtır, dogma değil. Tekrarın gerçekten aynı kavramı temsil edip etmediğini sormak gerekir. Eğer iki blok şimdilik benzer ama birbirinden bağımsız evrilecekse, tekrarı kabul edin. Birleştirme baskısına kapılmak yerine bağlamı okuyun.