Çalışıyorsa Dokunma” Felsefesi Sandığınız Kadar Masum Olmayabilir*

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.

3 Beğeni

Elinize sağlık katılıyorum.

Farklı fikir olsun diye karalıyorum. Vaktim var burada değerlendireyim.

Katılmıyorum.

Bu iş sanayi devrimi ve seri üretim ile endüstri mühendisliğinin tarihine kadar gider.

Etrafınıza bakın son ürünleri inceleyin. Hangisi tam ve kusursuz?

Kusursuzluk ararsanız, üretim yapamazsınız.

İki seçeneğiniz var kırmızı hap mavi hap.

Mavi hapı alır. Kusursuz düzen, hataları önceden yakalama derinlerine inme ile mutlu mesut yaşarsınız.

Kırmızı hapı alıp, kusurları kabul edip üretime geçersiniz.

Hep yamamak, düzetlmek için sonradan çok uğraşmamak için kusursuz bir konseptle başlamaya odaklanırsanız zor ilerlersiniz.

Sektör canlı, rekabet fazla, üret sonra iyileştir mantığı işliyor. Zaman nakittir. Başlangıç kusursuzluğu ile zaman kaybedenlerle, yalan yanlış ürün üretenler arasında net bir çizgi var.

Çok büyük yazılım üreticilerinin bile kusursuz start up ları yok. Hatta windows bile bazan geriye dönük uyumlulukları takip etse de komple işletim sistemini çöpe atıp yeniden tasarladığı oluyor.

Ki çevrede çok da büyük ölçek milyonlara, milyarlara hitap eden projesi olanı görmedim. Banka yazılımları dökülüyor, belediye ve diğer kamu yazılımları dökülüyor.

Böyle bir noktada siz neden kusursuzluk arıyorsunuz?

Olay basit bir risk analizinden ibaret.

Tıbbi bir cihaz yazılımı hata affetmez. Zaten kurallara sıkı bağlıdır. Standartları farklıdır.

Ama basit bir oyun da bellek sızıntısı yapacak diye uğraşıp durmak o oyunu piyasaya sürmekten alıkoyar.

MIL Standardında askeri bir yazılım yapıyorsanız kurallar nettir. Testler nettir. Ama bir metin editörü yada basit bir tanıtım web sitesi için bu kuralları zorlamazsınız.

Risk analizinizi yapın. Standartlara uyun geçin gidin.

Çalışıyorsa dokun felsefesi ile kaizen felsefesini karıştırmayın.

Sürümünüzü yayınlayın. Sürekli iyileştirme hedefiyle zamanınız olduğında iyileştirmelerinizi uygulayın.

Burada şu detayı da atlamayın. Ekmek bıçağı ekmek bıçağıdır, geliştireceğim diye motorlu testereye dönüştürmeyin. Bilinen yıllardır kullanılan çalışan ve ekonomik bir şeyi geliştirmeye çalışmak sadeleştirmekten daha kötü sonuçlara götürebilir.

BİC in tükenmez kalem konsepti gibi. Bazan süslü dolma kalem tasarlamaya gerek yoktur.

Nasa nın uzayda kurşun kalem kullanmak zorunda kalması gibi. Sade işe yarar ve basit tasarımlar işini yapar.

Vakti olan tabi ki, güvenliği gözden geçirsin, optimizasyonunu yapsın, sınırlı donanımlarda çalışacak şekilde daraltmasını yapsın ama ürünün piyasa çıkışına sebep olacak kadar detayda kendini boğmasın.

Mühendislik optimizasyondur. Bu optimizasyon para ve zaman maliyeti optimizasyonudur. Bu optimizasyon özellikle ekonomiktir. Arge gibi marjinal çalışmalar istisnadır.

Kolay gelsin.

1 Beğeni