Cérémonies Scrum Locales - KoproGo

Auteur:

KoproGo ASBL

Date:

2025-01-15

Version:

1.0

Statut:

Actif

Introduction

Ce document décrit les cérémonies Scrum locales pratiquées par chaque équipe KoproGo (Backend, Frontend, Infra, IA/Grid).

Les cérémonies Scrum sont complétées par les événements Nexus (voir Nexus Framework pour KoproGo) pour la coordination cross-équipes.

Principes Scrum KoproGo

Valeurs Scrum

KoproGo applique les 5 valeurs Scrum :

  1. Commitment : Équipes s’engagent sur Sprint Goal

  2. Focus : Concentration sur Sprint Backlog (WIP limit)

  3. Openness : Transparence (code, docs, décisions)

  4. Respect : Code reviews bienveillantes, mentoring

  5. Courage : Feedback honnête, remise en question

Adaptations ASBL

Différences vs Scrum corporate :

Aspect

Scrum Standard

KoproGo ASBL

Équipe

Salariés full-time

Contributeurs bénévoles + salariés (futur)

Disponibilité

40h/semaine

Variable (5-20h/semaine)

Engagement

Contrat de travail

Contribution volontaire

Rôles

Fixes (PO, SM, Dev)

Rotatifs (SM, Tech Lead)

Réunions

Synchrones (bureau)

Asynchrones-first (distributed)

Conséquences :

  • Sprint planning flexible (participation asynchrone OK)

  • Daily Scrum écrit (Slack/GitHub) si pas dispo sync

  • Retro toujours synchrone (cohésion équipe)

Sprints KoproGo

Durée et Cadence

Durée sprint : 2 semaines (10 jours ouvrés)

Début : Lundi (Sprint Planning)

Fin : Vendredi soir (Sprint Review + Retro)

Calendrier type Sprint N :

Semaine 1:
- Lundi:    Sprint Planning (Nexus 4h, local 2h)
- Mardi-Vendredi: Daily Scrum (15 min/jour)

Semaine 2:
- Lundi-Jeudi: Daily Scrum (15 min/jour)
- Jeudi:   Backlog Refinement (1h, mid-sprint)
- Vendredi: Sprint Review (Nexus 2h) + Retro (Nexus 1h30)

Pas de sprint “0” : Dès le premier sprint, livrer increment déployable.

Sprint Goal

Définition : Objectif court (1 phrase) du sprint, aligné avec Nexus Sprint Goal.

Critères bon Sprint Goal :

  1. Concret : Décrit une fonctionnalité utilisateur (pas “refactoring”)

  2. Testable : Critères acceptation clairs

  3. Atteignable : Réaliste pour 2 semaines

  4. Aligné Nexus : Contribue au Nexus Sprint Goal

Exemples :

❌ Mauvais Sprint Goal:
"Améliorer le code backend"
→ Vague, non testable

✅ Bon Sprint Goal (Backend):
"Implémenter workflow approbation factures (Draft → PendingApproval → Approved)"
→ Concret, testable (tests E2E), aligné Nexus

✅ Bon Sprint Goal (Frontend):
"UI responsive mobile pour liste factures + approbation (< 768px)"
→ Concret, testable (Playwright mobile), aligné Nexus

Affichage : GitHub Projects (custom field “Sprint Goal”)

Cérémonies Scrum Locales

1. Sprint Planning (Local)

Objectif : Planifier travail équipe pour le sprint

Quand : Lundi matin (APRÈS Nexus Sprint Planning)

Durée : 2h

Participants : Équipe complète (3-5 devs + SM + optionnel PO)

Ordre du jour :

Part 1 : Quoi (1h) - Sélection items backlog

  1. SM présente Nexus Sprint Goal + dépendances identifiées

  2. Équipe sélectionne items top backlog (GitHub Projects)

  3. Vérification critères “Ready” (voir Nexus Framework pour KoproGo)

  4. Équipe formule Sprint Goal local (aligné Nexus)

Part 2 : Comment (1h) - Décomposition tâches

  1. Équipe décompose chaque item en tâches techniques (< 1 jour)

  2. Attribution tâches volontaire (pas imposée par SM !)

  3. Identification risques techniques (POCs nécessaires ?)

  4. Commit équipe sur Sprint Goal

Outputs :

  • Sprint Backlog (items + tâches GitHub Issues)

  • Sprint Goal affiché (GitHub Projects)

  • Vélocité cible (basée sur moyenne 3 derniers sprints)

Exemple Sprint Planning Backend (Sprint 12) :

Nexus Sprint Goal:
"Workflow factures avec approbation + monitoring production"

Sprint Goal Backend:
"API workflow factures (submit, approve, reject) + tests E2E + metrics Prometheus"

Items sélectionnés (28 points):
- #125: POST /expenses/:id/submit-for-approval (8 pts)
- #126: POST /expenses/:id/approve (5 pts)
- #127: POST /expenses/:id/reject (5 pts)
- #128: Tests E2E workflow complet (5 pts)
- #129: Prometheus metrics (expense_approvals_total) (5 pts)

Tâches #125 (exemple décomposition):
- [ ] Domain: Expense.submit_for_approval() (2h)
- [ ] Application: ExpenseUseCases.submit_for_approval() (3h)
- [ ] Infrastructure: POST handler (2h)
- [ ] Tests: Unit + integration (4h)
- [ ] Migration DB: add approved_by_id column (1h)

Risques:
- ⚠️ Email notification conseil syndical (dépend Infra SendGrid)
- ⚠️ Idempotence (submit multiple fois ?)

Attribution:
- Alice: #125, #128 (lead)
- Bob: #126, #127
- Charlie: #129 (Prometheus metrics)

2. Daily Scrum (Local)

Objectif : Synchroniser équipe, détecter blocages

Quand : Chaque jour ouvré, même heure (ex: 10h)

Durée : 15 min MAX (timebox strict)

Participants : Équipe dev uniquement (PO/SM optionnels observateurs)

Format : Debout (stand-up) ou écrit (Slack si async)

3 questions par dev :

  1. Hier : Qu’ai-je terminé vers le Sprint Goal ?

  2. Aujourd’hui : Que vais-je faire vers le Sprint Goal ?

  3. Blocages : Qu’est-ce qui m’empêche d’avancer ?

Exemple Daily Scrum Backend (écrit, Slack) :

Alice:
- Hier: ✅ Domain Expense.submit_for_approval() + tests unit
- Aujourd'hui: Application layer ExpenseUseCases
- Blocages: Aucun

Bob:
- Hier: ✅ POST /expenses/:id/approve handler
- Aujourd'hui: Tests intégration PostgreSQL
- Blocages: ⚠️ Testcontainers lent (5 min startup)

Charlie:
- Hier: 🔨 Prometheus metrics (WIP)
- Aujourd'hui: Finaliser metrics + tests
- Blocages: ⚠️ Pas clair comment tester metrics (mock Prometheus ?)

Actions:
- Bob: Optimiser testcontainers (reuse containers between tests)
- Charlie: Pair avec Alice (elle a déjà testé metrics dans autre projet)

Règles Daily Scrum :

  • ❌ PAS une réunion de status pour le SM/PO

  • ❌ PAS de résolution problèmes (parking lot → après Daily)

  • ✅ Focus Sprint Goal (pas “hier j’ai fait review PR #42”)

  • ✅ Auto-organisation (équipe décide actions, pas SM)

Daily Scrum asynchrone (si contributeurs timezone différentes) :

  • Poster daily update dans Slack channel #backend-daily avant 10h

  • SM résume + partage blocages dans Nexus Daily Scrum

  • Résolution blocages : GitHub Issues (commentaires asynchrones)

3. Sprint Review (Local)

Objectif : Inspecter Increment, adapter backlog

Quand : Vendredi après-midi (AVANT Nexus Sprint Review)

Durée : 1h

Participants : Équipe + PO + stakeholders invités (optionnel)

Ordre du jour :

1. Rappel Sprint Goal (5 min)

SM rappelle Sprint Goal et vélocité cible vs réelle.

2. Démo Increment (30 min)

Équipe démontre items Done (respectant DoD).

Format démo :

  • Live coding (pas slides !)

  • Environnement staging (pas local)

  • Données réalistes (seed script)

  • Tests automatisés projetés (démo TDD)

Exemple démo Backend Sprint 12 :

Démo API workflow factures:

1. cURL POST /expenses (création facture Draft)
2. cURL POST /expenses/:id/submit-for-approval
   → Retour 200, state = PendingApproval
   → Email SendGrid envoyé (montré dans logs)
3. cURL POST /expenses/:id/approve
   → Retour 200, state = Approved
4. Tests E2E Cucumber (projeté terminal):
   ✅ Scenario: Submit expense for approval
   ✅ Scenario: Approve expense
   ✅ Scenario: Reject expense
5. Grafana dashboard Prometheus:
   → Métrique expense_approvals_total = 1

3. Feedback stakeholders (15 min)

PO/stakeholders posent questions, suggèrent améliorations.

4. Mise à jour backlog (10 min)

PO ajuste backlog selon feedback (nouveaux items, re-priorisation).

Outputs :

  • Increment déployé staging

  • Vélocité réelle (points Done)

  • Backlog ajusté

Note : Sprint Review local ≠ Nexus Sprint Review (cross-équipes)

4. Sprint Retrospective (Local)

Objectif : Améliorer processus équipe

Quand : Vendredi après-midi (AVANT Nexus Sprint Retrospective)

Durée : 1h

Participants : Équipe dev + SM (PO optionnel si invité)

Règle d’or : Safe space (confidentialité, bienveillance, pas de blâme)

Format : Varie chaque sprint (exemples ci-dessous)

Format 1 : Start/Stop/Continue

Équipe brainstorm (10 min silencieux, post-its) :

  • Start : Quoi commencer à faire ?

  • Stop : Quoi arrêter de faire ?

  • Continue : Quoi continuer (fonctionne bien) ?

Vote dot (5 dots/personne) → Top 3 actions

Exemple Retro Backend Sprint 12 :

START:
- Pair programming pour features complexes (8 votes) ✅
- Benchmarks systématiques (Criterion) (3 votes)

STOP:
- Meetings après 17h (trop tard, fatigue) (7 votes) ✅
- PRs > 500 lignes (trop longues à reviewer) (6 votes) ✅

CONTINUE:
- Tests BDD Cucumber (super lisibles) (5 votes)
- Async daily Slack (timezone-friendly) (4 votes)

Top 3 actions Sprint 13:
1. ✅ Pair programming 2h/semaine (Alice + Bob, Charlie + nouveau)
2. ✅ Meetings max 16h30 (sauf urgence)
3. ✅ PRs max 300 lignes (split si plus gros)

Format 2 : Timeline

Dessiner timeline sprint (15 jours), équipe ajoute émotions (😀😐😞) + événements clés.

Exemple :

Jour 1 (Lundi): 😀 Sprint planning clair
Jour 3 (Mercredi): 😞 Testcontainers cassé (CI rouge)
Jour 5 (Vendredi): 😐 PR review lente (48h attente)
Jour 8 (Lundi S2): 😀 Testcontainers fixé (Bob hero!)
Jour 10 (Mercredi S2): 😀 Feature terminée early
Jour 12 (Vendredi S2): 😐 Stress demo (peur bugs)

Discussion: Pourquoi stress demo ?
→ Pas de tests staging avant
→ Action: Déployer staging J-1 demo (jeudi soir)

Format 3 : Glad/Sad/Mad

  • Glad : Content de quoi ?

  • Sad : Déçu de quoi ?

  • Mad : Frustré par quoi ?

Outputs Retro :

  • 2-3 actions concrètes Sprint N+1 (SMART: Specific, Measurable, Atteignable)

  • Actions trackées GitHub Issues (label retro-action)

  • Review actions précédentes (Done ? Si non, pourquoi ?)

Facilitation Retro :

  • SM facilite (neutre, pas défensif)

  • Timeboxing strict (1h max)

  • Parking lot (sujets hors scope → GitHub Discussions)

  • Rotation facilitateur (équipe mature → dev peut faciliter)

5. Backlog Refinement (Local)

Objectif : Préparer items futurs sprints

Quand : Mid-sprint (jeudi semaine 2, avant Nexus Refinement)

Durée : 1h

Participants : Équipe dev + PO

Activités :

  1. Affiner top 10 items backlog (détails, critères acceptation)

  2. Décomposer epics en user stories (< 13 points)

  3. Estimer (Planning Poker, Fibonacci)

  4. Identifier dépendances techniques

Exemple Refinement Backend :

Item: "Implémenter relances automatisées paiement"

Questions équipe:
- Quels niveaux relance ? (PO: 4 niveaux Gentle/Formal/Final/Legal)
- Fréquence envoi ? (PO: Configurable par syndic, défaut J+15/30/45/60)
- Email template where ? (PO: DB, éditable syndic)

Décomposition:
- #150: Domain PaymentReminder entity (3 pts)
- #151: Cron job daily check overdue (5 pts)
- #152: Email template rendering (3 pts)
- #153: Tests E2E workflow relances (5 pts)

Total: 16 points (OK pour 1 sprint)

Dépendances:
- Cron job → Infra team (tokio-cron-scheduler)
- Email templates → Design (mockups needed)

Ready ? ❌ Non (attendre mockups design)
Action: PO demande mockups, re-refine Sprint 14

Règles Refinement :

  • Max 10% capacité sprint (1h/sprint 2 semaines = OK)

  • Pas d’engagement (estimation ≠ commitment)

  • PO décide priorité finale (équipe conseille faisabilité)

Rôles Scrum

Product Owner (PO)

Responsabilités :

  1. Définir vision produit (alignée TOGAF ADM)

  2. Maintenir Product Backlog (priorisation)

  3. Rédiger user stories (critères acceptation)

  4. Accepter/rejeter Increment (Sprint Review)

  5. Disponible pour équipe (questions, clarifications)

Chez KoproGo :

  • PO unique pour tout KoproGo (cross-équipes)

  • Membre CA ASBL (légitimité gouvernance)

  • Disponibilité : 20h/semaine minimum

  • Rotation possible (vote CA, mandat 1 an)

Profil PO idéal :

  • Connaissance métier copropriétés (syndic, comptable, ou juriste)

  • Compétences techniques (comprendre faisabilité)

  • Capacité décision (pas consensus permanent)

Scrum Master (SM)

Responsabilités :

  1. Faciliter cérémonies Scrum

  2. Résoudre blocages équipe

  3. Protéger équipe (interruptions, scope creep)

  4. Coaching Scrum (valeurs, pratiques)

  5. Amélioration continue (retros, metrics)

Chez KoproGo :

  • SM par équipe (4 SMs : backend, frontend, infra, IA)

  • Contributeur senior (lead dev OK si double casquette)

  • Rotation conseillée (6 mois → mentoring)

Profil SM idéal :

  • Certification Scrum (PSM I minimum, recommandé)

  • Expérience dev (crédibilité technique)

  • Soft skills (écoute, empathie, facilitation)

Development Team

Responsabilités :

  1. Livrer Increment Done chaque sprint

  2. Auto-organisation (qui fait quoi)

  3. Qualité code (tests, reviews, refactoring)

  4. Respect DoD (non négociable)

  5. Collaboration (pair programming, mentoring)

Taille équipe : 3-5 devs (idéal Scrum)

Compétences cross-fonctionnelles :

  • Chaque dev = T-shaped (expertise 1 domaine + connaissances larges)

  • Exemple Backend : Expert Rust + notions PostgreSQL + notions DevOps

Chez KoproGo :

  • Contributeurs bénévoles (majorité, phase ASBL)

  • Salariés part-time/full-time (future, phase Coopérative)

  • Onboarding : Pair 1 semaine avec senior (code + culture)

Definition of Done (DoD)

DoD Équipe (complète DoD Nexus)

Voir Nexus Framework pour KoproGo pour DoD Nexus (cross-équipes).

DoD Backend (ajoute à Nexus) :

  1. ✅ Architecture hexagonale respectée (Domain → Application → Infrastructure)

  2. ✅ Migrations DB testées (rollback + rollforward)

  3. ✅ Benchmarks Criterion (si endpoint perf-critical)

  4. ✅ Docs Rust (cargo doc comments)

DoD Frontend (ajoute à Nexus) :

  1. ✅ Responsive mobile (Playwright tests < 768px)

  2. ✅ Accessibilité WCAG 2.1 AA (axe-core scans)

  3. ✅ PWA offline (ServiceWorker cache)

  4. ✅ Storybook components (future)

DoD Infra (ajoute à Nexus) :

  1. ✅ Terraform plan OK (dry-run, no surprises)

  2. ✅ Ansible idempotent (run 2x = same result)

  3. ✅ Runbook SRE (incident response doc)

  4. ✅ Rollback plan (max 5 min downtime)

DoD IA/Grid (ajoute à Nexus) :

  1. ✅ Tests edge ARM64 (Raspberry Pi)

  2. ✅ Modèle quantized (< 2GB RAM)

  3. ✅ Benchmarks inference (< 100ms P99)

  4. ✅ Revenus compute trackés (blockchain future)

Métriques Scrum Locales

Vélocité Équipe

Définition : Story points Done par sprint

Calcul : Somme points items Done (respectant DoD)

Objectif : Stabilité (± 10% sprint N vs N-1)

Exemple Backend Sprints 10-12 :

Sprint 10: 20 points
Sprint 11: 18 points
Sprint 12: 22 points
Moyenne: 20 points ± 2 (stable ✅)

Usage :

  • Sprint Planning : Sélectionner ~20 points (basé moyenne)

  • PO : Prévoir roadmap (ex: Feature 60 pts = 3 sprints)

Anti-pattern :

  • ❌ Vélocité = KPI performance équipe (pression → inflation points)

  • ✅ Vélocité = outil planification (prévisibilité)

Burndown Chart

Définition : Graphique story points restants vs jours sprint

Axes :

  • X : Jours sprint (0 à 10)

  • Y : Story points restants

Ligne idéale : Diagonale (progression linéaire)

Exemple Sprint 12 Backend :

Jour 0:  28 points (Sprint Planning)
Jour 2:  28 points (pas Done encore)
Jour 4:  20 points (item #125 Done, 8 pts)
Jour 6:  15 points (item #126 Done, 5 pts)
Jour 8:  10 points (item #127 Done, 5 pts)
Jour 10:  0 points (tous items Done ✅)

Alarmes :

  • Courbe flat (pas de progrès) → Daily focus blocages

  • Courbe monte (scope creep) → PO protège Sprint Goal

Cycle Time

Définition : Temps entre “In Progress” et “Done” (1 item)

Objectif : < 3 jours (idéal 1-2 jours)

Exemple :

Item #125:
- Lundi 10h: In Progress
- Mercredi 16h: Done
→ Cycle time: 2,25 jours ✅

Alarmes :

  • Cycle time > 5 jours → Item trop gros (décomposer)

  • Cycle time > 7 jours → Blocage (SM investigate)

Code Review Time

Définition : Temps entre “PR created” et “PR merged”

Objectif : < 24h (1 working day)

Règles KoproGo :

  • PR < 300 lignes : 2h review max

  • PR 300-500 lignes : 4h review max

  • PR > 500 lignes : ❌ Refus (split required)

Exemple :

PR #234:
- Mardi 14h: Created (250 lignes)
- Mardi 16h: Review Alice (approve)
- Mardi 17h: Review Bob (request changes)
- Mercredi 10h: Changes pushed
- Mercredi 11h: Bob approve
- Mercredi 11h30: Merged
→ Review time: 21h30 ✅

Alarmes :

  • Review time > 48h → Reviewer overload (assign 2nd reviewer)

Outils Scrum

GitHub Projects

Board Kanban : https://github.com/users/gilmry/projects

Colonnes :

  1. Backlog : Items priorités (PO), triés top → bottom

  2. Sprint N : Items sprint en cours

  3. In Progress : WIP (limit 2 items/dev)

  4. Review : Attente code review

  5. Done : Merged + déployé staging

Automation GitHub :

  • Issue created → Backlog

  • PR opened → Review

  • PR merged → Done (auto)

Custom Fields :

  • Sprint Goal (texte)

  • Story Points (nombre Fibonacci)

  • Team (select: backend/frontend/infra/ia)

  • Priority (select: P0/P1/P2/P3)

Estimation : Planning Poker

Échelle Fibonacci : 1, 2, 3, 5, 8, 13, 21

Signification :

  • 1 pt : Trivial (< 2h, ex: typo fix)

  • 2 pts : Simple (< 4h, ex: add DB column)

  • 3 pts : Moyen (1 jour, ex: CRUD endpoint)

  • 5 pts : Complexe (2 jours, ex: workflow feature)

  • 8 pts : Très complexe (3-4 jours, ex: auth system)

  • 13 pts : Epic (1 semaine, décomposer !)

  • 21+ pts : ❌ Trop gros (obligatoire split)

Processus Planning Poker :

  1. PO lit user story + critères acceptation

  2. Équipe pose questions (5 min max)

  3. Chaque dev vote simultanément (cartes/app)

  4. Si consensus (± 1 pt) → Estimation validée

  5. Si divergence (ex: 2 vs 8) → Discuss extremes, re-vote

Exemple :

Item: "Implémenter POST /expenses/:id/approve"

Vote 1:
- Alice: 3 pts
- Bob: 8 pts
- Charlie: 5 pts

Discussion:
- Bob: "Il faut workflow state machine + email notification"
- Alice: "Email déjà fait Infra, juste call API"
- Charlie: "State machine = pattern Strategy, 1 jour"

Vote 2:
- Alice: 5 pts
- Bob: 5 pts
- Charlie: 5 pts

✅ Consensus: 5 points

Tests & Qualité

Stratégie Pyramid

KoproGo applique Test Pyramid :

         E2E (10%)
        /        \
      /            \
    /   Integration  \
  /       (30%)        \
/__________________________\
       Unit (60%)

Répartition temps tests :

  • 60% Unit : Domain logic, use cases (fast, isolés)

  • 30% Integration : Repositories PostgreSQL (testcontainers)

  • 10% E2E : Full workflow API → UI (Playwright, Cucumber)

Exemple Backend Sprint :

Sprint 12 (5 jours dev):
- 3 jours: Feature code + unit tests (60%)
- 1,5 jours: Integration tests PostgreSQL (30%)
- 0,5 jours: E2E tests Cucumber (10%)

TDD (Test-Driven Development)

Pratique recommandée (pas obligatoire) :

  1. Red : Écrire test qui fail

  2. Green : Code minimal pour passer test

  3. Refactor : Améliorer code (tests stay green)

Exemple TDD Backend :

// 1. RED: Test fail (fonction n'existe pas)
#[test]
fn test_submit_expense_for_approval() {
    let expense = Expense::new_draft(...);
    let result = expense.submit_for_approval();
    assert!(result.is_ok());
    assert_eq!(expense.state, ExpenseState::PendingApproval);
}

// 2. GREEN: Implémentation minimale
impl Expense {
    pub fn submit_for_approval(&mut self) -> Result<(), String> {
        self.state = ExpenseState::PendingApproval;
        Ok(())
    }
}

// 3. REFACTOR: Ajouter validations
impl Expense {
    pub fn submit_for_approval(&mut self) -> Result<(), String> {
        if self.state != ExpenseState::Draft {
            return Err("Can only submit Draft expenses".to_string());
        }
        self.state = ExpenseState::PendingApproval;
        self.submitted_at = Some(Utc::now());
        Ok(())
    }
}

Avantages TDD :

  • Design code testable (dependency injection forcée)

  • Coverage 100% (tests écrits first)

  • Refactoring safe (tests = safety net)

BDD (Behavior-Driven Development)

Outil : Cucumber (Gherkin syntax)

Usage : Tests E2E user-facing features

Exemple :

# backend/tests/features/expense_workflow.feature

Feature: Expense Approval Workflow
  As a syndic, I want to submit expenses for approval
  So that conseil syndical can review before payment

Scenario: Submit expense for approval
  Given a building "Résidence Mozart" exists
  And an expense "Plumbing repair" in Draft state
  When the syndic submits the expense for approval
  Then the expense state is "PendingApproval"
  And an email is sent to conseil syndical members
  And the audit log records "Submitted by syndic@example.com"

Run tests BDD :

cd backend && cargo test --test bdd

Avantages BDD :

  • Lisible non-devs (PO, stakeholders)

  • Documentation vivante (tests = specs)

  • Focus comportement utilisateur (pas implémentation)

Voir aussi

Document maintenu par KoproGo ASBL - Scrum adapté pour l’open-source et contributeurs bénévoles