Un hotfix est une correction urgente d’un bug critique en production, effectuée en dehors du cycle de release normal. Contrairement à un release planifié, un hotfix saute certaines étapes de QA et de test pour livrer la correction aux utilisateurs dans les plus brefs délais. Selon le Guide de flux de travail Git d’Atlassian, une branche hotfix est créée à partir du dernier tag de release, et après application elle est fusionnée dans main et develop. Le processus hotfix comprend un ensemble minimal de vérifications suffisant pour garantir l’absence de régression.
Points clés
Un hotfix (correction à chaud) est un patch pour la version de production d’une application, publié hors file d’attente pour corriger un problème critique. Un hotfix est livré aux utilisateurs en heures, pas en jours, et est destiné uniquement aux situations où l’application est indisponible, perd des données ou compromet la sécurité des utilisateurs.
Scénarios typiques pour un hotfix : crash au démarrage sur certains appareils (régression après le dernier release), fuite de données personnelles due à une autorisation incorrecte, intégration de paiement cassée (perte de revenus), violations de conformité GDPR/CCPA. Toutes ces situations ont une sévérité P0 ou P1 dans la classification des incidents. Les tâches planifiées — optimisation, refactoring, nouveaux écrans — ne sont jamais effectuées via un hotfix.
Règle importante : un hotfix contient un nombre minimal de modifications (1–2 fichiers, 10–20 lignes de code). Plus le diff est petit, plus le risque d’introduire un nouveau bug est faible. Si la correction du problème nécessite de changer l’architecture ou d’ajouter un nouveau module — ce n’est pas un hotfix, mais un release d’urgence qui nécessite une revue de code complète et de la QA.
Les principales différences entre un hotfix et un release planifié sont la vitesse, l’étendue des modifications et le niveau de test. Un release planifié peut inclure des dizaines de fonctionnalités, passer par un cycle QA complet (tests de régression + intégration + UI) et prendre 1 à 2 semaines du gel du code au déploiement. Un hotfix inclut une ou deux corrections, passe par une revue accélérée (2 approbations au lieu de 3) et des tests smoke minimaux.
Du point de vue du processus Git, un hotfix est créé à partir d’un tag de release, pas de la branche develop. Cela garantit que seules les modifications nécessaires pour corriger le problème sont incluses dans le hotfix, sans incorporer accidentellement des fonctionnalités inachevées de develop. Après le déploiement, le hotfix est fusionné dans main et develop (via cherry-pick ou merge).
| Critère | Release planifié | Hotfix |
|---|---|---|
| Périmètre | Multiples fonctionnalités et corrections de bugs | 1–2 corrections critiques |
| Branche | Branche release depuis develop | Branche hotfix depuis tag de release |
| Revue de code | 3 approbations, processus complet | 2 approbations, fast-track |
| QA | Suite de régression complète | Test smoke + zone affectée |
| Temps de déploiement | 1–4 semaines | 1–24 heures |
| Rollback | Via commit de réversion | Via reconstruction du tag précédent |
Important : ce n’est pas toute tâche urgente qui est un hotfix. Si un manager dit « nous devons ajouter un bouton de toute urgence » — ce n’est pas un hotfix, c’est un changement de priorité. Un véritable hotfix est déterminé par la sévérité pour l’utilisateur, pas par l’urgence pour l’entreprise. Le critère : si l’application ne plante pas et que les données ne fuient pas — la tâche attend un release planifié.
La première étape lors de la découverte d’un problème critique est le triage — une évaluation rapide de la sévérité. L’ingénieur d’astreinte confirme le bug, vérifie les logs et les rapports de crash, et détermine si le problème est une régression du dernier release ou un bug ancien. Si la sévérité est P0 — le pipeline hotfix est déclenché. L’étape de triage ne devrait pas prendre plus de 15 minutes.
La deuxième étape — créer une branche à partir du dernier tag de release (v2.5.0 → hotfix/v2.5.1). Le développeur apporte la correction minimale, commit avec le préfixe HOTFIX dans le message, push et ouvre une PR avec le label [HOTFIX]. Revue de code fast-track : deux relecteurs sont assignés automatiquement via CODEOWNERS, temps de revue — 30 minutes maximum. Si aucune revue n’est faite en 20 minutes — le relecteur est ignoré et le suivant est assigné.
La troisième étape — build et déploiement via CI/CD. Le pipeline hotfix diffère du normal : les longs tests d’intégration (qui prennent des heures) sont sautés, seule la suite smoke est exécutée (10–15 scénarios critiques, 5–10 minutes). Après le déploiement : surveillance du taux de crash, taux d’erreur, latence de l’API — pendant 30 minutes. Métriques DORA pour les hotfix : le temps moyen de récupération (MTTR) doit être inférieur à 1 heure.
# .github/workflows/hotfix-deploy.yml
name: Hotfix Deploy Pipeline
on:
pull_request:
types: [labeled]
branches: [hotfix/*]
jobs:
hotfix-checks:
runs-on: ubuntu-latest
if: contains(github.event.label.name, 'hotfix-critical')
steps:
- uses: actions/checkout@v4
- name: Validate diff size
run: bash .github/scripts/diff-check.sh 30
- name: Build
run: ./gradlew assembleRelease
- name: Smoke test
run: ./gradlew smokeTest
- name: Deploy to staging
run: fastlane deploy_staging
- name: Approve & deploy to production
if: success()
run: fastlane deploy_production
env:
HOTFIX_MODE: true
Optimisations clés dans ce pipeline : vérification du diff (pas plus de 30 lignes), saut des tests d’intégration, déploiement automatique sur staging et production si le test smoke réussit. HOTFIX_MODE variable d’environnement qui active des vérifications supplémentaires au moment de l’exécution — par exemple, une journalisation étendue pour un diagnostic rapide des problèmes.
La stratégie de travail avec les branches hotfix est décrite dans Gitflow Workflow. La règle principale : une branche hotfix est créée à partir du dernier tag de release (git checkout -b hotfix/v2.5.1 tags/v2.5.0), pas de develop ou main. Cela garantit que le hotfix est basé sur le même état de code actuellement en production et ne tire pas de modifications inachevées de develop.
Une fois la correction terminée, la branche hotfix est fusionnée dans main (ou master) et develop. Dans main — un commit de fusion normal avec un nouveau tag de patch (v2.5.1). Dans develop — une fusion ou un cherry-pick, selon la politique de l’équipe. Si develop contient plus de modifications que main, il est recommandé de cherry-picker le commit hotfix spécifique pour éviter les conflits. GitFlow recommande de fusionner d’abord le hotfix dans main, puis de fusionner main dans develop.
# Créer une branche hotfix depuis le dernier tag de release
git checkout -b hotfix/v2.5.1 tags/v2.5.0
# Appliquer la correction
git commit -m "HOTFIX: Fix crash on Android 14 notification permission"
# Fusionner dans main et taguer le release
git checkout main
git merge --no-ff hotfix/v2.5.1
git tag -a v2.5.1 -m "Hotfix release v2.5.1"
# Fusionner également dans develop
git checkout develop
git merge --no-ff hotfix/v2.5.1
# Nettoyer la branche temporaire
git branch -d hotfix/v2.5.1
Important : si le hotfix corrige un bug existant dans la branche develop actuelle (le bug a été introduit plusieurs sprints auparavant), alors après avoir fusionné le hotfix dans main et develop, develop contient déjà la correction. Si le bug n’a été introduit que dans la branche de release (une erreur accumulée via cherry-pick), alors la correction peut ne pas être nécessaire dans develop. L’analyse des causes profondes aide à déterminer si un cherry-pick dans develop est nécessaire.
Le principal risque d’un hotfix est d’introduire un nouveau bug plus grave à cause de la précipitation. Selon une étude de Stripe (2021), 15% des hotfix provoquent une régression et nécessitent un second hotfix. C’est la loi de l’ironie : plus vite on corrige, plus la probabilité de se tromper est élevée. La minimisation des risques est obtenue par une limitation stricte de la taille du diff (pas plus de 30 lignes) et des tests smoke automatisés obligatoires.
Le deuxième risque — l’accumulation de dette technique. Si une équipe utilise régulièrement des hotfix au lieu de releases planifiés, la base de code se dégrade : les commits hotfix ne passent pas par du refactoring, les solutions temporaires ne sont pas remplacées par des solutions appropriées, la documentation n’est pas mise à jour. Bilan de santé : si les hotfix sont publiés plus d’une fois par mois — le processus de release nécessite une révision.
Le troisième risque est psychologique. Les hotfix réguliers épuisent l’équipe : les développeurs d’astreinte sont en stress constant, la revue de code devient une formalité (tout le monde veut aller plus vite) et la culture qualité decline. Une fréquence normale de hotfix pour une équipe mature est de 1–2 par trimestre. Si plus — le problème n’est pas dans les hotfix, mais dans la qualité des releases planifiés.
Après le déploiement d’un hotfix et la stabilisation des métriques, une rétrospective post-mortem sans blâme est menée. L’équipe répond à quatre questions : que s’est-il passé, pourquoi les vérifications n’ont-elles pas attrapé le bug, qu’a-t-on fait pour le corriger et comment éviter qu’il ne se reproduise. Le post-mortem est mené dans les 24–48 heures suivant le hotfix, pendant que les détails sont encore frais. La culture sans blâme est un principe clé : on discute des processus, pas des personnes.
Le résultat du post-mortem est des actions concrètes avec des responsables et des échéances. Actions typiques : ajouter un test unitaire pour le cas manqué, élargir la suite de tests smoke, améliorer la surveillance (ajouter une alerte sur la métrique), mettre à jour le runbook pour des incidents similaires. Les actions doivent être terminées avant le prochain release planifié.
Questions fréquemment posées
Pas tout à fait. Un patch release est une livraison planifiée de petites corrections selon un calendrier régulier. Un hotfix est une correction d’urgence en dehors du calendrier. Le patch release passe par un cycle QA complet, le hotfix par un cycle raccourci. Mais techniquement, les deux peuvent utiliser un incrément de version de patch (v2.5.0 → v2.5.1).
Non, un hotfix est toujours enregistré dans Git pour la traçabilité. L’exception est une correction d’urgence au niveau de la configuration (feature flag, remote config) qui ne nécessite pas de modification de code. Chaque hotfix doit être lié à un commit avec un message clair et référencé dans le ticket d’incident.
Pour iOS, un hotfix via App Review prend 1 à 24 heures (une révision accélérée est possible). Pour Android — 1 à 4 heures via Google Play Console. Le temps de déploiement dépend de la politique du store et de la disponibilité d’un processus de révision d’urgence.
La décision est prise par l’ingénieur d’astreinte sur la base des critères de sévérité. Si la sévérité est P0 — le hotfix est lancé sans approbations supplémentaires. P1 — nécessite l’approbation du responsable technique. Autonomisation de l’équipe : l’ingénieur d’astreinte a l’autorité de lancer un hotfix sans bureaucratie.
Pour une équipe mature — 1–2 hotfix par trimestre. Une fréquence supérieure à une fois par mois signale des problèmes dans le processus QA, une couverture de test insuffisante ou une stratégie de release incorrecte. La fréquence normale de hotfix est un KPI de la qualité du processus de développement.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi