managing-experiment-lifecycle

Par posthog · skills

Guide les transitions d'état d'une expérience : lancement, pause, reprise, clôture, mise en production d'une variante, archivage, réinitialisation et duplication. Couvre les prérequis, les implications sur l'affectation des variantes et l'analyse, ainsi que le cadre décisionnel pour choisir quand utiliser chaque action.\nDÉCLENCHER quand : l'utilisateur demande à lancer, mettre en pause, reprendre, clôturer, mettre en production, archiver, réinitialiser ou dupliquer une expérience.\nNE PAS DÉCLENCHER quand : l'utilisateur crée une expérience (utiliser creating-experiments), configure le déploiement (utiliser configuring-experiment-rollout) ou paramètre les métriques (utiliser configuring-experiment-analytics).

npx skills add https://github.com/posthog/skills --skill managing-experiment-lifecycle

Gestion du cycle de vie des expériences

Cette compétence couvre les transitions d'état des expériences — ce que fait chaque action, quand l'utiliser et comment elle affecte l'assignation des variantes et l'analyse.

Diagramme d'état

draft ──launch──▶ running ──end──▶ stopped ──archive──▶ archived
                    │   ▲              │
                  pause resume    ship_variant
                    │   │         (also ends if running)
                    ▼   │
                  paused (flag inactive, still "running" status)

Any non-draft state ──reset──▶ draft

Actions et leurs implications

Pour chaque action, deux questions clés :

  1. Qui voit quelle variante ? (perspective utilisateur)
  2. Qui est dans mon analyse ? (perspective statistique)

Launch (experiment-launch)

Transition brouillon → en cours. Active le feature flag et définit start_date.

  • Préconditions : doit être en brouillon, le flag doit avoir ≥2 variantes avec "control" en premier
  • Checklist pré-lancement : au moins une métrique ? Variantes correctes ? Flag implémenté dans le code ?
  • Variantes : les utilisateurs commencent à être distribués entre les variantes selon la répartition configurée
  • Analyse : la collecte de données commence à partir de start_date

Aucun corps de requête nécessaire.

Pause (experiment-pause)

Désactive le feature flag. Les utilisateurs reviennent à l'expérience par défaut (généralement le contrôle).

  • Préconditions : doit être en cours et pas déjà en pause
  • Variantes : le flag n'est pas retourné par /decide — aucun nouvel événement d'exposition enregistré
  • Analyse : aucune nouvelle donnée pendant la pause, mais les données existantes sont conservées. L'expérience reste "en cours".

Aucun corps de requête. Utilisez experiment-resume pour réactiver.

Resume (experiment-resume)

Réactive le feature flag après une pause. Les utilisateurs sont redistribués de manière déterministe dans les mêmes variantes.

  • Préconditions : doit être en pause
  • Variantes : même assignation qu'avant la pause — bucketing déterministe
  • Analyse : le suivi des expositions reprend

Aucun corps de requête.

End (experiment-end)

Définit end_date et transition vers arrêté. Le feature flag n'est PAS modifié.

  • Préconditions : doit être en cours (lancé, pas déjà arrêté)
  • Variantes : les utilisateurs continuent à voir leurs variantes assignées (le flag reste actif)
  • Analyse : les résultats sont figés selon les données jusqu'à end_date

Corps optionnel : conclusion ("won", "lost", "inconclusive", "stopped_early", "invalid") et conclusion_comment.

Utilisez ceci quand vous voulez figer les résultats sans changer ce que voient les utilisateurs.

Ship variant (experiment-ship-variant)

Réécrit le feature flag pour que la variante sélectionnée soit servie à 100 % des utilisateurs.

  • Préconditions : doit être lancé (en cours ou arrêté). Impossible de pousser depuis le brouillon.
  • Variantes : TOUS les utilisateurs voient la variante poussée. Le flag est réécrit avec un groupe catch-all.
  • Analyse : si toujours en cours, l'expérience est aussi terminée (end_date défini)

Toujours confirmer avec l'utilisateur avant de pousser — cela réécrit définitivement le feature flag.

Obligatoire : variant_key (ex. "test"). Optionnel : conclusion, conclusion_comment.

Retourne 409 si une politique d'approbation nécessite un examen avant le changement de flag.

Archive (experiment-archive)

Masque une expérience arrêtée de la vue de liste par défaut.

  • Préconditions : doit être arrêté (end_date défini)
  • Variantes : aucun changement — le flag est inaffecté
  • Analyse : aucun changement — les résultats restent accessibles

Aucun corps de requête. Peut être restauré en définissant archived=false via experiment-update.

Reset (experiment-reset)

Retourne une expérience à l'état brouillon. Efface start_date, end_date, conclusion et archived.

  • Préconditions : ne doit pas déjà être en brouillon
  • Variantes : le flag est laissé inchangé — les utilisateurs continuent à voir leurs variantes assignées
  • Analyse : les données précédemment collectées existent toujours mais ne seront pas incluses dans les résultats à moins que start_date soit ajusté après un relancement

Aucun corps de requête.

Duplicate (experiment-duplicate)

Crée une copie en tant que nouveau brouillon avec des dates fraîches et aucun résultat.

Important : fournissez toujours une feature_flag_key unique différente de l'originale. Si la même clé est utilisée, les deux expériences partagent un flag — les changements dans l'une affectent l'autre.

Optionnel : name personnalisé (par défaut "Original Name (Copy)").

Cadre décisionnel

Situation Action Outil
Brouillon prêt, flag implémenté, métriques définies Launch experiment-launch
Clair gagnant, résultats significatifs Pousser la variante gagnante experiment-ship-variant
Pas de différence significative après suffisamment de temps End as inconclusive experiment-end
Quelque chose qui ne va pas, arrêter l'exposition temporairement Pause experiment-pause
Reprendre après une pause Resume experiment-resume
Expérience terminée, prêt à nettoyer Archive experiment-archive
Besoin de recommencer avec la même config Reset to draft experiment-reset
Veux une expérience similaire avec un nouveau départ Duplicate experiment-duplicate

Résolution des expériences

Toutes les actions du cycle de vie nécessitent un ID d'expérience. Si vous n'en avez pas, chargez la compétence finding-experiments pour résoudre la référence de l'utilisateur (nom, description, "latest", etc.) vers un ID concret avant de procéder.

Gestion des erreurs

Message d'erreur Signification
"Experiment has already been launched." Impossible de lancer une expérience en non-brouillon
"Experiment has not been launched yet." Impossible de terminer/mettre en pause/pousser un brouillon
"Experiment has already ended." Impossible de terminer/mettre en pause une expérience arrêtée
"Experiment is already paused." Utilisez resume à la place
"Experiment is not paused." C'est déjà actif
"Experiment is already in draft state." Rien à réinitialiser
"Experiment is already archived." C'est déjà fait

Quand vous recevez un 400, expliquez la situation à l'utilisateur plutôt que de réessayer.

Skills similaires