Feature Flag Nedir? Güvenli Deployment Rehberi
Yeni özelliği canlıya almak stresli mi? Geri almak zor mu? Feature Flag ile kodu deploy edin ama özelliği istediğiniz zaman açın veya kapatın — kod değişikliği yapmadan.
Feature Flag Tanımı
Feature Flag (Feature Toggle), bir özelliğin çalışma zamanında açılıp kapatılmasını sağlayan bir yazılım tekniğidir. Kod canlıda olsa bile özellik kapalı kalabilir.
if (featureFlags.isEnabled('new-checkout')) {
showNewCheckout();
} else {
showOldCheckout();
}
Neden Feature Flag?
1. Güvenli Deployment
Özelliği %1 kullanıcıya aç, sorun yoksa yavaşça artır.
2. Trunk-Based Development
Uzun süreli feature branch'lar yerine, herkes main branch'e merge eder. Flag ile hazır olmayan özellikler gizlenir.
3. A/B Testing
Kullanıcıların yarısına yeni tasarımı, diğer yarısına eskiyi gösterin. Hangisinin daha iyi performans gösterdiğini ölçün.
4. Kill Switch
Canlıda bir sorun çıktığında, deploy yapmadan özelliği anında kapatın.
Feature Flag Türleri
| Tür | Ömür | Kullanım | |-----|------|----------| | Release Flag | Kısa (haftalık) | Yeni özellik aç/kapat | | Experiment Flag | Orta (aylık) | A/B testi | | Ops Flag | Uzun | Performans/bakım kontrolü | | Permission Flag | Kalıcı | Kullanıcıya özel özellikler |
Basit Implementasyon
// feature-flags.ts
interface FeatureFlags {
[key: string]: boolean | ((user: User) => boolean);
}
const flags: FeatureFlags = {
'new-dashboard': true,
'dark-mode': true,
'beta-ai-chat': (user) => user.plan === 'premium',
'experimental-editor': (user) => user.email.endsWith('@bilgeone.com'),
};
function isEnabled(flagName: string, user?: User): boolean {
const flag = flags[flagName];
if (typeof flag === 'function') return user ? flag(user) : false;
return !!flag;
}
React'te Kullanım
function CheckoutPage() {
const { isEnabled } = useFeatureFlags();
return (
<div>
{isEnabled('new-checkout') ? (
<NewCheckoutFlow />
) : (
<LegacyCheckoutFlow />
)}
</div>
);
}
Canary Release Stratejisi
Gün 1: %1 kullanıcı → Yeni özellik açık → Metrikleri izle
Gün 2: %5 kullanıcı → Sorun yok → Devam
Gün 3: %25 kullanıcı → Sorun yok → Devam
Gün 5: %50 kullanıcı → Sorun yok → Devam
Gün 7: %100 kullanıcı → Full rollout → Flag'i kaldır
Feature Flag Araçları
| Araç | Tür | Öne Çıkan | |------|-----|-----------| | LaunchDarkly | SaaS | Enterprise, zengin SDK | | Unleash | Açık kaynak | Self-hosted, ücretsiz | | ConfigCat | SaaS | Basit, uygun fiyatlı | | Flagsmith | Hibrit | Açık kaynak + SaaS | | Kendi çözümünüz | Custom | Tam kontrol |
Best Practices
- Flag'leri temizleyin — Artık gerekmeyen flag'leri koddan kaldırın (teknik borç!)
- Flag adlandırma standardı —
feature.checkout.new-flowgibi - Default kapalı — Yeni flag'ler varsayılan olarak kapalı olmalı
- Monitoring — Flag değişikliklerini logla ve izle
- Test coverage — Her flag kolu için test yazın (açık + kapalı)
- Flag sayısını sınırlayın — 30-50'den fazla aktif flag karmaşıklık yaratır
Anti-Pattern'ler
- ❌ İç içe flag kontrolleri (
if flag1 && !flag2 || flag3) - ❌ Flag'leri hiç temizlememek (binlerce ölü flag)
- ❌ Veritabanı şemasını flag'le kontrol etmek
- ❌ Flag'leri güvenlik kontrolü olarak kullanmak
Sonuç
Feature Flag, modern yazılım geliştirmenin vazgeçilmez aracıdır. Güvenli deployment, A/B testing ve hızlı geri alma imkânı sağlar. Ancak dikkatli yönetilmezse teknik borç yaratır — bayraklarınızı temizlemeyi unutmayın.
Feature flag ve deployment stratejilerini LabLudus platformunda öğrenin.