Merhaba arkadaşlar; Teknik bir yazı olmadığı için koyabileceğim bir kategori bulamadım o yüzden öylece paylaşıyorum.
Geliştirdiğim bir framework üzerinde çok fazla emek verdiğim bir özelliği tek bir committe kaldırmak zorunda kaldım. Bu konudaki hislerimi paylaşmak istedim. Keyifli okumalar;
Bazen yazılımda bir özellik geliştirirsiniz…
Uzun sürer.
Zorlanırsınız.
Defalarca deneyip yanılırsınız.
Belki yüzlerce satır kod, belki onlarca test, belki de 1500 saatten fazla emek harcarsınız.
Ve sonunda çalışır.
İşte tam o anda beynimizin bir köşesi şöyle der:
“Çalışıyorsa dokunma.”
Bu cümle kulağa masum gelir. Hatta söylemem gerekir ki: tecrübeli geliştiricilerin bile büyük bir kısmının kendini bu felsefenin konforuna bıraktığını defalarca deneyimledim.
Zaman baskısı, teknik borç korkusu, “şimdilik çalışıyor ya” rahatlığı… hepsi insanı aynı tuzağa çekebilir.
Ama işin acı tarafı şu:
Bir şeyin çalışıyor olması, doğru olduğu anlamına gelmez.
Çalışan ama yanlış tasarlanmış bir parçanın tehlikesi
Benim yaşadığım durumda da tam olarak bu oldu.
Aylarca üzerinde uğraştığım bir mekanizma vardı:
Akışın belirli noktalarında sistemin durumunu yakalayıp, bir hata yaşandığında aynı noktaya geri dönebilen bir yapı.
Teknik olarak kusursuz görünüyordu.
Hatta ilk bakışta oldukça “akıllıca” bir fikir bile sayılabilirdi. Onunla gurur duyuyordum.
Fakat zaman içinde şunu fark ettim:
- Bu yapı mensubu olduğu uygulamanın prensiplerine aykırıydı.
- Akışın doğasını bozuyordu.
- Test edilebilirliği düşürüyor, sistemi deterministtik olmaktan çıkarıyor, debug sürecini zorlaştırıyordu.
- İçeri sızan küçük bir yanlış tasarım, bütün mimariyi kırılgan hâle getiriyordu.
- En önemlisi, ileride eklenmesi planlanan diğer özelliklerin önünü tıkıyordu.
Ve en sonunda şu gerçekle yüzleşmek zorunda kaldım:
Ne kadar emek harcamış olursam olayım, yanlış tasarlanmış bir şey geleceğimi rehin alıyordu.
Bu yüzden çalışıyordu, evet… Ama kaldırdım.
“Çalışıyorsa dokunma” felsefesi neden tehlikelidir?
Bu yaklaşım kısa vadede zaman kazandırır, evet.
Ama uzun vadede:
- teknik borcu artırır,
- mimariyi kırılganlaştırır,
- ekip kararlarını rehin alır,
- hatalı davranışları normalleştirir,
- bir özelliğin yanlış anlaşılmasına sebep olur,
- özellikle büyüyen projelerde ilerlemeyi durdurur.
Aslında mesele sadece kod değildir. Mesele düşünce biçimidir.
Kötü tasarlanmış bir parçayı dokunulmaz ilan etmek, geleceğe karşı yapılmış en büyük ihanetlerden biridir. Bazen bir şeyin çalışması değil… Doğru çalışması gerekir.
Sonuç: Bazen en iyi mühendislik kararı, dokunmaktır.
Bir özelliğe dokunmak insanın kendisiyle kavga etmesidir.Emekle, gururla, yatırım yaptığın saatlerle hesaplaşmaktır.
Ama iyi bir mimari,
iyi bir proje,
iyi bir yazılım disiplini…
Yanlış bir şeye bağışıklık kazanmaz. Onu temizlemezsen, ileride seni durdurur.
Benim kaldırdığım özellik de tam olarak buydu:
Çalışıyordu ama yanlış çalışıyordu. Artık dokunulamayacak kadar…
Ve yanlış olanı düzeltmenin en iyi yolu özellikle o yanlışlar üst üste binmişse; bazen dokunmaktan da öte, onu yok etmektir.
Peki siz nasıl bakıyorsunuz?
Bu yazıyı paylaşmamın sebebi merak:
- Siz de hiç “çalıştığı hâlde” kaldırmak zorunda kaldığınız bir özellik veya mimari karar yaşadınız mı?
- “Çalışıyorsa dokunma” felsefesine nasıl bakıyorsunuz?
- Sizin için hangi noktada “bu artık kaldırılmalı” çizgisi beliriyor?
- Size böyle hissettiren tasarımlar veya deneyimler oldu mu?
Görüşlerinizi merak ediyorum; çünkü her disiplin, her dil, her ekosistem bu konuda farklı hikâyeler barındırıyor.