La user story qui a tout cassé
Il y a 3 ans, je travaillais sur un SaaS de gestion de stock. Le PM avait écrit cette user story :
US-42: "En tant qu'utilisateur, je veux filtrer mes produits pour trouver facilement ce que je cherche."
Le dev a passé 2 semaines à build une feature magnifique : filtres par catégorie, prix, date, couleur...
Le jour du review, le PM :
"Euh... je voulais juste une search bar. Pas tout ça."
Résultat :
- ✗ 2 semaines perdues
- ✗ Dev frustré ("pourquoi tu m'as pas dit clairement ?")
- ✗ PM frustré ("j'ai écrit une user story, t'avais qu'à lire !")
- ✗ Feature à refaire from scratch
Le problème : Les user stories sont trop vagues
La structure standard des user stories, c'est ça :
En tant que [rôle],
Je veux [action],
Afin de [bénéfice].
C'est joli sur le papier, mais ça laisse 1000 questions sans réponse :
- 🤔 Comment ça marche exactement ?
- 🤔 Qu'est-ce qui se passe si l'utilisateur fait X ?
- 🤔 Quels sont les edge cases ?
- 🤔 Comment je teste ça ?
La solution : Format Gherkin + 5 sections révolutionnaires
Voici la structure qu'on utilise chez CharliA (inspirée de ce que j'ai vu chez Google/Spotify) :
Structure User Story v2.2 (RÉVOLUTIONNAIRE)
1. User Story classique
US-42: Filtrer produits par catégorie
En tant que gérant de boutique,
Je veux filtrer mes produits par catégorie,
Afin de retrouver rapidement un produit spécifique.
2. Gherkin (Given/When/Then)
Given je suis sur la page "Produits"
When je sélectionne la catégorie "Électronique"
Then seuls les produits de catégorie "Électronique" sont affichés
And le compteur affiche "23 produits trouvés"
3. Test Scenarios (3-5 tests)
✓ Test 1: Filtrer par 1 catégorie → affiche uniquement cette catégorie
✓ Test 2: Filtrer par catégorie vide → message "Aucun produit dans cette catégorie"
✓ Test 3: Combiner filtres catégorie + prix → intersection des 2 filtres
✓ Test 4: Reset filtres → retour liste complète
4. Edge Cases (4-6 cas limites)
⚠️ Edge 1: Catégorie supprimée pendant que filtre actif → afficher erreur graceful
⚠️ Edge 2: 10,000+ produits dans catégorie → pagination automatique (50/page)
⚠️ Edge 3: Caractères spéciaux dans nom catégorie → sanitize input
⚠️ Edge 4: Offline mode → cache derniers filtres, sync au retour online
5. Tech Hints (Indices implémentation)
💡 Frontend: React Query pour cache + URL params pour persistance filtres
💡 Backend: Indexed DB query sur category_id (already indexed)
💡 Performance: Debounce 300ms si filtres multiples
💡 Accessibility: aria-label sur dropdowns, keyboard navigation (Tab + Enter)
Avant/Après : La différence qui change tout
❌ User Story AVANT (classique)
US-42: Filtrer produits
"En tant qu'utilisateur, je veux filtrer mes produits pour retrouver ce que je cherche."
Problèmes :
- • Quels filtres exactement ?
- • Comment ça marche si catégorie vide ?
- • Comment je teste ?
- • Quid de la perf si 10K produits ?
✅ User Story APRÈS (v2.2)
US-42: Filtrer produits par catégorie
Structure complète : Gherkin + 4 test scenarios + 4 edge cases + tech hints (React Query, indexed DB)
Résultats :
- ✓ Dev sait exactement quoi build
- ✓ Test scenarios = tests auto prêts
- ✓ Edge cases couverts dès le début
- ✓ Tech hints = pas de mauvaises décisions archi
Impact réel : -50% bugs, -30% dev time
Depuis qu'on utilise ce format chez mes clients, voici les métriques :
- 📉 -50% de bugs en prod (edge cases anticipés dès les specs)
- ⚡ -30% de dev time (dev ne perd pas de temps à deviner)
- 🎯 100% d'alignement PM/Dev/QA (tout le monde lit la même chose)
- 🧪 Tests auto écrits en 10 min (scenarios = tests Cypress direct)
Comment CharliA génère ces user stories
CharliA ne génère pas des user stories vagues. Chaque user story suit ce format v2.2 :
- ✅ Gherkin automatique (Given/When/Then/And)
- ✅ 3-5 test scenarios par user story
- ✅ 4-6 edge cases anticipés (offline, perf, erreurs...)
- ✅ Tech hints adaptés à ton stack (React, Vue, Angular...)
- ✅ Acceptance criteria mesurables
Template : Copie-colle ce format maintenant
US-[ID]: [Titre court de la feature]
📝 User Story
En tant que [rôle],
Je veux [action],
Afin de [bénéfice mesurable].
🥒 Gherkin
Given [contexte initial]
When [action utilisateur]
Then [résultat attendu]
And [résultat secondaire]
🧪 Test Scenarios
1. [Scénario nominal - happy path]
2. [Scénario avec données manquantes]
3. [Scénario avec données invalides]
4. [Scénario de performance (1000+ items)]
⚠️ Edge Cases
1. [Cas limite réseau/offline]
2. [Cas limite données (null, empty, huge)]
3. [Cas limite permissions]
4. [Cas limite concurrence/race conditions]
💡 Tech Hints
- Frontend: [Lib/pattern recommandé]
- Backend: [API endpoint + méthode]
- DB: [Query optimization]
- Perf: [Cache, debounce, lazy load...]
- A11y: [ARIA labels, keyboard nav]
✅ Acceptance Criteria
- [ ] Tous les test scenarios passent
- [ ] Edge cases couverts
- [ ] Tests E2E écrits (Cypress/Playwright)
- [ ] Performance <200ms (p95)
- [ ] Accessibility score >90 (Lighthouse)
Action item : Réécris 1 user story maintenant
Choisis la user story la plus vague de ton backlog. Celle qui fait dire "WTF" à ton dev.
Réécris-la avec ce format. Ajoute Gherkin, test scenarios, edge cases, tech hints.
Montre-la à ton dev. Il va t'aimer. Promis.