Agile Manifesto - Annotated
I have been thinking recently about the Agile Manifesto.
Here it is with some annotations.
Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Right on! This gets to the heart of the "adaptive" vs. "predictive" debate. The post here makes a similar point phrased in terms of "evolutionists" vs. "creationists" using analogies from Richard Dawkins.
Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
Changing requirements is a reality and you need to embrace that and learn to succeed within that reality.
However, I have two concerns with the way this particular item is presented.
First "welcoming change late in an iteration" can directly conflict with your ability to achieve "early and continuous delivery of valuable software". The manifesto leaves it as an exercise for the reader to figure out how to balance those conflicting desires. It can be done, but there is no guidance here how to do it.
Second recognizing the reality of changing requirements doesn't give you a free pass to put off detailed requirements definition. You still want to push hard to define the requirements as early as possible and then only change them based on "new information". Thrashing a decision because of internal indecisiveness is a bad idea, adapting as you get new insights into what works best for the user is a good idea.
The good thing about short iterations is that you can "freeze" and "reopen" requirements quickly (with each iteration). Still at some point you have to at least temporarily freeze the requirements to get the iteration out the door.
Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
Right on! This is a direct corollary of point 1 above. Of course some initiatives will take longer than a "couple of months", but that does not mean they can't deliver working software along the way.
Business people and developers must work together daily throughout the project.
Right on!
Engineers working in a vacuum will produce some beautiful code, which may be irrelevant to the problem that needs to be solved. In the case where the engineers themselves fit the target audience (programming tools, search engines) then engineers can produce great things without the business folks. But those cases are the exception not the rule.
Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
100% agree.
However, when you have multiple motivated individuals they often don't agree on how to proceed forward. The manifesto leaves as an exercise to the reader: how do you get alignment and get past such disagreements.
The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
It is true that face-to-face is the most powerful way to communicate an idea and it is true that face-to-face is often underused.
However, there are plenty of times when face-to-face is not the best option for "conveying information" especially information that needs to survive for a period of time.
Tribal knowledge is a powerful thing, but if all information only exists as tribal knowledge in peoples' heads than you will have some real issues in achieving "sustainable development" (see two items below).
Working software is the primary measure of progress.
Right on! Such a simple but powerful concept.
Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
100% agree.
Continuous attention to technical excellence and good design enhances agility.
100% agree. An interesting question here is how you go beyond "attention" to "measurement". It is much easier to keep your attention focused when you have some measure of how well you are doing.
Simplicity--the art of maximizing the amount of work not done--is essential.
Right on!
It is easy to state the value of simplicity, it is harder to apply it in practice. Though Dilbert had a good example of simplicity in action that has some lessons for the software world.
The best architectures, requirements, and designs emerge from self-organizing teams.
This is true.
However, it begs the question: what do you do when the team fails to "self-organize"? Give up and go home? Hopefully not. How to catalyze "self-organization" is left as an exercise for the reader.
At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
100% agree. Any complex task that is worth doing demands a certain amount of self-reflection.
By the way, one implication of this last point is that you should make your behavior suit your particular needs and experiences even if that means not exactly following agile development method as described in the various books, training classes, etc.
copyright 2007 Kerry Champion
