Apprivoiser les systèmes complexes : leçons d’Uber à Google
Cet article détaille les expériences de l’auteur en ingénierie logicielle chez un concurrent d’Uber et chez Google, en différenciant les problèmes complexes des systèmes complexes. Les problèmes complexes suivent des solutions structurées et répétables, tandis que les systèmes complexes exigent de l’adaptabilité et des approches innovantes. L’article approfondit cinq caractéristiques des systèmes complexes : le comportement émergent, les conséquences différées, le piège de l’optimisation locale, l’hystérésis et la non-linéarité. Des stratégies pour une exploitation efficace dans des environnements complexes sont partagées, notamment la priorisation des décisions réversibles, la définition des bonnes métriques, l’adoption de l’innovation, l’exploitation des meilleures pratiques (flags de fonctionnalités, lancements canary, déploiements progressifs, tests shadow) et l’accent sur l’observabilité, les tests de simulation et l’apprentissage automatique. Enfin, l’auteur souligne l’importance de la collaboration d’équipe dans les systèmes complexes.
Lire plus