Feature toggle (ayrıca feature switch, feature flag, feature gate, feature flipper, conditional feature adıyla anıldığı da olur) bir yazılım geliştirme tekniğidir. Özellik geçişi anlamına gelir. Bu yöntem, kaynak koda ekleyeceğiniz yazılımsal özelliklerin * geliştirmesi, testleri * , bakımı, ve onarımı sırasında kullanılabilecek alternatif bir yol önerir * . Böylece henüz yayınlamak için hazır olmayan özellikler bile test amacıyla gerçek koda eklenebilir. Bir özellik geçişi, ilgili olduğu özelliği, çalışma anında * gizlemek, aktive etmek veya devre dışı bırakmak için kullanılabilir. Örneğin bir yazılım geliştirici, geliştirdiği bir özelliği sadece test için etkin kıldığında kendisi hariç diğer kişilerin bu özelliği görmesini engelleyebilir.
Sık sık yeni sürüm ve dağıtımlar yayınlamak * geliştiricilerin yazdıkları kod ile ilgili hızlıca geribildirim almalarını sağlar. Bu nedenle mümkün olduğunca çabuk ve sık bir şekilde yeni özellikler eklenmelidir. Özellik geçişleri bu sürecin içine alternatifler ilave edebilmenizi sağlar. Bu nedenle kullanıcı ilgisinin sıcak tutulması gereken * yazılımlarda özellik geçişleri, kullanması neredeyse elzem bir tekniktir.
Bu teknik, yazılım geliştiricilerin, ürünlerinin henüz tamamlamadıkları özelliklerini içeren sürümlerini * yayınlayabilmesini sağlar. Henüz bitmemiş durumdaki özellikler gizli olacağı için kullanıcı ara yüzünde * görünmezler. Böylece onlarca ufak özellik yükseltmesi, herhangi bir kalıcı sürüme geçmeye ve sürüm birleştirme külfetlerine gerek kalmadan yayınlanabilir. Özellik geçişleri daha kısa yazılım entegrasyon aşamalarına izin verebilir. Proje üzerinde çalışan bir ekip henüz tamamlamadığı özelliklere ait kodları da projeye dahil ederek geliştirme sürecini hızlandırmak için bu tekniği kullanabilir.
Uygulama
Özellik geçişleri aslında koddaki şartlı ifadelerde kullanılacak basit değişkenlerdir. Böylece bu koşullu kod bloğu özellik geçiş değişkenindeki değere göre aktif veya pasif hale geçebilir. Pasif hale getirilmiş bir kod bloğu ise, o bloğu yorum satırı haline dönüştürmek gibidir. Böylece geliştirici, henüz yayınlamak için hazır olmayan özellikleri bypass ederek yazılımın akışının normal devam edebilmesini sağlayabilir.
Özellik geçişlerinin ana kullanımı, sürüm derlemesinden önceki son anda yazılımdaki değişiklikleri birleştirirken ortaya çıkabilecek çakışmayı önlemektir. Ancak bu sefer de toggle debt (geçiş borcu) olayına yol açabilir. Geçiş borcu, bir özellik kalıcı olarak açıldıktan ve ek yük ürettikten sonra yazılımda bulunan ölü kod nedeniyle ortaya çıkar. Kodun bu kısmı, diğer kısımları rahatsız etmemek için dikkatlice çıkarılmalıdır.
İki ana özellik geçişi türü vardır. Biri, geliştiricinin çalışmasına bağlı olarak bir ürün sürümünden önce tutmayı veya kaldırmayı belirlediği bir sürüm geçişidir. Diğeri, eski koda kıyasla farklı bir kullanımı karşıladığı için tutulan bir geçiştir.
Özellik geçişleri aşağıdaki senaryolarda kullanılabilir:
Bir uygulamaya yeni bir özellik ekleme.
Bir uygulamadaki mevcut bir özelliği geliştirme.
Bir özelliği gizleme veya devre dışı bırakma.
Bir arayüzü genişletme.
Özellik geçişleri şu şekilde saklanabilir:
Bir veritabanında satırlar halinde
Bir yapılandırma dosyasındaki girdiler şeklinde
Harici bir özellik bayrakları (feature flags) hizmetinde
Özellik Grupları
Özellik grupları, birlikte çalışan özellik geçişlerinden oluşur. Böylece geliştirici, tek tek uğraşmadan bir grup özelliği tek seferde kolayca düzenleyebilir.
Kanarya Sürümü
Özellik bayraklarının bir başka yararı da kanarya lansmanları yapabilmenizdir. Bir kanarya sürümü, geliştiricilere ürünlerinin önce küçük bir kullanıcı grubu tarafından aşamalı olarak test edilebilmesini sağlar. Bir özelliğin performansı tatmin edici değilse, herhangi bir olumsuz etki olmadan veya potansiyel müşterilerin tamamını aynı anda mutsuz etmeksizin geri alınabilir.
Büyük bir yeniliği ürüne pat diye yerleştirip bunu da özellik geçişi tekniği ile kontrol altında tutmaya çalışmak en son çareniz olsun. Özellikleri bölebildiğiniz kadar ufak parçalara ayırıp bunları yayınladığınız ürüne yerleştirirseniz başka problemlere neden olmadan güvenli sürümler üretebilirsiniz. Martin Fowler
Özellik geçişleri, Flickr, Disqus, Etsy, reddit, Gmail ve Netflix, gibi birçok büyük web sitesinin yanı sıra Google Chrome Canary gibi yazılımlar tarafından kullanılmaktadır.