Building software is complex. Every time you think have something nailed down, the requirements change. In fact, it reminds me of a quote from Al Gore's " An Inconvenient Truth":
"It's like beach combing. Every time the tide comes in and out, you find some more shells."
In software development, every time you show your progress to your end users or talk with your stakeholders, you get feedback...more shells. How can you respond to that feedback, that change? It's a question I hear often and in my opinion, agile practices are the answer. But how do you describe agile and it's ability to embrace change and complexity to someone who has never heard of agile? I spent many years in the geographic information systems industry so my thoughts logically went back to mapping systems for an example of how agile embraces change. Let's use the simple example of trying to drive to a meeting destination that you've never been to before. You need some directions.
Next, we try out Google Maps. In Google Maps, you do the same thing you did in MapQuest. Enter a starting point and a destination. But Google Maps is a little different. If we know ahead of time that there is a construction project or an accident on the highway, you can dynamically drag the route Google Maps provided and "draw" a route that avoids these problem areas. Google Maps reroutes you on the fly and provides you with a revised set of directions. So we print out our "smarter" directions, get in our car and start driving. But if we hit any unexpected obstacle, we're in the same situation as we were in with our MapQuest directions. Google Maps is a little more agile, but it requires prior knowledge of the problems you might face to avoid getting slowed down or lost on your way to your destination.
Finally, we get a GPS unit in our car. We get into our car without any printed directions. We turn on the GPS and all it asks is " Where to?". It already knows where we are; it just needs to know where we're going. The GPS unit maps out the shortest path from our current location to our destination. It presents us with a general overview map of the route, but provides us with detailed directions only as we need them. It only gives us enough information to make the next turn. It doesn't present us with complete step-by-step directions. And, the GPS constantly inspects our current position in relation to our destination. If we encounter obstacles on our way and need to deviate from the route, it adapts the route on the fly and provides us with new directions to reach our destination. And maybe while we're on the highway, our client calls and tells us they changed the location of our meeting entirely. Our destination has changed. So, in mid-course, we can tell the GPS unit our new destination. Without hesitation, it provides a new set of directions to our new destination. GPS allows feedback into the system and it adjusts course based on this feedback. GPS is dynamic. GPS doesn't mind if you find some new shells. GPS is agile.