spinny:~/writing $ less openfeature-feature-flags-progressive-delivery.md
12Implementatie vindt plaats wanneer de code in productie komt. Vrijgave is wanneer iemand het daadwerkelijk kan gebruiken. Het verwarren van deze twee is een van de snelste manieren om van elke inzet een spannend moment te maken.34De feature flag dienen om ruimte tussen deze twee momenten te creëren. U kunt vandaag implementeren, morgen starten voor het interne team, vervolgens voor een pilotklant en vervolgens voor 10% van de gebruikers. Als er iets misgaat, zet dan de vlag uit. U hoeft niet noodzakelijkerwijs de hele release terug te draaien.56## De vlag is niet alleen een als78Technisch gezien is het vaak een `if`. Cultureel gezien is het veel meer.910```typescript11if (await flags.isEnabled('checkout.v2.enabled', context)) {12 return newCheckout(input);13}1415return oldCheckout(input);16```1718Dat kleine `if` kan een geleidelijke uitrol, een experiment, een migratie, een ondernemingsvergunning of een operationele kill switch vertegenwoordigen. Het probleem is dat als je het niet goed beheert, het ook technische schulden kunnen worden die twee jaar in de code blijven staan.1920## Waar komt OpenFeature binnen?2122OpenFeature is een open specificatie voor het evalueren van feature flag met een gemeenschappelijke API. Het idee is simpel: uw applicatiecode mag niet rechtstreeks afhankelijk zijn van de leverancier of het interne systeem dat u voor vlaggen gebruikt.2324De app vraagt:2526```typescript27const enabled = await client.getBooleanValue('checkout.v2.enabled', false, {28 targetingKey: user.id,29 plan: user.plan,30 country: user.country,31});32```3334De provider bepaalt waar de regels vandaan komen: SaaS, bestand, interne service, flagd, GitOps-configuratie. Als u op een dag de backend met functiemarkeringen wijzigt, hoeft de applicatie niet overal opnieuw te worden geschreven.3536Deze scheiding lijkt een architectonisch detail, maar wordt voelbaar naarmate het project groeit.3738## Context is het halve werk3940Een aan- of uitvlag voor iedereen is handig, maar beperkt. Progressieve bezorging leeft in context:4142- interne of externe gebruiker;43- gratis of ondernemingsplan;44- dorp;45- organisatie;46- app-versie;47- stabiel percentage verkeer.4849De belangrijke sleutel is `targetingKey`: deze moet stabiel zijn. Als het bij iedere aanvraag verandert, kan een gebruiker één keer in variant A terechtkomen en één keer in variant B. Voor een experiment is het verschrikkelijk, voor een kassa kan het desastreus zijn.5051## Een verstandige uitrol5253Een flow die ik leuk vind is deze:54551. inzetten met uitgeschakelde vlag;562. ontsteking voor ontwikkelaars en QA;573. inschakelen voor een pilotklant of huurder;584. Uitrol van 5%;595. uitrol op 25%;606. 100% uitrol;617. verwijdering van oude code en vlag.6263Het vaak vergeten punt is het laatste. Een tijdelijke vlag moet een overlijdensdatum hebben. Als het voor altijd blijft, zal elke toekomstige refactor zich moeten afvragen: "maar is deze tak nog bruikbaar?".6465## Kill switch: bereid ze eerst voor6667De kill switch is de vlag die u redt wanneer een externe afhankelijkheid u in de war brengt, een taak te veel bronnen verbruikt of nieuwe logica vreemde fouten oplevert.6869Een goede kill switch moet zijn:7071- gemakkelijk te vinden;72- gedocumenteerd in het runbook;73- af en toe getest;74- waarneembaar wanneer geactiveerd;75- voor zover mogelijk onafhankelijk van het onderdeel dat kapot zou kunnen gaan.7677Het ergste is om tijdens het ongeval te ontdekken dat de vlag bestaat, maar niemand weet of hij nog werkt.7879## Waarneembaarheid of niet progressieve levering8081Een functie op 10% inschakelen zonder naar de statistieken te kijken is slechts optimisme met meerdere stappen.8283Elke uitrol moet eenvoudige vragen beantwoorden:8485- zijn de fouten toegenomen?86- is de latentie veranderd?87- voltooien gebruikers de stroom?88- zijn er meer tickets of nieuwe pogingen?89- heeft een variant slechts invloed op één segment?9091OpenFeature ondersteunt haken rond vlagevaluatie. Ze zijn handig voor het loggen van fouten, het toevoegen van statistieken of het koppelen van de beoordeling aan een trace.9293## Naamgeving en eigendom9495Namen zijn belangrijk. `new_ui` zegt niets. `checkout.v2.enabled` zegt veel meer.9697Voor elke vlag zou ik minimaal het volgende markeren:9899- naam;100- beschrijving;101- eigenaar;102- veilige standaard;103- reden waarom het bestaat;104- datum of voorwaarde van verwijdering.105106Een vlag zonder eigenaar is bijna altijd een vlag die niemand zal ontruimen.107108## Waar je ze kunt evalueren109110Frontend, backend of edge? Hangt ervan af.111112Als de vlag bedoeld is voor lay-out, kopiëren of onboarding, is de frontend prima. Als het om machtigingen, facturering, limieten of gevoelige gegevens gaat, moet dit op de backend staan. Als het gaat om routing of experimenten met veel verkeer, kan de edge zinvol zijn.113114De simpele regel: de frontend kan de ervaring verbeteren, maar mag niet de enige beveiligingsbarrière zijn.115116## Conclusie117118De feature flag die goed zijn gedaan, veranderen de relatie met de productie. Ze elimineren het risico niet, maar maken het kleiner en beter beheersbaar. Je kunt in stukjes loslaten, observeren, stoppen, teruggaan, leren.119120OpenFeature voegt een schone basis toe: een gemeenschappelijke API, uitwisselbare providers en een nettere manier om het systeem te laten groeien. Maar de discipline blijft van jou: veilige standaardwaarden, duidelijke namen, statistieken, eigenaren en netheid.121122De beste vlag is degene die je helpt rustig los te laten en vervolgens verdwijnt als hij niet langer nodig is.123124## Bronnen125126- [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: loslaten zonder je adem in te houdenlines 1-131 (END) — press q to close