Andrew Hunt: “Leave room for emergence” [a Getting Real excerpt] 22 Mar 2006
14 comments Latest by Kathy Sierra
Andrew Hunt, co-founder of The Pragmatic Programmers, on why you should leave room for emergence.
Emergence is one of the founding principles of agility, and is the closest one to pure magic. Emergent properties aren’t designed or built in, they simply happen as a dynamic result of the rest of the system. “Emergence” comes from middle 17th century Latin in the sense of an “unforeseen occurrence.” You can’t plan for it or schedule it, but you can cultivate an environment where you can let it happen and benefit from it.
A classic example of emergence lies in the flocking behavior of birds. A computer simulation can use as few as three simple rules (along the lines of “don’t run into each other”) and suddenly you get very complex behavior as the flock wends and wafts its way gracefully through the sky, reforming around obstacles, and so on. None of this advanced behavior (such as reforming the same shape around an obstacle) is specified by the rules; it emerges from the dynamics of the system.
Simple rules, as with the birds simulation, lead to complex behavior. Complex rules, as with the tax law in most countries, lead to stupid behavior.
Many common software development practices have the unfortunate side-effect of eliminating any chance for emergent behavior. Most attempts at optimization — tying something down very explicitly — reduces the breadth and scope of interactions and relationships, which is the very source of emergence. In the flocking birds example, as with a well-designed system, it’s the interactions and relationships that create the interesting behavior.
The harder we tighten things down, the less room there is for a creative, emergent solution. Whether it’s locking down requirements before they are well understood or prematurely optimizing code, or inventing complex navigation and workflow scenarios before letting end users play with the system, the result is the same: an overly complicated, stupid system instead of a clean, elegant system that harnesses emergence.
Keep it small. Keep it simple. Let it happen.
[This is an excerpt from Getting Real, the new book from 37signals on the smarter, faster, easier way to build a successful web app.]