What is Agile?
Agile was first introduced in 2001. Kent Beck and sixteen other noted software developers and consultants, referred to as the Agile Alliance, met in Utah to discuss lightweight development methods and signed The Manifesto for Agile Software Development, stating:
“We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
- » Individuals and interactions over processes and tools
- » Working software over comprehensive documentation
- » Customer collaboration over contract negotiation
- » Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.”
Agile software development refers to a group of software development methodologies that are based on similar principles. Essentially, the overall agile framework is based around iterative and incremental processes designed to deal with:
- » Ziv’s Law: Specifications will never be fully understood.
- » Humphrey’s Law: The user will never know what they want until the system is in production (and maybe not even then).
- » Langdon’s Lemma: Software evolves more rapidly as it approaches chaotic regions.
- » Wegner’s Lemma: An interactive system can never be fully specified or tested.
In essence, agile methods were developed in an effort to overcome perceived and actual weaknesses in conventional software engineering. Many of the perceived weaknesses revolved around the erroneous belief that software engineering is in itself documentation.
The 12 Agile Principles
- 1. Customer satisfaction is achieved by the rapid delivery of useful software.
- 2. Changing requirements are welcomed, even late in development for customer’s competitive advantage.
- 3. Working software is delivered more frequently – in weeks rather than months or years.
- 4. Working software is the principal measure of progress.
- 5. Key business units and managers work closely and day-to-day with developers and IT .
- 6. The building of projects is trusted in the hands of the most motivated, and the environment and support they need to get the job done is given.
- 7. Face-to-face communication is encouraged.
- 8. Simplicity is the focus.
- 9. Continuous attention to quality design and technical excellence is paid.
- 10. Self-organizing teams are encouraged.
- 11. How to be more effective is regularly reflected upon and then behaviors are fine tuned to reach new goals based on changing circumstances.
- 12. Sustainable development is promoted so all the stakeholders can maintain a constant pace.
The Agile Framework
- Modularity: The process is broken down into various components, also known as activities. The process prescribes a set of activities capable of transforming the vision of the project, software, system or product into reality.
- Iterative: By recognizing that software developers often get things wrong before they get them right, the Agile Framework focuses more heavily on short cycles usually completed within a few weeks. Within these cycles a set of activities is completed and refined until the deliverable is 100 percent correct.
- Time-Bound: Iterations make the software development project easier to plan. That said, agile developers can set more accurate deadlines, usually between one and six weeks, for each iteration and schedule them accordingly. These iterations also encourage developers to attempt only the activities necessary to meet the beginning iteration goals that have been set.
- Parsimony: Require the minimum number of activities necessary to mitigate risk and achieve goals. Minimizing activities also makes it easier to deliver against demanding schedules.
- Adaptive: The agile process makes it easier to react and adapt to change along with the new risks exposed during the cycle.
- Incremental: Rome wasn’t built in a day and neither are complex systems. By unit testing each increment independently, agile developers can build the systems parallelly, at different times and at different paces.
- Convergent: Attack all of the risks worth attacking. By proactively attacking the risks, the system can, therefore, roll-out in increments.
- People-Oriented: Considering all the stakeholders involved can help the organic evolution of the system. Empower the development team in order to increase their productivity, their performance and the quality of their work.
- Collaborative: Fostering communication is key to understanding how all the pieces of a project fit together.
- » Helps mitigate changing requirements and priorities
- » Lowers cost of change
- » Encourages higher quality, simpler code
- » Reduces risk and defects
- » Maximizes return on investment (ROI)
- » Provides visibility into project progress
- » Delivers business value earlier and more frequently
- » Needs consistent business involvement
- » Requires more discipline
- » May not be applicable all projects, all people and all situations, although it can be applied in many situations
- » Does not replace solid software engineering practice – you need to be a solid software engineer to be a solid agile software engineer
The Main Agile Software Development Methodologies