Communitygithub.com

addyosmani/agent-skills

Prépare les lancements en production. À utiliser lors de la préparation d'un déploiement en production, ou pour savoir ce qui doit être en place avant de livrer. À utiliser lorsque vous avez besoin d'une liste de contrôle pré-lancement, de mettre en place une surveillance, de planifier un déploiement progressif, ou d'avoir une stratégie de rollback.

Qu'est-ce que agent-skills ?

Cette compétence fournit un guide complet et structuré pour les déploiements en production, en mettant l'accent sur la sécurité, l'observabilité et l'incrémentalité. Elle s'applique à tout développeur ou équipe utilisant des assistants IA (comme Claude Code, Cursor ou Codex) pour préparer une mise en production. La compétence détaille une checklist pré-lancement couvrant la qualité du code, la sécurité, les performances, l'accessibilité, l'infrastructure et la documentation. Elle inclut des stratégies de déploiement progressif (feature flags, canary, rollout graduel) avec des seuils de décision clairs (avancer, tenir, rollback) basés sur le taux d'erreur, la latence et les métriques métier. Elle propose également un plan de rollback détaillé, des recommandations de monitoring, et un concept de budget d'erreur (error budget) comme porte de libération objective. L'objectif est de transformer chaque déploiement en une opération réversible, observable et sûre, en évitant les rationalisations courantes et les drapeaux rouges (comme déployer sans plan de rollback ou un vendredi après-midi).

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/addyosmani/agent-skills/tree/main/skills/shipping-and-launch

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Livraison et Lancement

Aperçu

Livrez en toute confiance. L'objectif n'est pas seulement de déployer, mais de déployer en toute sécurité, avec une surveillance en place, un plan de rollback prêt et une compréhension claire de ce à quoi ressemble le succès. Chaque lancement doit être réversible, observable et incrémental.

Quand l'utiliser

  • Déploiement d'une fonctionnalité en production pour la première fois
  • Publication d'un changement significatif pour les utilisateurs
  • Migration de données ou d'infrastructure
  • Ouverture d'un programme bêta ou d'accès anticipé
  • Tout déploiement qui comporte des risques (ils en comportent tous)

La Liste de Contrôle Pré-Lancement

Qualité du Code

  • Tous les tests passent (unitaires, intégration, e2e)
  • La build réussit sans avertissements
  • Linting et vérification de types passent
  • Code relu et approuvé
  • Aucun commentaire TODO qui devrait être résolu avant le lancement
  • Aucune instruction console.log de débogage dans le code de production
  • La gestion des erreurs couvre les modes de défaillance attendus

Sécurité

  • Aucun secret dans le code ou le contrôle de version
  • L'audit des dépendances de l'écosystème (npm audit, pip-audit, cargo audit, ...) ne montre aucune vulnérabilité critique ou élevée
  • Validation des entrées sur tous les points de terminaison exposés aux utilisateurs
  • Vérifications d'authentification et d'autorisation en place
  • En-têtes de sécurité configurés (CSP, HSTS, etc.)
  • Limitation de débit sur les points de terminaison d'authentification
  • CORS configuré pour des origines spécifiques (pas de caractère générique)

Performances

  • Core Web Vitals dans les seuils "Bon"
  • Pas de requêtes N+1 dans les chemins critiques
  • Images optimisées (compression, tailles responsives, chargement différé)
  • Taille du bundle dans le budget
  • Les requêtes de base de données ont des index appropriés
  • Mise en cache configurée pour les actifs statiques et les requêtes répétées

Accessibilité

  • La navigation au clavier fonctionne pour tous les éléments interactifs
  • Le lecteur d'écran peut transmettre le contenu et la structure de la page
  • Le contraste des couleurs respecte WCAG 2.1 AA (4.5:1 pour le texte)
  • La gestion du focus est correcte pour les modales et le contenu dynamique
  • Les messages d'erreur sont descriptifs et associés aux champs du formulaire
  • Aucun avertissement d'accessibilité dans axe-core ou Lighthouse

Infrastructure

  • Variables d'environnement définies en production
  • Migrations de base de données appliquées (ou prêtes à être appliquées)
  • DNS et SSL configurés
  • CDN configuré pour les actifs statiques
  • Journalisation et signalement d'erreurs configurés
  • Point de terminaison de vérification de santé existe et répond

Documentation

  • README mis à jour avec les nouvelles exigences d'installation
  • Documentation de l'API à jour
  • ADR rédigés pour toute décision architecturale
  • Changelog mis à jour
  • Documentation destinée aux utilisateurs mise à jour (le cas échéant)

Stratégie de Feature Flag

Livrez derrière des feature flags pour découpler le déploiement de la publication :

// Vérification du feature flag
const flags = await getFeatureFlags(userId);

if (flags.taskSharing) {
  // Nouvelle fonctionnalité : partage de tâches
  return <TaskSharingPanel task={task} />;
}

// Comportement par défaut : comportement existant
return null;

Cycle de vie d'un feature flag :

1. DÉPLOYER avec le flag OFF     → Le code est en production mais inactif
2. ACTIVER pour l'équipe/bêta     → Tests internes dans l'environnement de production
3. DÉPLOIEMENT PROGRESSIF          → 5% → 25% → 50% → 100% des utilisateurs
4. SURVEILLER à chaque étape       → Surveiller les taux d'erreur, les performances, les retours utilisateurs
5. NETTOYER                        → Supprimer le flag et le code mort après le déploiement complet

Règles :

  • Chaque feature flag a un propriétaire et une date d'expiration
  • Nettoyez les flags dans les 2 semaines suivant le déploiement complet
  • N'imbriquez pas les feature flags (crée des combinaisons exponentielles)
  • Testez les deux états du flag (activé et désactivé) dans l'IC

Déploiement Progressif

La Séquence de Déploiement

1. DÉPLOYER sur staging
   └── Suite de tests complète dans l'environnement de staging
   └── Test manuel de vérification des flux critiques

2. DÉPLOYER en production (feature flag OFF)
   └── Vérifier que le déploiement a réussi (vérification de santé)
   └── Vérifier la surveillance des erreurs (aucune nouvelle erreur)

3. ACTIVER pour l'équipe (flag ON pour les utilisateurs internes)
   └── L'équipe utilise la fonctionnalité en production
   └── Fenêtre de surveillance de 24 heures

4. DÉPLOIEMENT CANARY (flag ON pour 5% des utilisateurs)
   └── Surveiller les taux d'erreur, la latence, le comportement des utilisateurs
   └── Comparer les métriques : canary vs. ligne de base
   └── Fenêtre de surveillance de 24 à 48 heures
   └── Avancer uniquement si tous les seuils sont respectés (voir tableau ci-dessous)

5. AUGMENTATION PROGRESSIVE (25% -> 50% -> 100%)
   └── Même surveillance à chaque étape
   └── Possibilité de revenir au pourcentage précédent à tout moment

6. DÉPLOIEMENT COMPLET (flag ON pour tous les utilisateurs)
   └── Surveiller pendant 1 semaine
   └── Nettoyer le feature flag

Seuils de Décision de Déploiement

Utilisez ces seuils pour décider d'avancer, de maintenir ou de revenir en arrière à chaque étape :

MétriqueAvancer (vert)Maintenir et enquêter (jaune)Revenir en arrière (rouge)
Taux d'erreurDans les 10% de la ligne de base10 à 100% au-dessus de la ligne de base>2x la ligne de base
Latence P95Dans les 20% de la ligne de base20 à 50% au-dessus de la ligne de base>50% au-dessus de la ligne de base
Erreurs JS côté clientAucun nouveau type d'erreurNouvelles erreurs à <0,1% des sessionsNouvelles erreurs à >0,1% des sessions
Métriques métierNeutre ou positifBaisse <5% (peut être du bruit)Baisse >5%

Quand Revenir en Arrière

Revenez en arrière immédiatement si :

  • Le taux d'erreur augmente de plus de 2x la ligne de base
  • La latence P95 augmente de plus de 50%
  • Les problèmes signalés par les utilisateurs augmentent
  • Des problèmes d'intégrité des données sont détectés
  • Une vulnérabilité de sécurité est découverte

Surveillance et Observabilité

Ce qu'il faut Surveiller

Métriques applicatives :
├── Taux d'erreur (total et par point de terminaison)
├── Temps de réponse (p50, p95, p99)
├── Volume de requêtes
├── Utilisateurs actifs
└── Métriques métier clés (conversion, engagement)

Métriques d'infrastructure :
├── Utilisation du CPU et de la mémoire
├── Utilisation du pool de connexions à la base de données
├── Espace disque
├── Latence réseau
└── Profondeur de la file d'attente (le cas échéant)

Métriques client :
├── Core Web Vitals (LCP, INP, CLS)
├── Erreurs JavaScript
├── Taux d'erreur d'API du point de vue client
└── Temps de chargement de la page

Signalement d'Erreurs

// Mettre en place une boundary d'erreur avec signalement
class ErrorBoundary extends React.Component {
  componentDidCatch(error: Error, info: React.ErrorInfo) {
    // Signaler au service de suivi des erreurs
    reportError(error, {
      componentStack: info.componentStack,
      userId: getCurrentUser()?.id,
      page: window.location.pathname,
    });
  }

  render() {
    if (this.state.hasError) {
      return <ErrorFallback onRetry={() => this.setState({ hasError: false })} />;
    }
    return this.props.children;
  }
}

// Signalement d'erreurs côté serveur
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
  reportError(err, {
    method: req.method,
    url: req.url,
    userId: req.user?.id,
  });

  // Ne pas exposer les détails internes aux utilisateurs
  res.status(500).json({
    error: { code: 'INTERNAL_ERROR', message: 'Une erreur est survenue' },
  });
});

Vérification Post-Lancement

Dans la première heure après le lancement :

1. Vérifier que le point de terminaison de santé renvoie 200
2. Vérifier le tableau de bord de surveillance des erreurs (aucun nouveau type d'erreur)
3. Vérifier le tableau de bord de latence (aucune régression)
4. Tester manuellement le flux utilisateur critique
5. Vérifier que les journaux circulent et sont lisibles
6. Confirmer que le mécanisme de rollback fonctionne (essai à sec si possible)

Porte de Libération par Budget d'Erreur

Le budget d'erreur de votre service (la fraction de requêtes ou de temps que votre SLO autorise à échouer) détermine s'il est sûr de livrer. Utilisez-le comme une porte objective, pas une négociation :

Budget restant > 20%  →  Livrer normalement ; surveiller attentivement
Budget restant 0–20%  →  Déploiements lents uniquement ; pas de changements à haut risque
Budget épuisé         →  Geler le travail sur les fonctionnalités ; se concentrer uniquement sur la fiabilité
Budget réinitialisé   →  Reprendre le rythme normal ; intégrer le correctif qui l'a récupéré

Un taux de consommation élevé pendant un canary (consommant le budget plus rapidement que le rythme de base) est un signal de maintien dans le tableau des seuils de déploiement ci-dessus — traitez-le comme un taux d'erreur élevé.

Stratégie de Rollback

Chaque déploiement a besoin d'un plan de rollback avant d'avoir lieu :

## Plan de Rollback pour [Fonctionnalité/Lancement]

### Conditions de Déclenchement
- Taux d'erreur > 2x ligne de base
- Latence P95 > [X]ms
- Signalements d'utilisateurs de [problème spécifique]

### Étapes de Rollback
1. Désactiver le feature flag (si applicable)
   OU
1. Déployer la version précédente : `git revert <commit> && git push`
2. Vérifier le rollback : vérification de santé, surveillance des erreurs
3. Communiquer : notifier l'équipe du rollback

### Considérations sur la Base de Données
- La migration [X] a un rollback : `npx prisma migrate rollback`
- Données insérées par la nouvelle fonctionnalité : [conservées / nettoyées]

### Délai de Rollback
- Feature flag : < 1 minute
- Redéploiement de la version précédente : < 5 minutes
- Rollback de base de données : < 15 minutes

Voir Aussi

  • Pour la Définition de Fini à l'échelle du projet que chaque changement doit respecter avant cette checklist, voir ../../references/definition-of-done.md
  • Pour les vérifications de sécurité pré-lancement, voir ../../references/security-checklist.md
  • Pour la checklist de performances pré-lancement, voir ../../references/performance-checklist.md
  • Pour la vérification de l'accessibilité avant le lancement, voir ../../references/accessibility-checklist.md
  • Pour les règles d'alerte et les seuils liés au SLO, voir observability-and-instrumentation

Rationalisations Courantes

RationalisationRéalité
"Ça marche en staging, ça marchera en production"La production a des données, des modèles de trafic et des cas limites différents. Surveiller après le déploiement.
"Nous n'avons pas besoin de feature flags pour ça"Chaque fonctionnalité bénéficie d'un interrupteur d'arrêt d'urgence. Même les changements "simples" peuvent casser des choses.
"La surveillance, c'est de la surcharge"Ne pas avoir de surveillance, c'est découvrir les problèmes par les plaintes des utilisateurs au lieu des tableaux de bord.
"Nous ajouterons la surveillance plus tard"Ajoutez-la avant le lancement. Vous ne pouvez pas déboguer ce que vous ne pouvez pas voir.
"Revenir en arrière, c'est admettre un échec"Revenir en arrière, c'est de l'ingénierie responsable. Livrer une fonctionnalité cassée, c'est l'échec.
"Le taux d'erreur a l'air correct, continuons à livrer"Vérifiez le taux de consommation, pas seulement le taux d'erreur actuel. Consommer le budget plus rapidement que la ligne de base est un signal de maintien, même si les seuils individuels sont verts.

Drapeaux Rouges

  • Déployer sans plan de rollback
  • Aucune surveillance ou signalement d'erreurs en production
  • Lancements big-bang (tout à la fois, sans staging)
  • Feature flags sans date d'expiration ni propriétaire
  • Personne ne surveille le déploiement pendant la première heure
  • Configuration de l'environnement de production faite de mémoire, pas par code
  • "C'est vendredi après-midi, livrons-le"
  • Budget d'erreur épuisé mais le travail sur les fonctionnalités continue inchangé

Vérification

Avant de déployer :

  • Checklist pré-lancement complétée (toutes les sections vertes)
  • Feature flag configuré (si applicable)
  • Plan de rollback documenté
  • Tableaux de bord de surveillance mis en place
  • Équipe notifiée du déploiement

Après le déploiement :

  • La vérification de santé renvoie 200
  • Le taux d'erreur est normal
  • La latence est normale
  • Le flux utilisateur critique fonctionne
  • Les journaux circulent
  • Rollback testé ou vérifié prêt

Pour chaque service livré :

  • Politique de budget d'erreur en place : savoir quelle action entreprendre lorsque le budget descend en dessous de 20 % et lorsqu'il est épuisé

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

addyosmani/agent-skills

Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints, defining type contracts between modules, or establishing boundaries between frontend and backend.

addyosmani/agent-skills

Builds production-quality, accessible, responsive user-facing UIs. Use when building or modifying interfaces and pages, creating components, implementing layouts, meeting WCAG accessibility requirements, managing state, or when the output needs to look and feel production-quality rather than AI-generated.

addyosmani/browser-testing-with-devtools

Tests in real browsers via Chrome DevTools MCP. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM, capture console errors, analyze network requests, profile performance, or verify visual output with real runtime data. Requires the chrome-devtools MCP server to be configured.

addyosmani/ci-cd-and-automation

Automates CI/CD pipeline setup. Use when setting up or modifying build and deployment pipelines. Use when you need to automate quality gates, configure test runners in CI, or establish deployment strategies.

addyosmani/code-review-and-quality

Conducts multi-axis code review. Use before merging any change. Use when reviewing code written by yourself, another agent, or a human. Use when you need to assess code quality across multiple dimensions before it enters the main branch.

addyosmani/code-simplification

Simplifies code for clarity. Use when refactoring code for clarity without changing behavior. Use when code works but is harder to read, maintain, or extend than it should be. Use when reviewing code that has accumulated unnecessary complexity.

addyosmani/constraint-driven-development

Establishes a project's quality bar as a written contract and stops agents quietly lowering it. Interviews the user on which dimensions matter, supplies sane default thresholds when they have no number in mind, records everything in CONSTRAINTS.md, and watches the diff for a weakened bar — new @ts-ignore or eslint-disable suppressions, skipped or deleted tests, assertions stripped out, unimplemented stubs, thresholds edited down. Use when no quality bar is written down, when the user says "set up constraints" or "define our standards", when the user wants dimensions they care about — accessibility, web performance, coverage — set up as enforced constraints, when an agent keeps silencing checks or skipping tests to get to green, when you need a coverage or performance threshold and don't know what number to pick, or when an agent writes more code than anyone will read.

addyosmani/debugging-and-error-recovery

Guides systematic root-cause debugging. Use when tests fail, builds break, behavior doesn't match expectations, or you encounter any unexpected error. Use when you need a systematic approach to finding and fixing the root cause rather than guessing.

addyosmani/deprecation-and-migration

Manages deprecation and migration. Use when removing old systems, APIs, or features. Use when migrating users from one implementation to another. Use when deciding whether to maintain or sunset existing code.

addyosmani/documentation-and-adrs

Records decisions and documentation. Use when making architectural decisions, changing public APIs, shipping features, or when you need to record context that future engineers and agents will need to understand the codebase.

addyosmani/doubt-driven-development

Subjects every non-trivial decision to a fresh-context adversarial review before it stands. Use when correctness matters more than speed, when working in unfamiliar code, when stakes are high (production, security-sensitive logic, irreversible operations), or any time a confident output would be cheaper to verify now than to debug later.

addyosmani/git-workflow-and-versioning

Structures git workflow practices. Use when making any code change. Use when committing, branching, resolving conflicts, or when you need to organize work across multiple parallel streams.

addyosmani/idea-refine

Refines raw ideas into sharp, actionable concepts through structured divergent and convergent thinking. Use when an idea is still vague, when you need to stress-test assumptions before committing to a plan, or when you want to expand options before converging on one. Triggers on "ideate", "refine this idea", or "stress-test my plan".

addyosmani/incremental-implementation

Delivers changes incrementally. Use when implementing any feature or change that touches more than one file. Use when you're about to write a large amount of code at once, or when a task feels too big to land in one step.

addyosmani/interview-me

Extracts what the user actually wants instead of what they think they should want. Achieves this through one-question-at-a-time interview until ~95% confidence about the underlying intent. Use when an ask is underspecified ("build me X" without "for whom" or "why now"), when the user explicitly invokes ("interview me", "grill me", "are we sure?", "stress-test my thinking"), or when you catch yourself silently filling in ambiguous requirements before any plan, spec, or code exists.

addyosmani/observability-and-instrumentation

Instruments code so production behavior is visible and diagnosable. Use when adding logging, metrics, tracing, or alerting. Use when shipping any feature that runs in production and you need evidence it works. Use when production issues are reported but you can't tell what happened from the available data.

addyosmani/performance-optimization

Optimizes application performance. Use when performance requirements exist, when you suspect performance regressions, or when Core Web Vitals or load times need improvement. Use when profiling reveals bottlenecks that need fixing.

addyosmani/planning-and-task-breakdown

Breaks work into ordered tasks. Use when you have a spec or clear requirements and need to break work into implementable tasks. Use when a task feels too large to start, when you need to estimate scope, or when parallel work is possible.

addyosmani/security-and-hardening

Hardens code against vulnerabilities. Use when handling user input, authentication, data storage, or external integrations. Use when building any feature that accepts untrusted data, manages user sessions, or interacts with third-party services.

addyosmani/source-driven-development

Grounds every implementation decision in official documentation. Use when you want authoritative, source-cited code free from outdated patterns. Use when building with any framework or library where correctness matters.

Skills associés