In 2001, 17 software developers gathered in Snowbird, Utah, to discuss new possibilities for creating software. They were concerned that the methods of that time, many of which developed before the internet, no longer provided results that satisfied developers or their clients. The development process was often too slow.
Client needs would change during the development period, and the software would have to be redone even before its first release. Clients also complained that they were hearing about software without ever seeing it work. In response to these concerns, the group released their Manifesto for Agile Software Development.
What is Agile Development?
Agile development is a group-centered way of writing software that emphasizes communication, coordination, and adaptation. Agile methods recognize that, while coding is often an individual activity, large software projects are best done through a team.
It used to be that clients would contract with a development company, explain the desired outcome and then wait for the result. In an agile method, the client is in frequent communication with the team leader.
In this way, the client is aware of the project’s progress and can also give input along the way. The development team can adjust to needs during the development process rather than at the very end.
Agile development teams are task-centered. During each development period, individuals or pairs are assigned a piece of the project. At the end of the development period, the team joins the individual pieces together.
Team members are normally in daily communication so that, while they are working on a smaller piece, they are always aware of the whole picture.
The agile development method assumes that needs will change along the way. Because the client is seeing the progress of the project, he or she may ask for changes at any time.
As the project begins to form, the client may also see a need for a new direction or emphasis. Strong communication between the client and the developer leads to a stronger final product.
The Importance of Iteration
An agile process is an iterative form of software development. Rather than taking on a development project all at once and following a long-term plan, agile developers break projects into pieces and work through one piece at a time. This process allows for more frequent testing and regular feedback from the client.
A common procedure is to work in two-week to one-month sprints. Team members are given individual or pair projects and are devoted to completing as much of their project as they can during the sprint period.
Every day, the team gathers to talk about progress, improve coordination and deal with problems. At the end of the sprint, the team assesses its progress. The client may be called in to see the current state of the project. The team then takes some time to develop goals for the next sprint period. They go through this process again and again until the project is done.
Software Is Always the Point
One of the common complaints of older methods was that they produced a fair amount of information about the software project without the client seeing the software until the very end. This led to clients who felt out of the loop and developers who were frustrated by rejected projects.
Agile development methods assume that working software is the point of development. Rather than spending much time talking about what the software will do, the goal is to produce working software that the client can experience and evaluate.
Most development projects these days involve several pieces. An online app will require a frontend landing page as well as several backend applications. In an agile system, the client can see and test each piece before it is assembled into a whole. This has several advantages.
- Detailed Testing: The client and developers can test individual pieces in detail before dealing with the whole package.
- Real-time Commentary: The client can make suggestions and changes while the development process is taking place.
- Frequent Interaction: The client is treated as an important part of the team rather than a source of funds.
Since that 2001 meeting, the agile method of developing software has become a standard practice in many companies. A number of methods such as Scrum, Kanban, and Extreme Programming have sprouted from that original agile vision. Developing software with an agile method leads to stronger projects and happier clients.