Bir paramedik olarak ilk öğrendiğiniz şeylerden biri, çantanızın ağırlığıdır. Her gram önemlidir çünkü o çantayı apartmanın beşinci katına, dar bir merdivenden, terleyerek ve nefes nefese çıkartacak olan sizsiniz. Ve yukarıda sizi bekleyen hastanın her geçen saniyesi, sizin o çantayı ne kadar akıllıca hazırladığınıza bağlıdır.

Ambulans çantası (Jump Bag) mimarisi acımasızca pragmatiktir. İçine sadece ve sadece hayat kurtaracak ekipmanlar konur: Hava yolu açma araçları, turnike, defibrilatör, temel ilaçlar. Hiçbir paramedik "Belki MR çekmemiz gerekir" diyerek sırtına portatif bir MR cihazı bağlamaz. Hiçbir paramedik "Ya hastanın diş ağrısı da varsa?" diyerek çantasına diş dolgu seti koymaz.

Çünkü acil tıpta herkesin kanına işlemiş bir prensip vardır: Hayatta tutmak için en az malzemeyle en fazla etkiyi yaratmak. Fazlası sizi yavaşlatır, yavaşlık ise ölüm demektir.

Yazılım Dünyasının Şişirilmiş Çantaları

Şimdi bu prensibi yazılım dünyasına taşıyalım. Yeni bir projeye başlıyorsunuz. Henüz tek bir kullanıcınız bile yok. Ama ilk hafta toplantısında ekibin aldığı kararlar şöyle bir şey oluyor:

  • "Veritabanı olarak PostgreSQL kullanalım ama ileride NoSQL'e geçebiliriz, o yüzden bir de MongoDB kuralım."
  • "Mesaj kuyruğu olarak Kafka entegre edelim, ileride binlerce event işlememiz gerekebilir."
  • "Kubernetes üzerinde çalışalım çünkü ölçeklenmemiz gerekecek."
  • "Mikroservis mimarisine geçelim, monolitik yapıda kalırsak ileride sıkışırız."

Henüz ortada tek bir kullanıcı yokken, Netflix'in altyapısını kurmaya çalışıyorsunuz. Bu, kalbi duran bir hastaya müdahale etmeden önce hastane bilgi yönetim sisteminin hangi bulut sağlayıcısında çalışacağını tartışmak gibidir.

Yazılım mühendisliğinde bu hastalığın bir adı var: YAGNI — You Aren't Gonna Need It (İhtiyacın Olmayacak). Kent Beck ve Ron Jeffries'in Aşırı Programlama (Extreme Programming) felsefesinden doğan bu prensip, şunu söyler: "Bir özelliği, gerçekten ihtiyacınız olduğu ana kadar eklemeyin."

"Ya Lazım Olursa?" Sendromu

Peki neden bu kadar basit bir prensibi kimse uygulamıyor? Çünkü yazılımcıların en büyük korkusu, gelecekteki bir ihtiyaç karşısında hazırlıksız yakalanmaktır. "Ya ileride lazım olursa?" sorusu, yazılım dünyasının en pahalı dört kelimesidir.

Acil tıpta da bu korkuyu yaşarsınız. "Ya hastanın alerjisi varsa ve elimde doğru ilaç yoksa?" Bu düşünce sizi çantanıza 200 farklı ilaç koymaya iter. Ama tecrübeli bir paramedik bilir ki, sahadaki vakaların yüzde doksanını beş temel ilaçla yönetebilirsiniz. Geri kalan yüzde onu ise zaten çantanıza koyacağınız hiçbir şey kurtaramaz; o vakalar hastane müdahalesine ihtiyaç duyar.

Yazılımda da durum aynıdır. Projenizin yüzde doksanını basit bir monolitik yapı, tek bir ilişkisel veritabanı ve iyi yazılmış bir REST API ile çözebilirsiniz. O "ileride lazım olabilecek" Kafka kuyruğu, o Kubernetes kümesi, o event-driven mimari... Bunlar, projenizin gerçekten o ölçeğe ulaştığı gün eklenebilir. Ama o gün gelmeden eklediğinizde, çantanız o kadar ağırlaşır ki beşinci kata çıkamadan merdivende kalırsınız.

Hafif Çanta, Hızlı Müdahale

Acil tıpta hayat kurtaran şey teknolojinin ne kadar gelişmiş olduğu değil, müdahalenin ne kadar hızlı yapıldığıdır. Dünyanın en pahalı defibrilatörü bile hastanın yanına zamanında ulaşamıyorsa bir plastik parçasından farksızdır.

Yazılımda da aynı mantık geçerlidir. Ürününüzü kullanıcıya ne kadar hızlı ulaştırabildiğiniz (Time to Market), altyapınızın ne kadar "enterprise-grade" olduğundan çok daha önemlidir. Mükemmel mimariyi kurana kadar rakibiniz basit bir monolitle pazara girmiş, kullanıcı geri bildirimi toplamış ve ürününü beş kez pivot etmiş olabilir. Siz ise hâlâ Kubernetes pod'larınızın neden çöktüğünü debug ediyorsunuzdur.

Bir dahaki sefere yeni bir projeye başlarken kendinize sorun: "Eğer bu bir ambulans çantası olsaydı, içine ne koyardım?" Cevabınız muhtemelen şu olacak: Çalışan bir veritabanı, temiz bir API, basit bir dağıtım (deployment) süreci. Gerisi, hasta gerçekten geldiğinde düşünülecek detaylardır.

Çünkü hayatta kalmanın sırrı, en çok ekipmana sahip olmak değil, en doğru ekipmanı en hızlı şekilde kullanabilmektir.