Agile development is a method of working to rapidly deliver better software by utilizing cross-functional teams. When software development became more focused on Internet applications, the product development process was forced to become faster and more pliable. This development method stems from the belief in The Agile Manifesto, founded in 2001 by 17 software industry leaders. This manifesto has been refined and expanded by the non-profit organization the Agile Alliance, who provide an open-soruce, evolving guide around agile practices and terms, such as a focus on collaboration and iterative processes.
Agile development focuses heavily on a collaborative working style instead of the more rigid “waterfall” style (resembling an assembly line where one team member completes a task and hands it off to the next person). According to agile methodologies, communication between team members plays a crucial role, and is often considered more important than tools, processes or documentation. This is especially noticeable in the common use of pair programming, which is an agile practice in which two programmers will work at one station to review and make recommendations around code as it is being written. Effective communications is a necessary step throughout the iterative agile process of developing software.
The agile development process requires software development teams to enact a flexible approach to problem-solving, and should remain highly focused on product delivery and effective testing at every iteration. When enacting agile software development, it is important the developers maintain focus on producing the correct product for the targeted consumer or “stakeholder.” To help ensure this, there will oftentimes be a designated “product owner,” or someone who is responsible for clarifying goals on behalf of the stakeholders. Oftentimes, the product owner will help in crafting “user stories,” which are informal descriptions of the software from the point of view of the end user. These user stories become the focus of different iterations throughout the agile project management system, and are often recorded on index cards or in project management software so they can be easily referenced.
As part of the focus on iterations, agile methods recommend that projects be broken into smaller chunks, sometimes referred to as “sprints.” Sprints help to minimize upfront planning and allow for quicker changes to be made as needed. At the end of each sprint, the product owner will be present to ensure that the proper goals are being met, and to perform as much testing as possible at the end of the current sprint. Once a sprint is complete, agile teams will then start another small sprint, and they will continue iterating new sprints throughout the project lifecycle. These sprints allow for continual improvement, as changes can be made after appropriate user testing at the end of each sprint. Rather than having a completed project being tested, testing is integrated throughout the development process, so small changes can occur frequently instead of large changes all at once.
Agile development is a useful system as it helps:
- Develop higher quality products: Through continuous testing, adjustments can be made frequently, while maintaining the customer experience as the number one consideration. This helps ensure that bugs are worked out as part of development. Agile development means that the goal is always to deliver working software, rather than having to deliver patches immediately after release.
- Speed up development:Software development team members work in tandem and are in constant contact. This ensures that there are no long waits for one team to deliver their part of a project, as they all have frequent check ins and collaborations to increase output. The use of sprints help ensure that deadlines are being met, and that adjustments can be made if more focus is needed in a particular area.