Code review : rituel quotidien qui peut faire progresser l’équipe… ou créer de la frustration. Voici comment en faire un outil de croissance plutôt qu’un goulot d’étranglement.

Le problème : Code Review frustrantes

Symptômes classiques

Pour l’auteur :

09h00 : Crée PR
16h30 : Pas de review
Lendemain 14h : Enfin review
16h00 : Corrige commentaires
Lendemain 11h : 2ème review avec nouveaux comments
...
5 jours pour merger 200 lignes

Pour le reviewer :

PR à reviewer : 1500 lignes
- "Où commencer ?"
- "Trop gros pour comprendre"
- "Approve en diagonale"

Résultat :

  • Vélocité ralentie
  • Frustration des deux côtés
  • Quality compromise

Principes fondamentaux

1. Code review ≠ Code perfection

Mauvais mindset :

"Ce code doit être parfait avant merge"
→ 47 commentaires sur naming
→ PR bloquée 1 semaine

Bon mindset :

"Ce code améliore-t-il la codebase ?"
→ Focus sur vrais problèmes
→ Merge en 1 jour, itération continue

2. Bienveillance par défaut

Mauvais feedback :

❌ "Ce code est nul"
❌ "Pourquoi t'as fait ça ?"
❌ "C'est évident qu'il faut faire autrement"

Bon feedback :

✅ "Je pense qu'on pourrait améliorer X parce que Y"
✅ "As-tu considéré l'approche Z ?"
✅ "Je ne comprends pas cette partie, peux-tu expliquer ?"

3. Automatiser ce qui peut l’être

Ne PAS commenter en review :

  • Formatting (Prettier, Black)
  • Linting (ESLint, Ruff)
  • Types (TypeScript, mypy)
  • Security basic (Snyk, Dependabot)

Commenter en review :

  • Architecture
  • Logic bugs
  • Performance
  • Maintainability

Checklist review efficace

Pour l’auteur (avant de créer la PR)

✅ Size : Keep it small

Optimal : < 400 lignes
Acceptable : < 800 lignes
Too big : > 800 lignes → Split

✅ Description claire

## What
Ajoute validation email sur signup

## Why
65% des signups avaient email invalide → bounces

## How
- Regex validation
- DNS MX check
- Disposable email blacklist

## Testing
- Unit tests ajoutés
- Testé manuellement avec 10+ scénarios

## Screenshots
[Avant] [Après]

✅ Self-review

Relire sa propre PR avant de demander review :
- Supprimer console.log oubliés
- Fixer typos évidents
- Vérifier tests passent

Pour le reviewer

✅ Prioriser

P0 (bloquant) :
- Security vulnerability
- Data loss risk
- Breaking change non documenté

P1 (important) :
- Logic bug
- Performance regression
- Missing tests critiques

P2 (nice to have) :
- Naming suggestions
- Refactoring ideas
- Documentation improvements

✅ Timeboxing

PR < 200 lignes : 15 minutes max
PR 200-500 lignes : 30 minutes max
PR > 500 lignes : "Trop gros, split please"

✅ Feedback constructif

# Template comment

## Issue
[Décrire le problème]

## Impact
[Pourquoi c'est important]

## Suggestion
[Proposition concrète]

## Example
```code
[Code proposé]

## Feedback patterns

### Pattern 1 : Ask, don't tell

❌ “Change ça en Promise.all”

✅ “As-tu considéré Promise.all ici ? Ça pourrait paralléliser les appels et réduire la latency de 60% à 20ms. Qu’en penses-tu ?”


### Pattern 2 : Explain the why

❌ “N’utilise pas var”

✅ “Je recommande const/let au lieu de var car :

  • Block scope (évite bugs)
  • Immutabilité avec const (intent clair)
  • Standard moderne (ESLint flag)”

### Pattern 3 : Link to resources

❌ “Mauvaise gestion d’erreur”

✅ “La gestion d’erreur pourrait être améliorée. Voir notre guide : Error Handling Best Practices Notamment la section sur error boundaries.”


### Pattern 4 : Propose, don't impose

❌ “Change ce nom de variable”

✅ “Suggestion (non-bloquant) : userEmail serait plus explicite que email ici, car on manipule aussi orderEmail. Ton avis ?”


### Pattern 5 : Celebrate good code

✅ “Nice! Cette abstraction rend le code beaucoup plus lisible 👍” ✅ “Excellente idée d’ajouter ce guard clause” ✅ “J’aime l’utilisation de ce pattern ici”


**Impact :** Renforce culture positive, encourage bonnes pratiques.

## Gérer les désaccords

### Situation : Débat naming qui s'éternise

Review comment (30 messages):

  • “Variable devrait s’appeler X”
  • “Non, Y est mieux”
  • “Pourquoi pas Z ?”
  • … (continues for hours)

**Solution : Decision framework**

```markdown
## Naming disagreement

### Options
A. `userAccount`
B. `account`
C. `user`

### Decision criteria
1. Clarity (pas d'ambiguïté)
2. Consistency (with existing code)
3. Brevity (short but clear)

### Vote
@alice: B (existing code uses `account`)
@bob: A (more explicit)
@charlie: B (consistency > explicitness)

### Decision: B (`account`)
Rationale: Consistency with 90% of existing codebase

Situation : Désaccord architectural

Reviewer: "Cette feature devrait utiliser event sourcing"
Author: "C'est overkill pour ce use case"

Solution : Escalade constructive

## Architectural decision needed

### Context
Feature: User notification preferences

### Approaches
1. Simple DB update (proposed)
2. Event sourcing (reviewer suggests)

### Trade-offs discussed
[Summary of discussion]

### Request
@tech-lead Can you arbitrate?
Timeline: Need decision by EOD for sprint deadline

Process : SLA Review

Team Agreement

Code Review SLA:

First response: < 4 hours
  (Even just "I'll review tomorrow")

Full review: < 24 hours
  (For PRs < 400 lines)

Approval or explicit blockers: < 48 hours

Large PRs (>800 lines):
  Pre-split or schedule dedicated review session

Enforce with automation

// GitHub Action
on:
  pull_request:
    types: [opened, ready_for_review]

jobs:
  review-reminder:
    runs-on: ubuntu-latest
    steps:
      - name: Assign reviewers
        run: |
          # Auto-assign based on code ownership
          gh pr edit ${{ github.event.pull_request.number }} \
            --add-reviewer @team-backend

      - name: Reminder after 4h
        run: |
          sleep 14400  # 4 hours
          gh pr comment --body "👋 Reminder: Please review this PR"

      - name: Escalate after 24h
        run: |
          sleep 86400  # 24 hours
          gh pr comment --body "⚠️ Escalating: No review after 24h"
          # Notify team lead

Async vs Sync Review

Async (défaut)

PR créée
→ Reviewer commente (à son rythme)
→ Author répond/corrige
→ Iterate jusqu'à approval

Pros :
- Pas de meeting
- Deep thinking time
- Documentation written

Cons :
- Peut être lent
- Misunderstandings

Sync (pour cas spécifiques)

PR complexe
→ Schedule 30min review call
→ Screen share, walk through code
→ Décisions immédiates

Quand utiliser :
- PR > 500 lignes
- Architecture complexe
- Désaccords à résoudre
- Onboarding nouveau dev

Reviewer assignment strategies

Strategy 1 : Round robin

// Rotate reviewers équitablement
const reviewers = ['alice', 'bob', 'charlie'];
let currentIndex = 0;

function assignReviewer() {
  const reviewer = reviewers[currentIndex];
  currentIndex = (currentIndex + 1) % reviewers.length;
  return reviewer;
}

Strategy 2 : Code ownership

# CODEOWNERS file
/frontend/**  @frontend-team
/backend/**   @backend-team
/infra/**     @devops-team

# Auto-assign based on files changed

Strategy 3 : Expertise-based

// Assigner expert du domaine
const expertise = {
  'database': ['alice', 'david'],
  'frontend': ['bob', 'emma'],
  'security': ['charlie', 'alice']
};

function assignByExpertise(prLabels) {
  if (prLabels.includes('database')) {
    return randomPick(expertise.database);
  }
  // ...
}

Strategy 4 : Buddy system

Junior dev → Always 1 senior reviewer
Senior dev → Peer review OK

Benefits:
- Mentoring built-in
- Knowledge transfer
- Quality maintained

Metrics : Mesurer l’efficacité

Metrics à tracker

┌─────────────────────────────────────┐
│ Code Review Health Dashboard        │
├─────────────────────────────────────┤
│ Time to First Review                │
│ Median: 3.2h ✅ (target: < 4h)     │
│                                     │
│ Time to Merge                       │
│ Median: 18h ✅ (target: < 24h)     │
│                                     │
│ PR Size                             │
│ Median: 280 lines ✅ (target: <400)│
│                                     │
│ Review Comments per PR              │
│ Median: 4 ✅ (healthy discussion)  │
│                                     │
│ Approval Rate First Review          │
│ 45% ✅ (not too high, not too low) │
└─────────────────────────────────────┘

Red flags

🚨 Time to first review > 48h
   → Reviewers surchargés ou désengagés

🚨 PR size median > 600 lines
   → PRs trop grosses, encourager split

🚨 Comments per PR > 20
   → Process review trop nitpicky

🚨 Approval rate first review > 90%
   → Rubber stamping (pas de vraie review)

Outils

GitHub / GitLab

# PR Template (.github/pull_request_template.md)

## What changed
<!-- Describe your changes -->

## Why
<!-- Business/technical rationale -->

## Testing
- [ ] Unit tests added/updated
- [ ] Manual testing performed
- [ ] Edge cases considered

## Checklist
- [ ] Code follows style guide
- [ ] Documentation updated
- [ ] Breaking changes documented
- [ ] Performance impact considered

Review tools

  • Reviewable : Advanced GitHub review
  • Gerrit : Google-style review
  • Phabricator : Facebook-style review
  • Codecov : Coverage in PR
  • SonarCloud : Quality metrics

Culture : Senior reviewer mindset

Ce qu’un senior reviewer fait

✅ Teach, don't just criticize
✅ Ask questions to understand intent
✅ Suggest improvements with context
✅ Approve when "good enough"
✅ Celebrate good code
✅ Focus on architecture, not syntax

Ce qu’un senior reviewer évite

❌ Bikeshedding (débat sur détails)
❌ Perfectionism (bloquer sur détails mineurs)
❌ Imposing personal style
❌ Reviewing code they don't understand
❌ Ghosting PRs (pas de feedback)

Cas réel : Startup tech (15 devs)

Avant

  • Time to merge : 3-5 jours
  • PRs size moyenne : 650 lignes
  • Review comments : 25/PR
  • Frustration dev : 🔥🔥🔥

Changements

  1. PR size limit : 400 lignes (CI block si > 400)
  2. SLA review : 24h
  3. Review checklist (focus architecture)
  4. Celebrate good code (culture positive)

Après (3 mois)

  • Time to merge : 18h (-80%)
  • PRs size moyenne : 280 lignes (-57%)
  • Review comments : 6/PR (-76%)
  • Satisfaction dev : 8.5/10 (+90%)

Conclusion

Code review n’est pas un goulot.

C’est un accelerator si bien fait :

  • Knowledge sharing
  • Quality improvement
  • Team cohesion

Keys :

  1. Small PRs (<400 lines)
  2. Fast feedback (<24h)
  3. Constructive comments
  4. Celebrate good code

Commencez aujourd’hui :

  • Définir SLA review
  • Template PR
  • Review checklist

Et vous, comment sont vos code reviews ?