Cas avances¶
Équipes distribuées, async-first et processus de décision structures pour les organisations à grande échelle.
Équipes distribuées¶
Une équipe distribuée est une équipe dont les membres travaillent depuis des lieux différents — différents bureaux, différentes villes, ou différents pays avec des fuseaux horaires distincts.
Défis spécifiques¶
| Défi | Manifestation |
|---|---|
| Fuseaux horaires | La fenêtre de collaboration synchrone peut être de 0 a 4h par jour |
| Asynchronisme force | Un blocage peut durer 24h avant que la bonne personne soit disponible |
| Perte de contexte informel | Les conversations de couloir disparaissent |
| Inegalite de présence | Le "hub" (bureau principal) domine les décisions sans le vouloir |
| Onboarding plus difficile | Construire la confiance sans proximite physique prend plus de temps |
Règles de base pour les équipes distribuées¶
- La camera par défaut : les appels video avec camera activee recreeent une partie de la communication non verbale
- L'heure commune : identifiez la fenêtre de travail partagee et protegez-la pour les réunions essentielles
- Remote first, pas remote friendly : si une personne est en remote, tout le monde est en remote (pas de salle ou 5 personnes sont ensemble et 2 sont sur un petit écran)
- Documentez les décisions immédiatement : après chaque appel, un compte-rendu de 5 lignes dans le wiki
Culture async-first¶
L'async-first ne signifie pas "jamais de synchrone". Cela signifie que le synchrone est l'exception justifiee, pas le reflexe par défaut.
Le principe : ecrivez d'abord¶
Avant d'appeler quelqu'un, posez-vous la question : puis-je écrire ce que j'ai besoin de dire et attendre une réponse ?
graph TD
B["Besoin de communication"] --> Q1{"Urgent\n(< 1h) ?"}
Q1 -->|Oui| Q2{"Blocage\nproduction ?"}
Q2 -->|Oui| SYNC1["Appel immediat\n+ post-incident ecrit"]
Q2 -->|Non| CHAT["Message chat\navec contexte complet"]
Q1 -->|Non| Q3{"Complexe ou\nambigu ?"}
Q3 -->|Oui| DOC["Ecrit structuree\n(issue, RFC, doc)"]
Q3 -->|Non| ASYNC["Message async\n(issue, commentaire MR)"] Ce que "bien écrire en async" signifie¶
Un message async efficace contient :
- Le contexte : d'ou vient ce sujet
- La question ou demande précisé : ce dont vous avez besoin
- Les options déjà considérées : ce que vous avez déjà essaye ou analyse
- Une deadline si nécessaire : "j'ai besoin de savoir avant vendredi"
L'async-first mal appliqué
L'async-first ne doit pas devenir un pretexte pour éviter toute interaction humaine. Les équipes 100% async sans jamais se retrouver (virtuellement ou physiquement) perdent la cohesion et la confiance. Prevoyez des moments synchrones réguliers : standup court, rétrospective video, hackathon en presentiel.
Monorepo vs polyrepo : impact sur la collaboration¶
Le choix de structure de dépôt a un impact direct sur la façon dont les équipes collaborent.
Monorepo¶
Un seul dépôt pour tous les projets de l'organisation (ou d'un domaine).
Avantages pour la collaboration :
- Un seul endroit pour trouver tout le code
- Refactoring global possible en une seule MR
- Dépendances internes toujours à jour
- Conventions de code uniformes plus faciles a enforcer
Défis :
- Les CI doivent être configurees pour ne builder que ce qui a change
- Les accès en lecture peuvent être trop larges
- Les grandes équipes peuvent se marcher dessus sur des branches longues
Polyrepo¶
Un dépôt par service ou composant.
Avantages pour la collaboration :
- Autonomie claire par équipe
- CI simple et rapide par projet
- Onboarding sur un service spécifique plus rapide
Défis :
- Mises à jour de dépendances partagees fragmentees
- Duplication de configuration (CI, linting, conventions)
- Harder to discover ce qu'une autre équipe a déjà construit
| Critère | Monorepo | Polyrepo |
|---|---|---|
| Visibilité cross-équipe | Excellente | Limitee sans tooling |
| Autonomie d'équipe | Moindre | Forte |
| Cohérence des conventions | Facile a enforcer | Nécessité un effort actif |
| Complexité de la CI | Élevée | Simple par projet |
| Gestion des dépendances | Centralisee | Distribuée (risque drift) |
Le processus RFC¶
Dans les grandes équipes, les décisions importantes ne peuvent pas être prises en réunion — elles seraient opaques pour tous ceux qui n'etaient pas presents.
Le RFC (Request for Comments) est un processus de décision écrit, asynchrone et transparent.
Cycle de vie d'un RFC¶
stateDiagram-v2
[*] --> Draft : Auteur redige
Draft --> Review : Publication dans le depot
Review --> Accepted : Consensus atteint
Review --> Rejected : Approche non retenue
Review --> Draft : Revisions necessaires
Accepted --> Implemented : Feature livree
Rejected --> [*]
Implemented --> [*] Quand un RFC est nécessaire¶
- Changement d'architecture impactant plusieurs équipes
- Introduction d'une nouvelle dépendance strategique
- Modification d'une API publique ou d'un contrat de service
- Changement de process impactant le workflow de toute l'équipe
- Abandon d'une technologie ou d'un service existant
Quand un RFC n'est pas nécessaire¶
- Implémentation d'une feature dans le périmètre d'une seule équipe
- Bugfix, même complexe
- Mise à jour de dépendance mineure
- Changements de documentation
Frameworks de décision¶
RACI¶
Le RACI clarifie qui fait quoi dans une décision.
| Rôle | Signification |
|---|---|
| Responsable | Réalisé le travail |
| Approbateur | Signe la décision finale (un seul par décision) |
| Consulte | Donne son avis avant la décision |
| Informe | Est notifie après la décision |
Exemple : déploiement d'une nouvelle infrastructure cloud
| Tâche | Infra | Sécurité | Dev Lead | Direction |
|---|---|---|---|---|
| Design architecture | R | C | C | I |
| Validation sécurité | C | R | I | I |
| Décision finale | C | C | C | A |
| Mise en œuvre | R | I | C | I |
Un seul A par décision
Si plusieurs personnes sont "A" sur la même décision, personne ne l'est vraiment. Le RACI fonctionne quand chaque décision a un seul approbateur clair.
Consent-based (Sociocracy 3.0)¶
La décision par consentement ne cherche pas le consensus (tout le monde est d'accord) mais l'absence d'objection bloquante (personne n'a d'objection qui mettrait le projet en danger).
Étapes :
- Proposition partagee à l'écrit
- Tour de clarifications (pas de debat — juste des questions)
- Tour de réactions rapides
- Tour d'objections : une objection est valide si elle argumente un risque concret
- Intégration des objections dans la proposition
Pratiques par challenge¶
| Challenge | Pattern | Outil / pratique |
|---|---|---|
| Fuseaux horaires différents | Async-first + fenêtre commune | Documentation dans la forge, agenda partage |
| Décisions opaques | RFC process | Dépôt de RFCs, template de décision |
| Inegalite hub/remote | Remote-first en réunion | Tout le monde sur son propre écran |
| Dépendances partagees qui driftent | Monorepo ou tooling dédié | Renovate, Dependabot, shared config packages |
| Onboarding dans un grand système | Documentation d'accueil + buddy | Setup documente, architecture diagrammee |
| Proliferation de réunions | No-meeting days, async standup | Standup textuel, plages protegees |
| Perte de contexte sur les décisions | ADR (Architecture Décision Records) | Dépôt décisions/ dans le monorepo |
| Qui peut décider quoi | RACI par domaine | Wiki de gouvernance, README par équipe |
Points clés¶
- Les équipes distribuées ont besoin de règles explicites que les équipes co-localisees peuvent ignorer
- L'async-first réduit la fatigue de réunion mais exige une culture d'écriture forte
- Le choix monorepo/polyrepo a des conséquences directes sur la collaboration — analysez votre contexte
- Le RFC process scale la prise de décision dans les grandes organisations sans bloquer les équipes
- RACI et consent-based sont complementaires : RACI pour la structure, consent pour les décisions collaboratives
Précédent : Bonnes pratiques | Retour a l'index