Bir MVP ne zaman yeniden yazılmalı, ne zaman kurtarılmalı?
Kod çirkin olduğu için rewrite yapmam. Sistem mevcut ürün kararlarını artık güvenilir biçimde taşıyamıyorsa ve küçük düzeltmeler toplam maliyeti azaltmıyorsa rewrite değerlendirmeye başlarım.
Bir ürün birkaç ay hızlı geliştirildikten sonra doğal bir cümle ortaya çıkar: 'Bunu baştan yazsak daha kolay.' Bazen doğrudur. Çoğu zaman değildir. Rewrite yeni bir başlangıç hissi verdiği için çekicidir; ama mevcut ürünün öğrendiği bütün edge case'leri yeniden keşfetme maliyeti de getirir.
Kodun kötü görünmesi rewrite sebebi değildir. Sistemin değiştirilemez hale gelmesi olabilir.
Önce borcun türünü ayırıyorum
| Borç | Rewrite gerekli mi? |
|---|---|
| Stil / isimlendirme | Genellikle hayır |
| Duplicate component | Genellikle hayır |
| Dağınık data access | Çoğu zaman aşamalı düzeltilebilir |
| Yanlış veri modeli | Bazen |
| Çelişen kaynak doğruları | Önce canonical model kurulmalı |
| Temel platform yanlışlığı | Daha güçlü rewrite adayı |
Kurtarılabilir sistemin işaretleri
- Core data modeli büyük ölçüde doğru.
- Sorunlar belirli domain'lerde yoğunlaşıyor.
- Route ve component'ler aşamalı değiştirilebiliyor.
- Production davranışı ölçülebiliyor.
- Migration sırasında eski ve yeni sistem bir süre birlikte yaşayabilir.
Bu durumda strangler yaklaşımı daha mantıklı olabilir: en problemli domain'i yeni modele taşı, eski katmanı parça parça emekli et.
old system -> adapter -> new domain -> migrate consumers -> remove oldRewrite adayının işaretleri
- Core veri modeli ürünün bugünkü gerçekliğini ifade edemiyor.
- Her feature aynı global state ve side effect ağına bağımlı.
- Güvenlik sınırı mimariye sonradan eklenemiyor.
- Platform seçimi ürünün temel ihtiyacını engelliyor.
- En küçük değişiklik bile öngörülemez regresyon üretiyor.
- Sistemin davranışını açıklayacak güvenilir test veya telemetry kurmak aşırı maliyetli.
Rewrite maliyetini eksik hesaplamayın
Yeni repository açmak maliyetin küçük kısmı. Gerçek maliyet auth, migration, eski kullanıcı verisi, ödeme durumu, deep link, SEO URL'leri, mağaza paketleri, analytics, edge case ve operasyon bilgisini yeniden taşımak.
const rewriteCost = implementation + dataMigration + regressionDiscovery + parallelOperation + userMigration + releaseRisk;Ürün hâlâ doğrulanmadıysa rewrite daha tehlikeli
Henüz product-market fit sinyali zayıfken mimariyi mükemmelleştirmek, bilinmeyen ürünü ikinci kez inşa etmek olabilir. Önce ürün riskini azaltmak gerekir.
Doğrulanmamış bir ürünü yeniden yazmak, belirsizliği daha temiz kodla yeniden üretmek olabilir.
Karar matrisi
function decide({ coreModelWrong, securityBlocked, changeCost, productValidated }: Signals) { if (!productValidated) return 'stabilize-and-learn'; if (coreModelWrong && securityBlocked && changeCost === 'extreme') return 'rewrite-candidate'; return 'incremental-rescue';}Benim varsayılanım: kurtar
Rewrite'ı ispatlanması gereken seçenek olarak görüyorum. Önce audit, kaynak doğrusu, domain izolasyonu, performans ölçümü ve gereksiz feature temizliği. Bunlar yapıldıktan sonra sistem hâlâ her değişiklikte direniyorsa rewrite artık duygusal değil, kanıta dayalı karar olur.
Prototipten Production'a
Çalışan bir MVP'yi güvenilir ürüne dönüştürmek: production kontrolü, modüler refactor, veri migration'ı, audit, rewrite kararı ve release gate'leri.