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.
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.
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.
É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.
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.
Créé dans le panneau, évalué en production, lu depuis votre code en une ligne.
Actif pour les gens qui correspondent à votre ciblage, inactif pour les autres. Le flag le plus courant est aussi le plus ennuyeux.
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.
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.
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.
Un flag appartient à un projet, et le projet est la frontière : la préproduction a ses propres flags et ses propres clés.
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.
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.
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.
L’appartenance est recalculée à partir des événements : quelqu’un revenu hier sort tout seul de « n’est jamais revenu ».
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.
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é.
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à.
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.
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.
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 ».
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.
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.
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 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.
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é.
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.
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.
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 →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.
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é →Un interrupteur dans votre code qui active ou désactive quelque chose pour les gens que vous choisissez, sans livrer une nouvelle version. Les deux chemins sont déployés ; le flag décide lequel s’exécute.
Un flag décide qui reçoit quelque chose. Un test A/B mesure ce que cela a fait à un chiffre qui vous importe. Chez Kilden, le test est une lentille posée sur un flag à variantes : même assignation, même audience.
En lire un, non : le SDK charge tous les flags une fois, en arrière-plan, et chaque lecture ensuite est une consultation en mémoire. Le service lui-même répond en millisecondes à un chiffre.
Créez le flag, laissez le ciblage vide, mettez le rollout à dix pour cent. Tous ceux dont l’identifiant haché tombe sous la coupe l’obtiennent, et monter le nombre plus tard ne fait qu’ajouter des gens.
Oui, et c’est la raison de faire tourner des flags sur une plateforme de données clients. Une cohorte comme « a payé deux fois et n’est jamais revenu » se définit une fois à partir de vos événements et se cible directement.
Votre application continue de tourner. Un flag qui n’a jamais chargé est lu comme inconnu, ce que le SDK rapporte comme inactif : votre code prend donc le chemin qu’il prenait avant que la fonctionnalité existe.
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.