There is a natural tension between the predictability that an organization needs in order to plan and budget and the adaptability that it also needs to accommodate for change and the unknowns. At the onset of a new project, especially if it is using new technologies, there can be an order of magnitude difference between how long we think it will take and how long it really ends up taking. This is frustrating and even infuriating for anyone in charge of a budget.
We all do our best to estimate and plan in order to nail down as many unknowns as possible. Traditionally, we have used requirements documents, GANTT charts, and rigorous sequential processes to iron out the natural fluidity of a project. Change and the unknowns are treated like the enemy and whatever change we cannot control, we oversee with rigorous change control processes and a steadfast commitment to as much of our original plan as we can salvage.
So, Why Agile?
Intentionally or not, our traditional practices are designed to drive change and fluidity out. That may be because we inherited our project management metaphor from construction projects. For decades, we have shaped our software delivery practices as if we were building a skyscraper and no one could enter the construction site until after the whole thing was built and we had completed the ribbon cutting ceremony.
Software (and knowledge projects in general) do not suffer such limitations. They more resemble an old farmhouse that grows up room by room, lived in and used throughout construction. Agile encourages modular over monolithic. Adjustments are made like the captain of a sailboat reading the weather and making iterative course corrections all the time. Design is more emergent and, pragmatically, the final design may differ significantly from the original plan. The customer and their feedback actually influence the solution approach and that virtually never used to happen with traditional delivery.
When computers were new, the world was changing much more slowly than it is today. In one human lifetime, we have gone from computers as an anomaly sequestered away in data centers with only a select few users to today’s mobile 24X7 interconnection of most everyone on the planet.
Our world has changed, and as adaptable as people are, our processes have not changed enough to keep up. Agile is an attempt to help us all rely less on predictability and more on adaptability. It lets us put the customer and their changing needs at the forefront of design and, done well, relieves some of that tension that has existed between the business and IT.