Acil serviste ya da ambulansta çalışan herkesin hafızasına kazınmış, rüyalarına giren çok özel bir an vardır: Vital bulguların (hayati göstergelerin) birer birer düşmeye başladığı o saniyeler.
Hastanın başında durursunuz. Monitördeki yeşil dalgalar yavaşlamaya başlar: Kalp hızı 90'dan 50'ye, 40'a iner. Parmaktaki oksimetre probu önce %98 gösterirken, birden %75'e, oradan %60'a çakılır. Tansiyon manşonu şişer şişer ve cihaz ekrana bir rakam yazamaz; çünkü ölçülecek bir nabız basıncı kalmamıştır.
O an odadaki sesler kesilir. Zaman yavaşlar. Havadaki o yoğun metalik adrenalin kokusunu hissedersiniz. Çünkü bilirsiniz ki, birkaç saniye sonra o ritim tamamen düz bir çizgiye (Asistol) dönüşecek ve karşınızdaki insan avuçlarınızın arasından kayıp gidecektir.
O saniyelerde panikleyen bir sağlıkçı ne yapar? Sağa sola koşuşturur, anlamsızca bağırır, monitörün kablolarını çekiştirir ve altın değerindeki o son saniyeleri tüketir.
Oysa soğukkanlı bir profesyonel tek bir şey yapar: Derin bir nefes alır, gürültüyü zihninde susturur ve tıbbın en temel alfabesine döner: ABC (Airway - Breathing - Circulation). Hava yolunu aç, solut, kalbe kan pompala. Teferruatları unut, hastayı temel fonksiyonlarıyla hayatta tut.
Şimdi bu sahneyi donduralım ve yazılım dünyasının en karanlık bodrum katına inelim.
10 Yıllık Kodun Karşısında Çaresizlik
Şirkette sıradan bir Perşembe öğleden sonrasıdır. Yönetimden acil bir talep gelir: "Şirketin ana faturalandırmasını ve muhasebe entegrasyonunu yöneten eski bir servisimiz var. Gelir İdaresi Başkanlığı yeni bir regülasyon getirdi, bu servise küçük bir alan eklememiz lazım."
Depoya (repository) girersiniz. Son commit tarihi: 4 yıl önce.
Yazan mühendisler çoktan yurt dışına gitmiş. Dokümantasyon yok. README dosyası sadece projenin adını içeriyor. Hangi Node.js veya Python sürümünde çalıştığı belli değil.
Projeyi yerel bilgisayarınıza klonlarsınız ve o masum komutu yazarsınız:
npm install (veya docker-compose up)
Ve terminal bir anda kan gölüne döner.
Yüzlerce satır kırmızı hata, birbirini tutmayan bağımlılıklar, Python 2.7 uyumsuzlukları, artık internette var olmayan silinmiş npm paketleri, patlayan C++ derleyici modülleri... Ekran aşağı doğru deliler gibi kayar.
Daha kötüsü; test amacıyla dokunduğunuz o servis canlı ortamda (production) bir anda kilitlenir. Sağlık kontrolü (health-check) endpoint'i 500 Internal Server Error dönmeye başlar. CPU kullanımı %100'e fırlar, kuyrukta bekleyen binlerce fatura birikmeye başlar ve müşteri hizmetleri telefonları çalmaya başlar.
Sistemin nabzı durmuştur. Vital bulgular gitmiştir. Terminalin başında otururken avuçlarınızın içinin terlediğini, kalbinizin kulaklarınızda attığını hissedersiniz. İşte o an, sunucu odasındaki yoğun bakım anıdır.
Panik vs. Cerrahi Soğukkanlılık
Böyle bir krizde acemi bir yazılımcının refleksi; StackOverflow'dan bulduğu rastgele komutları ardı ardına terminale yapıştırmaktır:
npm install --force, sudo chmod -R 777, veritabanını rastgele restart etmek, konfigürasyon dosyalarını körlemesine değiştirmek...
Bu, kalbi duran hastanın göğsüne yumruk atıp rastgele ilaçlar enjekte etmekten farksızdır. Hastayı kurtarmaz; kalan son hücreleri de öldürürsünüz.
Legacy bir krizin son dakikalarında hayatta kalmak istiyorsanız, tıpkı ambulansta olduğu gibi temel reflekslere dönmek zorundasınız:
- Kanamayı Durdur (Isolate & Freeze): Yeni paket kurmayı, versiyon yükseltmeyi veya sistemi "iyileştirmeyi" derhal bırakın. Sorunu çözmeye çalışırken daha büyük bir enkaz yaratıyorsunuz. Sistemi dış dünyadan izole edin; gelen istekleri geçici bir kuyruğa veya bakım sayfasına yönlendirin.
- Hava Yolunu Aç (Restore Minimum Runtime): Sistemin 4 yıl önceki orijinal çalışma ortamını simüle edin. O kod hangi Linux çekirdeğinde, hangi dil sürümünde derlenmişti? Eğer elinizde eski bir container image'ı veya snapshot varsa, hemen ona dönün. Yeni dünyayı eski koda dayatamazsınız.
- Dolaşımı Sağla (Core Function Only): Servisin 50 farklı özelliği olabilir; ama o an şirketi hayatta tutan tek bir kritik fonksiyon vardır (mesela sadece faturayı kesip veritabanına yazmak). Gerekirse bildirim servislerini, istatistik loglarını ve yan eklentileri devreden çıkarın. Bırakın hasta sadece nefes alsın.
Monitörün Yeşile Dönüşü
Yoğun bakımda bir hastayı hayata döndürdüğünüz o ilk anı asla unutamazsınız. Göğüs kompresyonunu durdurursunuz, boyundaki şah damarına (karotis) parmaklarınızı koyarsınız ve o minik, zayıf ama ritmik vuruşu hissedersiniz: Küt... Küt... Küt...
Monitördeki düz çizgi yeniden sinüs dalgalarına dönüşür. Odanın içindeki o ölümcül soğukluk dağılır.
Legacy bir sistemi sabaha karşı saat 04:30'da ayağa kaldırdığınız an da böyledir.
Terminalde o kırmızı hatalar diner. Log dosyasında ilk başarılı istek görünür:
INFO: Worker process started. Listening on port 8080. [200 OK]
Gözleriniz kan çanağına dönmüştür, kahveniz saatler önce soğumuştur, sırtınız taş gibi kesilmiştir. Ama o an bilirsiniz ki, bir organizma daha sizin ellerinizde hayata tutunmuştur.
Kodlar sadece harflerden ve sayılardan ibaret değildir. Kodlar, arkasında binlerce insanın emeğini, ticaretini, iletişimini ve bazen hayatını taşıyan yaşayan sistemlerdir.
Ve o sistemlerin nabzı düştüğünde; ihtiyacınız olan tek şey süslü teoriler değil, ölümün karşısında dimdik durabilecek o sakin, sarsılmaz mühendislik disiplinidir.