Agile Software Development
What is agile software development?
Agile software development encompasses a variety of methodologies and work practices that aim to increase transparency and reduce time to market of products. Thereby risks are reduced, because incorrect assumptions are recognized at an early stage. This is achieved through an iterative approach in which, in comparison to classic approaches such as the waterfall or V model, the entire product is not described and planned before the start of development. In agile software development, development begins with the smallest possible version of the product, which is then further developed at regular and short intervals through feedback from customers.
The first ideas for agile working were already developed in the middle of the last century. In the early 1990s, the movement received a boost with the development of the "Extreme Programming" methodology, and in 2001 the term agile was finally coined in the Agile Manifesto.
The Agile Manifesto
The Agile Manifesto is a collection of values and principles that underlie all agile ways of working to develop better software.
The Agile Manifesto describes the following values:
- Individuals and interactions are more important than processes and tools.
- Working software is more important than comprehensive documentation.
- Collaboration with customers is more important than negotiating contracts.
- Reacting to change is more important than following a plan.
Of course, this classification does not mean that, for example, comprehensive documentation is not important. However, agile values are proving to be more important for developing software faster and with higher customer acceptance.
In addition to values, agile software development is based on these principles:
- The highest priority is to satisfy customers by developing valuable software early and continuously.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- Business people and developers must work together daily throughout the project.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
- Working software is the primary measure of progress.
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- Continuous attention to technical excellence and good design enhances agility.
- Simplicity – the art of maximizing the amount of work not done – is essential.
- The best architectures, requirements, and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Advantage of agility: Greater benefits for customers
By following agile values and principles, it becomes possible to develop software better, i.e. faster with higher customer satisfaction. This means that customers receive software that exactly meets their requirements. In non-agile approaches, it is usually not yet clear during requirements gathering what is really needed. This is because it is difficult to envision exactly how the finished software will work. Very important requirements often become clear only after the first trial and error. This is exactly what is achieved through iterative development with the continuous involvement of customers.
In classical procedure models it is not unusual that there is a phase after the initial development of the described software, in which the software is tested by customers and change requests are taken up, in order to convert them afterwards. The problem with this procedure is that often only cosmetic changes can be made, since fundamental changes would be too complex and thus expensive. With the agile approach, fundamental changes are usually identified at an early stage and changes can be implemented with less effort.
Disadvantage of agility: Implementation in everyday business operations
In the B2B environment, the greatest organizational challenge in agile software development is to map the agile way of working in the contractual relationship as well. Classic contracts contain a concrete description of the deliverable. In the agile approach, however, it is not at all clear at the beginning how the product will look in the end. However, there are already contracts that solve this problem by distributing the risk of ambiguity among the contract partners. This blogpost explains the principles: Link.
Another challenge is that for agile projects to be successful, customers need to be available on a regular basis to provide feedback and thus plan next steps. However, it can be difficult to get commitment from customers, especially if they have never worked agile before. It is therefore essential to make customers aware of their obligations to participate.
As mentioned above, the basics of agile software development have been around for a long time. Therefore, it is not surprising that there are already a variety of working models (frameworks) that help to transfer the agile values and principles into everyday work:
- Scrumban (a combination of Scrum and Kanban)
- XP (Extreme Programming) in combination with Scrum
- Lean Startup
Regardless of which agile framework is used, there are practices that support agile software development. Examples of practices are:
- Continuous Integration
- Continuous Delivery
- Continuous Deployment
- Test Driven Development
- Rapid Application Development
- Code Reviews
- Pair Programming