Retour au blog
Technical Specs

📋 User Stories Gherkin: Pourquoi 90% des devs les détestent

18 janvier 2025
7 min de lecture
Partager:
📋

Les user stories vagues frustrent tout le monde. Découvre comment le format Gherkin + test scenarios + edge cases change la donne.

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.

Charlia

Prêt à appliquer ces conseils ?

CharliA génère tout ce dont tu as besoin en 180 secondes

Essayer gratuitement