Traditionally, the model used in software development involved consistent sequence of stages to design, build, and test software. This is called waterfall development model. Just like a river waterfall, the flow is only downstream and there was no means of water flowing upstream. Each development stage is done by a specialized group of people who then hand over the work to the next stage after completing their task. This can be seen as a very organized way of software development, but it comes with a cost. There is another model however, which makes it possible to develop software quickly and be able to respond to change. This was developed by a group of 17 software developers in 2001, and it is called Agile development model.
Let me start by highlighting some of the problems of using Waterfall development model. An obvious issue is that people at different stages focused more on doing what they are required to do, and after completing they just hand over the work to the next stage, never to see it again. There is no full ownership of the project from start to completion among the team members. Handover of work to the next stage may also be problematic as members of the next stage may misinterpret so information handed over to them. This may lead to a totally different product at the end which may not meet the needs initially intended for. The development process is also very rigid ans does not respond to changes that may take place at some point in the middle of development. By the time the development is over, the product may not be addressing any user needs and may therefore be obsolete, not mentioning the wastage in terms of development hours and money! Failing to respond to changes in the market is very painful and your company may end up being like kodak. You can have a look at the chaos report to understand the real challenges of the waterfall model of software development.
Agile development addresses these problems of waterfall development. This development model focuses on collaboration of team members, working software, customer collaboration and response to change. Collaboration among team members over processes and tools leads to collective ownership of the project by the members. There are no distinct development phases here and everything is integrated with the sole purpose of delivering a working software instead of elaborate documentation at the expense of software that solves the problem. As the team works closely with customers, there is a better understanding of the customer needs at every point during the development, which leads to a product that solves that the customer wants. The development does not only listen to customer needs but also accommodates the changes in the market. This is a very important survival and competitive tool in the current dynamic market that we operate in.
There are many variances of agile software development. Examples are extreme programming(XP), Scrum, Lean and Kanban. Scrum is built around a unit of work called the sprint and the activities that a team carries out to accomplish the sprint. Lean and Kanban are inspired by methods used by Japanese auto manufacturers to maximize productivity which emphasize a continuous flow of delivery with the team repeatedly picking up the item with the next highest value for development. XP, is so named because its founders proposed taking engineering best practices to the extreme. Examples of XP techniques include pair programming, code review, task driven development and uni-testing. Each method emphasizes self-organization of individuals and interactions within the team, measures success by delivering value with working software, involves the voice of the customer in the process of development and responds to changes in requirements and priorities.