Referans Rehberi · Mimari

Rewrite ne zaman yanlış karardır

Hiçbir öneri “hadi baştan yazalım” kadar özgürleştirici gelmez — ve neredeyse hiçbiri bu kadar sık başarısız olmaz. Rewrite'ın yıllar boyunca birikmiş gizli bilgiyi neden çöpe attığı, siz yenisini inşa ederken eski sistemin neden çalışmaya ve değişmeye devam ettiği ve yine de ne zaman yeniden yazmanız gerektiği. CTO'lar ve teknik karar vericiler için bir karar dokümanı.

Bu nedir? · Referans Rehberi

Bir mühendislik problemini inceleyen derinlemesine bir rehber — riskler, maliyetler ve farklı karar verdiğimiz senaryolar dahil. Bir makale değil, bir başvuru metni. Genel bakışa git

Yazar
Batunet Engineering
Okuma süresi
13 dk
Seviye
Derinlemesine
Durum
Onaylandı
Son inceleme
21 Temmuz 2026
Güncelleme
21 Temmuz 2026
Bu sayfada

Büyümüş hemen her sistemde, şu düşüncenin karşı konulmaz hâle geldiği bir an gelir: Eskisini atalım ve doğrusunu baştan yazalım. Kod karmaşıktır, o zamanki kararlar yanlış görünür, her değişiklik zahmetli hissettirir — ve yeniden yazım, eski yükler olmadan, bugünün araçlarıyla temiz bir başlangıç vaat eder. Neredeyse hiçbir öneri bu kadar cazip değildir ve neredeyse hiçbiri bu kadar istikrarlı biçimde başarısız olmaz. Bu doküman bunun nedenini anlatıyor — ve yeniden yazımın her şeye rağmen ne zaman doğru karar olduğunu.

Bu, ölçülülük üzerine bir doküman. Yeniden yazımdan para kazanan bir yazılım şirketi burada çoğu zaman ondan vazgeçmeyi tavsiye ediyor ve tavsiyeyi inandırıcı kılan da tam olarak bu: “Baştan mı yazalım?” sorusunun dürüst cevabı çoğunlukla hayırdır ve bunu yalnızca kendi işine yaradığında söyleyen kişi güvenilir bir danışman değildir. Metin hiçbir araç ve hiçbir rakam vermiyor; bir rewrite'ın gerçekte neye mal olduğunu, neyi çöpe attığını ve yine de doğru yol olduğu az sayıdaki durumu anlatıyor.

1. Rewrite neden bu kadar cazip

Yeniden yazımın çekiciliği gerçek bir deneyimden beslenir: Mevcut sistem rahatsız edicidir. Başkasının ya da kendi eski kodunuzu okursunuz, kararları artık anlamazsınız, kimsenin açıklayamadığı karışıklıklara takılırsınız ve her değişiklik, yaylarını tanımadığınız bir saat mekanizmasına müdahale gibi gelir. Karşısında ise yeniden yazımın resmi durur: boş bir sayfa, bugünün araçları, bu sefer doğru yapma özgürlüğü. Hesap basit görünür — eskisi zor, yenisi kolay olurdu.

Bu hesap baştan çıkarıcıdır, çünkü gerçek bir acıyı hayal edilmiş bir kolaylıkla karşılaştırır. Eskinin acısı somuttur ve her gün hissedilir; yeninin kolaylığı ise henüz gerçeklikle hiç temas etmemiş bir tasavvurdur. Gerçekliğin bütün ödünlerini taşıyan bir sistemi, henüz tek bir ödün vermemiş bir sistemle kıyaslarsınız — ve yeni sistemin de gerçeklikle karşılaştığı anda aynı ödünleri vereceğini gözden kaçırırsınız. Rewrite'ın cazibesi yüksüz olanın cazibesidir ve yüksüz olan, yalnızca var olmadığı sürece yüksüz kalır.

Ödünleşim. Bu cazibeye direnmek, yeninin vaadini izlemek yerine eskinin gündelik acısını taşımaya devam etmek demektir — bu rahatsız edicidir ve durgunluk gibi hissettirir.

Maliyet. Ölçülülük, rahatsız edici sistemi değiştirmek yerine iyileştirmeyi gerektirir — yeni bir başlangıçtan daha zahmetli, daha az tatmin edici bir iş.

Ne zaman farklı karar veririz. Eskinin yalnızca rahatsız edici değil, temelden yanlış inşa edildiği yerde (bkz. Bölüm 5) cazibe bir yanılsama değil, bir sinyaldir — o zaman ona dikkatle uyulur.

2. Bir rewrite gerçekte neyi çöpe atar

Mevcut bir sistem kodundan fazlasıdır — yoğunlaşmış bilgidir. Her tuhaf dallanma, her özel işlem, unutulmuş bir olayı çağrıştıran her yorum bir deneyimin izidir: bir zamanlar ortaya çıkıp düzeltilmiş bir hatanın, gerçekliğin talep ettiği bir sınır durumunun, artık kimsenin belgelemediği ama birinin ihtiyaç duyduğu bir gereksinimin. Bu bilgi sistem çalıştığı sürece görünmezdir — ve bir rewrite'ın çöpe attığı tam da budur.

Yeniden yazım, gereksinimlerin bugün anlaşıldığı hâliyle temiz bir modelle başlar — ve bu anlayış her zaman eksiktir, çünkü eski sistem bugün doğru işlediği istisnaları toplamak için yıllar harcamıştır. Yeni sistem bu istisnaları, aynı hataları bir daha yapana, aynı olayları bir daha yaşayana, aynı sınır durumlarını bir daha acı çekerek öğrenene kadar bilmeyecektir. Dağınık kod gibi görünen şey çoğu zaman zor kazanılmış doğruluktu. Bir rewrite, istisnaları bilen bir sistemi onları yeniden öğrenmek zorunda olan bir sistemle takas eder — ve bu bedel kodda değil, kesintilerde ödenir.

Bir rewrite neyi korurBir rewrite neyi çöpe atar
gereksinimlerin bugünkü anlaşılışınıyıllar içinde toplanmış istisnaları
görünür, belgelenmiş işlevigörünmez, zor kazanılmış doğruluğu
eski yapıdan kurtulma özgürlüğünüeski yapının neden böyle olduğunun gerekçelerini
yeni araçlarıbir kez zaten düzeltilmiş hataları

Ödünleşim. Gömülü bilgiden vazgeçmek, eski sistemin yıllar boyunca öğrendiklerini kaybetme pahasına temiz bir başlangıç satın alır.

Maliyet. Kaybedilen bilgi bir dizi olay olarak geri döner — yeni sistem istisnaları bir daha öğrenir, bu kez production'da ve kullanıcıların gözü önünde.

Ne zaman farklı karar veririz. Eski sistemin gömülü bilgisinin az ya da zaten yanlış olduğu yerde — genç bir sistem, temelden hatalı bir sistem — kaybı pek ağır basmaz ve yeniden yazım korkutuculuğunu yitirir.

3. İkinci sistem etkisi

Yeniden yazımda tekrarlayan bir ironi vardır: Bir ekibin inşa ettiği ikinci sistem çoğu zaman ilkinden daha iyi değil, daha kötüdür. Eskinin kısıtlarından kurtulmuş ve bu kez doğru yapma arzusuyla hareket eden yeniden yazım, fazlasını isteme eğilimindedir — eski sistemde eksik olan her fikri eklemek, bir zamanlar istenen her esnekliği öngörmek, daha zarif görünen her soyutlamayı kurmak. Böylece hayal edilen yalın, temiz sistem değil, kendi hırsının altında ağırlaşan yeni bir sistem ortaya çıkar.

Bunun nedeni teknik olduğu kadar psikolojik olarak da öngörülebilirdir. Eski sistem baskı altında ve sınırlı bilgiyle ortaya çıkmıştır ve bu yüzden belli bir sadelik taşır — gerekeni yapar. Yeniden yazım ise eskiye duyulan öfkeden ve daha iyisini bildiği inancından doğar ve bu tutum aşırıya kaçmaya teşvik eder. Gerekli olan değil, istenen yeniden yazılır — ve istenen her zaman ihtiyaç duyulandan fazladır. Erken soyutlama, aşırı mühendislik ürünü esneklik, gerekçesiz karmaşıklık: Yeniden yazım bunların doğal yetişme zeminidir. Daha yalın bir sistem olarak düşünülen şey böylece çoğu zaman daha karmaşık bir sisteme dönüşür — yalnızca daha yeni kodla ve karmaşıklığını hiç değilse pahalıya kazanmış eskinin sessiz olgunluğu olmadan.

Ödünleşim. İkinci sistem etkisinden kaçınmak, yeniden yazımda boş sayfanın özgürleştirici hissine ters düşen bir disiplin gerektirir.

Maliyet. Bu disiplin, yeniden yazımı cazip kılan şeyi tam da elinden alır — sonunda istenen her şeyi ekleme hakkını.

Ne zaman farklı karar veririz. Bu etkiyi tanıyan ve kendini bilinçli olarak sadeliğe zorlayan deneyimli bir ekip onu sınırlayabilir; bu olgunluğun eksik olduğu yerde etki neredeyse kaçınılmazdır ve yeniden yazım o ölçüde daha risklidir.

4. Çalışan sistem hareketli bir hedeftir

Rewrite'ların bu kadar sık başarısız olmasının pratik nedeni basittir: Siz yenisini inşa ederken eski sistem yerinde durmaz. Çalışmaya devam eder, işi taşır ve bakımının yapılması, genişletilmesi gerekir — bu süre zarfında ortaya çıkan her acil gereksinim, her yeni sınır durumu, her düzeltme eski sisteme eklenir. Eskinin seviyesine getirilmek istenen yeni sistem böylece hareket eden bir hedefin peşinden koşar. Tam yetiştiği anda eskisi çoktan ilerlemiştir.

eski sistem — çalışmaya devam eder yeniden yazım — yaklaşır, asla yetişemez Zaman → · aradaki fark hiçbir zaman tam kapanmaz

Şema: Yeniden yazım arayı kapatmaya çalışırken eski sistem gelişmeye devam eder. Hareketli bir hedef kovalanır — ve uzun ara dönemde bir yerine iki sistem işletilir.

Özellikle sinsi olan, yeniden yazımın gerçekte bitmesinden çok önce neredeyse bitmiş gibi hissettirmesidir. Görünür, sık karşılaşılan durumlar hızla yeniden yapılır ve işin büyük kısmının tamamlandığı izlenimini uyandırır. Eksik olan ise tam da nadir istisnalar ve sınır durumlarıdır — eski sistemin yıllar içinde topladığı ve gerçek karmaşıklığının büyük bölümünü oluşturan durumlar. Böylece yeniden yazım, en zahmetli kalan kısım hâlâ önünde dururken uzun süre görünürde neredeyse bitmiş hâlde kalır. Hissedilen ve gerçek ilerleme arasındaki bu uçurum, rewrite'ların süreyi ve bütçeyi bu kadar güvenilir biçimde aşmasının — ve ara dönemin her plandan daha uzun sürmesinin — başlıca nedenlerinden biridir.

Bu uzun ara dönem asıl bedeldir. Yeniden yazım bitmediği sürece — ve neredeyse her zaman planlanandan uzun sürer — iki sistemi işletir ve bakımını yaparsınız: çalışan eskisini ve henüz yeterli olmayan yenisini. Asıl geliştirme için gereken güç bağlanmış olur ve çok çalışılmasına rağmen iş yerinde sayar. Rewrite'ların çoğu, tamamlanmak için ihtiyaç duydukları güveni tam da bu aşamada kaybeder.

Ödünleşim. Kademeli alternatif hareketli hedeften kaçınır, ancak bunu büyük bir yeni başlangıç yerine daha yavaş, daha az görünür bir ilerleme pahasına yapar.

Maliyet. Bir rewrite, genellikle hafife alınan tüm süresi boyunca iki sistemin gücünü bağlar ve asıl geliştirmeyi felç eder.

Ne zaman farklı karar veririz. Eski sistemin dondurulabildiği yerde — artık yeni gereksinim yok, yalnızca koruma — hareketli hedef ortadan kalkar ve yeniden yazım daha yönetilebilir hâle gelir.

5. Rewrite ne zaman yine de doğrudur

Bu doküman her yeniden yazıma değil, öfkeyle yapılan yeniden yazıma karşı bir duruştur. Rewrite'ın doğru karar olduğu durumlar vardır — ve bunların ortak bir özelliği vardır: Eski sistemin temeli yalnızca rahatsız edici değil, temelden yanlıştır. Taşıyıcı yapı bugün merkezî olan bir gereksinimi prensipte karşılayamıyorsa; altta yatan teknoloji yolunun sonuna gelmişse ve artık geleceği yoksa; eskiyi geliştirmeye devam etmenin maliyeti, öngörülebilir ömür boyunca yeniden yazımınkini aşıyorsa — o zaman yeniden yazım bir kaçış değil, soğukkanlı cevaptır.

Fark, “eskiyi değiştirmek zor” ile “eski, olması gereken şey olamaz” arasındadır. Birincisi modernize etmek için bir nedendir; ikincisi yeniden yazmak için. Bu yüzden dürüst inceleme, eski sistemin rahatsız edici olup olmadığını sormaz — büyümüş sistemlerin neredeyse hepsi öyledir —, çekirdeğinin gelecekte talep edileni taşıyıp taşıyamayacağını sorar. Cevap evetse, rewrite neredeyse her zaman aynı hedefe giden daha pahalı yoldur. Cevap hayırsa, tek yoldur ve o zaman bu yola bilinçli olarak, bedeline gözler açık girilir.

SoruModernize etYeniden yaz
Çekirdek gelecekte talep edileni taşıyabilir mi?evethayır, prensipte taşıyamaz
Teknolojinin hâlâ geleceği var mı?evethayır, yolunun sonunda
Eski rahatsız edici mi, imkânsız mı?rahatsız ediciimkânsız
Korumanın maliyeti yeniden yazımınkini aşıyor mu?hayırevet, ömür boyunca

Ödünleşim. Yeniden yazımı yalnızca temelden yanlış bir temelde seçmek, birçok rahatsız edici sisteme katlanmaya devam etmek demektir — karşılığında nadir doğru yeniden yazım kararını sık yapılan yanlış karardan ayırma kazancı elde edilir.

Maliyet. Dürüst inceleme, kendi öfkenizi nesnel bulgudan ayırmanızı gerektirir — eskiye duyulan kızgınlık içinde zor olan bir öz disiplin.

Ne zaman farklı karar veririz. Bulgu açıksa — ölü bir temel, karşılanamaz bir çekirdek gereksinim — ilke gereği tereddüt edilmez; ölçülülük, nesnel zorunluluktan değil rahatsızlıktan doğan yeniden yazıma yöneliktir.

6. Alternatif: kademeli olarak değiştirmek

“Böyle devam etmek” ile “her şeyi baştan yazmak” arasında neredeyse her zaman üçüncü bir yol vardır: eskiyi, çalışırken parça parça, kademeli olarak değiştirmek. Bir parçayı ayırır, yeniden inşa eder, geçiş yaparsınız ve sistem bu süre boyunca çalışır durumda kalır. Böylece büyük yeniden yazımın uzun, riskli ara dönemi olmadan, hareketli hedef olmadan ve gömülü bilginin tamamen kaybı olmadan yenilenme elde edersiniz — çünkü yalnızca anladığınızı değiştirir, geri kalanını sırası gelene kadar korursunuz.

Big bang: uzun süre inşa et … … sonra her şeyi geçir ← tüm süre boyunca risk → tek sıçrama, sonda büyük bir risk çok sayıda küçük adım, bütün asla risk altında değil

Şema: Büyük yeniden yazım riskini sonda toplu olarak taşır; kademeli geçiş ise riski, hiçbiri sistemin bütününü tehlikeye atmayan çok sayıda küçük geçişe dağıtır.

Bu yol büyük yeni başlangıçtan daha az tatmin edicidir, çünkü temiz bir kopuş ve her şeyin yeni olduğu bir gün sunmaz. Gücü de tam olarak buradadır: Hiçbir anda sistemin bütününü kaybetme riski taşımaz, çünkü hiçbir anda onu tamamen değiştirmez. Rewrite'ın cazibesini hisseden ama bedelini bilen kişi, kademeli geçişte genellikle gerçekten istediği şeyi — daha iyi bir sistemi — istemediği şey olmadan — bu süreçte onu kaybetme riski olmadan — bulur. Bu yolun somut olarak nasıl göründüğü, big bang olmadan modernizasyon yazısında ele alınıyor.

Ödünleşim. Kademeli geçiş, güvenliği ve kesintisiz işletimi daha yavaş, daha az görünür bir ilerleme ve temiz kopuştan vazgeçme pahasına satın alır.

Maliyet. Bir süre yarısı eski, yarısı yeni bir sistemle yaşamak ve ikisi arasındaki sınırı özenle korumak gerekir.

Ne zaman farklı karar veririz. Bir sistemin anlamlı biçimde değiştirilebilir parçalara ayrılamadığı ve çekirdeğinin zaten yenilenmesi gerektiği yerde kademeli yol yapaydır; o zaman bilinçli bir yeniden yazım daha dürüsttür.

7. Tipik hatalar

Rewrite kararının başarısız olduğu tekrarlayan örüntüler — neredeyse hepsi öfkeyi bir gerekçe sanmanın türevleridir:

  • Çekirdeğinin geleceği taşıyıp taşıyamayacağını incelemeden, eskisi rahatsız edici olduğu için yeniden yazmak.
  • Eski sistemin gömülü bilgisini gözden kaçırmak ve zor kazanılmış istisnaları dağınık kod diye geçiştirmek.
  • Temiz, yüksüz yeni sistemi ödünlerle dolu eskisiyle kıyaslamak — ve yenisinin de aynı ödünleri henüz vereceğini unutmak.
  • İkinci sistem etkisine yenik düşmek ve eskide eksik olan her şeyi, yeniden yazım kendi hırsının altında ağırlaşana kadar ona eklemek.
  • Hareketli hedefi hafife almak ve siz yenisini inşa ederken eski sistemin çalışmaya ve değişmeye devam ettiğini gözden kaçırmak.
  • Yeniden yazımın süresini hafife almak ve uzun ara dönem boyunca iki sistemin gücünü bağlamak.
  • Kademeli alternatifi gözden kaçırmak ve seçimi “böyle devam” ya da “her şey yeniden” ikilisine daraltmak.
  • Nadir doğru yeniden yazımdan bir kural — ya da sık yapılan yanlıştan her yeniden yazıma karşı bir dogma — çıkarmak.

8. Karar kontrol listesi

Rewrite kararından önce sırasıyla netleştirilmesi gerekenler:

  • Rahatsız edici mi, imkânsız mı? Eski sistemi değiştirmek yalnızca zor mu — yoksa çekirdeği prensipte olması gereken şey olamaz mı?
  • Teknolojinin geleceği var mı? Altta yatan teknoloji yolunun sonunda mı, yoksa hâlâ taşıyor mu?
  • Gömülü bilgi hesaba katıldı mı? Yıllar içinde toplanmış hangi istisnaların bir yeniden yazımda yeniden öğrenilmesi gerekeceği açık mı?
  • İkinci sistem etkisi? Ekip, istenen yerine gerekli olanı yeniden inşa etme disiplinine sahip mi?
  • Hareketli hedef? Eski sistem dondurulabilir mi — yoksa siz inşa ederken çalışmaya ve değişmeye devam mı edecek?
  • Süre ve çifte işletim? Genellikle hafife alınan süre ve iki sistemi işletmenin yükü dürüstçe hesaba katıldı mı?
  • Kademeli yol incelendi mi? Sistem her şey bir kerede yerine parça parça değiştirilebilir mi?
  • Öfke mi, bulgu mu? Karar çekirdek hakkında nesnel bir bulguya mı dayanıyor — yoksa eskiye duyulan kızgınlığa mı?

Bu sorulara cevap verebilen, nadir doğru yeniden yazım kararını sık yapılan yanlış karardan ayırmış olur — ve yeniden mi yazacağını, yoksa modernize etmenin mi daha iyi olduğunu bilir.

Sıkça Sorulan Sorular

Neden para kazanacağınız bir şeyden vazgeçmeyi tavsiye ediyorsunuz? Çünkü bir tavsiye, onu kendi çıkarına karşı da verme isteği kadar değerlidir. Bir rewrite pahalıdır ve bir yazılım şirketi için kazançlıdır — ve çoğu zaman yanlış seçimdir. Bunu yalnızca kendi işine yaradığında söyleyen kişi güvenilir bir danışman değildir. “Baştan mı yazalım?” sorusunun dürüst cevabı çoğunlukla hayırdır ve evet daha fazla ciro getirecek olsa bile bunu söyleriz.

Dağınık kod, yeniden yazmak için iyi bir neden değil mi? Nadiren. Büyümüş bir sistemde dağınık kod gibi görünen şey çoğu zaman zor kazanılmış doğruluktur — zaten düzeltilmiş hataların ve zaten öğrenilmiş sınır durumlarının izi. Bir yeniden yazım bu bilgiyi çöpe atar ve onu production'da yeniden öğrenmek zorunda kalır. Dağınıklık toparlamak için bir nedendir, yeniden yazmak için nadiren.

Rewrite gerçekten ne zaman doğrudur? Temel yalnızca rahatsız edici değil, temelden yanlış olduğunda: Çekirdek bugün merkezî olan bir gereksinimi prensipte karşılayamıyorsa, teknoloji yolunun sonuna gelmişse ya da korumanın maliyeti ömür boyunca yeniden yazımınkini aşıyorsa. Fark, “değiştirmesi zor” ile “olması gereken şey olamaz” arasındadır.

İkinci sistem etkisi nedir? İkinci sistemi ilkinden daha kötü yapma eğilimi — eskide eksik olan her fikirle, bir zamanlar istenen her esneklikle aşırı yüklenmiş. Kısıtlardan kurtulmuş ve doğru yapma arzusuyla hareket eden yeniden yazım çoğu zaman gerekli olanı değil, istenen şeyi inşa eder ve kendi hırsının altında ağırlaşır.

Rewrite'lar neden bu kadar sık projenin ortasında başarısız olur? Çünkü siz yenisini inşa ederken eski sistem çalışmaya ve değişmeye devam eder — yeniden yazımın hiçbir zaman tam olarak yetişemediği hareketli bir hedef. Uzun ve genellikle hafife alınan ara dönemde iki sistem işletilir ve asıl geliştirme felç olur. Rewrite'ların çoğu, tamamlanmak için ihtiyaç duydukları güveni tam da orada kaybeder.

Alternatif nedir? Eskiyi çalışırken parça parça, kademeli olarak değiştirmek — big bang olmadan modernizasyon. Yalnızca anladığınızı değiştirdiğiniz için yenilenmeyi riskli ara dönem olmadan, hareketli hedef olmadan ve gömülü bilginin tamamen kaybı olmadan elde edersiniz. Çoğu zaman bu, tam olarak istenen şeydir — istenmeyen risk olmadan.

İleri okuma

Temelinde Batunet Engineering Method yer alır: mevcut olanı anlamak, küçük ve geri alınabilir adımlarla yenilemek, yeniden yazımı yalnızca temelden yanlış bir temelde seçmek.

Son mühendislik ilkesi

Yeniden yazma arzusu neredeyse her zaman anlamanın acısından kaçınma arzusudur — ve tam da bu yüzden yanıltır. Mevcut bir sistemi anlamak zahmetlidir; onu atıp yeniden başlamak özgürleşme gibi hissettirir. Ama özgürleşme bir yanılsamadır: Yeni sistem aynı gerçekliği miras alır, aynı ödünleri verir ve aynı istisnaları öğrenir — yalnızca eskisinin pahalıya edindiği bilgi olmadan. Bu yüzden en olgun karar çoğu zaman rahatsız edici olanı değiştirmek yerine iyileştirmek ve yeniden yazımı, çekirdeğin gerçekten taşıyamadığı nadir duruma saklamaktır. Eskisi zor olduğu için yeniden yazan, bilinen bir sorunu bilinmeyen bir sorunla takas eder — ve bu takasın bedelini zaten bildikleriyle öder.


Bir rewrite, eskinin acısını geride bırakmayı vaat eder. Oysa geride yalnızca bilgiyi bırakır — ve acıyı bir kez daha yanına alır, bu kez onu katlanılabilir kılan dersler olmadan.

Referans verilen bileşenler

Bu alanda somut bir projeniz mi var?

Referans rehberleri düşünce yapımızı yansıtır. Kendi sisteminizi doğrudan yönetimle konuşabilirsiniz.