Taming Complex Systems: Lessons from Uber to Google

This article details the author's experiences in software engineering at an Uber competitor and Google, differentiating between complex problems and complex systems. Complex problems follow structured, repeatable solutions, while complex systems demand adaptability and innovative approaches. The article delves into five characteristics of complex systems: emergent behavior, delayed consequences, the trap of local optimization, hysteresis, and nonlinearity. Strategies for effective operation in complex environments are shared, including prioritizing reversible decisions, defining the right metrics, embracing innovation, leveraging best practices (feature flags, canary releases, progressive rollouts, shadow testing), and emphasizing observability, simulation testing, and machine learning. Finally, the author stresses the importance of team collaboration in complex systems.