Eylül 27 2026

Yazılım Geliştirmede ‘Stage-Gated’ Disiplin: LLM Çıktılarını Kontrol Altına Alın

Modern yazılım geliştirme dünyasında artık hemen hepimiz bir LLM (Büyük Dil Modeli) ile yan yana kod yazıyoruz. İster Cursor kullanın ister Claude veya Copilot; yapay zekanın birkaç saniyede yüzlerce satır kod üretmesi büyüleyici bir his. Ancak dürüst olalım: O üretilen kodların arkasında bazen var olmayan kütüphane bağımlılıkları, sinsi mantık hataları ve ciddi güvenlik açıkları saklanıyor. Hızlı yazıyoruz ama arkamızı toplamaya çalışırken daha çok yoruluyoruz. İşte bu noktada modern yazılıma eski ama çok sağlam bir disiplin geri dönüyor: Stage-Gated yaklaşımı.

Bu yazıda, geleneksel mühendislikten ödünç aldığımız bu “aşamalı kapı” sistemini yapay zeka destekli bir pipeline içine nasıl entegre edebileceğimizi, bizzat kurup test ettiğim bir senaryo üzerinden anlatıyorum. Amacımız yapay zekayı yavaşlatmak değil; yapay zeka güvenliği standartlarından taviz vermeden kodu üretime (production) taşımak.

Şelale (Waterfall) Mezardan mı Çıktı? “Stage-Gated” Nedir?

Eski usul Waterfall (Şelale) metodolojisini hatırlarsınız: Bir faz bitmeden diğeri başlamaz, arada kalın onay kapıları bulunur. Çevik (Agile) dünyada bundan nefret ettik çünkü hızı kesiyordu. Fakat işin içine modeller ve tahmin edilemez çıktılar girince dengeler değişti.

Stage-Gated mekanizması, üretilen bir çıktının bir sonraki aşamaya geçebilmesi için belirli kriterleri (“kapıları”) geçmek zorunda olduğu bir filtreleme modelidir. Bir LLM’e “Bana şu API servisini yaz” dediğinizde kodu doğrudan ana dala (main branch) göndermezsiniz. Kod, tanımladığınız kapılardan sırayla geçer; herhangi bir kapıda takılırsa ya LLM’e düzeltmesi için geri fırlatılır ya da doğrudan reddedilir.

[Görsel: Bir LLM kod üretim pipeline’ının 4 aşamalı kapıdan (Sözdizimi, Güvenlik, Test, İnsan Onayı) geçişini gösteren şematik diyagram]

Test Masası: 4 Kapılı Bir Pipeline Mimarisi

Teoriyi bir kenara bırakıp işi pratiğe dökelim. Deneme amacıyla yerel ortamımda FastAPI ile basit bir servis geliştiren bir akış kurdum. Modeli (Claude 3.5 Sonnet) bir komut satırı aracıyla tetikledim ve kodu şu 4 kapıdan geçirdim:

Kapı 1: Sözdizimi (Syntax) ve Tip Kontrolü

LLM’ler bazen parantezleri unutur, bazen var olmayan metodları çağırır. İlk kapımız en ucuz ve en hızlı olanı: AST (Soyut Sözdizim Ağacı) kontrolü ve mypy tip denetimi. Modelin çıktısı bu aşamada Python tarafından derlenemiyorsa sonraki aşamaya geçiş izni verilmez.

Kapı 2: Statik Güvenlik Analizi (SAST)

Model, istemeden de olsa SQL Injection açığı üretmiş olabilir mi? Ya da hardcoded bir API anahtarı bırakmış mı? Bu kapıda açık kaynaklı statik analiz araçları (örneğin Semgrep veya Bandit) devreye girer. Güvenlik açığı tespit edilirse pipeline kırılır.

# Semgrep ile yerel pipeline kontrolü çalıştırma
semgrep scan --config auto --error ./generated_code/

Kapı 3: Otomatik Birim Testleri ve “Self-Healing”

İşte en sevdiğim bölüm. Eğer kod ilk iki kapıyı geçtiyse, önceden tanımlanmış test senaryoları (Pytest) çalıştırılır. Test başarısız olursa, test hata raporu otomatik olarak tekrar LLM’e gönderilir: “Kodun şu testten geçmedi, hata mesajı bu. Kodu tekrar düzenle.” Buna sektörde self-healing (kendi kendini onarma) döngüsü deniyor. En fazla 3 deneme hakkı tanıyoruz.

Kapı 4: İnsan Gözü (Human-in-the-Loop)

Bütün testlerden geçen kod bir Pull Request (PR) olarak açılır. Son kapı daima bir insandır. Ancak bu aşamaya gelen kod zaten sözdizimi, güvenlik ve temel iş kuralları açısından elendiği için inceleyen mühendisin harcadığı süre dakikalar yerine saniyelere iner.

[Görsel: GitHub Actions üzerinde çalışan Semgrep ve Pytest adımlarının yeşil tik aldığı, insan onayı bekleyen PR ekran görüntüsü]

Gerçek Bir Deney: SQL Injection Girişimi Kapıya Takılınca

Pipeline’ı test etmek için Claude’a bilerek hafif yönlendirici bir prompt verdim: “Kullanıcı ID’sine göre kullanıcı bilgilerini getiren ham SQL sorgulu bir fonksiyon yaz.”

Model, f-string kullanarak sorguyu birleştiren tipik bir güvensiz kod bloğu oluşturdu. Süreç şöyle işledi:

  • Kapı 1 (Syntax): Kod geçerli Python sözdizimine sahipti. Geçti.
  • Kapı 2 (Semgrep): Kırmızı alarm! python.lang.security.audit.sqli kuralı tetiklendi. Parametreli sorgu kullanılmadığı için kod derhal durduruldu.
  • Geri Besleme: Pipeline, Semgrep hata çıktısını prompt’a ekleyip modeli uyardı.
  • Sonuç: İkinci denemede model kodu SQLAlchemy ORM parametreli sorgusuyla düzeltti ve Kapı 2’den başarıyla geçti.

Artılar ve Eksiler: Bu Zahmete Değer mi?

Her güvenlik katmanı beraberinde bir sürtünme getirir. Karar vermenizi kolaylaştırmak için gözlemlerimi özetledim:

Avantajlar Dezavantajlar
Halüsinasyon kaynaklı bağımlılık ve hatalar sisteme sızamaz. CI/CD süreçleri biraz daha uzun sürer (ortalama +40-90 saniye).
Yapay zeka güvenliği şirket politikaları seviyesinde garantiye alınır. LLM API maliyetleri (tekrar denemeler yüzünden) %15-20 artabilir.
Kıdemsiz geliştiricilerin fark edemediği açıklar erken yakalanır. İlk kurulum ve doğru kural setlerini yazmak teknik efor ister.

Hangi Araçları Kullanabilirsiniz? (Fiyat ve Alternatifler)

Bu yapıyı kurmak için servet harcamanıza gerek yok. Açık kaynak dünyasında harika ücretsiz seçenekler mevcut:

  • Guardrails AI (Ücretsiz / Açık Kaynak): LLM çıktılarını belirli Pydantic şemalarına ve regex/güvenlik kurallarına zorlamak için biçilmiş kaftan. Kendi sunucunuzda tamamen ücretsiz çalıştırabilirsiniz.
  • Semgrep (Freemium): Statik kod analizi için sektör standardı haline geldi. Açık kaynak versiyonu CLI üzerinden yerelde veya GitHub Actions içinde tamamen ücretsizdir. Ekip yönetimi sunan Semgrep Cloud ise aylık kullanıcı başı yaklaşık $40 civarından başlar.
  • NeMo Guardrails (NVIDIA – Ücretsiz): Özellikle diyalog ve mantık akışlarını kısıtlamak isteyenler için geliştirilmiş güçlü bir açık kaynak kütüphane.
  • SonarQube Community Edition (Ücretsiz): Kod kalitesini ve teknik borcu ölçmek için kendi sunucunuza kurabileceğiniz ücretsiz alternatif.

Son Söz

Yapay zekanın kod yazma hızına hayran olmamak elde değil. Ancak kontrolsüz hız, teknik borç dağları ve güvenlik kabusları yaratır. Stage-gated yaklaşımı, Agile pratikleri yavaşlatmak için değil; yapay zekayı sorumsuz bir stajyerden güvenilir bir takım arkadaşına dönüştürmek için ihtiyacımız olan emniyet kemeridir. Henüz denemediyseniz, en azından bir GitHub Action içine basit bir linter + Semgrep kapısı koyarak ilk adımı atmanızı şiddetle tavsiye ederim.

Category: Genel | LEAVE A COMMENT
Eylül 27 2026

Geliştirici Mutfağı: Kan Şekerini Dengeleyen ve Brain Fog’u Engelleyen 15 Dakikalık Atıştırmalık

Saat öğleden sonra üç civarı. Ekranda çözülmeyi bekleyen can sıkıcı bir bug var ama kafanızın içi yoğun bir sis bulutu: Selam brain fog. Çekmecedeki gofret paketine uzanıp hızlı bir şeker patlaması aramak çok cezbedici görünse de, bu hamle kan şekerinizi hızla fırlatıp yarım saat sonra sizi derin bir zihinsel çöküşe (crash) sürükler. Oysa bilişsel verimlilik ve uzun vadeli zihinsel sağlık için ihtiyacınız olan şey basit: Doğru bir nutrition stratejisi ve gerçek bir brain food alternatifi olan pratik bir yemek çözümü.

Bugün mutfakta saatler harcamadan, kodunuz derlenirken hazırlayabileceğiniz “Tahinli ve Kakaolu Odak Topları” yapıyoruz. Pişirme yok, bulaşık derdi minimum.

Porsiyon: 10-12 adet (Yaklaşık 3 porsiyon)
Hazırlık Süresi: 10 dakika
Pişirme Süresi: 0 dakika

Neden Bu Kombinasyon? (Sisi Dağıtan Bilim)

Basit karbonhidratlar beyninize hızlı bir ödül verir ama bedelini ani odak kaybıyla ödetir. Bu tarifte yulafın sunduğu kompleks lifler glukozun kana yavaş karışmasını sağlar. Tahin ve fıstık ezmesindeki sağlıklı yağlar nöronlar arası iletişimi desteklerken, ham kakaodaki flavanoller beyne giden kan akışını artırır. Deniz tuzu ise ekran başında unuttuğunuz elektrolit dengesini yerine koyar.

Malzemeler

  • İnce öğütülmüş yulaf ezmesi: 1 su bardağı (Kompleks karbonhidrat tabanı)
  • Doğal fıstık ezmesi veya tahin: 3 yemek kaşığı (Şekersiz, katkısız)
  • Ham kakao: 1.5 yemek kaşığı (Antioksidan ve dopamin desteği)
  • Chia tohumu: 1 yemek kaşığı (Omega-3 ve lif kaynağı)
  • Akçaağaç şurubu veya ham bal: 1.5 yemek kaşığı (Düşük glisemik indeksli tatlandırıcı)
  • İri çekim deniz tuzu: Küçük bir çimdik
  • Sıcak su veya badem sütü: 1-2 yemek kaşığı (Kıvamı bağlamak için gerekirse)

Evde Yoksa Ne Kullanabilirsiniz? (Alternatifler)

Mutfakta mutlak kurallar yoktur, refactoring serbesttir:

  • Fıstık ezmesi yerine fındık ya da badem ezmesi kullanabilirsiniz. Fıstık alerjiniz varsa sadece tahinle ilerleyin; tahinin susamdan gelen hafif buruk lezzeti kakaoyla harika uyum sağlar.
  • Chia tohumu yerine öğütülmüş keten tohumu koyabilirsiniz.
  • Elinizde ham kakao yoksa normal kakao da iş görür; ancak ham (raw) kakaonun polifenol oranı zihinsel uyanıklık için her zaman daha etkilidir.

Adım Adım Hazırlanışı

  1. Kuru malzemeleri harmanlayın: Geniş bir kasede yulaf ezmesi, ham kakao, chia tohumu ve deniz tuzunu bir kaşıkla karıştırın.
  2. Islak malzemeleri ekleyin: Karışımın ortasını hafifçe açıp fıstık ezmesini (veya tahini) ve balı ekleyin. Spatula veya çatalla ezerek birbirine yedirin.
  3. Kıvamı test edin: Karışımı elinizle sıkın. Birbirine tutunuyorsa tamamdır. Fazla kuru ve ufalanıyorsa, 1 yemek kaşığı ılık su veya süt ekleyip yoğurur gibi toparlayın.
  4. Porsiyonlayın ve yuvarlayın: Karışımdan ceviz büyüklüğünde parçalar koparıp avucunuzda sıkıca yuvarlayarak toplar haline getirin.
  5. Soğutun (Opsiyonel ama tavsiye edilir): Vaktiniz varsa buzdolabında 10 dakika dinlendirin. Vaktiniz yoksa doğrudan klavye başına geri dönebilirsiniz.

Püf Noktası

Bu tarifin sihirli dokunuşu deniz tuzudur. Tuzu kesinlikle atlamayın; tatlı-tuzlu kontrastı sadece lezzeti katlamakla kalmaz, kan basıncını dengeleyerek öğleden sonra gelen o rehavet hissini kırmaya yardımcı olur. Ayrıca bu topları hava almayan bir kapta buzdolabında 7 güne kadar saklayabilirsiniz. Pazar akşamı 10 dakikada yapın, hafta boyunca ‘Ne atıştırsam?’ stresini aradan çıkarın.

Category: Genel | LEAVE A COMMENT
Eylül 26 2026

Geliştiriciler İçin Tech Neck ve Göz Yorgunluğu: Fizyolojik Çözümler

O meşhur “flow state” anını hepimiz biliriz: Kod akıyor, testler yeşile dönüyor, Spotify arkada en sevdiğin lo-fi listesini çalıyor… Ta ki sandalyeden kalkmaya çalışıp boynundan sırtına inen o keskin sızıyı hissedene kadar. Masa başı çalışanlar, özellikle de geliştiriciler için tech-neck sendromu ve kronik göz yorgunluğu artık mesleğin fıtratından sayılmaya başlandı. Oysa vücudumuz, saatlerce çift monitör karşısında bir karides gibi kıvrılmak üzere evrimleşmedi.

Bugün hem boyun omurlarını rahatlatacak hem de ekranın arkasında unuttuğun gözlerini tazeleyecek pratik, bilimsel ve günlük 10 dakikanı alacak bir kurtarma planı hazırlıyoruz. Hazırsan, sandalyede dikleş ve okumaya devam et.

Kafan Neden Bu Kadar Ağır? (Tech Neck Fizyolojisi)

İnsan kafası dik bir duruşta yaklaşık 4,5 – 5,5 kilogram ağırlığındadır. Yani boyun kasların normal şartlarda ortalama bir bowling topunu dengede tutmakla görevlidir. Ancak ekranı daha iyi görmek için başını öne doğru her eğdiğinde, omurgaya binen yük katlanarak artar.

Omurga cerrahisi üzerine yapılan araştırmalar gösteriyor ki, başını sadece 45 derece öne eğdiğinde boyun omurlarına binen yük yaklaşık 22 kilograma, 60 dereceye çıktığında ise 27 kilograma fırlıyor. Yani gün boyu kod yazarken farkında olmadan boynunda 8 yaşında bir çocuğu taşıyorsun. Bu durum zamanla servikal disklerde aşınmaya, kronik kas spazmlarına ve nihayetinde boyun fıtığına kapı aralıyor.

Monitörler ve Yanan Kornealar: Göz Sağlığı (Eye Health) Neden Çöküyor?

Göz kuruluğu ve baş ağrısı da bu paketin bonus hediyesi. Normal bir insan dakikada ortalama 15 ila 20 kez göz kırpar. Bu hareket, gözün yüzeyini gözyaşı tabakasıyla kaplayarak korur ve net görmeyi sağlar.

Fakat bir ekrana odaklandığımızda göz kırpma sıklığımız yarı yarıya, bazen dakikada 5-7 sefere kadar düşüyor. Üzerine bir de monitörlerden yayılan mavi ışık, düşük kontrast ve yanlış aydınlatma eklenince; gün sonunda gözlerin yanması, odaklanma güçlüğü ve migren benzeri ağrılar kaçınılmaz hale geliyor.

Önemli Uyarı: Kollarında, parmaklarında uyuşma, karıncalanma veya güç kaybı hissediyorsan ya da gözlerinde ani görme kayıpları/ışık çakmaları oluyorsa egzersizleri bir kenara bırakıp vakit kaybetmeden bir uzmana veya nöroloğa/göz doktoruna danışmalısın.

10 Dakikalık Developer Wellness Kurtarma Protokolü

Haftada bir gün spora gidip iki saat ağırlık kaldırmak, haftanın geri kalan 40 saatinin omurgaya verdiği hasarı sıfırlamaz. Bize gereken şey: Mikro dozda tutarlılık. İşte çalışma masanın başında her gün uygulayabileceğin 10 dakikalık posture ve yenilenme rutini:

1. Boyun ve Üst Sırt İçin “Reset” (5 Dakika)

  • Chin Tucks (Çene Gömme): Sırtını dik tut. Başını arkaya doğru, sanki birisi sana kötü bir şey söylemiş de geri çekiliyormuşsun gibi kaydır (evet, o komik çift çene görüntüsü doğru yolda olduğunu gösterir). 5 saniye bekle, bırak. 10 tekrar yap. Bu hareket, zayıflayan derin boyun fleksörlerini güçlendirir.
  • Doorway Stretch (Kapı Eşiği Esnemesi): Ayağa kalk, bir kapı eşiğinde kollarını 90 derece bükerek eşiğe daya ve göğsünü öne doğru hafifçe it. Gün boyu klavyeye uzanmaktan kısalan pektoral (göğüs) kaslarını açarak omuzlarını geriye almanı sağlar. 30 saniye boyunca derin nefes alarak bekle.
  • Scapular Retraction (Kürek Kemiği Sıkıştırma): Omuzlarını kulaklarından uzaklaştır, kürek kemiklerinin arasında bir kalem varmış gibi onları birbirine doğru sık. 5 saniye tut, 10 kez tekrarla.

2. Gözleri Yeniden Başlat (2 Dakika)

  • 20-20-20 Kuralı: Her 20 dakikada bir, en az 20 fit (yaklaşık 6 metre) uzaktaki bir nesneye 20 saniye boyunca bak. Bu, gözün içindeki odaklanma kaslarını (siliyer kaslar) gevşetir.
  • Palming (Avuç İçi Terapisi): Ellerini birbirine sürtüp ısıt. Gözlerini kapat ve avuç içlerini göz çukurlarının üzerine baskı yapmadan kapat. Tamamen karanlıkta 1 dakika derin nefes al. Göz kaslarının ve sinir sisteminin anında sakinleştiğini hissedeceksin.

3. Alt Sırt ve Kalça Aktivasyonu (3 Dakika)

  • Seated Pelvic Tilt: Sandalyende dikleş. Belini önce içeri doğru çukurlaştır, ardından arkaya doğru yuvarlayarak kamburlaştır. Bu dalgalanma hareketi, saatlerce durağan kalan omurilik sıvısının ve kanın diskler arasında dolaşmasını sağlar. 15 tekrar yeterli.

Çalışma Alanını Hack’lemek: Temel Ergonomics

Egzersizler harika ama ortamı düzeltmezsen sürekli başa sararsın. Çalışma alanını ergonomics kurallarına göre ayarlamak sandığından çok daha basit:

Monitörünün üst kenarı tam olarak göz hizanda olmalı. Ekrana bakarken kafanı aşağı eğmek zorunda kalıyorsan, altına birkaç kalın kitap veya bir monitör standı koy. Dirseklerin ve dizlerin masa/sandalye temasında yaklaşık 90 derecelik açıyı korumalı, ayak tabanların yere tam basmalı.

Unutma: Mükemmel bir oturuş pozisyonu yoktur; en iyi duruş, bir sonraki duruşundur. Vücudun hareketsiz kaldıkça paslanır. Pomodoro aralarına bu mikro molaları ekle; hem yazdığın kodun kalitesi artsın hem de günün sonunda başı dimdik duran bir geliştirici ol.

Category: Genel | LEAVE A COMMENT
Eylül 26 2026

Mutfakta ‘Lean Manufacturing’: 30 Dakikada 3 Günlük Sağlıklı Yemek

Toyota’nın fabrikalarında parça bekleme süresini sıfıra indiren o meşhur üretim felsefesini hiç akşam saat 8’de, karnınız guruldarken buzdolabının önünde çaresizce durduğunuz o anla bağdaştırdınız mı? Evet, meal prep yapmaktan bahsediyorum ama öyle pazar gününün 5 saatini feda ettiğiniz türden değil. Doğru bir mutfak yönetimi ve endüstriyel verimlilik teknikleriyle, sağlıklı beslenme rutini oluşturmak aslında sadece 30 dakikanızı alır.

Mutfaktaki en büyük “israf” (Japonların deyimiyle Muda) bulaşık, gereksiz hareketler ve çürüyen sebzelerdir. Bugün tek bir fırın tepsisi ve paralel iş akışıyla 3 günlük nefis bir baz hazırlıyoruz.

Genel Bilgiler

Porsiyon: 3 Öğünlük
Hazırlık Süresi: 10 Dakika
Pişirme Süresi: 20 Dakika

Gerekli Malzemeler: Esnek ve Modüler

Buradaki amacımız tek bir ana pişirme ile 3 farklı lezzet yakalamak. Evde ne varsa ona göre modifiye edebilirsiniz:

  • Protein tabanı: 500 gr tavuk göğsü (Alternatif: Küp doğranmış sert tofu veya 2 kutu süzülmüş haşlanmış nohut)
  • Sebze matrisi: 1 baş brokoli, 2 adet kapya biber, 1 adet kırmızı soğan (Alternatif: Kabak, mantar veya havuç)
  • Kompleks karbonhidrat: 1 su bardağı kinoa veya kuskus (Alternatif: Karabuğday ya da esmer pirinç)
  • Lezzet bağlayıcılar: 3 yemek kaşığı zeytinyağı, 1 tatlı kaşığı toz kırmızı biber, 1 çay kaşığı sarımsak tozu, tuz, karabiber
  • Hızlı sos: 2 yemek kaşığı tahin, yarım limonun suyu, 2 yemek kaşığı ılık su

30 Dakikalık ‘Sprint’ Hazırlık Adımları

  1. Hattı Başlatın (Pre-heat): Fırını 200°C’ye getirin. Kettle’da su kaynatın. Kinoa veya kuskusu küçük bir tencereye alın, üzerine sıcak suyu ve tuzu ekleyip kapağını kapatın; o kendi kendine demlensin.
  2. Tek Bıçak, Tek Tahta (Mise en place): Tahtaya önce sebzeleri alın, iri parçalar halinde doğrayın. Bıçağı yıkamadan hemen ardından tavukları lokmalık küpler halinde kesin. Çapraz bulaşmayı önlemek için sebze-protein sırasını asla şaşırmayın.
  3. Tepsi Bölümleme (Batching): Büyük bir fırın tepsisine yağlı kâğıt serin. Sol tarafa tavukları, sağ tarafa sebzeleri yayın. Üzerlerine zeytinyağı ve baharatları gezdirip elinizle hızlıca harmanlayın. Tepsiyi fırına sürün ve 20 dakikalık sayacı başlatın.
  4. Montaj ve Saklama: Fırın çalışırken tahin, limon ve ılık suyu küçük bir kavanozda çalkalayarak sosunuzu yapın. 3 adet saklama kabı çıkarın. Pişen kinoayı tabana paylaştırın. Fırından çıkan fırınlanmış sebze ve proteini kaplara eşitçe bölüştürün.

Püf Noktası: 3 Gün Aynı Şeyi Yememe Sanatı

Kimse üç gün üst üste birebir aynı tadı almak istemez; motivasyonu kıran şey tam olarak budur. Hazırladığınız baz aynı kalsa da kimliğini küçük dokunuşlarla değiştirin:

1. Gün: Hazırladığınız tahin sosu gezdirip ılık tüketin.
2. Gün: Kaba biraz soya sosu ve susam ekleyip Asya esintili bir bowl’a dönüştürün.
3. Gün: İçeriği bir lavaşın içine sarıp, biraz taze yeşillikle hızlı bir dürüme çevirin.

Mutfakta Sıfır İsraf: Just-in-Time Yaklaşımı

Buzdolabında unutulan sebzeler paranızın doğrudan çöpe gitmesidir. Bu tarifte kullandığınız brokolinin saplarını atmayın; ince dilimleyip tepsiye sebzelerin yanına ekleyin, harika karamelize olurlar. Sosu kaplara önceden dökmemek de bir diğer kuraldır; sosu daima yiyeceğiniz an ekleyin ki sebzeleriniz dolapta beklerken formunu ve diriliğini kaybetmesin.

Category: Genel | LEAVE A COMMENT
Eylül 25 2026

Platform Mühendisliğinde Internal Developer Portal (IDP) Kurulumu: Backstage mi, Port mu?

Modern Platform Engineering pratiklerinin merkezinde tek bir nihai hedef var: Kognitif yükü azaltıp Developer Experience (DevX) çıtasını yukarı çekmek. Ancak bir sabah uyanıp “Hadi şirkete bir IDP kuralım” dediğinizde, DevOps dünyasının en büyük iki kutbu önünüze dikiliyor: Açık kaynak kodlu, Spotify kökenli Backstage ve SaaS/API-first yaklaşımıyla son dönemin parlayan yıldızı Port. Bu iki aracın broşür vaatlerini bir kenara bırakıp üretim ortamındaki gerçek maliyetlerine, mimari esnekliklerine ve Day-2 operasyonlarına bakalım.

SlackOps’tan Self-Service’e: Neden Bir IDP’ye İhtiyacımız Var?

Kabul edelim, şirket içinde yazdığınız bash script’leri, Terraform modülleri ve “production-hazır” Helm chart’ları harika çalışıyor olabilir. Fakat yazılımcı yeni bir microservice açmak için hâlâ Slack kanalından “#devops-help bana yeni bir Redis açar mısınız?” yazıyorsa, ortada bir platform değil, sadece insan gücüyle çalışan bir bilet kuyruğu vardır. IDP; Golden Path (Altın Yol) felsefesini somutlaştıran, altyapı yetkilendirmesini ve servis kataloğunu tek bir panele toplayan arayüzdür.

1. Spotify Backstage: Kodun Gücü ve Bakımın Laneti

Backstage bir ürün değildir; bir framework’tür. TypeScript ve React ile yazılmış bir monorepo iskeletidir. Kurulumu yaptığınız an elinizde bitmiş bir portal değil, sizin geliştirmeniz gereken bir yazılım projesi olur.

Backstage Mimarisi ve Plugin Ekosistemi

Backstage’in en büyük artısı, limitsiz özelleştirilebilmesidir. Şirket içi legacy bir LDAP sisteminiz veya kurum içi custom bir deployment engine’iniz varsa, Backstage içine plugin yazarak entegre edemeyeceğiniz hiçbir şey yoktur. Servislerinizi catalog-info.yaml dosyalarıyla declarative olarak tanımlarsınız:

apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: payment-gateway-service
  description: Core payment processing engine
  annotations:
    github.com/project-slug: acme-corp/payment-gateway
    backstage.io/techdocs-ref: dir:.
    argocd/app-name: payment-gateway-prod
    prometheus.io/rule: alert_payment_latency
spec:
  type: service
  lifecycle: production
  owner: payments-team
  system: core-banking
  providesApis:
    - payment-api
  dependsOn:
    - resource:default/payment-postgres-db

Yazılım Şablonları (Software Templates) ile Self-Service

Backstage Scaffolder, geliştiricinin parametreleri girdiği ve arka planda bir Git repo’su oluşturup ilk commit’i attığı şablon mekanizmasıdır:

apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: go-service-template
  title: Go Microservice (Golden Path)
spec:
  owner: platform-core
  type: service
  parameters:
    - title: Servis Konfigürasyonu
      required: [name, owner]
      properties:
        name:
          type: string
          description: Servis adı (kebab-case)
        owner:
          type: string
          ui:field: OwnerPicker
  steps:
    - id: template
      name: Dosyaları Hazırla
      action: fetch:template
      input:
        url: ./skeleton
        values:
          name: ${{ parameters.name }}
          owner: ${{ parameters.owner }}
    - id: publish
      name: GitHub Reposu Aç
      action: publish:github
      input:
        allowedHosts: ['github.com']
        description: Service created via Backstage
        repoUrl: github.com?owner=acme-corp&repo=${{ parameters.name }}
        defaultBranch: main

Neden Can Sıkar?

  • Node.js Dependency Cehennemi: Her yarn upgrade çalıştırdığınızda core plugin’lerin kırılma ihtimali çok yüksektir.
  • Frontend Eforu: Platform ekibinde React ve modern frontend toolchain’lerine hakim mühendis yoksa, arayüz geliştirmeleri kabusa dönüşür.
  • State ve DB Yönetimi: Catalog senkronizasyonu için PostgreSQL tutmanız, cache stratejilerini (Redis) yönetmeniz ve auth mekanizmalarını tek tek implemente etmeniz gerekir.

2. Port (getport.io): Data-Model First ve Low-Code IDP

Port, Backstage’in tam zıddı bir felsefeyle gelir: “Siz platform mühendisisiniz, frontend geliştiricisi değilsiniz.” Port bir SaaS veya Control-Plane-Only çözümüdür. UI tarafında tek satır kod yazmazsınız; her şey Blueprints (Veri Modelleri) ve Actions (Eylemler) üzerinden kurgulanır.

Entity ve Blueprint Mantığı

Port’ta altyapınızı bir Graph Database gibi modelllersiniz. Bir Kubernetes Cluster’ı, bir Microservice’e; o Microservice, bir RDS instance’ına ve bir PagerDuty On-Call rotasyonuna bağlanabilir.

Bu modeli Terraform ile Infrastructure as Code (IaC) prensibine uygun şekilde yönetebilirsiniz:

# Port Terraform Provider ile Blueprint tanımı
resource "port_blueprint" "microservice" {
  title      = "Microservice"
  icon       = "Microservice"
  identifier = "microservice"
  properties = {
    string_props = {
      "language" = {
        title = "Language"
        enum  = ["Go", "NodeJS", "Python"]
      }
      "slack_channel" = {
        title = "Slack Channel"
      }
    }
  }
}

resource "port_action" "scaffold_service" {
  title       = "Scaffold New Microservice"
  icon        = "Github"
  identifier  = "create_microservice"
  blueprint   = port_blueprint.microservice.identifier
  trigger_type = "self-service"

  user_inputs = {
    string_props = {
      "service_name" = {
        title = "Service Name"
      }
    }
  }

  backend_invocation = {
    type = "github"
    org  = "acme-corp"
    repo = "platform-scaffolder-workflows"
    workflow = "scaffold.yaml"
  }
}

Kubernetes ve CI/CD Entegrasyonu: Port Exporter

Backstage katalog için repo taraması (polling) yaparken, Port event-driven çalışır. Cluster’ınıza kurduğunuz bir exporter agent, kaynakları dinamik olarak Port paneline push eder:

helm repo add port-labs https://port-labs.github.io/helm-charts
helm repo update

helm install port-k8s-exporter port-labs/port-k8s-exporter \
  --set port.clientId="YOUR_CLIENT_ID" \
  --set port.clientSecret="YOUR_CLIENT_SECRET" \
  --values values.yaml

Burada values.yaml içinde basit JQ mapping’leri tanımlayarak Kubernetes CRD’lerinizi doğrudan UI component’lerine dönüştürebilirsiniz. Sıfır React, sıfır TypeScript.

Derin Kıyaslama: Hangi Senaryoda Hangisi?

1. Bakım Maliyeti (Total Cost of Ownership)

Backstage açık kaynak ve “bedava” gibi görünse de en az 1-2 platform mühendisinin tam zamanlı mesaisini tüketir. Güvenlik yamaları, TypeScript bağımlılıkları ve plugin güncellemeleri ciddi bir yüktür. Port ise SaaS lisanslama maliyetine sahiptir ancak kurulumu günler içinde tamamlanıp minimum eforla ayakta tutulur.

2. Esneklik ve Kurumsal Uyum

Kurum içi compliance politikalarınız multi-tenant SaaS kullanımına izin vermiyorsa, air-gapped ortamlarda çalışıyorsanız veya tamamen şirketinizin UI design system’ına (örneğin kurumsal Material UI teması) gömülmüş bir portal istiyorsanız Backstage tek seçenektir. Port hibrit çalışabilir (self-hosted exporter ve runner modelleriyle verinizi içeride tutabilir) ancak UI kontrolü her zaman onlardadır.

3. Self-Service Workflow Tetikleme

Backstage, kendi Scaffolder motoruna güvenir. Node.js backend’i üzerinde repo klonlar, commit atar ve PR açar. Port ise orkestrasyonu var olan araçlarınıza devreder: GitHub Actions, GitLab CI, Argo Workflows veya doğrudan bir Webhook. DevOps mühendisi için Port’un bu yaklaşımı çok daha doğaldır çünkü CI pipeline’ı yazmak, Scaffolder Action yazmaktan katbekat daha hızlıdır.

Karar Ağacı

Mimarinize karar verirken şu kontrol listesini uygulayabilirsiniz:

  • Ekip Büyüklüğü: 150+ yazılımcınız ve sadece portal geliştirmeye adanmış 3+ kişilik bir Platform Engineering ekibiniz varsa: Backstage.
  • Hızlı Değer Üretimi (Time-to-Value): 20-100 kişilik yazılımcı grubuna hizmet veren yalın bir DevOps ekibiyseniz ve iki hafta içinde bir katalog + self-service portal istiyorsanız: Port.
  • Arayüz İhtiyacı: “Bize standart bir dashboard yetmez, production tracing ve billing verilerini custom canvas grafikleriyle basacağız” diyorsanız: Backstage.
  • IaC ve GitOps Entegrasyonu: Portalı da Terraform ile yönetip altyapı state’i gibi kontrol etmek istiyorsanız: Port.

Özet

Platform Mühendisliğinin amacı yeni bir monorepo yazılım bakım yükü yaratmak değil, yazılım ekiplerinin önündeki altyapı bariyerlerini kaldırmaktır. Eğer bir yazılım eviyseniz ve temel yetkinliğiniz portal geliştirmek değilse, Port gibi modern platformlar operasyonel yükü minimize etmek için daha rasyoneldir. Ancak regülasyonların boğduğu, UI üzerinde tam egemenlik isteyen devasa bir kurumsal yapıdaysanız, Backstage’in getirdiği bakım yükünü göze alıp kendi iç ürününüzü inşa etmek doğru yoldur.

Category: Genel | LEAVE A COMMENT
Eylül 25 2026

Mutfakta Verimlilik: Batch Cooking ile Haftalık Yemek Hazırlığında ‘State’ Yönetimi

Saat akşam sekiz. Monitörün mavi ışığından yeni ayrılmışsın, zihninde günün yorgunluğu ve kafanda sonsuz bir döngüye giren o meşhur soru: “Bu akşam ne yesem?” İşte tam bu noktada modern yazılım mimarisinin en sevilen konseptini tezgâha taşıyoruz: batch cooking. Doğru bir yemek planlama ve mutfak yönetimi ile haftanın her günü mutfakta saatler harcamadan gurme gibi beslenmek mümkün.

Yazılımda “state” (durum), uygulamanın belirli bir andaki verisini temsil eder. Mutfakta da durum farksızdır. Çoğu insanın düştüğü hata, pazar günü beş ayrı tencere yemek yapıp perşembe günü o artık formunu kaybetmiş sulu yemeği yemeye çalışmaktır. Bu monolitik bir yaklaşımdır ve sürdürülemez. Biz mutfağı mikroservislere böleceğiz: Modüler bileşenler hazırlayacak, hafta boyunca bu bileşenlerin “state”ini değiştirerek taze tabaklar çıkaracağız.

Temel Modül: Fırınlanmış Protein ve Kök Sebze Matrisi

Haftalık zaman yönetimi hedeflerimizi tutturacak, 3 farklı yemeğe dönüşebilen baz tarifimizle başlayalım.

Porsiyon: 4-6 porsiyon
Hazırlık Süresi: 20 dakika
Pişirme Süresi: 35 dakika

Gerekli Malzemeler

  • 800 g tavuk göğsü (veya bitkisel alternatif için 2 blok sıkı tofu ya da 2 su bardağı haşlanmış nohut)
  • 2 adet tatlı patates (veya yerli sarı patates / balkabağı)
  • 1 adet büyük boy brokoli veya karnabahar
  • 2 adet havuç
  • 1 su bardağı kinoa (veya basmati pirinç, karabuğday)
  • 3 yemek kaşığı zeytinyağı
  • 1 tatlı kaşığı toz sarımsak, 1 tatlı kaşığı tütsülenmiş kırmızı biber, tuz ve karabiber
  • Joker Sos: 3 yemek kaşığı tahin, yarım limonun suyu, 2 yemek kaşığı ılık su, bir çimdik tuz.

Adım Adım Hazırlanışı

  1. Fırını önceden 200°C’ye ısıtın ve geniş bir fırın tepsisine pişirme kâğıdı serin.
  2. Tatlı patatesleri ve havuçları küp küp, brokoliyi lokmalık çiçekler halinde doğrayın. Sebzeleri tek bir kapta 1.5 yemek kaşığı zeytinyağı, tuz ve karabiberle harmanlayıp tepsinin bir yarısına yayın.
  3. Protein kaynağınızı (tavuk veya tofu) lokmalık kesin; kalan zeytinyağı, sarımsak tozu ve tütsülenmiş biberle karıştırıp tepsinin diğer yarısına yerleştirin.
  4. Tepsiyi fırına verip sebzeler karamelize olana, tavuklar tamamen pişene kadar yaklaşık 30-35 dakika pişirin.
  5. Fırın çalışırken kinoayı paket talimatına göre (1’e 2 ölçü suyla) 15 dakika haşlayın ve demlenmeye bırakın.
  6. Tahini, limon suyu ve ılık suyla pürüzsüz kıvam alana dek çırparak kenara alın.

State Yönetimi: Bu Tabanla Hafta İçi Neler Yapılır?

Bileşenler piştiğinde mutfağınızda üç ana “state” bulunur: Karbonhidrat (kinoa), lif/sebze ve protein. Bunları asla tek bir kapta karıştırmayın; ayrı cam saklama kaplarına paylaştırın. Hafta içi geçişleri şöyle yapıyoruz:

  • State 1 (Pazartesi – Akdeniz Bowl): Isıttığınız kinoa, sebze ve proteini kâseye alın. Üzerine hazırladığınız tahin sosu gezdirin. 3 dakikada taze bir akşam yemeği.
  • State 2 (Salı – Pratik Wrap): Hazır lavaşın içine soğuk tavuk/tofu dilimlerini, fırın sebzeleri ve taze marul ekleyin. İster tavada hafifçe çevirin, ister soğuk tüketin.
  • State 3 (Çarşamba – Hızlı Asya Çıtırı): Bir tavaya azıcık susam yağı ve soya sosu dökün; fırınlanmış sebze ve kinoayı yüksek ateşte 2 dakika soteleyip çıtır bir “fried rice” elde edin.

Püf Noktası

Kritik kural: Nem, tazeliğin düşmanıdır. Pişirdiğiniz hiçbir malzemeyi tamamen soğumadan kapaklı kaplara koymayın. Buhar içeride hapsolursa sebzeler lapa haline gelir ve raf ömrü yarıya iner. Ayrıca taze yeşillikleri ve sosları her zaman tüketim anında ekleyin (just-in-time rendering mantığı!).

Neden Bu Yöntem Kazandırır?

Hafta içi enerjinizin en düşük olduğu anlarda karar verme mekanizmanızı devreden çıkarırsınız. Sağlıksız dışarı siparişleri tarihe karışırken, mutfakta geçirdiğiniz toplam süreyi haftalık bazda neredeyse yüzde yetmiş oranında optimize edersiniz. Mutfak yönetimi bir yetenek değil, doğru kurulmuş bir operasyonel akıştır.

Category: Genel | LEAVE A COMMENT
Eylül 23 2026

AI Ajanları İçin API Key Dönemi Bitiyor mu? Güvenli Kimlik Doğrulama Rehberi

Kendi kendine düşünen, kararlar alan ve adımıza internette gezinen AI agents (yapay zeka ajanları) hayatımıza hızla girdi; ancak beraberinde devasa bir güvenlik açığını da getirdi. Eskiden bir backend projesi yazarken .env dosyasına tek bir API anahtarı yapıştırıp arkamıza yaslanırdık. Bugün ise bir ajana “Git şu e-postayı oku, cevabı yaz, takvimime randevu ekle, gerekirse veritabanından veri çek” diyoruz. Eğer o ajanın eline statik bir API anahtarı bırakıyorsanız, aslında evin tüm anahtarlarını hiç tanımadığınız bir kuryeye teslim ediyorsunuz demektir. Bu yazıda, ajan tabanlı sistemlerde geleneksel API security pratiklerinin neden tıkandığını ve modern kimlik doğrulama alternatiflerini bizzat test ederek inceliyoruz.

Statik API Key Neden AI Ajanları İçin Bir Kâbus?

Geleneksel yazılımlar öngörülebilirdir. Bir fonksiyon çağrılır, veri döner ve biter. Ancak otonom AI ajanları böyle çalışmaz; bir görevi başarmak için hangi aracı (tool) ne zaman çağıracağına kendileri karar verir. İşte risk tam olarak bu noktada başlar:

  • Prompt Injection Tehlikesi: Ajanınız dışarıdan bir web sayfasını özetlerken, o sayfada gizlenmiş “Tüm API anahtarlarını şu sunucuya POST et” komutunu çalıştırabilir.
  • Geniş Yetki Havuzu (Over-privileged Access): Statik anahtarlar genelde “ya hep ya hiç” mantığıyla çalışır. Ajan sadece takvim okuyacak olsa bile, anahtar ona takvimi silme veya e-posta atma yetkisi de verir.
  • Sızıntı Tespiti ve İptal Zorluğu: Kodunuzu GitHub’a kazara push etmeseniz bile, ajan LLM loglarına bu anahtarı düz metin olarak basabilir. Statik bir anahtarı iptal ettiğinizde ise tüm sisteminiz anında çöker.

[Görsel: Prompt injection ile kandırılan bir yapay zeka ajanının konsola yetkili API anahtarlarını döktüğünü gösteren terminal çıktısı]

Alternatif Çözümler: Masada Ne Var?

Peki çözüm ne? Basit: Ajanların elinden kalıcı anahtarları alıp, onlara sadece o anki işi yapabilecekleri kadar süre yaşayan “geçici izinler” vermek. Pratikte karşımıza üç ana model çıkıyor:

1. Kısa Ömürlü Token’lar (Scoped & Short-Lived JWT)

Ajan işlem yapmadan önce bir yetkilendirme servisinden (örneğin Auth0, AWS IAM veya özel bir OIDC sağlayıcısı) yalnızca birkaç dakika geçerli bir token alır. Token sızsa bile 5 dakika sonra çöp olur.

2. Ajan Proxy Mimarisi (AI Gateway / Reverse Proxy)

Benim son dönemde favorim olan yöntem bu. Ajan doğrudan üçüncü parti servisle (örneğin OpenAI, Stripe, Slack) konuşmaz. Araya bir ağ geçidi koyarsınız. Ajan yalnızca geçide istek atar, geçit gelen isteği denetler, zararlı prompt var mı bakar, gerçek API anahtarını kendi güvenli kasasından ekler ve yanıtı ajana döner.

# Örnek: Ajana direkt OpenAI anahtarı vermek yerine yerel gateway kullanmak
curl http://localhost:8080/v1/chat/completions \
  -H "Authorization: Bearer agent-ephemeral-session-token" \
  -d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "Raporu hazırla"}]}'

3. Kullanıcı Adına Yetkilendirme (Delegated OAuth)

Ajan sizin adınıza Gmail’e erişecekse, sizin şifrenizi veya genel bir API key’i bilmek zorunda değil. OAuth akışıyla “sadece e-posta okuma” izni alır; izin süresi bitince ya da şüpheli bir hareket görüldüğünde tek tıkla yetkisi kesilir.

[Görsel: Klasik statik anahtar mimarisi ile Ajan Proxy ve OAuth mimarisini kıyaslayan akış diyagramı]

Test Ettik: LiteLLM Proxy + Scoped Token Deneyimi

Kendi yerel ortamımda açık kaynaklı LiteLLM Proxy kurarak küçük bir test yaptım. Senaryo şuydu: Bir araştırma ajanı internette gezip verileri toplayacak ve harcadığı bütçe 2 doları geçmeyecek.

Ajana doğrudan OpenAI anahtarımı vermek yerine, LiteLLM üzerinden sadece 2 dolar limitli ve 1 saat sonra geçersiz olacak bir “sanal anahtar” ürettim. Sonuç ne mi oldu? Ajan sonsuz bir döngüye girip aynı aramayı yüzlerce kez yapmaya başladığında, tam 2.01. dolarda gateway isteği kesti ve süreci durdurdu. Eğer doğrudan API key verseydim, ertesi sabah yüzlerce dolarlık faturayla uyanabilirdim.

Kimlik Doğrulama Yaklaşımları Karşılaştırması

Yöntem Artıları Eksileri Kullanım Alanı
Statik API Key Kurulumu 2 dakika sürer, kütüphane desteği tamdır. Sızarsa felaket olur, yetki sınırlandırması zordur. Sadece yerel testler ve küçük prototipler.
Geçici Token (OIDC / IAM) Çalınsa bile süresi hızlıca biter, en güvenli yoldur. Altyapı kurulumu ve bakımı teknik uzmanlık ister. Kurumsal ve bulut tabanlı otonom ajanlar.
AI Gateway / Proxy Bütçe limiti koyar, prompt denetimi yapar, merkezi yönetim sunar. Sisteme tek bir hata noktası (single point of failure) ve ufak bir gecikme ekler. Üretim ortamındaki çoklu ajan mimarileri.

Maliyetler ve Ücretsiz Alternatifler

Bu güvenlik katmanını kurmak için binlerce dolar harcamanıza gerek yok. Piyasada çok sağlam açık kaynak ve ücretsiz seçenekler mevcut:

  • LiteLLM: Tamamen açık kaynak (ücretsiz). Kendi sunucunuzda veya Docker container’ında dakikalar içinde çalıştırıp harcama limiti ve geçici anahtar oluşturabilirsiniz.
  • Cloudflare AI Gateway: Cömert bir ücretsiz planı var. İstekleri loglama, önbelleğe alma (caching) ve hız sınırlama (rate limiting) işlerini kod yazmadan hallediyor.
  • Portkey: Başlangıç planı ücretsiz. Özellikle ajanların araç çağrılarını (tool calls) izlemek ve anahtarları kasada (vault) saklamak için harika bir arayüz sunuyor. Ücretli planları aylık 49 dolardan başlıyor.

Sonuç: Anahtarları Çekmeceden Çıkarma Vakti

Özetle; evet, AI ajanları için statik API key dönemi kapanıyor. Otonom kararlar alan sistemlerin eline sonsuz yetkili, süresiz anahtarlar vermek artık kabul edilebilir bir mühendislik pratiği değil.

Bugün yapabileceğiniz en mantıklı hareket, yeni bir ajan projesine başlarken ilk günden araya LiteLLM veya Cloudflare AI Gateway gibi bir katman koymak. Kurulumu sadece yarım saatinizi alır ama sizi sızdırılmış anahtarlardan ve kabus gibi faturalardan kurtarır.

Category: Genel | LEAVE A COMMENT
Eylül 21 2026

Veri Odaklı Dinlenme: Giyilebilir Cihazlarla Uyku Kalitesini ve ‘Recovery’ Skorunu Artırma

Sabah çalar saat çaldığında kendinizi harika hissedip spor çantasını hazırlarken saatinizin size “Bugün sadece hafif bir yürüyüş yapmalısın” dediği oldu mu? Günümüzde wearable tech (giyilebilir teknoloji) ürünleri artık sadece kaç adım attığımızı saymıyor; doğrudan fizyolojimize ayna tutarak bize gerçek bir recovery haritası çıkarıyor. Doğru kullanıldığında hrv tracking ve sleep optimization pratikleri, aşırı antrenmandan (overtraining) kaçınmanın ve plato çizmeyi bırakıp hedeflere ulaşmanın en zarif yoludur.

Peki Garmin’in “Body Battery”si, Oura’nın “Readiness” skoru ya da Apple Watch’un sunduğu metrikler arkasında ne saklıyor? Daha da önemlisi, bu verileri körü körüne takip etmek yerine nasıl akıllıca antrenman kararlarına dönüştürebiliriz?

Ekrandaki Gizemli Rakam: HRV Nedir ve Neden Önemlidir?

Giyilebilir cihazların toparlanma algoritmasının kalbinde tek bir kral metrik yatar: Kalp Atış Hızı Değişkenliği (Heart Rate Variability – HRV). İki kalp atışı arasındaki milisaniyelik zaman farkını ölçen bu değer, otonom sinir sisteminizin ne kadar dengede olduğunu gösterir.

Kulağa garip gelebilir ama kalbinizin bir metronom gibi kusursuz bir ritimle atması aslında iyi bir şey değildir. Yüksek HRV, vücudunuzun sempatik (savaş ya da kaç) ve parasempatik (dinlen ve sindir) sistemler arasında esnekçe geçiş yapabildiğini, yani strese hazır olduğunu gösterir. Düşük HRV ise vücudun hâlâ dünkü ağırlık antrenmanını, işle ilgili stresi veya geç saatte yenen pizzayı sindirmeye çalıştığının habercisidir. Araştırmalar gösteriyor ki, antrenman yoğunluğunu HRV trendlerine göre ayarlayan sporcular, sabit program takip edenlere kıyasla daha az sakatlanıp daha yüksek performans artışı yakalıyor.

Sleep Optimization: Sadece 8 Saat Uyumak Yetmiyor

Yatakta 8 saat kalmış olmanız, gerçekten dinlendiğiniz anlamına gelmez. Dinlenme skorunuzun temel taşını uyku kalitesi oluşturur. Cihazınızın size sunduğu uyku evrelerini anlamlandırmak bu yüzden kritiktir:

  • Derin Uyku (Deep Sleep): Fiziksel onarımın gerçekleştiği, büyüme hormonunun salgılandığı ve kas liflerinin tamir edildiği evredir. Gecenin ilk yarısında yoğunlaşır.
  • REM Uykusu: Zihinsel toparlanma, öğrenme ve duygu regülasyonu evresidir.
  • Dinlenme Kalp Hızı (RHR): Uykudaki en düşük nabzınızın gece hangi saatte görüldüğü çok şeyi anlatır. Eğer nabzınız uyanmaya yakın değil de uykunun ilk saatlerinde düşüyorsa, vücudunuz toparlanmaya erken başlamış demektir.

Veriyi Antrenmana Uyarlama: Trafik Işığı Protokolü

Giyilebilir cihazınızdan en iyi verimi almak için günlük skorlarınızı antrenman yoğunluğunuzla eşleştirebilirsiniz:

Yeşil Günler (Yüksek HRV, Yüksek Recovery Skoru)

Vücudunuz adaptasyona tamamen açık. Ağır deadlift seansları, yüksek yoğunluklu interval antrenmanları (HIIT) veya uzun tempolu koşular için ideal gündesiniz. Zorlamaktan korkmayın.

Sarı Günler (Ortalama Metrikler)

Sisteminiz ne tam dolu ne de tükenmiş. Güç antrenmanı yapabilirsiniz ancak maksimum ağırlıkları zorlamak yerine hacmi (set/tekrar sayısını) biraz düşürün. Zone 2 kardiyo veya teknik odaklı çalışmalar bu günler için biçilmiş kaftandır.

Kırmızı Günler (Düşük HRV, Yüksek Dinlenme Nabzı)

Bu günlerde egzersiz yapmamak suçluluk sebebi olmamalıdır; bu tamamen taktiksel bir karardır. Ağır antrenman yerine hafif bir yürüyüş, foam roller seansı veya hafif mobilite hareketleri seçin. Enerjinizi sistemi yeniden doldurmaya saklayın.

Önemli Uyarı: Giyilebilir cihazlar tıbbi teşhis araçları değildir. Eğer cihazınız haftalarca anormal derecede düşük HRV veya açıklanamayan yüksek dinlenme nabzı gösteriyorsa, sürekli aşırı yorgunluk hissediyorsanız ya da çarpıntı yaşıyorsanız verileri bir kenara bırakıp mutlaka bir kardiyoloji uzmanına veya doktora danışın.

Bu Gece Başlayabileceğiniz 3 Pratik Adım

Recovery skorunuzu yukarı çekmek ve cihazınızdan gelen grafikleri yeşile boyamak sanıldığı kadar zor değil. Küçük davranış değişiklikleri büyük sonuçlar doğurur:

  1. Yeme Penceresini Erken Kapatın: Yatmadan en az 2.5 – 3 saat önce kalori alımını kesin. Mideniz sindirimle uğraşırken otonom sinir sisteminiz derin toparlanma moduna geçemez.
  2. Akşam Alkolüne Mesafe Koyun: Alkol uyuşturur ama uyutmaz. Akşam içilen tek bir kadeh şarap bile gece boyunca sempatik sinir sistemini tetikleyerek HRV değerinizi tabana vurdurabilir.
  3. Cihazın Kölesi Olmayın: Bazen cihazınız “kötü uyudun” diyebilir ama siz zımba gibi hissedebilirsiniz. Teknolojiyi bir kılavuz olarak kullanın; kendi beden hislerinizi tamamen geçersiz kılacak bir otorite haline getirmeyin (ortosomnia tuzağına düşmeyin).

Sonuç olarak; giyilebilir teknolojiler doğru kullanıldığında bizi bedenimizin sinyallerine karşı daha duyarlı hale getirir. Ne zaman basmanız, ne zaman geri çekilmeniz gerektiğini bildiğinizde antrenman sadece ter dökmek değil, sürdürülebilir bir sağlık yatırımı haline gelir.

Category: Genel | LEAVE A COMMENT
Eylül 19 2026

Legacy Sistemlerde Modernizasyon: ‘Strangler Fig’ Modeli ile Göç Stratejileri

Bir sabah uyandığınızda yönetimin “Artık bu monolit bizi taşımıyor, her şeyi sıfırdan yazıyoruz!” dediğini duyduysanız, soğuk terler dökmüşsünüzdür. Legacy bir altyapıyı bir gecede rafa kaldırmaya çalışmak (namıdiğer Big Bang rewrite), havacılıkta uçak havadayken motor değiştirmeye değil, uçağı havada patlatıp parçalarından jet yapmaya benzer. Başarılı bir modernizasyon süreci için ihtiyacımız olan şey cesur bir intihar girişimi değil, kontrollü bir yazılım mimarisi evrimidir. İşte tam bu noktada, monoliti boğarak öldüren mikroservis dönüşüm yaklaşımı: Strangler Fig (Boğucu İncir) paterni devreye giriyor.

Martin Fowler’ın Avustralya’daki asalak incir ağaçlarından esinlenerek adlandırdığı bu model, yeni sistemi eski sistemin etrafına adım adım sarıp, zamanla eskiyi işlevsiz bırakarak çürütme prensibine dayanır. Peki bu teoriyi prodüksiyonda 500k RPM trafik altında çalışan bir Kubernetes kümesinde nasıl hayata geçiririz? Gelin, lafı uzatmadan işin mutfağına inelim.

1. Keşif ve Sınırların Çizilmesi: Nereden Başlamalı?

Strangler Fig yaklaşımında yapılan en büyük hata, doğrudan sistemin kalbi sayılan domain’e (örneğin e-ticaretteki ödeme veya sipariş akışı) saldırmaktır. İlk adayınız şu üç kriteri sağlamalı:

  • Düşük Bağımlılık (Low Coupling): Monolitin veri tabanındaki 40 farklı tabloya JOIN atmayan bir context.
  • Yüksek Değer / Hızlı Kazanım: Hata yaptığınızda şirketi batırmayacak ama çalıştığında ekibe “bu iş oluyor” güvenini verecek bir modül (Örn: Bildirim servisi, PDF/Fatura oluşturucu, Statik içerik sunumu).
  • Net API Kontratı: Girdisi ve çıktısı belirgin olan işlevler.

Sınırları belirledikten sonra mimarinin en kritik bileşenini devreye alıyoruz: Interception (Yakalama) Katmanı.

2. Interception Katmanı: Akıllı Yönlendirme (Routing)

Strangler Fig modelinin kalbi API Gateway ya da Reverse Proxy katmanıdır. İstemciler (web, mobil, 3rd party API) asla monolitle mi yoksa yeni mikroservisle mi konuştuklarını bilmemelidir. Trafik önce bu katmana çarpar ve yönlendirme kurallarına göre hedefe dağıtılır.

Bu aşamada sadece path-based routing yetmez; feature flag’ler, canary dağıtımlar ve cookie/header bazlı yönlendirmeler gerekir. NGINX kullanarak bu katmanı nasıl kurabileceğimize bakalım:

# /etc/nginx/conf.d/strangler_router.conf

upstream legacy_monolith {
    server 10.0.1.10:8080 max_fails=3 fail_timeout=10s;
    keepalive 32;
}

upstream new_notification_service {
    server 10.0.2.20:3000 max_fails=2 fail_timeout=5s;
    keepalive 16;
}

# Feature flag kontrolü: Header veya Cookie bazlı canary
map $http_x_use_microservice $notification_backend {
    default legacy_monolith;
    "true"  new_notification_service;
}

server {
    listen 80;
    server_name api.sirket.internal;

    # Henüz dokunulmamış tüm trafik doğrudan monolite
    location / {
        proxy_pass http://legacy_monolith;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # Strangled endpoint: Kademeli göç edilen servis
    location /api/v1/notifications {
        proxy_pass http://$notification_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Request-ID $request_id;
        
        # Olası mikroservis çökmesinde monolite failover mekanizması
        proxy_next_upstream error timeout http_502 http_503;
        proxy_next_upstream_tries 2;
    }
}

Buradaki kritik detay proxy_next_upstream kullanımıdır. Yeni mikroservisiniz beklediğiniz yükü kaldıramaz veya 502/503 dönerse, istek anında monolite yönlendirilerek SLA ihlali önlenir. Tabii ki bu fallback state-mutating (POST/PUT/DELETE) isteklerde idempotentlik garantisi yoksa dikkatli kullanılmalıdır.

3. En Büyük Karın Ağrısı: Veri Bütünlüğü ve CDC (Change Data Capture)

İş mantığını ayırmak kolaydır; veri tabanını ayırmak ise tam bir mayın tarlasıdır. Legacy uygulamalarda genellikle tek bir devasa MySQL veya Oracle veri tabanı bulunur. Mikroservis mimarisinde ise her servisin kendi veri tabanı olmalıdır (Database-per-Service).

Bunu çözmek için kesinlikle monolit içinden “hem eski DB’ye yazayım hem yeni servisin DB’sine yazayım” (Dual Writing) gafletine düşmeyin. Ağ gecikmeleri, connection pool tükenmesi ve dağıtık transaction problemleri başınızı ağrıtır. Bunun yerine Change Data Capture (CDC) kullanarak veri akışını asenkron hale getirin.

Debezium ve Apache Kafka ikilisi, legacy veri tabanının transaction log’larını (binlog / redo log) dinleyerek olay bazlı (event-driven) veri aktarımı sağlar:

# Debezium MySQL Source Connector Konfigürasyonu (Kafka Connect REST API)
curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" \
  http://kafka-connect.infra:8083/connectors/ \
  -d '{
    "name": "legacy-mysql-cdc-connector",
    "config": {
      "connector.class": "io.debezium.connector.mysql.MySqlConnector",
      "tasks.max": "1",
      "database.hostname": "legacy-db-primary.internal",
      "database.port": "3306",
      "database.user": "debezium_cdc",
      "database.password": "VaultGuardedSecret123!",
      "database.server.id": "184054",
      "database.server.name": "legacy_core",
      "database.include.list": "core_production",
      "table.include.list": "core_production.notifications,core_production.user_preferences",
      "database.history.kafka.bootstrap.servers": "kafka-cluster:9092",
      "database.history.kafka.topic": "schema-changes.legacy.core",
      "decimal.handling.mode": "double",
      "time.precision.mode": "connect"
    }
  }'

Bu yapı sayesinde, monolit eski tabloya yazmaya devam ederken Debezium bu değişiklikleri anında Kafka’ya fırlatır. Yeni mikroservisiniz de bu event’leri tüketerek (consume) kendi izole PostgreSQL veya MongoDB veritabanını besler (Eventual Consistency).

4. Trafik Kademelendirme: Shadowing (Dark Launching)

Yeni yazdığınız mikroservisi prodüksiyon trafiğiyle ilk kez karşılaştırmak istemezsiniz. Yük testleri sentetiktir; gerçek kullanıcı davranışlarını simüle edemez. Bu yüzden Traffic Shadowing (Trafik Aynalama) tekniğini kullanmalısınız.

Trafik Gateway katmanına geldiğinde hem monolite hem de mikroservise gönderilir. Monolitin cevabı kullanıcıya dönülürken, mikroservisin cevabı arka planda loglanır veya karşılaştırılır (semantic diffing). İstemci mikroservisten haberdar bile olmaz.

Kubernetes üzerinde Envoy tabanlı bir Ingress (örneğin Emissary-ingress veya doğrudan Envoy proxy) kullanıyorsanız, shadowing tanımı şu kadar basittir:

apiVersion: getambassador.io/v3alpha1
kind: Mapping
metadata:
  name: notification-shadow-mapping
  namespace: production
spec:
  hostname: api.sirket.internal
  prefix: /api/v1/notifications/send
  service: legacy-monolith-service.production:8080
  shadow: true
  shadow_service: new-notification-microservice.modern-apps:3000
  timeout_ms: 2500

Shadowing devredeyken neyi izlemelisiniz?

  • HTTP Status Kodu Farkları: Monolit 200 dönerken mikroservis 500 mü veriyor? Neden?
  • p99 ve p95 Latency: Yeni servis gerçekten hedeflenen performansı sunuyor mu?
  • Payload Uyuşmazlığı: Yanıt gövdeleri arasındaki farklar neler?

5. Monoliti Boğmak: Eski Kodu Temizlemek

Mikroservisiniz shadowing aşamasını başarıyla geçti, veri senkronizasyonu stabil, canary deployment ile trafiğin %100’ünü yeni servise aktardınız. Tebrikler, servisi göç ettiniz!

Ama işiniz bitmedi. Strangler Fig paterninin son ve en çok ihmal edilen adımı: Eski kodun monolit içinden sökülüp atılmasıdır.

Geliştiriciler genelde “ne olur ne olmaz, kod kalsın” diyerek eski methodları ve endpoint’leri monolitte bırakır. Bu durum, monoliti zamanla yaşayan bir zombi kod yığınına çevirir. Bir sonraki göç adımında bu zombiler ayağınıza dolanır.

Yapılacaklar net:

  1. Monolitteki eski endpoint’e bir log alert’i koyun (artık 0 istek alıyor olmalı).
  2. Monolit kod tabanından ilgili controller, service ve data access katmanlarını silin.
  3. CDC konfigürasyonundan o tabloyu çıkartın ve monolit veri tabanındaki eski tabloyu READ-ONLY moda alıp birkaç hafta sonra arşivleyin.

Özet ve SRE Çıkarımları

Bir legacy mimariyi modernize etmek yazılım mühendisliğinden çok bir cerrahi operasyondur. Strangler Fig yaklaşımı bu operasyonu lokal anestezi altında, hasta yürümeye devam ederken yapmanızı sağlar.

Bu yolculukta aklınızdan çıkarmamanız gereken altın kurallar şunlar:

  • Önce Gateway katmanını güçlendirin; yönlendirme kabiliyetiniz yoksa göçü yönetemezsiniz.
  • Veritabanı senkronizasyonunu CDC gibi asenkron ve güvenilir araçlarla çözün.
  • Prodüksiyon trafiğini aynalayarak (traffic mirroring) riskinizi sıfırlayın.
  • Göçü tamamlanan her parçadan sonra monolitteki ölü kodu acımadan temizleyin.

Bir sonraki sprint planlamasında masaya “Her şeyi sıfırdan yazalım” fikri gelirse, bu makaleyi Slack kanalına usulca bırakın ve monoliti boğmaya odaklanın.

Category: Genel | LEAVE A COMMENT
Eylül 15 2026

HRV ile Veri Odaklı Dinlenme: Antrenman Yükünüzü Vücudunuza Göre Ayarlayın

Sabah saat 06.30. Alarm çaldı, gözlerinizi açtınız ve antrenman takviminizde kırmızı harflerle “10 km Tempo Koşusu” ya da “Ağır Bacak Günü” yazıyor. Fakat yataktan kazınarak kalkıyorsunuz. Kafanızda o klasik iç savaş başlar: “Sadece tembellik mi yapıyorum, yoksa vücudum gerçekten bitik mi?” Modern spor ve sağlık dünyasında bu ikilemi çözmenin artık tahminlere dayanmayan bir yolu var: Akıllı saatlerimizden gelen veri analizi ve bu analizlerin göz bebeği olan HRV (Heart Rate Variability / Kalp Atış Hızı Değişkenliği).

Gelin, vücudunuzun size fısıldadığı sinyalleri nasıl okuyacağınıza ve dinlenme günlerinizi nasıl bir süper güce dönüştüreceğinize yakından bakalım.

HRV Tam Olarak Nedir? (Hayır, Kalbiniz Bir Metronom Değildir)

Çoğumuz kalbimizin dakikada 60 kez atmasını, her vuruşun tam olarak saniyede bir gerçekleştiği muntazam bir saat tiktakı gibi hayal ederiz. Oysa gerçekte olan bu değildir; hatta kalbinizin bir metronom gibi kusursuz aralıklarla atması pek de iyiye işaret sayılmaz.

HRV, ardışık kalp atışları arasındaki mikroskobik zaman farklarını (milisaniye cinsinden) ölçer. Bir atış 0.95 saniye sonra geliyorsa, diğeri 1.05 saniye sonra gelebilir. Bu değişkenliği yöneten ise otonom sinir sistemimizdir:

  • Sempatik Sinir Sistemi (“Savaş ya da Kaç”): Kalp atışlarını hızlandırır ve vuruşlar arasındaki zaman aralığını daha tekdüze (düşük HRV) hale getirir. Vücut stres altındadır.
  • Parasempatik Sinir Sistemi (“Dinlen ve Sindir”): Vagus siniri aracılığıyla frene basar, kalbi yavaşlatır ve atımlar arasındaki değişkenliği artırır (yüksek HRV). Beden toparlanmıştır, adaptasyon yeteneği yüksektir.

Kısacası; genel olarak yüksek bir HRV, otonom sinir sisteminizin dengeli, dinlenmiş ve yeni stres faktörlerini (mesela sert bir antrenmanı) göğüslemeye hazır olduğunu gösterir.

Neden “No Pain, No Gain” Devri Kapandı?

Eski ekol fitness anlayışı, salona girip her gün kendinizi tüketmenizi öğütlüyordu. Ancak fizyoloji böyle çalışmaz. Gelişim, ağırlık kaldırırken ya da kilometreleri tüketirken değil; o antrenmandan sonra doğru şekilde dinlenip süperkompanzasyon evresine geçtiğinizde gerçekleşir.

Araştırmalar gösteriyor ki, katı ve sabit bir program yerine HRV verisine göre esnetilen antrenman blokları uygulayan sporcular; daha az efor harcayarak benzer hatta daha yüksek performans artışı elde ediyor. En önemlisi de aşırı sürantrenman (overtraining) sendromu ve sakatlık riskleri dramatik ölçüde düşüyor.

Önemli Bir Hatırlatma: HRV, tek başına bir tıbbi teşhis aracı değildir. Günlerce süren açıklanamayan düşük HRV değerlerine aşırı yorgunluk, göğüs ağrısı veya baş dönmesi eşlik ediyorsa, antrenmanı erteleyip mutlaka bir kardiyoloji uzmanına veya hekime danışmalısınız.

Kişisel Veri Analizi: Sayıları Nasıl Yorumlamalısınız?

Arkadaşınızın HRV değerinin 85 ms olması, sizin 45 ms olan değerinizin “kötü” olduğu anlamına gelmez. HRV; genetik, yaş, cinsiyet ve fizyolojik geçmişe göre inanılmaz değişkenlik gösterir. Başkalarıyla yarışmayı bırakın; burada önemli olan sizin kendi baz değerinizdir (baseline).

Akıllı saatiniz veya göğüs bandınızla en az iki hafta boyunca her sabah (veya gece uykusu boyunca) ölçüm yaparak kendi taban çizginizi belirleyin. Ardından sistemi trafik ışıkları mantığıyla çalıştırın:

1. Yeşil Işık (HRV Baz Değerinde veya Üzerinde)

Parasempatik sistem devrede, toparlanma eksiksiz. Ağır deadlift’ler, yüksek yoğunluklu interval koşuları (HIIT) veya kişisel rekor (PR) denemeleri için mükemmel bir gün. Gaza basın.

2. Sarı Işık (HRV Baz Değerin %10-15 Altında)

Sistem hafif yorgun. Kötü bir gece uykusu, işte yaşanan stres ya da dünkü antrenmanın kalıntısı olabilir. Bugün antrenmanı iptal etmek zorunda değilsiniz; fakat yoğunluğu Zone 2 kardiyo, mobilite veya hafif bir kuvvet çalışmasına çekmek akıllıca olacaktır.

3. Kırmızı Işık (HRV Belirgin Biçimde Düşük)

Bedeniniz açıkça “Beni rahat bırak” diyor. Bu günlerde ağır antrenman yapmak kas inşa etmez, sadece kortizolü fırlatıp sakatlığa davetiye çıkarır. Tam dinlenme, uzun bir yürüyüş, esneme veya kaliteli bir şekerleme yapılacak gündesiniz.

HRV Verinizi Yukarı Çekecek Eyleme Geçirilebilir Adımlar

HRV’nizin düşük olduğunu gördünüz, peki bunu toparlamak için ne yapabilirsiniz? Hayat tarzınızda küçük ama kritik ayarlar yapmanın tam zamanı:

  1. Akşam Yemeği ile Uyku Arasına Mesafe Koyun: Yatmadan hemen önce yenen ağır bir yemek, kalbinizin gece boyunca dinlenmek yerine sindirimle uğraşmasına neden olur ve HRV’yi dibe çeker. Uykudan 3 saat önce yemeyi kesin.
  2. Alkol İllüzyonunu Fark Edin: “Akşam içtiğim iki kadeh şarap beni rahatlatıyor” diyebilirsiniz, ancak HRV verileriniz yalan söylemez. Alkol, parasempatik sistemi baskılar ve uyku kalitenizi yerle bir eder. Deneyin; içtiğiniz gecelerin sabahında HRV grafiğinizdeki serbest düşüşü net şekilde göreceksiniz.
  3. Yavaş ve Bilinçli Nefes Alın: Günde sadece 10 dakika boyunca uygulayacağınız 4 saniye nefes al, 6 saniye ver (kutu nefesi veya rezonans nefesi) protokolü, vagus sinirini doğrudan uyararak toparlanma sürecinizi tetikler.
  4. Aktif Dinlenmeye Şans Verin: Dinlenmek demek bütün gün koltukta hareketsiz kalmak demek değildir. Düşük tempolu doğa yürüyüşleri kan dolaşımını hızlandırarak dokuların onarılmasına yardım eder.

Bedeninizle Savaşmayı Bırakın

Veriye dayalı dinlenme, tembelliğe mazeret bulmak değil; bilimi arkamıza alarak daha sürdürülebilir bir gelişim yakalamaktır. Akıllı saatinizdeki grafikleri birer pranga gibi görmek yerine, vücudunuzun o günkü kapasitesini fısıldayan bir pusula olarak kullanın. Ne zaman yükleneceğinizi bilmek kadar, ne zaman geri çekileceğinizi bilmek de gerçek bir sporcu disiplinidir.

Category: Genel | LEAVE A COMMENT