Dünya yazılım mühendisliği literatüründe, üzerine şakalar yapılan, tişörtleri basılan ama aslında her bir harfi uykusuz geceler ve krizlerle ödenmiş evrensel bir amentü vardır:

"Never deploy on Friday!" (Asla cuma günü canlıya çıkma!)

Bu kural bir hurafe veya tembellik bahanesi değildir; olasılık teorisinin, insan fizyolojisinin ve risk yönetiminin en temel sonucudur.

Cuma akşamı mesai biterken canlıya (production) bir kod parçası göndermek; arkanızdan çıkabilecek tüm teknik arızaları, veritabanı kilitlenmelerini ve üçüncü parti servis uyumsuzluklarını, ekibin dinlenmesi gereken cumartesi ve pazar gününün kucağına bir el bombası gibi bırakmak demektir.

Ancak Türkiye'deki yazılım ekosistemine, özellikle KOBİ tipi ajanslara ve patron odaklı şirketlere adım attığınızda bu evrensel kuralın her cuma sistematik olarak katledildiğine şahit olursunuz.

Saat 17:45. Ekipler haftanın yorgunluğunu üzerlerinden atmak, masalarını toplayıp evlerine, ailelerine dönmek üzeredir.

Tam o sırada şirketin patronu veya heyecanlı proje yöneticisi odaya dalar (veya Slack'ten @channel çeker):

"Arkadaşlar çok kritik bir gelişme var! Müşteriyle az önce konuştuk, hafta sonu sosyal medyada büyük bir kampanya başlatıyorlar. Yeni ödeme modülünü ve üyelik adımlarını bu akşam canlıya almamız lazım. Zaten testleri yapmıştınız değil mi? Hemen bir deploy çıkın, 15 dakikada biter, sonra herkes evine gider."

Bu cümle; tüm bir mühendislik ekibinin hafta sonunun, akıl sağlığının ve aile huzurunun mezara gömüldüğü anın resmi ilanıdır.

Cuma Akşamı Ameliyathaneye Elektif Hasta Almak

Bu cehaletin sağlık sektöründeki karşılığını bir cerrahtan veya ameliyathane hemşiresinden dinleyin.

Hastanelerde cuma akşamı saat 18:00 olduğunda nöbet devri gerçekleşir. Gündüz görev yapan yüzlerce kişilik uzman hekim kadrosu, biyokimya laboratuvarı personeli ve idari kadro evlerine gider. Hastanede sadece acil vakalara müdahale edecek çekirdek bir nöbetçi ekip kalır.

Şimdi bir cerrahın cuma akşamı saat 18:30'da çıkıp şöyle dediğini hayal edin:

"Hadi arkadaşlar, hazır nöbete kalmışken şu hastanın 6 aydır bekleyen fıtık ve diz protezi ameliyatını aradan çıkaralım. Zaten yarım saatlik iş, hemen yaparız."

Böyle bir cerraha ameliyathanedeki anestezi uzmanından başhemşireye kadar herkes dehşetle bakar. Neden?

Çünkü elektif (acil olmayan, planlı) bir cerrahi asla hastanenin en zayıf olduğu, personelin minimum kadroya düştüğü ve acil bir komplikasyon anında konsültasyon isteyecek uzmanların bulunmadığı bir zaman diliminde yapılmaz! Ameliyat sırasında beklenmeyen bir kanama başlarsa, kan merkezinde yedek kan torbası yoksa veya anestezi cihazı arıza yaparsa o hastayı masada bırakırsınız.

Cuma akşamı yazılımda canlıya çıkmak da tam olarak budur.

Tüm ekibin yorgun olduğu, odaklanmanın dibe vurduğu, AWS destek hattının nöbetçi moda geçtiği ve dış API sağlayıcılarının müşteri temsilcilerinin evlerinde uyuduğu bir zaman diliminde; production veritabanına şema göçü (migration) fırlatmak katıksız bir kumardır.

Kabusun Anatomisi: 18:15'ten Pazar Gecesi 03:00'e

O deploy çıktığı an senaryo asla yöneticinin hayal ettiği gibi "15 dakikada" bitmez:

  1. Saat 18:15: Kod merge edilir, CI/CD pipeline'ı çalışır. Test ortamında fark edilmeyen küçük bir migration hatası yüzünden production veritabanı kilitlenir (table lock).
  2. Saat 18:45: API yanıt süreleri 200 ms'den 45 saniyeye fırlar. Pod'lar birer birer OOM (Out of Memory) hatası vererek çökmeye başlar.
  3. Saat 19:30: Patron panik içinde arar: "Müşteri beni aradı, site açılmıyor, acil düzeltin!" Yazılımcılar montlarını çıkarıp tekrar masaya oturur. Rollback yapılmaya çalışılır; ancak veritabanı şeması geriye dönük uyumlu yazılmadığı için rollback eski kodu da patlatır!
  4. Cumartesi 14:00: Ekip gözleri kan çanağı içinde log dosyalarında kaybolmuş, production verilerini kurtarmak için geçici SQL script'leri yazmaktadır. Eşler, çocuklar, arkadaşlar aramakta; "Gelemiyorum, işte kriz çıktı" yanıtını almaktadır.
  5. Pazar 23:00: Sistem derme çatma bir yamayla zar zor ayağa kaldırılır. Pazartesi sabahı ofise gelindiğinde herkes sinirli, yorgun ve tükenmiştir.

Ve en acısı nedir biliyor musunuz?

Pazartesi sabahı müşterinin o "büyük hafta sonu kampanyasını" aslında başlatmadığı, pazarlama ajansının görselleri yetiştiremediği ortaya çıkar! Yani tüm o cehennem, içi boş bir müşteri kaprisi ve yöneticinin sınır koyamama acziyeti yüzünden yaşanmıştır.

Neden "Hayır" Diyemiyoruz?

Bu döngünün Türkiye'de kırılamamasının temel nedeni, profesyonel sınır çizme kültürünün yokluğudur.

Müşteriye veya patrona "Hayır, cuma akşamı deployment yapmak mühendislik prensiplerimize aykırıdır. Bu riski alamayız. Kodu pazartesi sabahı saat 10:00'da, tüm ekip masadayken ve zihnimiz berrakken canlıya alacağız" demek bir itaatsizlik değil; şirketin sermayesini ve müşterinin itibarını koruyan profesyonel bir duruştur.

Fakat liyakatsiz yöneticiler müşteriye şirin görünmek, "Biz 7/24 çalışan bir şirketiz" yalanını sürdürmek için her talebe baş eğerler. Faturayı ise cuma akşamı evine gidemeyen yazılımcıya keserler.

Deployment Bir Tören Değil, Rutin Olmalıdır

Modern DevOps kültürü, deployment'ı korkulan bir "olay" olmaktan çıkarıp, gün içinde yüzlerce kez yapılabilen sıradan bir adıma dönüştürmeyi amaçlar:

  • Mavi-Yeşil (Blue-Green) dağıtımlar,
  • Kanarya (Canary) sürümleri,
  • Özellik bayrakları (Feature Flags),
  • Otomatik sağlık kontrolleri ve anında geri alma mekanizmaları...

Eğer altyapınız bu olgunlukta değilse; yani bir deployment yaptığınızda tek bir komutla sıfır kesintiyle eski sürüme dönemiyorsanız, cuma akşamı deployment yapmak intihardır.

Eğer altyapınız bu olgunluktaysa bile; insan faktörünü unutmayın. Cuma akşamı insanın dikkati dağılır, hata yapma olasılığı katlanır. Hiçbir e-ticaret butonu, hiçbir pazarlama kampanyası sizin ve ekibinizin hafta sonu huzurundan daha acil ve değerli değildir.

Cuma 17:00'den sonra o terminaldeki git push origin master komutundan elinizi çekin. Bilgisayarınızı kapatın.

Pazartesi sabahı o kod hala orada olacak; ama kaybolan hafta sonunuzu ve yıpranan sinirlerinizi hiçbir sprint planlaması geri getiremez.