Section 11.5.1 : Méthodologie Agile pour débutants
🎯 Objectif pédagogique
Maîtriser les fondamentaux de l'Agile (Scrum) pour organiser un projet tech : sprints, user stories, backlog, daily standup, et rétrospective. Vous serez capable de planifier et exécuter un projet en mode Agile.
Pourquoi Agile ? Parce que le Waterfall échoue
Marc a travaillé en finance avec la méthode classique : plan complet → exécution → livraison. En tech, ça ne marche pas. Les exigences changent, les bugs surviennent, les priorités évoluent. Agile est la réponse : travailler en cycles courts, livrer souvent, s'adapter.
Scrum en 5 minutes
SCRUM — Le framework Agile le plus utilisé
RÔLES :
├── Product Owner : définit QUOI construire (priorités)
├── Scrum Master : s'assure que le processus fonctionne
└── Dev Team : construit le produit
→ Pour un projet solo, VOUS êtes les trois !
ARTEFACTS :
├── Product Backlog : liste de TOUT ce qu'il faut faire
├── Sprint Backlog : ce qu'on fait CETTE semaine
└── Increment : le produit livré à la fin du sprint
CÉRÉMONIES :
├── Sprint Planning : choisir quoi faire cette semaine
├── Daily Standup : 5 min chaque jour — qu'ai-je fait ? que vais-je faire ? suis-je bloqué ?
├── Sprint Review : montrer ce qui est fait
└── Sprint Retrospective : qu'est-ce qu'on améliore ?
SPRINT = cycle de 1-2 semaines → livrable fonctionnel à chaque fin de sprint
User Stories — Exprimer les besoins
Format : "En tant que [rôle], je veux [action] pour [bénéfice]"
Exemples pour le projet final :
- "En tant qu'utilisateur, je veux poser une question au chatbot pour obtenir des conseils"
- "En tant qu'utilisateur, je veux voir les offres d'emploi recommandées pour trouver un poste"
- "En tant qu'admin, je veux voir les analytics pour améliorer le service"
Critères d'acceptation (DoD - Definition of Done) :
- Le code est écrit et fonctionne
- Les tests passent
- L'interface est utilisable
- Le code est sur GitHub
Product Backlog du projet final
BACKLOG — Projet intégré (classé par priorité)
🔴 MUST HAVE (Sprint 1-2)
├── US01 : Chat conversationnel fonctionnel
├── US02 : Base de connaissances RAG indexée
├── US03 : Interface Streamlit basique
├── US04 : Guardrails de sécurité
└── US05 : Déploiement sur Streamlit Cloud
🟡 SHOULD HAVE (Sprint 3)
├── US06 : Function calling (3 outils)
├── US07 : Mémoire de conversation (résumé)
├── US08 : Dashboard usage (metrics)
└── US09 : Upload de CV
🟢 NICE TO HAVE (Sprint 4)
├── US10 : Multi-provider (OpenAI + Anthropic)
├── US11 : Export conversation PDF
├── US12 : Mode préparation entretien
└── US13 : Analytics avancés
Sprint Planning pratique
# Outil simple pour tracker vos sprints
import json
from datetime import datetime, timedelta
class SprintTracker:
"""Tracker de sprint minimaliste."""
def __init__(self, sprint_name, duration_days=7):
self.sprint = \{
"name": sprint_name,
"start": datetime.now().isoformat(),
"end": (datetime.now() + timedelta(days=duration_days)).isoformat(),
"tasks": []
\}
def add_task(self, title, estimate_hours, priority="medium"):
self.sprint["tasks"].append(\{
"title": title,
"estimate_hours": estimate_hours,
"priority": priority,
"status": "todo" # todo, in_progress, done
\})
def update_status(self, task_index, status):
self.sprint["tasks"][task_index]["status"] = status
def get_progress(self):
tasks = self.sprint["tasks"]
done = len([t for t in tasks if t["status"] == "done"])
total = len(tasks)
return f"\{done\}/\{total\} tasks (\{done/total*100:.0f\}%)" if total else "0 tasks"
def save(self, filepath="sprint.json"):
with open(filepath, "w", encoding="utf-8") as f:
json.dump(self.sprint, f, ensure_ascii=False, indent=2)
# Utilisation
sprint = SprintTracker("Sprint 1 — Fondations", duration_days=3)
sprint.add_task("Setup projet + environment", 1, "high")
sprint.add_task("Implémenter guardrails.py", 2, "high")
sprint.add_task("Créer base de connaissances (20 docs)", 2, "high")
sprint.add_task("Chat basique terminal", 1, "high")
sprint.add_task("Tests unitaires guardrails", 1, "medium")
sprint.save()
Agile solo = Agile simplifié
En équipe, Scrum a des cérémonies formelles. En solo, gardez l'essentiel : 1) Un backlog priorisé (todo list). 2) Des sprints courts (2-3 jours). 3) Un standup quotidien (5 min de réflexion : qu'ai-je fait ? que vais-je faire ?). 4) Une rétro en fin de sprint (qu'améliorer ?). Simple mais puissant.
🏋️ Exercice pratique (20 minutes)
- →Écrivez 5 user stories pour votre projet final
- →Classez-les en Must Have / Should Have / Nice to Have
- →Planifiez votre Sprint 1 (3 jours) avec des tâches estimées en heures
- →Créez votre SprintTracker et sauvegardez en JSON
Pourquoi travailler en sprints courts (2-3 jours) plutôt qu'en un seul bloc de 2 semaines ?
Qu'est-ce qu'une user story bien écrite ?