“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.
Let’s start with MapQuest. In MapQuest, you start by entering a starting point and a destination. MapQuest assumes you know where you are starting from and where you are going. MapQuest returns a complete set of step-by-step directions from your origin to your destination. So, you print out your directions, get in your car and start driving, following the stepwise directions. Then, you encounter a problem. The highway is closed due to an unexpected accident. You exit the highway, look at your step-by-step directions from MapQuest and sigh. Now what? You don’t know where to go because you only have the original step-by-step directions. You’re in an unfamiliar place. There are no detour signs to guide you. You’re stuck. You try going one way, but that doesn’t work. You try another way and that doesn’t work either. Before you know it, you’re lost. You’re late. Your printed directions are no longer useful. You might never get to your destination now. MapQuest is waterfall. MapQuest is how we traditionally developed software. Have an origin, an end point and a set of step-by-step directions to guide us from origin to destination. It doesn’t allow feedback into the system. It doesn’t allow for deviation from the plan.
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.