Agile Methods in Software Development
Why are Agile software development methods so important
Developing software is a difficult and risky activity. According to statistics, the biggest risks are:
- Expenses that exceed budget.
- Time consumption that exceeds the schedule.
- Features that do not solve the problems of the users.
- Low quality of the systems developed.
- Cancellation of the project for non-viability.
In the traditional concept, software development methodology is a set of associated activities and results, that end in the production of software. All development methodologies attempt, among other things, to reduce the high risk associated with software development.
A classic example of a traditional software development model is the cascade development, which for several decades was widely used in software development processes, and is still widely used today.
Even some non-cascade software development processes, such as the Rational Unified Process (RUP), are adopted in most projects, in a way that closely resembles the cascade model. In these projects, the process is used iteratively and incrementally, but there is still a strong developmental linearity, characterized by "smaller cascades" within each iteration.
Because these methods are based on linear models of development, they are naturally less flexible. Development models based on rigid requirements, defined in the initial phases of analysis, are premised on the fact, that these requirements are not changed until the end of the project, otherwise all initial planning will affect subsequent phases.
In this way, it is easy to understand that the cost of a change, grows exponentially as the development process progresses. This basic premise of traditional software engineering was formulated by Boehm in Software Engineering Economics [BOEHM, 1981]. The acceptance of this premise has as a natural consequence, a search for deterministic processes, since these promise less changes and greater predictability.
This principle also reflects and justifies to a certain extent the search for a linear, deterministic, specialized and focused execution. For this traditional model of development, it is necessary to assume premises that are not always easy to reach.
The traditional model assumes that the architecture is excellent, that the design is beautiful and correct and that the implementation can be corrected during the tests. Neither of these statements works well in practice, either in the traditional cascade model or in the iterative and incremental methodologies that use "smaller cascades" within each iteration.
Within this context of difficulty in achieving the success of development projects, agile methods have emerged.
Agile development is a result of the fact that many renowned professionals in the software engineering area, could only minimize the risks associated with software development, acting very differently from what is traditionally in books.
While each involved had his own preferred practices and theories, everyone agreed that in their previous experiences, successful projects had in common a small set of principles. Based on this, they created the Manifesto for Agile Software Development, often called the Agile Manifesto. The term Agile Development identifies development methodologies that adopt the agile manifesto principles. These principles are as follows (https://agilemanifesto.org/):
- “Individuals and interactions over processes and tools.”
- ”Working software over comprehensive documentation.”
- “Customer collaboration over contract negotiation.”
- “Responding to change over following a plan.”
The great importance of developmental methods, within the current context where we operate in a highly predictable and highly volatile world in relation to business dynamics, is the flexibility to accept change and respond to these changes in a short time, since the development iterations in general are short.