spinny:~/writing $ less openfeature-feature-flags-progressive-delivery.md
12Die Bereitstellung erfolgt, wenn der Code in der Produktion ankommt. Release ist, wenn jemand es tatsächlich nutzen kann. Die beiden zu verwechseln ist eine der schnellsten Möglichkeiten, jeden Einsatz zu einem etwas angespannten Moment zu machen.34Die feature flag dienen dazu, zwischen diesen beiden Momenten Platz zu schaffen. Sie können es heute bereitstellen, morgen für das interne Team starten, dann für einen Pilotkunden und dann für 10 % der Benutzer. Wenn etwas schief geht, schalten Sie die Flagge aus. Sie müssen nicht unbedingt die gesamte Version zurücksetzen.56## Die Flagge ist nicht nur ein Wenn78Technisch gesehen ist es oft ein `if`. Kulturell ist es viel mehr.910```typescript11if (await flags.isEnabled('checkout.v2.enabled', context)) {12 return newCheckout(input);13}1415return oldCheckout(input);16```1718Dieses kleine `if` kann eine schrittweise Einführung, ein Experiment, eine Migration, eine Unternehmensgenehmigung oder ein betriebsbereites kill switch darstellen. Das Problem ist, dass es, wenn man es nicht gut hinbekommt, auch zu technischen Schulden kommen kann, die zwei Jahre lang im Code verbleiben.1920## Wo kommt OpenFeature ins Spiel?2122OpenFeature ist eine offene Spezifikation zur Bewertung von feature flag mit einem gemeinsamen API. Die Idee ist einfach: Ihr Anwendungscode sollte nicht direkt vom Anbieter oder internen System abhängen, das Sie für Flags verwenden.2324Die App fragt:2526```typescript27const enabled = await client.getBooleanValue('checkout.v2.enabled', false, {28 targetingKey: user.id,29 plan: user.plan,30 country: user.country,31});32```3334Der Anbieter entscheidet, woher die Regeln kommen: SaaS, Datei, interner Dienst, Flagd, GitOps-Konfiguration. Wenn Sie eines Tages das Feature-Flagging-Backend ändern, muss die Anwendung nicht überall neu geschrieben werden.3536Diese Trennung scheint ein architektonisches Detail zu sein, aber sie wird spürbar, wenn das Projekt wächst.3738## Der Kontext ist die halbe Miete3940Eine Ein- oder Aus-Flagge für alle ist nützlich, aber begrenzt. Progressive Lieferung lebt im Kontext:4142- interner oder externer Benutzer;43- kostenloser oder Enterprise-Plan;44- Dorf;45- Organisation;46- App-Version;47- stabiler Verkehrsanteil.4849Der wichtige Schlüssel ist `targetingKey`: Er muss stabil sein. Wenn es sich bei jeder Anfrage ändert, kann ein Benutzer einmal in Variante A und einmal in Variante B landen. Für ein Experiment ist es schrecklich, für einen Checkout kann es katastrophal sein.5051## Ein sinnvoller Rollout5253Ein Flow, der mir gefällt, ist dieser:54551. Bereitstellung mit ausgeschalteter Flagge;562. Zündung für Entwickler und Qualitätssicherung;573. Einschaltung für einen Pilotkunden oder Mieter;584. 5 % Einführung;595. Rollout bei 25 %;606. 100 % Einführung;617. Entfernen des alten Codes und der Markierung.6263Der oft vergessene Punkt ist der letzte. Eine temporäre Flagge muss ein Sterbedatum haben. Wenn es für immer so bleibt, muss sich jeder zukünftige Refactor fragen: „Aber ist dieser Zweig noch nützlich?“.6465## Kill switch: Bereiten Sie sie zuerst vor6667Das kill switch ist das Flag, das Sie rettet, wenn eine externe Abhängigkeit anfängt, Sie zu stören, ein Job zu viele Ressourcen verbraucht oder eine neue Logik seltsame Fehler erzeugt.6869Eine gute kill switch muss sein:7071- leicht zu finden;72- im Runbook dokumentiert;73- gelegentlich getestet;74- bei Aktivierung beobachtbar;75- weitestgehend unabhängig von dem Teil, das brechen könnte.7677Das Schlimmste ist, während des Unfalls festzustellen, dass die Flagge existiert, aber niemand weiß, ob sie noch funktioniert.7879## Beobachtbarkeit oder nicht progressive Lieferung8081Eine Funktion bei 10 % zu aktivieren, ohne sich die Metriken anzusehen, ist nur Optimismus mit mehreren Schritten.8283Jeder Rollout sollte einfache Fragen beantworten:8485- Haben die Fehler zugenommen?86- Hat sich die Latenz geändert?87- Schließen Benutzer den Flow ab?88- Gibt es weitere Tickets oder Wiederholungsversuche?89- Betrifft eine Variante nur ein Segment?9091OpenFeature unterstützt Hooks rund um die Flag-Auswertung. Sie sind nützlich, um Fehler zu protokollieren, Metriken hinzuzufügen oder die Bewertung mit einer trace zu verknüpfen.9293## Benennung und Eigentum9495Namen sind wichtig. `new_ui` sagt nichts. `checkout.v2.enabled` sagt viel mehr.9697Für jede Flagge würde ich mindestens Folgendes markieren:9899- Name;100- Beschreibung;101- Eigentümer;102- sicherer Standard;103- Grund, warum es existiert;104- Datum oder Zustand der Entfernung.105106Eine herrenlose Flagge ist fast immer eine Flagge, die niemand löschen kann.107108## Wo man sie bewerten kann109110Frontend, Backend oder Edge? Kommt darauf an.111112Wenn es sich bei der Flagge um Layout, Kopie oder Onboarding handelt, ist das Frontend in Ordnung. Wenn es um Berechtigungen, Abrechnungen, Limits oder sensible Daten geht, muss es im Backend erfolgen. Wenn es um Routing oder Experimente mit hohem Datenverkehr geht, kann der Edge sinnvoll sein.113114Die einfache Regel: Das Frontend kann das Erlebnis verbessern, sollte aber nicht die einzige Sicherheitsbarriere sein.115116## Fazit117118Die gut gemachten feature flag verändern die Beziehung zur Produktion. Sie beseitigen das Risiko nicht, machen es aber kleiner und beherrschbarer. Sie können in Scheiben loslassen, beobachten, anhalten, zurückgehen, lernen.119120OpenFeature fügt eine saubere Grundlage hinzu: ein gemeinsames API, austauschbare Anbieter und eine sauberere Möglichkeit, das System zu erweitern. Aber die Disziplin bleibt bei Ihnen: sichere Standardeinstellungen, klare Namen, Metriken, Eigentümer und Sauberkeit.121122Die beste Flagge ist diejenige, die Ihnen hilft, ruhig loszulassen und dann verschwindet, wenn sie nicht mehr benötigt wird.123124## Quellen125126- [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: loslassen, ohne den Atem anzuhaltenlines 1-131 (END) — press q to close