
Feature flag, özelliğin kodunu ürüne alıp görünürlüğü çalışma anında bir anahtarla yönetmenizi sağlar. Büyük lansman gecesi yerine yarım kalan işi gizli tutar, hazır olunca açar, sorun olunca kapatırsınız. Bu rehber tanımı, canlıda aç-kapa pratiğini ve küçük ekiplerin sade kurulumunu anlatır.
Yeni bir ödeme adımı, üye paneli veya kampanya kutusu bitene kadar ayrı bir dalda bekletmek cazip görünür. Sonra bir gece kod canlıya alınır; bir hata çıkarsa geri dönüş daralır. Feature flag nedir sorusu tam bu noktada pratikleşir: özelliğin kodunu ürünün içine almak, görünürlüğü ise bir anahtarla gizli tutmak. Hazır olduğunuzda anahtarı açarsınız; bir şey ters giderse yeniden derleme beklemeden kapatırsınız.
Bu rehber kademeli yüzde yayınının takvimi değil, daha temel bir ayrımı anlatır. Kodun sunucuda durması ile kullanıcının o kodu görmesi aynı karar olmak zorunda değildir. Büyük lansman gecesi bu iki kararı tek saate sıkıştırır. Feature flag ise yarım kalan işi ana kodda taşıyıp canlıda anahtarla gösterir veya saklar.
Feature Flag Nedir?
Feature flag (özellik bayrağı), uygulamanın çalışma anında bir kod yolunu açıp kapatan bir karardır. Karar derleme zamanında kilitlenmez. Ortam değişkeni, ayar kaydı veya küçük bir yönetim ekranındaki anahtar okunur; kod buna göre yeni veya eski yolu seçer.
En sade hali bir koşuldur. Bayrak açıksa yeni sepet özeti çizilir, kapalıysa eski özet kalır. Her iki yol da paketin içindedir. Kullanıcının gördüğü şey, o anki anahtar durumuna bağlıdır. Bu yüzden feature flag bir kütüphane markası değil, yayını kod birleştirmeden ayıran bir alışkanlıktır.
KepezWeb tarafında bu ayrım sıkça şunun için istenir: özellik dalı şişmeden ana dala girmek, müşteriye henüz göstermemek, hazır olunca anahtarı çevirmek. Amaç “yarım işi kalitesiz yayınlamak” değildir. Amaç, görünürlüğü kodun varlığından koparmaktır.
Kodun canlıda olması, özelliğin herkese açık olması demek değildir.
Lansman Gecesini Beklemek Kodu Neden Şişirir
Lansman gecesi modeli şunu varsayar: özellik ya tamamen hazırdır ya da hiç yoktur. Gerçekte metinler, yetki kuralları, boş durumlar ve hata mesajları aynı anda bitmez. Beklerken ana dal ilerler, özellik dalı geride kalır. Birleştirme gecesi hem çakışmayı hem operasyon yükünü aynı saate yığar.
Geri alma da aynı kapıdan geçer. Yayın yeni kodun tamamını getirir. Sorun tek bir düğmedeyse bile paketin tümünü geri sarmak veya acil yama üretmek gerekir. Mağaza kapalıyken yapılan “gece operasyonu” duygusu buradan gelir: görünürlük ile dağıtım birbirine kenetlenmiştir.
Feature flag bu kenetlenmeyi gevşetir. Dağıtım, kodun yerini değiştirir. Anahtar ise kullanıcının o kodla karşılaşmasını yönetir. Gece yarısı kahramanlığına ihtiyaç, çoğu zaman bu iki işin birbirine yapışmasından doğar.
Yarım Özelliği Ana Dala Almak
“Yarım özellik” kalitesiz arayüz demek değildir. Anlamı şudur: veri modeli, gizli bir uç nokta veya arka plan hesabı ana koda girebilir; müşterinin tıkladığı düğme henüz kapalıdır. İş, uzun ömürlü bir yan dalda birikmek yerine küçük parçalar halinde ana hatta durur.
Buna bazen karanlık yayın denir. Sunucu tarafı gerçek ortamda durur, hatta sınırlı iç trafikle ısınır; vitrin sessizdir. Birleştirme küçük kalır. “Her şey bitsin, sonra bakarız” bekleyişi kısalır. Test de tek geceye yığılmaz; kapalı yol ile açık yol ayrı ayrı doğrulanabilir.
Somut örnekler işi netleştirir:
- Bir e-ticaret sitesi yeni kargo seçeneğinin ücret hesabını kodda taşır; seçim kutusu bayrak kapalıyken çizilmez.
- Yeni iade adımı yalnızca iç hesaplarda görünür; dış müşteri eski formu kullanır.
- Yeni rapor sayfası menüde durmaz, doğrudan URL bile eski ekrana düşer.
- Ödeme sonrası bildirim yeni bir kuyruğa yazılır ama kullanıcıya yeni bir onay metni gösterilmez.
Bu örneklerde kod “gizli” olsa da güvenlik modeli değişmez. Bayrak, yetkinin yerine geçmez. Gizli tutulan bir yönetici ekranı hâlâ kimlik doğrulama ve yetki kontrolü ister. Feature flag vitrini kapatır; kapıyı kilitlemez.
Anahtarı Canlı Sistemde Çevirmek
Anahtarın değeri yayın paketinin içine gömülmek zorunda değildir. Önemli olan şudur: görünürlüğü değiştirmek için yeni bir sürüm çıkarmak zorunda kalmamak. Ortam değişkeni, ayarlar tablosu veya dar yetkili bir panel bu işi görür. Küçük ekipte abartılı bir platform şart değildir; okunan yerin tek ve bilinir olması yeter.
Açmak, “herkese aynı anda müjde” olmak zorunda değildir. Önce iç hesap, sonra belirli bir mağaza, sonra tüm kullanıcılar gibi kaba bir sıra bile lansman gecesinden farklıdır. Bu yazının omurgası yüzde dilimleri değil, görünür mü değil mi kararını koddan ayırmaktır. Anahtar kapalıyken özellik yoktur; açıkken vardır. Geri alma, anahtarı tersine çevirmektir.
Kapatma, kill switch olarak da anılır. Yeni ödeme yöntemi hata üretiyorsa bayrağı kapatırsınız. Eski yol duruyorsa vitrin çalışmayı sürdürür. Bunun bir şartı vardır: yeni yolun yanına eski yolu silmişseniz anahtarın çevrilecek bir şeyi kalmaz. Feature flag, iki yolu dürüstçe koruduğunuz sürece işe yarar.
Kim çevirir sorusu teknik seçimden bağımsızdır. Geliştirici, ürün sahibi ve nöbetçi aynı anahtara rastgele basarsa kafa karışır. Her bayrağın bir sahibi, bir varsayılanı (çoğu zaman kapalı) ve “neden açık” notu olsun. Canlıda anahtar, gizli bir geliştirici şakası değil, yayın kararıdır.
Yayın Bayrağı, Kill Switch ve Deney Bayrağı
Aynı if kutusuna her ihtiyacı koymak, birkaç ay sonra okunamaz bir ormana döner. İsim ve ömür farklıdır. Yayın bayrağı geçicidir: özellik oturunca kod sadeleşir, bayrak silinir. Kill switch operasyoneldir: bozulursa kapatılır, bazen uzun süre durur. Deney bayrağı ölçüm içindir; yetki bayrağı ise “şu role göster” demektir. Bunları tek “geçici deneme” diye etiketlemek, temizlik gününü belirsizleştirir.
| Yaklaşım | Kod nerede durur | Kullanıcı ne zaman görür | Sorun olursa ne yapılır |
|---|---|---|---|
| Büyük lansman gecesi | Çoğu zaman ayrı dalda, birleştirme anına kadar | Yayınla birlikte herkese | Geri sürüm veya acil yama |
| Feature flag ile yayın | Ana kodda, çoğu zaman kapalı | Anahtar açılınca | Anahtar kapatılır; eski yol duruyorsa vitrin devam eder |
| Karanlık yayın | Sunucu tarafı canlıda, arayüz kapalı | Hâlâ kapalıdır | Arayüz hiç açılmadan sunucu yolu gözlenir |
Tablo bir dogma değildir. Küçük bir metin değişikliği için bayrak açmaya gerek yoktur. Bayrak, geri alınması pahalı veya görünürlüğü zamana yayılması gereken işe değer. Her satıra bayrak takmak, her satıra ikinci bir ürün eklemek gibidir.
Küçük Ekipte Sade Bir Flag Düzeni
Araç seçiminden önce isim ve varsayılan netleşsin. yeniOdemeV2 gibi ne olduğu okunan bir ad, flag3 gibi bir sır numarasına tercih edilir. Varsayılan kapalı olsun. Açık unutulan bir bayrak, kapalı unutulandan daha çok sürpriz üretir.
Kod yolu ikiye ayrılır: yeni davranış, eski davranış. Üçüncü bir “belki” yolu eklemeyin. Koşul, iş kuralının göbeğine dağılmasın; mümkünse tek bir okuma noktası olsun. Aynı isteğin içinde bayrağı beş kez sorgulamak, tutarsız ara durum üretir.
Yönetim yeri ekibin gerçekliğine göre seçilir. Özel PHP/MySQL yazılımında ayarlar tablosunda bir satır bile yeter. Ortam değişkeni, yeniden başlatma kabul edilen servislerde iş görür; anahtarı anında çevirmek istiyorsanız değerin uygulama yeniden açılmadan okunması gerekir. Hazır bir SaaS ürünü ancak birden fazla uygulama ve birden fazla ekip aynı anahtara bakıyorsa tartışılır.
Yayın hattı bayrağın yerini tutmaz, tamamlar. Kod ana dala girer, testler her iki yolu da (en azından kritik olanı) çalıştırır, paket çıkar, bayrak hâlâ kapalıdır. Bu akış, küçük ekip için sade bir CI/CD hattı ile uyumludur: birleştirme sık, görünürlük ayrı. Dağıtım başarılı diye vitrin değişmek zorunda değildir.
Açmadan önce gözlem net olsun. Hata kaydı, ödeme reddi, boş liste, yavaş sayfa gibi birkaç sinyal “ne bozulursa kapatırız” listesine yazılır. Anahtar açılır. Kısa bir süre iç hesap veya sınırlı bir grup yeter. Sonra ya herkese açılır ya da kapatılır. Açmak bir tören olmak zorunda değildir; kapatmak da utanç değildir.
- Bayrağa ad, sahip ve varsayılan (kapalı) verin.
- Yeni ve eski yolu aynı istekte çatışmayacak biçimde ayırın.
- Değeri tek yerden okuyun; yetkisiz değiştirmeyi kısıtlayın.
- Kapalıyken eski yolun gerçekten çalıştığını doğrulayın.
- Açıkken yeni yolun kritik akışını doğrulayın.
- Kapatma kriterini yayın notuna yazın.
- Bayrağın silineceği işi, açma işiyle birlikte kaydedin.
Ödeme ve kargo gibi dış sistemlere dokunan işlerde bayrak, bildirimin kendisini unutturmaz. Yeni bir onay metni kapalı olsa bile arka planda tetiklenen olayın doğrulanması gerekir. Bu ayrım, ödeme ve kargo bildirimlerindeki webhook akışında sık görülür: vitrin kapalıyken bile sunucu olayı yanlış işlerse sessiz hasar birikir.
Açılan Bayrağı Koddan Çıkarmak
Feature flag’in bedeli, canlıda duran ikinci bir üründür. Her bayrak iki test yolu, iki hata senaryosu ve iki okuma yükü demektir. İç içe geçmiş bayraklar ise “hangi kombinasyon gerçek?” sorusunu büyütür. Bir süre sonra kimse yeniOdemeV2’nin hâlâ gerekli olup olmadığını hatırlamaz; koşul ölü kod olarak kalır.
Temizlik, incelik değil iş tanımının parçasıdır. Bayrak herkese açılıp davranış oturunca koşul kalkar, eski yol silinir. Silme tarihi belirsizse bayrak kalıcı ürüne dönüşür. Kalıcı yetki kuralı gerçekten gerekiyorsa adı “deneme” olmamalıdır; rol ve izin modeline taşınmalıdır.
Test yükünü de dürüst yazın. Kapalı yolu hiç çalıştırmıyorsanız kill switch bir efsanedir. Açık yolu yalnızca geliştirici makinesinde görüyorsanız canlıdaki veri sürprizi gecikmiş bir lansman gecesine döner. Feature flag, testi iptal etmez; testi zamana yayar.
Yazılım geliştirme işinde sade kural şudur: anahtarla taşıdığınız her özellik, bir gün anahtarsız yaşayacak kadar sadeleşmelidir. Bayrak köprüdür. Köprüyü yol sanmak, bakımı ikinci bir ürün gibi şişirir.
Sıkça Sorulan Sorular
Feature flag ile A/B testi aynı şey midir?
Değildir. Feature flag görünürlüğü çalışma anında açıp kapatır. A/B testi ise iki varyantı ölçmek için kurulur. Aynı altyapı bazen ikisini de taşır; amaçları ayrıdır. Ölçmediğiniz bir yayın bayrağına deney demeyin.
Yarım özelliği canlıda taşımak güvenlik açığı mıdır?
Bayrak bir gizleme katmanıdır, yetki katmanı değildir. Gizli tutulan uç nokta hâlâ kimlik ve izin kontrolü ister. Kaynak kodda duran bir yol, tahmin edilen bir adresle çağrılabilir. Hassas işi yalnızca bayrağa emanet etmeyin.
Küçük ekip için ayrı bir flag ürünü şart mı?
Çoğu zaman değildir. Tek uygulama, tek ekip ve birkaç bayrak için ayar kaydı veya dikkatli kullanılan bir ortam değeri yeter. Ürün, birden fazla servisin aynı karara bakması, denetim izi ve yetki ayrımı gerektiğinde konuşulur.
Bayrağı ne zaman koddan silmeli?
Davranış oturup eski yolun bir anlamı kalmayınca. Açık unutulan yayın bayrağı, silinmemiş bir iskele gibidir. Silme işini açma kartına yazmazsanız iskele kalır; sonraki özellikler onun etrafından dolaşır.
Özelliği anahtarla yöneten sade bir yayın düzeni kurmak istiyorsanız ihtiyacı netleştirmek yeter. KepezWeb ile mevcut kod yapınıza uygun bir yaklaşım için teklif alın; büyük lansman gecesi yerine kontrollü aç-kapa konuşulur.


