The overwhelming majority of them had the following elements in common among their descriptions:
- Agility means swiftly sensing and rapidly responding to change and uncertainty.
- Demand for change may be internal or external to the organization/environment.
- Responding to the change utilizes resources & staff that are both internal and external.
- Changes can be unpredictable and unanticipated, as well as foreseeable and anticipated.
- Unanticipated changes are typically handled with dynamic adaptation through short cycles of feedback and learning.
- Anticipated changes are typically handled with simple yet flexible structures that are resilient when modified.
- And of course all this is achieved with solutions that are effective, efficient, and economical to implement and deliver!
I think it is the people factor, and what Jim Highsmith calls "a focus on talent and skills of individuals and teams." Close collaboration across functions and other internal & external boundaries is the "secret sauce" that best leverages the talents & skills of individuals & teams. This is what enables the rapid learning which, when combined with those talents and skills, delivers the most innovative solutions and best results in the shortest time.
Put ALL of the above together, and we have a definition of software development agility that looks something like the following:
Software development agility is the ability to ...
- swiftly sense and rapidly respond to change & uncertainty
- in close collaboration with internal and external stakeholders
- to create simple, sustainable structures with sufficient flexibility
- to dynamically adapt & evolve business processes, products & plans
- that realize results with efficiency in motion, economy of effort, energy in execution, and efficacy of impact!
And there you have it! Note that the last bullet above is really just a fancy phrasing of mandatory business jargon that ultimately means "Lean", but we'll explore that connection further in a later blog-entry.