In an unknown space (in general, or just unfamiliar to you), there is a high probability (if not 100% guarantee) that important discoveries will be made along the way, which will require rework of something that has been built earlier, or will render the work that is in progress at the moment of the discovery irrelevant, or will require to change priorities.

Agile helps to uncover these important aspects quicker, to change the course faster, and potentially to abandon smaller pieces of work.



Dave Snowden. Complex Adaptive Systems When you architect a complex system, you design it for early failure. Because only through early failure could you discover what’s possible anyway. Most human systems are complex. If you are in a complex world, you have to manage by creating boundary conditions, running experiments, and responding to what happens. You can’t understand a complex system through modelling or analysis. You can only understand it by interaction with real-time feedback loops over multiple agents so that you don’t have cognitive bias. You want to do smaller experiments in parallel much faster so that bad unintended consequences you can destroy, and the good ones you can amplify. [Reminds me of Chaos Engineering] Architect for discovery before you architect for delivery. If you start with delivery and skip on the discovery, you’re going to miss opportunities as well as threats.