Introduction
There are varying Agile development methods used for software design. The common trait that binds these methods is the promotion of development iterations, teamwork, collaboration and adaptability throughout the life-cycle of the project. Each phase has short-term goals planned to be achieved within that time-frame only. An iteration can last anywhere from one to four weeks, and multiple iterations may be required to release a product or new features. At the conclusion of each iteration, a working product can be demonstrated to stakeholders. Employing short-term planning with iterations allows the introduction or changes to requirements anywhere during the project lifecycle.
A consistent team is used throughout the lifecycle of the project instead of dedicated task-oriented teams introduced at specific phases, such as architecture or testing. Small teams (5-9 people) are used to improve team communication and collaboration. One team member is designated as the customer representative responsible for acting on the stakeholder's behalf. Agile methods emphasize working software as the primary measure of progress.
Strengths
Agile development methods are credited with easily adapting to changes in product requirements. Iterations warrant ongoing demonstrations of the product during the project lifecycle, permitting continuous feedback from stakeholders. Software testing is embedded in each iteration, reducing the risk of significant issues discovered late in the process. Agile development methods focus on rapid deployment of software products.
Weaknesses
Agile development methods are criticized as lacking structure and discipline. Little documentation of requirements leads to scope creep and uncontrolled changes to the product's requirements, often resulting in excessive budget and schedule delays. Developing software in small increments can lose sight of the strategic objectives of the project, perhaps detrimental to stakeholders with rigid timeline and budget requirements.