Sunday, June 22, 2008

What is Agile Software Development

According to the definition in Wiki
Agile software development is a conceptual framework for software engineering that promotes development iterations throughout the life-cycle of the project
Agile is a set of processes for software development, that uses iterative, incremental techniques and relies on self organizing, self managing, cross functional teams.
Software developed during one unit of time is referred to as an iteration, which may last from one to four weeks. Each iteration is an entire software project: including planning, requirements analysis, design, coding, testing, and documentation. An iteration may not add enough functionality to warrant releasing the product to market but the goal is to have an available release (without bugs) at the end of each iteration. At the end of each iteration, the team re-evaluates project priorities. Agile methods emphasize working software as the primary measure of progress. From a product perspective, agile methods are more suitable when requirements are emergent and rapidly changing.

Companies are moving to agile processes because the technology marketplace demands its suppliers be highly responsive to change. In order to compete in the global economy, companies must move quickly to provide solutions to a client base that has more and more choices available to them. Agile approaches promise faster delivery of working code, higher quality, and an engaged development team that can deliver on its commitments. Traditional waterfall, with its long phases and heavy investment in “big up-front design,” lacks the flexibility to swiftly respond to the market.

Agile is a different way to work, one that requires greater communication and cooperation from its participants and greater leadership from its managers.

10 Key Principles Of Agile Software Development
  1. Active user involvement is imperative
  2. The team must be empowered to make decisions
  3. Requirements evolve but the timescale is fixed
  4. Capture requirements at a high level; lightweight & visual
  5. Develop small, incremental releases and iterate
  6. Focus on frequent delivery of products
  7. Complete each feature before moving on to the next
  8. Apply the 80/20 rule
  9. Testing is integrated throughout the project lifecycle – test early and often
  10. A collaborative & cooperative approach between all stakeholders is essential
From an organizational perspective, the suitability can be assessed by examining three key dimensions of an organization: culture, people, and communication.

In relation to these areas a number of key success factors have been identified (Cohen et al.)
The culture of the organization must be supportive of negotiation
  1. People must be trusted
  2. Fewer staff, with higher levels of competency
  3. Organizations must live with the decisions developers make
  4. Organizations need to have an environment that facilitates rapid communication between team members
Principles behind agile methods — The Agile Manifesto
Some of the principles behind the Agile Manifesto are:
  1. Customer satisfaction by rapid, continuous delivery of useful software
  2. Working software is delivered frequently (weeks rather than months)
  3. Working software is the principal measure of progress
  4. Even late changes in requirements are welcomed
  5. Close, daily cooperation between business people and developers
  6. Face-to-face conversation is the best form of communication
  7. Projects are built around motivated individuals, who should be trusted
  8. Continuous attention to technical excellence and good design
  9. Simplicity
  10. Self-organizing teams
  11. Regular adaptation to changing circumstances
Agile Vs Tradition Methodology
Both agile and traditional development recognize the triple constraint: cost, schedule, and scope. But whereas traditional development advocates locking down the requirements so that schedule and cost can be estimated, the agile approach says that scope is always changing and therefore schedule and cost should be fixed. This way projects don’t become death marches, and the product is developed in a fashion where it’s in a perpetual releasable stat
Agile means completely new environment where the team makes decisions instead of being told what to do. It means more individual responsibility for team members, and more facilitation skills required for the project manager