Karmaşıklık Şehveti
Bir yazılım mühendisi olarak o dürtüyü çok iyi biliyorum. Yeni bir projeye başlarken masaya oturuyoruz ve aklımızdaki o "mükemmel" mimariyi çizmeye başlıyoruz.
"Login servisini ayıralım, ödemeyi asenkron queue üzerinden geçirelim, frontend'i 5 farklı mikro-frontend'e blölelim..."
Kağıt üzerinde harika duruyor. Tıpkı Netflix veya Uber gibi görünüyor. Ama unuttuğumuz küçük bir detay var: Biz Netflix değiliz. Henüz değiliz.
Görünmez Maliyetler
Her ekstra katman (layer), her yeni servis ve her eklenen kütüphane, aslında geleceğe bir borç senedi imzalamaktır. Basit bir "Merhaba Dünya" apisi için Kubernetes cluster'ı kurduğunuzda, sadece kod yazmıyorsunuz; o cluster'ın bakımını, güvenliğini, log yönetimini ve maliyetini de üstleniyorsunuz.
Over-engineering (Aşırı Mühendislik), genellikle şu belirtilerle kendini gösterir:
- Erken Optimizasyon: Henüz performans sorunu yaşamadan Redis önbellekleme katmanları kurgulamak.
- Generic Kod Saplantısı: "Belki ileride lazım olur" diye yazılan, asla kullanılmayan soyutlama katmanları.
- Tool Fetşizmi: İşi en basit haliyle yapacak araç yerine, "bu aralar çok popüler" diye karmaşık bir tool seçmek.
"Sıkıcı" Teknoloji İyidir
"Boring Technology" kavramını duydunuz mu? PostgreSQL, yekpare (Monolith) bir sunucu ve basit bir REST API. Kulağa heyecan verici gelmiyor olabilir ama çalışır. Ve daha da önemlisi, bozulduğunda tamir etmesi kolaydır.
İlk günden mikroservis mimarisine giren girişimlerin büyük bir kısmı, ürünlerini pazara sunamadan (Time-to-Market) batıyor. Çünkü zamanlarını ürüne değil, dağıtık sistemlerin getirdiği sorunları (latency, consistency, debugging) çözmeye harcıyorlar.
Ne Zaman Karmaşıklaşmalı?
Basitlik, ilkel kalmak demek değildir. Stratejik bir tercihtir. Mimarinin karmaşıklaşması için "canının acıması" gerekir.
- Veritabanı CPU'su %90'a dayandı mı? Ok. Belki şimdi replikasyon düşünebiliriz.
- İki farklı ekip aynı codebase üzerinde çalışırken sürekli birbirini mi blokluyor? Ok. Belki şimdi modüler yapıya geçebiliriz.
Sonuç
Müşteriniz, arkada Kubernetes mi yoksa 5 dolarlık bir VPS mi çalıştığıyla ilgilenmez. "Satın Al" butonuna bastığında işlemin gerçekleşip gerçekleşmediğiyle ilgilenir. Mühendislik egomuzu bir kenara bırakıp, iş hedefine en kısa yoldan en güvenilir şekilde götüren çözümü üretmek asıl (seniority) ustalıktır.
Bazen en iyi kod, hiç yazılmamış olandır.
