spinny:~/writing $ less openfeature-feature-flags-progressive-delivery.md
12Dağıtım, kodun üretime ulaştığı zamandır. Serbest bırakma, birisinin onu gerçekten kullanabileceği zamandır. Bu ikisini karıştırmak, her konuşlandırmayı biraz gergin bir an haline getirmenin en hızlı yollarından biridir.34feature flag bu iki an arasına boşluk koymaya yarar. Bugün dağıtıma çıkabilir, yarın dahili ekip için, ardından pilot müşteri için, ardından kullanıcıların %10'u için devreye alabilirsiniz. Bir şeyler ters giderse bayrağı kapatın. Sürümün tamamını geri almanız gerekmez.56## Bayrak yalnızca bir if değildir78Teknik olarak genellikle `if`'dir. Kültürel olarak çok daha fazlası.910```typescript11if (await flags.isEnabled('checkout.v2.enabled', context)) {12 return newCheckout(input);13}1415return oldCheckout(input);16```1718Bu küçük `if` kademeli bir kullanıma sunma, bir deney, bir geçiş, bir işletme izni veya operasyonel bir kill switch anlamına gelebilir. Sorun şu ki, eğer bunu iyi yönetemezseniz, iki yıl boyunca kodda kalan teknik borca da dönüşebilir.1920## OpenFeature nerede devreye giriyor?2122OpenFeature, feature flag'yi ortak bir API ile değerlendirmek için açık bir spesifikasyondur. Fikir basit: uygulama kodunuz doğrudan satıcıya veya bayraklar için kullandığınız dahili sisteme bağlı olmamalıdır.2324Uygulama şunu sorar:2526```typescript27const enabled = await client.getBooleanValue('checkout.v2.enabled', false, {28 targetingKey: user.id,29 plan: user.plan,30 country: user.country,31});32```3334Sağlayıcı, kuralların nereden geleceğine karar verir: SaaS, dosya, dahili hizmet, flagd, GitOps yapılandırması. Bir gün özellik işaretleme arka ucunu değiştirirseniz uygulamanın her yere yeniden yazılması gerekmez.3536Bu ayrım mimari bir detay gibi görünse de proje büyüdükçe hissediliyor.3738## Bağlam savaşın yarısıdır3940Herkes için açık veya kapalı işareti faydalıdır ancak sınırlıdır. Aşamalı teslimat şu bağlamda yaşar:4142- dahili veya harici kullanıcı;43- ücretsiz veya kurumsal plan;44- köy;45- organizasyon;46- uygulama sürümü;47- istikrarlı trafik yüzdesi.4849Önemli anahtar `targetingKey`: stabil olmalı. Her istekte değişirse, kullanıcı bir kez A varyantına, bir kez de B varyantına düşebilir. Bir deneme için bu berbat, ödeme içinse felaket olabilir.5051## Mantıklı bir dağıtım5253Beğendiğim bir akış şu:54551. bayrak kapalıyken konuşlandırın;562. geliştiriciler ve QA için ateşleme;573. Pilot müşteri veya kiracı için çalıştırma;584. %5'lik dağıtım;595. %25'lik dağıtım;606. %100 kullanıma sunma;617. Eski kodun ve bayrağın kaldırılması.6263Çoğu zaman unutulan nokta ise sonuncusudur. Geçici bir bayrağın ölüm tarihi olmalıdır. Eğer sonsuza kadar kalırsa, gelecekteki her yeniden düzenlemeci şunu sormak zorunda kalacak: "Fakat bu dal hala faydalı mı?".6465## Kill switch: önce onları hazırlayın6667kill switch, harici bir bağımlılık sizi rahatsız etmeye başladığında, bir iş çok fazla kaynak tükettiğinde veya yeni mantık garip hatalar ürettiğinde sizi kurtaran bayraktır.6869İyi bir kill switch şöyle olmalıdır:7071- bulunması kolay;72- runbook'ta belgelenmiştir;73- ara sıra test edilmiştir;74- etkinleştirildiğinde gözlemlenebilir;75- Kırılabilecek kısımdan mümkün olduğu kadar bağımsız.7677En kötüsü kaza sırasında bayrağın var olduğunu keşfetmek ama kimse hala çalışıp çalışmadığını bilmiyor.7879## Gözlemlenebilirlik veya aşamalı olmayan dağıtım8081Bir özelliği metriklere bakmadan %10 oranında açmak, birden fazla adım içeren bir iyimserliktir.8283Her kullanıma sunma basit sorulara yanıt vermelidir:8485- hatalar arttı mı?86- gecikme değişti mi?87- kullanıcılar akışı tamamlıyor mu?88- daha fazla bilet veya yeniden deneme var mı?89- Bir değişken yalnızca bir segmenti mi etkiliyor?9091OpenFeature bayrak değerlendirmesi etrafındaki kancaları destekler. Hataları günlüğe kaydetmek, ölçümler eklemek veya derecelendirmeyi trace'ye bağlamak için kullanışlıdırlar.9293## Adlandırma ve sahiplik9495İsimler önemlidir. `new_ui` hiçbir şey söylemiyor. `checkout.v2.enabled` çok daha fazlasını söylüyor.9697Her bayrak için en azından şunu işaretlerdim:9899- isim;100- Tanım;101- mal sahibi;102- güvenli varsayılan;103- var olmasının nedeni;104- kaldırılma tarihi veya koşulu.105106Sahipsiz bir bayrak neredeyse her zaman kimsenin kaldıramayacağı bir bayraktır.107108## Bunları nerede değerlendirmeli109110Ön uç, arka uç veya kenar? Bağlı olmak.111112Bayrak düzen, kopyalama veya katılım içinse ön uçta sorun yoktur. İzinler, faturalandırma, sınırlar veya hassas verilerle ilgiliyse arka uçta yer alması gerekir. Yönlendirme veya yüksek trafik denemeleri içeriyorsa, kenar mantıklı olabilir.113114Basit kural: Ön uç deneyimi iyileştirebilir ancak tek güvenlik engeli olmamalıdır.115116## Sonuç117118feature flag iyi yapıldığında üretimle olan ilişki değişir. Riski ortadan kaldırmazlar ancak onu daha küçük ve daha yönetilebilir hale getirirler. Dilimler halinde serbest bırakabilir, gözlemleyebilir, durabilir, geri dönebilir, öğrenebilirsiniz.119120OpenFeature temiz bir temel ekler: ortak bir API, değiştirilebilir sağlayıcılar ve sistemi büyütmenin daha düzenli bir yolu. Ancak disiplin sizin elinizde: Güvenli varsayılanlar, net isimler, ölçümler, sahipler ve temizlik.121122En iyi bayrak, sakince salıvermenize yardımcı olan ve artık ihtiyaç duyulmadığında kaybolan bayraktır.123124## Kaynaklar125126- [OpenFeature: Introduction](https://openfeature.dev/docs/reference/intro/)127- [OpenFeature: Node.js SDK](https://openfeature.dev/docs/reference/sdks/server/javascript/)128- [OpenFeature Specification: Flag Evaluation API](https://openfeature.dev/specification/sections/flag-evaluation)129- [OpenFeature: Hooks](https://openfeature.dev/docs/reference/concepts/hooks/)130- [CNCF: OpenFeature](https://www.cncf.io/projects/openfeature/)131
:Feature flag: nefesinizi tutmadan bırakınlines 1-131 (END) — press q to close