Azınlığın Sessiz Algoritması

Çağlar Demir:~$ cat posts/Abstraksiyonun Nihai Formu Olarak Basitlik.md

Abstraksiyonun Nihai Formu Olarak Basitlik

Dijital yapıların karmaşıklığı, genellikle çözümün kendisi değil, sürecin bir yan ürünüdür. Mimari katmanlar, desen uygulamaları, bağımlılık enjeksiyonları... Bu araçlar, saf bir niyeti çok katmanlı bir yürütmeye dönüştürme potansiyeli taşır. Ancak, bu katmanlama çoğu zaman gereksiz bir yük haline gelir; sadece çözümü erteleyen, asıl sorunu maskeleyen göstergelerdir.

Buradaki ince ayrım şudur: karmaşıklık, problemi olduğundan daha karmaşık gösterdiğimiz andır. Basitlik ise, problemin özünü en az sayıda işlemle ifade edebilme yeteneğidir.

Soyutlama Piramidi ve Gerçek Boyut

Yazılım geliştirmede sıklıkla karşılaşılan bu eğilim, mühendislik disiplinlerinin başlangıcından itibaren varlığını sürdüren bir tuzaktır. Bir kullanıcı hikayesi, basitleştirilmiş bir arayüz gerektirir; ancak bunu uygulamak için tasarladığımız servis katmanı, bir bütünleşik bilgi işlem sistemi gibi davranmaya başlar. Bu şişme, mimari tasarımın ilk aşamasında yapılan iyi niyetli ancak öngörüsüz kararlarla başlar.

Bir sistemi tasarlarken, her zaman "en iyi" çözümü üretmeye çalışırız. Bu, genellikle en genelleştirilebilir, en ölçeklenebilir ve dolayısıyla en fazla bağımlılığa sahip çözümdür. Ancak bu mükemmeliyetçi saplantı, bizi şu döngüye sokar: kod yazılır, ancak bu kodun tam potansiyelini kullanabilecek kullanıcı veya ortam görülmez. Sonuç olarak, ulaşılmak istenen basit hedef uğruna, gezegen ölçeğinde bir hiper-mimari inşa edilir.

Bu durumda, çözümün doğrusal bir ilerleme değil, sürekli bir geri çekilme süreci olması gerekir.

Fonksiyonel Kısıtlamanın Gücü

Minimalist yaklaşım, bir sonraki aşamayı ertelemek değil, mevcut aşamayı doğru tanımlamakla ilgilidir. Eğer bir fonksiyonun görevi X ise, o fonksiyon sadece ve yalnızca X yapmalıdır. Ekstra kapasiteyi olan bir yapı inşa etmek yerine, mevcut gereksinimi karşılayan en küçük parçayı bulmak gerekir.

Bu durum, özellikle mikroservis mimarilerinin aşırı uygulanmasında kendini gösterir. Her bileşenin birbirinden tamamen bağımsız, kendi kendine yeten bir evren olması gerektiği varsayılır. Oysa çoğu zaman, bu "bağımsız varlıklar", sadece bir veri akışının farklı kontrol noktalarıdır. Bu yapıyı zorlamak, operasyonel sürtünmeyi (overhead) doğrusal olarak artırır.

Basitlik, bir tasarım kararıdır, otomatik bir yan ürün değil. Bu karar, teknik borcun alınacağı noktada devreye girer: "Bu seviyede bir esnekliğe şu an ihtiyacımız var mı?" sorusu, mimarinin DNA'sına kazınmış olmalı, sonraki Sprint'lerde tartışılmalıdır.

Temizlik ve İndirgeme Aşamaları

İyi bir teknik uygulama, bu iki mod arasında geçiş yapabilme yeteneğidir:

  • İfade Etme (Expressing): Mevcut gereksinimi en temiz kodla ifade etmek. Burada amaç, okunaklılığı maksimize ederek işlem maliyetini düşürmektir.
  • Genişletme (Extending): Gelecekteki öngörülmeyen gereksinimler için tamponlama katmanları eklemek. Bu, ancak ve ancak mevcut ifade kusursuz çalışıyorken düşünülmelidir.

Bu iki modun karıştırılması, bizi ilk başta ulaşmaya çalıştığımız o "saf" çözüme değil, sadece karmaşık bir yürütmeye götürür. Kodun amacı, her şeyi yapabilmek değil, şu anki görevi kusursuz biçimde yerine getirmektir. Kalan her şey, gereksiz gürültüdür.