Bir yazılımcının hayatındaki en büyük lükslerden biri, sistemin kendisini anlatmasıdır. Bir uygulama çöktüğünde size bir hata mesajı verir. Log dosyalarını açarsınız, stack trace'i (hata izini) okursunuz ve sorunun tam olarak hangi satırda, hangi fonksiyonda, hangi değişkenin hangi beklenmedik değeri aldığı yüzünden meydana geldiğini görürsünüz. Sistem size "Bak, sorun burada, şu yüzden oldu" diye bağırır.
Şimdi bu lüksü tamamen ortadan kaldırın.
Karşınızda bilinçsiz bir insan yatıyor. Yerde bulunmuş. Etrafında hiçbir tanık yok. Kimliği belirsiz. Alerjileri bilinmiyor. Kronik hastalıkları bilinmiyor. Hangi ilaçları kullandığı bilinmiyor. Ve bu insan size tek bir hata mesajı bile veremiyor. Log dosyası yok. Stack trace yok. console.log çıktısı yok. Sadece bir beden var; nefes alıp almadığını, kalbinin atıp atmadığını, gözbebeklerinin ışığa tepki verip vermediğini kontrol ederek o bedenin "mimarisini" çözmeye çalışıyorsunuz.
İşte paramediklik, log dosyası olmayan bir sistemi debug etme sanatıdır.
Dış Belirtilerden İç Mimariyi Okumak
Yazılımda "Black Box Testing" (Kara Kutu Testi) diye bir kavram vardır. Sistemin iç yapısını bilmeden, sadece girdilere verdiği çıktılara bakarak o sistemin doğru çalışıp çalışmadığını test edersiniz.
Acil tıpta her hasta müdahalesi bir kara kutu testidir. Hastanın iç organlarını göremezsiniz (en azından sahada). Beyninin içine bakıp "Ah, burada bir kanama var" diyemezsiniz. Onun yerine dış belirtileri (semptomları) okursunuz ve bu parçalardan bir bütün oluşturursunuz:
- Cildi solgun ve soğuksa → muhtemelen kan kaybı var (internal bleeding).
- Bir taraftaki gözbebeği diğerinden büyükse → kafa içi basınç artışı olabilir.
- Nefes sesleri bir tarafta duyulmuyor → akciğer çökmüş (pnömotoraks) olabilir.
- Karın sert ve gerginse → iç kanama ihtimali yüksek.
Bu ipuçları, bir yazılımcının log dosyasındaki "ERROR", "WARNING" ve "INFO" satırlarına karşılık gelir. Tek fark şudur: yazılımcı yanlış bir çıkarım yaparsa en kötü ihtimalle sunucu birkaç dakika daha çöker. Paramedik yanlış bir çıkarım yaparsa, karşısındaki insan ölür.
Timeout Problemi: Zaman Baskısı Altında Karar Vermek
Bir yazılımcı olarak debug yaparken en büyük avantajınız zamandır. Bir bug'ı saatlerce, hatta günlerce araştırabilirsiniz. Kahvenizi yudumlarken Stack Overflow'da benzer vakaları inceleyebilir, farklı hipotezleri test edebilir, meslektaşlarınızla beyin fırtınası yapabilirsiniz.
Acil tıpta bu lüks yoktur. Sahada bir hastayı değerlendirmek ve karar vermek için genellikle 60 saniyeniz vardır. Bilişsel yükünüz (cognitive load) had safhadadır. Etrafınızda bağıran insanlar, trafik sesleri, bazen fiziksel tehlikeler vardır. Ve tüm bu kaosun içinde, eksik verilerle hayati bir karar vermek zorundasınızdır.
Bu, yazılımdaki "timeout" konseptinin gerçek hayattaki en acımasız versiyonudur. Sunucunuz bir isteğe 30 saniye içinde yanıt vermezse, istemci bağlantıyı koparır. Siz bir hastayı 60 saniye içinde doğru değerlendiremezseniz, vücut kendi "bağlantısını" koparır.
Redundancy ve Failover: Vücudun Yedekleme Sistemi
İnsan vücudunun yazılım mimarisi açısından en etkileyici yanı, dahili yedekleme (redundancy) sistemidir. İki böbreğiniz vardır; biri çalışmasa diğeri devralır. Karaciğerinizin yüzde yetmişi hasar görse bile geri kalanı fonksiyonlarını sürdürebilir. Beyin, hasarlı bir bölgenin görevlerini başka bölgelere aktarabilir (nöroplastisite).
Bu, yazılım dünyasındaki "failover" (yük devretme) mekanizmasının milyonlarca yıllık evrimsel versiyonudur. Ancak vücudun yazılımdan bir farkı var: vücudun yedekleme sistemi sessizdir. Bir böbreğiniz çalışmayı durdurduğunda size bir uyarı e-postası göndermez. Karaciğeriniz yüzde otuz kapasiteye düştüğünde bir Slack bildirimi almıyorsunuz. Vücut, son ana kadar telafi etmeye çalışır ve siz sorunun farkına vardığınızda genellikle çok geç olmuş demektir.
Bir paramedik olarak öğrendiğim en önemli şey şudur: Görünür belirtiler, hasarın son evresidir. Hasta yere yığıldığında sorun çoktan kritik seviyeye ulaşmıştır. Tıpkı bir sunucunun CPU'su yüzde yüze çıkıp alarm verdiğinde, asıl sorunun çoktan dakikalar önce başlamış olması gibi.
İster insan vücudu olsun ister bir dağıtık sistem, gerçek mühendislik belirtileri görmeden önce riskleri tahmin edebilme sanatıdır. Ve bu sanat, ne yazık ki hiçbir framework, kütüphane veya ders kitabıyla öğretilmez. Sadece sahada, gerçek krizlerin içinde, elleriniz titrerken ama aklınız berrak kalırken kazanılır.