10 min lecture • Guide 57 of 877
Créer des User Stories Actionnables
Une user story bien écrite fait la différence entre un développeur posant des questions de clarification pendant des jours et démarrer un travail productif immédiatement. Ce guide couvre le framework complet pour créer des user stories vraiment actionnables—assez claires pour coder, assez petites pour compléter dans un sprint, et assez précieuses pour compter pour les utilisateurs.
L'Anatomie des Stories Actionnables
Ce qui rend une story actionnable:
| Élément | But | Exemple |
|---|---|---|
| Rôle utilisateur | Qui bénéficie | "En tant que chef de projet..." |
| Action | Ce qu'ils veulent faire | "...je veux exporter des rapports..." |
| Bénéfice | Pourquoi c'est important | "...pour partager le progrès avec les parties prenantes" |
| Critères acceptation | Définition de terminé | Déclarations Given/When/Then |
| Taille | Complétable dans sprint | 1-8 story points typiquement |
Le Format User Story
Template Standard
STRUCTURE USER STORY:
┌─────────────────────────────────────────────────────────────┐
│ TITRE: [Verbe] + [Objet] + [Contexte] │
│ Exemple: "Exporter Rapport Sprint en PDF" │
├─────────────────────────────────────────────────────────────┤
│ │
│ USER STORY: │
│ En tant que [type d'utilisateur], │
│ Je veux [effectuer action], │
│ Afin de [atteindre bénéfice]. │
│ │
│ EXEMPLE: │
│ En tant que chef de projet, │
│ Je veux exporter mon rapport sprint en PDF, │
│ Afin de pouvoir partager le progrès avec les parties │
│ prenantes qui n'ont pas accès à GitScrum. │
│ │
├─────────────────────────────────────────────────────────────┤
│ CRITÈRES D'ACCEPTATION: │
│ │
│ ✓ Étant donné que je suis sur la page Rapport Sprint │
│ Quand je clique "Exporter en PDF" │
│ Alors un PDF se télécharge avec toutes les données │
│ │
│ ✓ Étant donné que le rapport a des graphiques │
│ Quand j'exporte en PDF │
│ Alors les graphiques s'affichent correctement │
│ │
│ ✓ Étant donné que le sprint a 100+ tâches │
│ Quand j'exporte en PDF │
│ Alors l'export se termine en 30 secondes │
│ │
├─────────────────────────────────────────────────────────────┤
│ NOTES TECHNIQUES (optionnel): │
│ - Utiliser endpoint données rapport existant │
│ - Bibliothèque PDF: jsPDF ou similaire │
│ - Inclure logo entreprise des paramètres │
│ │
├─────────────────────────────────────────────────────────────┤
│ ESTIMATION: 5 story points │
│ PRIORITÉ: Moyenne │
│ LABELS: Feature, Rapports, Sprint-24 │
│ │
└─────────────────────────────────────────────────────────────┘
Les Critères INVEST
Évaluer la Qualité Story
CHECKLIST INVEST:
┌─────────────────────────────────────────────────────────────┐
│ I - INDÉPENDANTE │
├─────────────────────────────────────────────────────────────┤
│ Peut être développée sans dépendre d'autres stories │
│ │
│ ❌ MAL: "En tant qu'utilisateur, je veux que le bouton │
│ login fonctionne" (dépend du système auth, sessions...) │
│ │
│ ✅ BIEN: "En tant qu'utilisateur, je veux me connecter │
│ avec email/mot de passe" (feature complète, autonome) │
│ │
├─────────────────────────────────────────────────────────────┤
│ N - NÉGOCIABLE │
├─────────────────────────────────────────────────────────────┤
│ Détails peuvent être discutés et affinés avec l'équipe │
│ │
│ ❌ MAL: "Implémenter login exactement comme wireframe v2.3" │
│ (trop prescriptif, pas d'espace pour améliorer) │
│ │
│ ✅ BIEN: "Utilisateurs ont besoin d'accès sécurisé et rapide"│
│ (focalisé résultat, implémentation négociable) │
│ │
├─────────────────────────────────────────────────────────────┤
│ V - VALORISABLE │
├─────────────────────────────────────────────────────────────┤
│ Livre valeur à utilisateur ou business (pas juste technique)│
│ │
│ ❌ MAL: "Refactoriser pool connexions base de données" │
│ (tâche technique, pas de valeur utilisateur déclarée) │
│ │
│ ✅ BIEN: "Améliorer temps chargement de 3s à moins de 1s" │
│ (utilisateur expérimente chargement plus rapide) │
│ │
├─────────────────────────────────────────────────────────────┤
│ E - ESTIMABLE │
├─────────────────────────────────────────────────────────────┤
│ Équipe peut estimer effort avec confiance raisonnable │
│ │
│ ❌ MAL: "Intégrer avec analytics tiers" │
│ (trop vague - quel fournisseur? quelles données?) │
│ │
│ ✅ BIEN: "Envoyer événements page view à Google Analytics 4"│
│ (spécifique, périmètre connu) │
│ │
├─────────────────────────────────────────────────────────────┤
│ S - PETITE (Small) │
├─────────────────────────────────────────────────────────────┤
│ Complétable dans un seul sprint (idéalement 1-3 jours) │
│ │
│ ❌ MAL: "En tant qu'utilisateur, je veux dashboard complet" │
│ (trop grand - semaines de travail) │
│ │
│ ✅ BIEN: "En tant qu'utilisateur, je veux voir mon widget │
│ compteur tâches" (un composant, quelques jours) │
│ │
├─────────────────────────────────────────────────────────────┤
│ T - TESTABLE │
├─────────────────────────────────────────────────────────────┤
│ Critères clairs pour déterminer quand story est terminée │
│ │
│ ❌ MAL: "Rendre l'UI plus intuitive" │
│ (subjectif, pas de pass/fail clair) │
│ │
│ ✅ BIEN: "Utilisateur peut compléter checkout en 3 clics" │
│ (mesurable, vérifiable) │
│ │
└─────────────────────────────────────────────────────────────┘
Écrire Critères d'Acceptation
Format Given-When-Then
TEMPLATE CRITÈRES ACCEPTATION:
┌─────────────────────────────────────────────────────────────┐
│ STRUCTURE: │
│ │
│ Étant donné [précondition/contexte] │
│ Quand [action est effectuée] │
│ Alors [résultat attendu] │
│ │
├─────────────────────────────────────────────────────────────┤
│ EXEMPLE STORY: Reset Mot de Passe │
├─────────────────────────────────────────────────────────────┤
│ │
│ CHEMIN HEUREUX: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Étant donné que je suis sur la page login ││
│ │ Quand je clique "Mot de passe oublié" ││
│ │ Alors je vois formulaire pour entrer mon email ││
│ │ ││
│ │ Étant donné que j'ai entré mon email enregistré ││
│ │ Quand je clique "Envoyer lien reset" ││
│ │ Alors je vois message confirmation ││
│ │ Et je reçois email avec lien reset dans 2 minutes ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ CAS ERREUR: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Étant donné que j'entre email non enregistré ││
│ │ Quand je clique "Envoyer lien reset" ││
│ │ Alors je vois même confirmation (sécurité) ││
│ │ ││
│ │ Étant donné que j'ai lien reset vieux de 24+ heures ││
│ │ Quand je clique sur le lien ││
│ │ Alors je vois message "Lien expiré" ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Techniques Découpage Stories
Découpage Vertical
DÉCOUPER GRANDES STORIES:
┌─────────────────────────────────────────────────────────────┐
│ AVANT: Story taille épique (trop grande) │
├─────────────────────────────────────────────────────────────┤
│ │
│ "En tant qu'utilisateur, je veux gérer paramètres profil" │
│ Estimation: 40 points (beaucoup trop grand!) │
│ │
├─────────────────────────────────────────────────────────────┤
│ APRÈS: Tranches verticales (bonne taille) │
├─────────────────────────────────────────────────────────────┤
│ │
│ Story 1: Voir Profil (3 pts) │
│ "En tant qu'utilisateur, je veux voir mes infos profil" │
│ │
│ Story 2: Éditer Nom (2 pts) │
│ "En tant qu'utilisateur, je veux changer mon nom affiché" │
│ │
│ Story 3: Upload Avatar (5 pts) │
│ "En tant qu'utilisateur, je veux télécharger photo profil" │
│ │
│ Story 4: Changer Email (5 pts) │
│ "En tant qu'utilisateur, je veux changer email avec vérif" │
│ │
│ Story 5: Changer Mot de Passe (3 pts) │
│ "En tant qu'utilisateur, je veux changer mon mot de passe" │
│ │
│ TOTAL: 26 points en 7 stories │
│ Chaque story: Déployable, testable, précieuse │
│ │
└─────────────────────────────────────────────────────────────┘
Patterns de Découpage
PATTERNS DÉCOUPAGE STORIES:
┌─────────────────────────────────────────────────────────────┐
│ 1. PAR ÉTAPES WORKFLOW │
├─────────────────────────────────────────────────────────────┤
│ Original: "Processus checkout utilisateur" │
│ Découpage: │
│ ├── Ajouter articles au panier │
│ ├── Entrer adresse livraison │
│ ├── Sélectionner méthode livraison │
│ ├── Entrer infos paiement │
│ └── Revoir et confirmer │
│ │
├─────────────────────────────────────────────────────────────┤
│ 2. PAR OPÉRATIONS (CRUD) │
├─────────────────────────────────────────────────────────────┤
│ Original: "Gérer projets" │
│ Découpage: │
│ ├── Voir liste des projets │
│ ├── Créer nouveau projet │
│ ├── Éditer détails projet │
│ ├── Archiver projet │
│ └── Supprimer projet │
│ │
├─────────────────────────────────────────────────────────────┤
│ 3. PAR TYPES DE DONNÉES │
├─────────────────────────────────────────────────────────────┤
│ Original: "Importer données depuis fichier" │
│ Découpage: │
│ ├── Importer format CSV │
│ ├── Importer format Excel │
│ ├── Importer format JSON │
│ └── Importer depuis Google Sheets │
│ │
└─────────────────────────────────────────────────────────────┘
Anti-Patterns Communs
Stories à Éviter
ANTI-PATTERNS USER STORIES:
┌─────────────────────────────────────────────────────────────┐
│ ❌ TÂCHE TECHNIQUE DÉGUISÉE EN STORY │
├─────────────────────────────────────────────────────────────┤
│ │
│ MAL: "En tant que dev, je veux refactoriser module auth" │
│ │
│ PROBLÈME: Dev n'est pas utilisateur final, pas de valeur │
│ │
│ MIEUX: Découper en stories valorisables OU faire tâche: │
│ - Story: "En tant qu'utilisateur, je veux login plus rapide"│
│ - Tâche: "Refactoriser module auth (permet story vitesse)" │
│ │
├─────────────────────────────────────────────────────────────┤
│ ❌ FOCALISÉE SOLUTION (Pas problème) │
├─────────────────────────────────────────────────────────────┤
│ │
│ MAL: "En tant qu'utilisateur, je veux menu dropdown" │
│ │
│ PROBLÈME: Prescrit implémentation spécifique │
│ │
│ MIEUX: "En tant qu'utilisateur, je veux filtrer vite │
│ par catégorie pour trouver articles pertinents plus vite" │
│ │
├─────────────────────────────────────────────────────────────┤
│ ❌ MANQUE "AFIN DE" (Pas de déclaration valeur) │
├─────────────────────────────────────────────────────────────┤
│ │
│ MAL: "En tant qu'utilisateur, je veux exporter données" │
│ │
│ PROBLÈME: Pourquoi? Quel problème ça résout? │
│ │
│ MIEUX: "En tant que chef projet, je veux exporter données │
│ afin de créer rapports personnalisés dans Excel" │
│ │
└─────────────────────────────────────────────────────────────┘
Processus Affinage Story
Checklist Pré-Planification
DÉFINITION DE PRÊT:
┌─────────────────────────────────────────────────────────────┐
│ AVANT QU'UNE STORY ENTRE EN SPRINT PLANNING: │
├─────────────────────────────────────────────────────────────┤
│ │
│ ☐ USER STORY COMPLÈTE │
│ - Rôle utilisateur clair identifié │
│ - Action décrite (ce que utilisateur veut faire) │
│ - Valeur déclarée (pourquoi c'est important) │
│ │
│ ☐ CRITÈRES ACCEPTATION DÉFINIS │
│ - Chemin heureux couvert │
│ - Cas erreur identifiés │
│ - Cas limites considérés │
│ │
│ ☐ TAILLE APPROPRIÉE │
│ - Équipe a estimé (story points) │
│ - Rentre dans un seul sprint │
│ - Pas de dépendances inconnues │
│ │
│ ☐ DÉPENDANCES RÉSOLUES │
│ - Pas de travail bloquant d'autres équipes │
│ - APIs/services requis disponibles │
│ - Assets design/UX prêts │
│ │
│ ☐ QUESTIONS RÉPONDUES │
│ - Product owner a clarifié exigences │
│ - Spikes techniques complétés si nécessaire │
│ - Pas de questions ouvertes bloquant le démarrage │
│ │
└─────────────────────────────────────────────────────────────┘