Agile Software Development is an iterative and incremental approach in software development, where requirements and solutions evolve through a tight collaboration of self-organizing cross-functional teams.
Simply put, Agile Software Development is a group of software development methodologies that work quite well when:
- projects are not mission-critical;
- business requirements change extremely fast;
- there are great developers available;
- development teams are small;
- development culture and mentality favors self-organization and self-learning.
In other words, Agile works quite well in situations when some unique software project has to be delivered really fast in order to seize the market opportunity. This works because Agile software methodologies allow development teams to adapt quickly to the rapidly changing business requirements. This happens because of:
- short development iterations allowing to start getting feedback early in the project's life-cycle and incorporate it into the product fast by delivering working software repeatedly and in a timely manner;
- continuous integration helping to reduce development friction and improve quality of a rapidly developing project in self-organizing environment;
- feature-driven development focusing development on delivering features (functionality) bringing real business value to the client (and the project);
- lean software development laying out common principles for efficient software development process;
- eXtreme Programming pushing lightweight software development methodologies to the extreme.
Long-term planning (along with some other formalities of a totally controlled project management process) is mostly sacrificed in favor of the flexibility, fast delivery and self-organization. In such a situation we still have to maintain high quality of the project deliverables (while reducing the resource consumption). This is achieved with the help from:
- test-driven development - provides foundation for the Continuous Integration and facilitates change while maintaining stability of the software project;
- pair programming - improves code quality and allows to have more efficient knowledge sharing.
- Agile Software Development on Wikipedia
- Lean Software Development on Wikipedia
- Scrum on Wikipedia
- Planning poker on Wikipedia
- eXtreme Programming on ExtremeProgramming.com