What makes a project "Agile"?
The Essence of Agility
Part 1 of 4
Learning and Adaptation & Collaboration
by Alan S. Koch, PMP
The Agile approach is often panned as an excuse for lack of discipline. I've been told that Agility means, "We'll just wing it, and when we run out of money, we'll ask for more." This and other such statements show that many people don't understand what Agility is all about.
The confusion is understandable because there is a plethora of practices that people claim as "Agile." And unfortunately, some of them are indeed using the term "Agile" as an excuse for lack of discipline.
The Essence of Agility is a set of observable behaviors and actions. We can determine if a project is agile or merely claiming to be by looking for these behaviors and evaluating how effectively they support the Agile Values and Principles.
Agility and Discipline
Agility is valued by any organization. It connotes the ability to withstand whatever comes our way while maintaining balance and momentum. In software development, this translates into maintaining project performance and progress in the face of changing customer needs, business priorities, technology, and organizational dynamics.
Calling undisciplined behavior agile is a misuse of the term. As Kent Beck (co-author of Extreme Programming Explained) wrote in his foreword to my book: "Agility in software requires iron discipline." So how are we to differentiate true Agility from undisciplined behavior?
The Agile methods, as designed by their creators and implemented on disciplined teams, use a variety of tactics to build a project environment that is indeed agile. There is no one set of practices that is definitively Agile. In fact, there are a dozen different methods that are included under the banner of Agile, and each of them includes some unique practices.
True Agility is based on a few distinct principles that are underpinned by a unique value system. (Refer to the Agile Manifesto at www.agilemanifesto.org.) The application of these values and principles results in a few indispensable behaviors that can be seen and judged objectively by any interested stakeholder of a project. It is those behaviors that I refer to as the Essence of Agility:
- Learning and adaptation
- Customer focus
- Small self-directed teams
- Lean principles
- Progressive requirements elaboration
- Incremental delivery
- Iterative planning and adaptation
In this first article of a three-part series, we will discuss the first two of those behaviors. As we discuss them, it will be useful to refer to the Agile Lifecycle.
Learning and Adaptation
At its heart, Agility is based on the admission that we don't know everything at the start of a project. Even the things we think we know are subject to revision as the project moves forward and the world changes around us. And we most certainly don't know what surprises we will encounter.
Because there is so much uncertainty, we treat each project as a learning experience. In fact, we structure the project to accelerate the rate at which we will learn. Technical issues? Explore them early. Customer uncertainty? Get their feedback on early product increments. Quality questions? Test early and often. Integration difficulties? Build daily, if not continuously. The sooner we answer questions, address issues, and attack difficulties, the sooner we can adapt to what we learn, and the sooner we will smooth out the road for the project.
Adaptation is the reason we want to learn, and learn quickly. We start each project with our best projection about how things will turn out. But as we learn, we invariably discover that some of our projections were off the mark. Where we expected a smooth road, we discover a cliff! Will we keep marching forward like lemmings? Of course we won't. We will adapt by reassessing the situation based on our new knowledge and mapping a new path to our destination. Applying what we learn is the only way to success on our project. Blindly following the old plan would be absurd!
Agile project teams don't just learn about uncertainties. They also learn about themselves and their methods. At the end of each iteration they perform a mini-retrospective. "What worked well? What caused difficulty? How good were our estimates? Did we produce customer value? Are we progressing toward success?" Then they adapt their methods and plans for the next iteration. "What should we do differently this time?" And at the end of the next iteration they ask, "How did that change work? Should we keep it?"
Through a constant cycle of learning and adaptation, the Agile team produces real value for their customers, and learns to do so more and more effectively.
Learning is a natural human activity, and it happens most effectively in an environment of human contact. Collaboration takes many forms on an Agile team, and each of them is critical to the team's ability to be successful in building a valuable product for their customer.
The first type of collaboration happens within the Agile team itself. An Agile team consists of all of the technical disciplines that are required on the project: architects and designers, programmers, database analysts, testers, technical writers, and so on. And rather than hiding in their cubes and working on their own little corners of the project, these people are collaborating with each other constantly throughout the project.
This supports learning (discussed above), as each team member learns about what the others do and learns to appreciate and respect his or her peers. (Yes, even the testers!) This not only builds a healthier project environment, but it also strengthens the team as each member becomes more knowledgeable and effective. Cross-discipline collaboration also allows the team to explore and answer technical questions and discover technical surprises much more quickly. This provides the foundation for learning early and adapting to what is learned in order to bring about project success.
But the team does not collaborate only with each other. They are also fully engaged with management, their customers, and any other stakeholders in the project. Open communication and transparent disclosure of information allows for quick learning and more effective adaptation. In addition, it engenders trust and defuses the all-too-common "us vs. them" mindset. When all who are associated with the project are collaborating with each other and learning along side each other, the project will progress much more smoothly and be much more likely to produce what is needed. And when the inevitable problems arise, instead of pointing fingers and attempting to evade blame, they will be ready to join together to meet the problems head on.
Becoming More Agile
We will discuss the other behaviors of the Essence of Agility in parts two and three of this series. But becoming truly Agile can begin today.
We can accept the principle that we begin each project with many unknowns, and that learning about those things is good! We can look for ways to learn more effectively, and to incorporate what we learn into the project as it moves forward. And we can reward learning, instead of punishing "change."
To make this happen, we can establish a cooperative environment where all of the stakeholders of the project (customer, management, and each technical discipline) collaborate together for the project's success. Free and open flow of information will foster the attitude that we are all in this together, and promote collaboration.
This will get us started on becoming a bit more agile. But these behaviors will be difficult to achieve without the other parts of the Essence of Agility. So stay tuned!