Agile development methodology is gaining more popularity. This is due to the recognition of the fact that -
- Software requirements change and the addition/deletion/modification of features is very essential for a product’s success
- Software is evolves over time like other systems
- Software design/architecture is hard to get right first time
- Maintenance requires significant amount of product’s life-cycle cost
These are the facts from a product’s success stand point. However, there are other factors – team co-ordination, organization structure etc that are also equally important.
I am summarizing salient features of agile development methodology here. I found Jim Highsmith’s article extremely useful. I have summarized his article below for easy reference:
Some important basic assumptions and foundations
1. Works well for exploratory type projects -
“Projects may have a relatively clear mission, but the specific requirements
can be volatile and evolving as customers and development teams alike
explore the unknown”
2. Fits the process to the project. This is based on the assumption that each
project is different hence requires a different approach
3. Agile processes are designed to capitalize on each individual’s and each team’s unique
strengths: they adapt the process to the people
4.To be agile, one must balance flexibility and structure
5. Concepts drive action and behavior
6. Creativity and innovation occur in a slightly messy environment
7. Work with change rather than against it
8. Complex applications are not built; they evolve. People take time to understand systems and
hence are best built iteratively. Collaborative skills are of high importance in building
complex systems
Some factors that corroborate Agile style of development
1. Many ( or most) projects end up being very different from the initial vision
2. With today’s complex projects,understanding comes more from face-toface
interaction than from documentation. Agilists do not believe that a reliance on
heavy processes makes up for lack of skill, talent, and knowledge
3. Demanding certainty in the face of uncertainty is dysfunctional
4. The opportunity for competitive advantage comes from being more agile than the competitors
in one’s market.
5.The implicit and explicit goal of conformance to plan restricts a manager’s ability to steer the
project in innovative directions
6. Prototyping capture more information than the detailed text based requirements
Agile practices
Visioning – A good visioning practice helps assure that agile projects remain
focused on key business values (for example, ASD’s product visioning session).
Project initiation – A project’s overall scope, objectives, constraints, clients,
risks, etc. should be briefly documented (for example, ASD’s one-page project data sheet).
Short, iterative, feature-driven, timeboxed development cycles. Exploration
should be done in definitive, customer-relevant chunks
Constant feedback. Exploratory processes require constant feedback to
stay on track
Customer involvement. Focusing on business value requires constant interaction
between customers and developers
Technical excellence. Creating and maintaining a technically excellent product makes a major
contribution to creating business value today and in the future
Agile orgnizational practices
1. Agile organizations focus on building individual skills and on fostering a high degree of interaction
among team members and the project’s customers. Agilists believe that with today’s complex projects,
understanding comes more from face-toface interaction than from documentation. Agilists do not
believe that a reliance on heavy processes makes up for lack of skill, talent, and knowledge
2. Develops ability of an organization to continue to operate effectively in the face of
high market turbulence