Agile software development

Agile software development is a group of interactive software development methods, where requirements and solutions are adjusted in progress between Agile teams.

    The most popular Agile methods are:
  • Agile Modeling
  • Agile Unified Process (AUP)
  • Agile Data Method
  • DSDM
  • Essential Unified Process (EssUP)
  • Extreme Programming (XP)
  • Feature Driven Development (FDD)
  • Getting Real
  • Open Unified Process (OpenUP)
  • Scrum and Lean software development

It can also involve practices such as Test Driven Development (TDD), Behavior Driven Development (BDD), Continuous Integration, Pair Programming, Planning poker, and RITE Method . This work methodology requires well-organized teamwork, cross-functionality, self-discipline and profound business approach in rapid software development.
The term was first known in 2001, when the Agile Manifesto was published. However, the method had been evolving since 1990s, when development methodologies alternative to waterfall model were introduced. They were a fresh "lightweight" alternative to so-called "heavyweight" methods used before in management and software development.

One of the main features of Agile software development, that distinguishes it from other methods, is minimal planning and no long term planning involved. Agile puts responding to change first over following a plan, individuals and interactions over processes and tools, working software over comprehensive documentation, and customer collaboration over contract negotiation The development process is broken into small tasks in short time frames of one to four weeks.

Agile software development cycle

A typical Agile software development cycle consists of requirements testing, design, unit testing and acceptance testing performed by the customer. Even if product obtained in such a way does not fulfill all the criteria of the stakeholder, it can be easily adjusted in another iteration. Agile methods focus on adapting quickly to constant changes. When the requirements for the project change, the team has to change, too. This is the reason, why the teams do not try to anticipate future and compensate planning with flexibility. If realities change, the original plan will no longer be useful, so there is no point in planning in advance. Their goal is to release a ready product at the end of each cycle. That also reduces the risk and speeds up product adaptation to requirement changes. Working software is also the principal measure of progress and allows to asses development efficiency.

New releases

To develop new releases, Agile teams of five to nine people are created. In such a team the functionality and ability to self organize is important, whereas corporate hierarchy or roles are not that important. Each team takes full responsibility for their task and decides individually how it is going to be carried out. Members of Agile teams should communicate personally and avoid written documents. If they work in different locations they should benefit from videoconferencing, telephones or e-mail on a daily basis. However, most Agile teams work in bullpens, which are open offices enabling direct communication and facilitating tight cooperation. During an iteration a brief session is held every day to summarize yesterday's tasks, report obstacles and present today's work.
It is crucial, that the rising problems are openly discussed and solved immediately. A typical Agile software development team also contains a customer representative, who is selected by the customer and is in constant contact with the stakeholder during iteration. This person is likewise responsible for progress review at the end of the cycle, helps to optimize the return on investment and ensures, that the product meets customer needs and company goals.

Although Agile software development is a very efficient and business value-oriented method, it might be difficult to introduce in large scale and in companies, where waterfall management and software development still exist.