Feature flags

Livrez le code maintenant. Choisissez plus tard qui le voit.

Un feature flag est un interrupteur qui active ou désactive une partie de votre produit pour les gens que vous choisissez, sans livrer de nouveau code.

Kilden évalue les flags dans un service conçu pour cette seule tâche, et les cible avec les mêmes événements, personnes et cohortes sur lesquels tourne votre analytique.

Commencer gratuitement Lire le guide
app.kilden.io / flags / new_checkout
Flag
new_checkout
Actif
Rollout 40%
Ciblage
Les gens de la cohorte « a payé deux fois et n’est jamais revenu »
Pourquoi

Déployer n’est pas lancer

Livrer du code et l’allumer sont deux décisions. Liez-les et chaque release devient un pari, tranché devant tout le monde à la fois.

1
Merge le mardi, lancement le jeudi

Le code part en production derrière un flag éteint — déployé, accessible à personne — jusqu’à ce que lancer soit un interrupteur et non un déploiement du vendredi.

2
Annuler en secondes, pas dans un pipeline

Éteindre le flag prend un clic. Revenir en arrière, reconstruire et redéployer prend le temps que prend votre pipeline — pendant que les clients restent dans la version cassée.

3
Petit rayon d’explosion d’abord

Votre propre équipe, puis une tranche du trafic, puis tout le monde. Si le taux d’erreur bouge, il a bougé pour une fraction des gens.

Rien de tout cela ne demande une branche à longue durée de vie, un train de releases ou une seconde copie de votre infrastructure.

Ce que vous obtenez

Tout ce qu’un flag doit savoir faire

Créé dans le panneau, évalué en production, lu depuis votre code en une ligne.

Actif ou inactif

Actif pour les gens qui correspondent à votre ciblage, inactif pour les autres. Le flag le plus courant est aussi le plus ennuyeux.

Variantes nommées

Donnez au flag une liste de variantes plutôt qu’un actif/inactif, et votre code récupère le nom de la variante. Un bouton répartit les poids également.

Rollout par pourcentage

Un déploiement progressif est une coupe dans un hash, pas une file d’attente. Augmentez-le et le flag ne fait qu’ajouter des gens : personne ne perd la fonctionnalité parce que vous avez bougé le nombre.

Kill switch

Un interrupteur éteint le flag pour tout le monde, quoi que dise le ciblage, et atteint le service d’évaluation en quelques secondes. Sans déploiement et sans cache à purger.

Environnements séparés

Un flag appartient à un projet, et le projet est la frontière : la préproduction a ses propres flags et ses propres clés.

Des expositions que vous pouvez tracer

La première fois qu’une session lit un flag, un événement enregistre la valeur reçue — vous pouvez donc tracer une courbe de rollout plutôt que lui faire confiance.

La différence

Ciblez sur ce que les gens ont fait, pas sur une liste que vous avez collée

Un outil de flags isolé connaît un identifiant et les propriétés que vous avez pensé à envoyer : l’audience finit donc en liste collée que quelqu’un maintient à la main.

Kilden est d’abord une plateforme de données clients, et le service de flags lit les mêmes personnes, événements et cohortes que vos tunnels et vos campagnes. Une audience devient une phrase sur le comportement.

Des audiences qui sont une cohorte, pas un export
A payé deux fois et n’est jamais revenu A rencontré une erreur de paiement la semaine dernière A invité un collègue mais n’a jamais envoyé de message Est sur un plan payant et n’a pas ouvert le nouvel éditeur
Défini une fois, utilisé par tout

Vous construisez l’audience une fois comme cohorte, et le flag qui ouvre la fonctionnalité, la campagne qui relance et le tunnel qui mesure lisent la même définition.

Elle suit le comportement

L’appartenance est recalculée à partir des événements : quelqu’un revenu hier sort tout seul de « n’est jamais revenu ».

Ce que cela coûte

L’appartenance à une cohorte est recalculée selon une planification : elle peut donc avoir quelques minutes de retard. C’est juste pour du ciblage et faux pour tout ce qui doit être vrai à la seconde près ; dans ce cas, les propriétés que vous passez dans la requête s’appliquent immédiatement.

Bougez le rollout, regardez qui tombe dedans

Un flag, vingt personnes, et l’arithmétique qui décide où chacune tombe. Faites glisser le rollout : la même personne tombe toujours du même côté.

new_checkout
Variante
Ce que la page affiche
Deux paquets de torréfaction nordique, prêts à payer.

Le flag est actif. Les gens à l’intérieur du rollout reçoivent cette variante ; les autres reçoivent le paiement que vous livrez déjà.

Les mêmes vingt personnes, à chaque fois
Dans le rollout Dehors

La couleur du point est la variante que cette personne recevrait — un hash indépendant, qui ne suit donc pas le rollout.

Chaque jeton est un distinct id. Montez le rollout et les jetons ne font que s’allumer ; baissez-le et les derniers entrés sortent les premiers. Ces vingt-là sont réparties régulièrement sur la plage, si bien que le compte suit le curseur ; vingt vraies personnes oscilleraient d’un côté ou de l’autre.

Mélanger change l’ordre dans lequel elles sont dessinées, et rien d’autre : chacune garde son côté.

À titre d’illustration : cela reproduit la propriété que la page affirme — la position ne dépend que de la clé du flag et de l’identifiant — et non le hash que le service calcule.

Sous le capot

Une requête, une fonction pure, rien d’écrit

L’évaluation des flags est son propre service, et la seule partie de Kilden qu’un chargement de page attend. Voici tout ce qu’elle fait.

01
Le SDK demande une fois

Au démarrage, le SDK envoie votre clé publique et l’identifiant courant, et récupère tous les flags en une seule réponse — les inactifs à faux, pour que « éteint » ne se confonde pas avec « jamais entendu parler ».

02
La position est arithmétique

Qu’une personne tombe dans un rollout est un hash de la clé du flag et de son identifiant, projeté sur la ligne que le pourcentage coupe. Mêmes entrées, même réponse.

03
Rien n’est assigné

Pas de table d’assignation, pas d’écriture sur le chemin de lecture. Monter un rollout allonge la coupe, et c’est bien pour cela qu’il ne fait qu’ajouter des gens. Les variantes viennent d’un second hash.

04
Les lectures sont locales

Après cette première réponse, chaque lecture de flag est une consultation en mémoire. La première lecture de chaque flag enregistre l’exposition.

Le seul endroit où une valeur peut bouger

Le bucket dépend de l’identifiant : quand quelqu’un se connecte et que son identifiant anonyme est remplacé, une personne pile à la frontière peut changer de côté. C’est le prix d’une évaluation sans état stocké. Le SDK recharge les flags dès que l’identité change.

Expérimentations

Un flag à variantes est déjà presque un test A/B

Dès qu’un flag distribue des variantes nommées, il ne manque que l’arithmétique. Une expérimentation est une lentille posée sur un flag que vous avez déjà : choisissez le flag, choisissez la métrique, lisez le résultat.

La conversion n’est comptée qu’après l’exposition de la personne : un achat antérieur à ce qu’elle voie le changement ne peut donc pas lui être attribué.

Comparaison avec PostHog
Il refuse d’annoncer un gagnant qu’il ne voit pas

Une répartition qui ne colle pas à vos poids, une exposition trop mince pour conclure quoi que ce soit, du trafic anonyme mêlé à de l’identifié — le rapport nomme le problème et retient le verdict.

Installation

Deux lignes pour lire un flag

Ajoutez le SDK, initialisez-le avec votre clé publique, lisez le flag par sa clé. Les flags chargent en arrière-plan : conditionnez donc le rendu au callback.

SDK web
# npm install kilden
import kilden from 'kilden'
kilden.init('wk_…')
kilden.onFeatureFlags(() => {
  if (kilden.isFeatureEnabled('new_checkout')) renderNewCheckout()
})

Les SDK serveur évaluent les mêmes flags avec votre clé secrète, et le point d’entrée est documenté si vous préférez l’appeler vous-même. La clé secrète est refusée depuis un navigateur.

Lire le guide des flags
Les petits caractères

Ce qui compte comme une requête de flags

Une requête de flags est une réponse qui transporte des flags — pas une par flag que votre code lit. Le SDK demande une fois au chargement et répond à chaque lecture depuis la mémoire : une page avec cinquante flags dépense une requête.

C’est moins cher par flag que de compter chaque lecture, ce qui pénalise toute application ayant beaucoup de flags sur un même écran.

Et elles ne sont pas facturées aujourd’hui

Aucun compteur ne compte les requêtes de flags et aucune ligne ne leur est consacrée sur une facture. Un quota que vous ne pouvez pas dépasser est un ornement, pas une limite : cette page n’en imprime donc aucun. Le jour où elles seront comptées, les pages de tarifs auront le nombre en premier.

Voir ce qui est facturé

Ce que les gens demandent vraiment

Mettez la prochaine release derrière un interrupteur que vous contrôlez

Créez un projet, posez le SDK, et livrez ce qui vous inquiétait — à votre propre équipe d’abord, puis à qui le mérite. Les flags sont dans le plan gratuit.

Commencer gratuitement Voir un enregistrement de votre propre site