← Blog'a Dön
TEKNIK

Feature Flag Nedir? Güvenli Deployment ve A/B Test Rehberi

F. Çağrı Bilgehan10 Şubat 202610 dk okuma
feature flagdeploymenta/b testdevops

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

  1. Flag'leri temizleyin — Artık gerekmeyen flag'leri koddan kaldırın (teknik borç!)
  2. Flag adlandırma standardıfeature.checkout.new-flow gibi
  3. Default kapalı — Yeni flag'ler varsayılan olarak kapalı olmalı
  4. Monitoring — Flag değişikliklerini logla ve izle
  5. Test coverage — Her flag kolu için test yazın (açık + kapalı)
  6. 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.

İlgili Yazılar

Acik Kaynak Yazilim Rehberi: Nedir, Nasil Katki Yapilir?

Acik kaynak yazilim nedir, lisans turleri nelerdir ve acik kaynak projelere nasil katki yapilir? GitHub, open source ve topluluk rehberi.

CI/CD Nedir? Surekli Entegrasyon ve Dagitim Rehberi

CI/CD nedir, neden onemlidir ve nasil kurulur? GitHub Actions, Jenkins ve otomatik test-deploy pipeline rehberi.