← blog · 28 Ekim 2026

Özellik Bayrakları: Dağıtımı Yayından Ayırmak, Tutarlı Yüzdelik Açılış ve Bayrak Borcu

Bayrak türlerini ayırmak, kararı yerelde vermek, yüzdelik açılışı kararlı bir özetle yapmak ve çok kiracılı üründe doğru hedefleme anahtarı; veriyi geri almayan bayrak, istek ortasında değişen değer, önbellekte karışan varyantlar ve unutulan bayrakların maliyeti.

Bir özelliği kapatmanın tek yolu yeni bir sürüm dağıtmaksa, her dağıtım aynı anda bir ürün kararıdır. Yarım kalmış bir işi ana dala almak korkutucu hâle gelir, uzun ömürlü dallar çoğalır, birleştirme günleri sancılı geçer ve bir sorun çıktığında geri alma, dağıtım hattının hızı kadar yavaştır. Özellik bayrakları bu iki şeyi birbirinden ayırır: kod üretime gider ama kapalı durur, kimin göreceğine çalışma anında karar verilir. Fikir basittir; zorluğu, bayrakların nerede değerlendirileceği, kullanıcıların nasıl bölüneceği ve işi biten bayrakların nasıl temizleneceğidir.

Her bayrak aynı şey değildir

Bayrakları tek bir kavram gibi yönetmek ilk hatadır. Ömürleri ve riskleri farklı dört tür vardır.

Yayın bayrağı, bitmemiş ya da yeni bir özelliği kademeli açmak içindir. Ömrü günler ya da birkaç haftadır; özellik herkese açıldığında kod yolu ile birlikte silinmelidir.

Deney bayrağı, iki varyantı ölçmek içindir. Ömrü deneyin süresi kadardır ve kullanıcının hangi varyantta olduğu deney boyunca değişmemelidir.

Operasyonel anahtar (kill switch), pahalı ya da kırılgan bir yolu kapatmak içindir: bir öneri motorunu devre dışı bırakmak, dış bir servise çağrıyı kesmek. Bunlar uzun ömürlüdür ve en kötü anda, yani sistem zaten zorlanırken kullanılır.

İzin bayrağı, "bu plan bu özelliği görür" türünden kurallardır. Bizim önerimiz bunları bayrak sistemine hiç koymamaktır. Plan ve rol kuralları yetkilendirme modelinin parçasıdır, faturalandırma ile tutarlı olmalıdır ve denetlenebilir olmalıdır. Bayrak panelinde bir tıklamayla değişebilen bir yetki kuralı, kimsenin fark etmediği bir güvenlik açığıdır.

Türü bayrağın adına ya da meta verisine yazın. Temizlik kuralları türe göre değişir ve tür bilinmezse hiçbir bayrak silinmez.

Bayrak nerede değerlendirilir

Üç yaygın yaklaşım var.

Yapılandırma dosyası ya da ortam değişkeni. Kurulumu yoktur, ama değeri değiştirmek yeniden başlatma ya da yeniden dağıtım ister. Bu, bayrakların asıl vaadini, yani dağıtımdan bağımsız açıp kapatmayı ortadan kaldırır. Operasyonel anahtar için hiç uygun değildir: acil durumda dağıtım hattını beklemek istemezsiniz.

Her istekte merkezi bir servise sormak. Değer anında güncel olur ama her istek bir ağ çağrısı kazanır ve bayrak servisi uygulamanın kritik yoluna girer. Servis yavaşladığında bütün ürün yavaşlar.

Yerel değerlendirme. Uygulama kural setini (hangi bayrak, hangi hedefleme, hangi yüzde) arka planda çeker ya da akış olarak alır, kararı kendi belleğinde verir. Bayrak servisi çökse bile son bilinen kural setiyle çalışmaya devam eder. Doğru varsayılan budur. Açık kaynak ve ticari bayrak ürünlerinin sunucu SDK'larının çoğu bu modelle çalışır; satıcıdan bağımsız bir arayüz istiyorsanız CNCF projesi OpenFeature, değerlendirme API'sini sağlayıcıdan ayırmak için tasarlanmıştır.

Tarayıcı ve mobil istemcilerde durum farklıdır. Kural setini istemciye göndermeyin: hedefleme kuralları müşteri listelerini, henüz duyurulmamış özellik adlarını ve kampanya tarihlerini içerir. İstemci için değerlendirmeyi sunucuda yapıp yalnız sonuçları gönderin.

Tutarlı yüzdelik açılış

"Kullanıcıların yüzde beşine aç" denince akla ilk gelen random() < 0.05 olur ve yanlıştır. Aynı kullanıcı her istekte farklı sonuç alır, ekran bir yenilemede yeni, bir sonrakinde eski görünür. Doğrusu, kararı kararlı bir anahtardan türetmektir:

import hashlib

def kova(bayrak: str, anahtar: str) -> int:
    ozet = hashlib.sha256(f"{bayrak}:{anahtar}".encode()).digest()
    return int.from_bytes(ozet[:8], "big") % 10000

def acik_mi(bayrak: str, anahtar: str, yuzde: float) -> bool:
    return kova(bayrak, anahtar) < int(yuzde * 100)

Bu yaklaşımın iki önemli özelliği var. Birincisi, yüzde artırıldığında içerideki kullanıcılar içeride kalır: yüzde beşteki biri yüzde yirmide de açıktır, çünkü kova numarası değişmez. İkincisi, özete bayrak adı katıldığı için her bayrak kullanıcıları farklı sıralar. Bayrak adını katmazsanız aynı küçük kullanıcı grubu her yeni özelliğin ilk denek grubu olur ve hem bu kişilerin deneyimi bozulur hem de deney sonuçları birbirine karışır.

Çok kiracılı bir üründe hedefleme anahtarını dikkatli seçin. Anahtar kullanıcı kimliği olursa aynı şirketin yarısı yeni ekranı, yarısı eskisini görür ve destek ekibine "ekranlarımız farklı" diye yazarlar. İş akışını değiştiren özelliklerde anahtar kiracı kimliği olmalıdır; yalnız görsel ya da kişisel tercihleri etkileyen özelliklerde kullanıcı kimliği yeterlidir.

Varsayılan değer bir tasarım kararıdır

Her değerlendirme çağrısı bir varsayılan değer alır ve bu değer, kural seti yüklenmediğinde, bayrak silindiğinde ya da adı yanlış yazıldığında döner. Yayın bayrağında güvenli varsayılan neredeyse her zaman eski davranıştır. Operasyonel anahtarda ise düşünmek gerekir: "öneri motoru açık" varsayılanı, bayrak servisine ulaşılamadığında anahtarı işe yaramaz kılabilir.

Uygulamanın kural seti yüklenmeden trafik almaya başlaması da sık görülen bir sorundur. Yeni başlayan bir örnek birkaç saniye boyunca bütün bayrakları varsayılan değerle değerlendirir ve yüzde yüze açılmış bir özellik o örnekte kapalı görünür. Hazır olma kontrolünü kural setinin ilk kez yüklenmesine bağlayın.

Tuzaklar

Bayrak veriyi geri almaz. Yeni kod yolu yeni bir sütuna ya da yeni bir biçimde yazıyorsa, bayrağı kapatmak yazılmış veriyi eski hâline getirmez. Eski kod yolu yeni biçimdeki satırı okuyamıyorsa, geri alma anahtarınız aslında bir hata üretecidir. Şema değişikliğini bayraktan bağımsız ve iki yönde de uyumlu olarak yapın: önce iki biçimi de okuyabilen kodu dağıtın, sonra bayrağı açın.

Değer istek ortasında değişebilir. Uzun süren bir istekte ya da birden çok adımlı bir iş akışında bayrağı her adımda yeniden değerlendirirseniz, kural değiştiği anda işin yarısı eski yoldan, yarısı yeni yoldan geçer. Değerlendirmeyi isteğin başında bir kez yapın. Kuyruğa atılan işlerde sonucu iş verisine ekleyin, işçinin yeniden karar vermesine bırakmayın.

Önbellek varyantları karıştırır. Sunucu tarafında üretilen bir sayfa ya da yanıt paylaşımlı bir önbellekte tutuluyorsa, bayrağı açık bir kullanıcıya üretilen sürüm kapalı olana sunulabilir. Ya bu yanıtları paylaşımlı önbellekten çıkarın ya da varyantı önbellek anahtarına katın.

Bayrak kombinasyonları test edilmez. On bağımsız bayrak, teoride bin yirmi dört farklı ürün demektir. Hepsini test edemezsiniz. Bayrakları birbirine bağımlı yapmaktan kaçının; zorunluysa bağımlılığı açıkça tanımlayın ve testte yalnız "hepsi kapalı", "hepsi açık" ve yayındaki gerçek bileşim gibi anlamlı birkaç durumu koşun.

Hangi varyantın sunulduğu görünmüyorsa hata ayıklanamaz. Bir hata kaydında ya da izde kullanıcının hangi bayrak değerleriyle istek yaptığı yoksa, "yalnız bazı kullanıcılarda oluyor" türünden sorunlar günlerce çözülemez. Değerlendirilen bayrakları iz ya da log bağlamına ekleyin; hata takip aracınız etiket destekliyorsa oraya da yazın.

Bayrak borcu

Bayrakların asıl maliyeti eklendiklerinde değil, unutulduklarında ortaya çıkar. Yüzde yüzde aylarca duran bir yayın bayrağı, artık hiç çalışmayan bir kod dalını ve onun testlerini yaşatır. Bir gün biri bayrağı yanlışlıkla kapatır ve iki yıl önceki davranış geri gelir.

İşe yarayan kurallar şunlar: her bayrağın bir sahibi ve bir son tarihi olsun; yayın bayrağı açıldığı gün kaldırma işi de iş listesine girsin. Haftalık bir rapor, son tarihi geçmiş bayrakları ve otuz gündür aynı değeri döndüren bayrakları listelesin. Bayrak adlarını koddan kolay aranabilir sabitler olarak geçirin ki git grep ile tüm kullanım yerleri tek komutta bulunsun; dinamik olarak birleştirilen bayrak adları temizliği imkânsız kılar.

Ne zaman kullanmamalı

Günde birkaç kez dağıtım yapan, geri almayı dakikalar içinde yapabilen ve tek kiracılı küçük bir ürün için bir bayrak servisi kurmak, kazandırdığından fazla karmaşıklık getirir. Orada küçük ve kısa ömürlü değişiklikler ile hızlı geri alma çoğu zaman yeter. Bayrakları yetkilendirme, plan kuralı ya da genel yapılandırma deposu olarak kullanmayın; her biri için daha doğru bir yer var. Bayrağı, kısa ömürlü bir dalın yerine geçen ve işi bitince silinen bir araç olarak düşünün. Kalıcı hâle gelen her bayrak, adı konmamış bir yapılandırma ayarıdır.