Definition of agile software development
Agile software development or agile development is an umbrella term for methods and practices with the aim of a more flexible and leaner development process.
Agile approaches are particularly helpful when the goals and environment (people involved, market requirements, technical environment/interfaces) change over the course of a long-term project. Agile software development can therefore primarily be found in environments that are characterized by dynamics. It can respond well to changing requirements, since development cycles are usually short. Requirements are also often only briefly described and only formulated directly before implementation begins.
Characterization of agile software development
Agile software development is characterized by iterative and incremental project processes: The design phase is reduced to a minimum. The development process produces executable software as early as possible. This is regularly coordinated with the customer. This should make it possible to respond flexibly to customer requests.
The general properties of agile methods – regardless of the specific framework – include:
- Iterations: circular process with analytical, creative and pragmatic components
- Progress: systematic further development of the software product, possibly also measurable using KPIs
- empiricism and reflection
- Rhythmization and ritualization in the team
- Agile mindset based on the agile software development manifesto
Agile software development background
The first approaches to agile software development emerged at the beginning of the 1990s, based on the incremental process model (since around 1957) and the evolutionary project management and adaptive software development of the 1970s.
With his book “Extreme Programming”, Kent Beck is considered one of the best-known early advocates of agile processes and methods.
The currently best-known and most common representative of agile software development is by far Scrum.
Manifesto of Agile Software Development: Values, guiding principles and principles of agile development
As early as 2001, four guiding principles were formulated as the Agile Manifesto:
- Individuals and interactions are more important than processes and tools
- Working software is more important than comprehensive documentation
- Cooperation with the customer is more important than contract negotiations
- Responding to change is more important than following a plan
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Changes in requirements are welcome, even late in development. Agile processes use changes to give the customer a competitive advantage.
- Deliver working software regularly within a few weeks or months, preferring the shorter timeframe.
- Subject matter experts and developers have to work together every day during 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 way to convey information to and within a development team is through face-to-face conversations.
- Working software is the most important measure of progress.
- Agile processes promote sustainable development. The clients, developers and users should be able to maintain a steady pace indefinitely.
- Constant attention to technical excellence and good design promotes agility.
- Simplicity — the art of maximizing the amount of work not done — is essential.
- The best architectures, requirements and designs are created by self-organized teams.
- At regular intervals, the team reflects on how it can become more effective and adjusts its behavior accordingly.
Phases of agile software development
The process of agile software development differs in parts depending on the framework. The example of the current industry leader Scrum shows a typical general process:
The development team transfers a limited set of requirements that the development team commits to from the product backlog to the sprint backlog. The sprint backlog moves into the next sprint, a timed development and release cycle. Within a sprint, the focus is exclusively on the selected requirements of the sprint backlog, the result of a sprint is a generally usable software product.
The process within a sprint includes the following phases:
- Plan: The team discusses the sprint, the work packages and responsibilities as well as any dependencies.
- Design – Develop – Test – Deploy: Analogous to well-known methods of classic software development
- Review: Presentation of the sprint result as a software product and discussion of the completed sprint. This last part is the retrospective and, depending on the presentation, a separate phase within a sprint
- Launch: The sprint result, the potentially usable software product, is handed over and the team moves on to the next requirements of the product backlog
Figure 1: Agile development with Scrum
Source: https://blog.pixelsafari.net/agiles-projektmanagement-scrum/
Methods of agile software development
In the field of agile software development, various frameworks have been established over time. The Best Quality Institute (BQI) compared these in a study and divided them into the dimensions of project management (PM), quality management (QM), requirements management (RM), system design/technical conception (SD), implementation (IMP), Test (T), Integration/Introduction (INT), Maintenance (W) and Operation (B).
SCRUM
Scrum – currently probably the most popular framework for agile development, described as an example in the previous chapter.
The development is organized in iterations, the “sprints”. An even sprint length allows the team to plan reliably and ensures faster and regular software updates. Sprints typically last four weeks.
Extreme Programming (XP) – the forefather.
Similar to Scrum, subject to numerous design and development phases, but with more focus on constant testing in order to discover errors as early as possible.
Adaptive Software Development (ASD)
In the phase called “Speculate”, ASD plans the entire project process and has a special focus on quality management
Crystal
Agile collection of methods with the maximum degree of freedom, comparatively little documentation, but a large proportion of communication within and between projects.
Dynamic System Development Method DSDM
DSDM is not only limited to the agile development method but includes a complete organizational model. It is a very mature but rarely used method
Feature Driven Development (FDD)
FDD is based on a role and process model that integrates well with classic project structures. Many companies find it easier to implement the FDD than with XP or Scrum.
Within all of these frameworks, similar practices for accommodating short-term changes are often used, e.g
- Agile testing
- Behavior Driven Development
- continuous delivery
- Continuous deployment
- Continuous integration
- pair programming
- Rapid application development
- quick code reviews
- constant refactoring
- story cards
- Test Driven Development
Pros and cons of agile software development
The advantages of agile development projects are obvious:
- Transparency and speed of change increase and lead to faster results,
- regular feedback from the customer,
- Risks and undesirable developments in the development process are minimized,
- Generally higher software quality,
- Adjustments and short-term changes to requirements are possible.
- fluctuating expectations of the customer,
- High need for communication with the customer (time and effort),
- Rarely consistent, clear content specifications (specifications),
- Unable to plan a completion date,
- focus on sprint goals,
- general specifications such as deadlines or budgets must be kept in mind separately,
Examples of agile software development
Agile software development with Scrum
The methods of agile software development are almost all based on the close cooperation of the project teams. In order to ensure this even with distributed teams, technical framework conditions – which have taken an enormous step forward in recent years with software tools for virtual collaboration – and the unrestricted acceptance of clear rules are necessary.
The aim must be to build up a feeling and a routine that it actually doesn’t make much difference whether the collaboration is virtual or physical. It’s difficult, but it’s possible.
Agile software development with distributed teams
The methods of agile software development are almost all based on the close cooperation of the project teams. In order to ensure this even with distributed teams, technical framework conditions – which have taken an enormous step forward in recent years with software tools for virtual collaboration – and the unrestricted acceptance of clear rules are necessary.
The aim must be to build up a feeling and a routine that it actually doesn’t make much difference whether the collaboration is virtual or physical. It’s difficult, but it’s possible.
Agile software development in large projects
At first glance, large- scale projects and Scrum do not go together: time dimensions and processes are simply too different. But even large projects have intermediate goals and tasks in cyclical day-to-day business outside of complex standard processes. These tasks need to be identified and implemented efficiently using agile approaches such as Scrum. Tasks with a high level of complexity, unclear requirements, and ignorance of the way the goal is achieved are suitable.
The integration of conventional project teams and the Scrum teams in the project organization is important. Mutual understanding and awareness of change are significantly important here. Then conventional management of large projects and an agile framework such as Scrum complement each other synergistically.
Requirements engineering and agile software development
As with large projects, the following applies: at first glance, it doesn’t fit together. Requirements Engineering (RE) attaches great importance to the documentation and analysis of the requirements of all stakeholders. This contradicts the agile approach of collecting requirements but only detailing them in rudimentary detail shortly before the start of a sprint.
In projects with large project teams, however, transparent documentation is essential. This is how the method of agile requirements engineering has developed in recent years.
At the beginning, for example, a general overview is built up through user stories and the associated requirements are prioritized. All high-priority requests are detailed immediately. The following rules apply to Agile Requirements Engineering:
1) For each requirement, choose the appropriate RE technique for its description
2) Choose the appropriate level of description for each requirement.
3) Do not use a uniform description method for all requirements.
4) Create descriptions only for requirements that are used directly.
5) Prioritize requirements based on their business value. The high-priority requirements are implemented first.
Figure 2: Agile development and requirement engineering
Source: https://www.elektronikpraxis.vogel.de/klassisches-requirements-engineering-und-agile-entwicklungsprozesse-kombinieren-a-284677/?p=2
In agile requirements engineering, requirements are only prioritized to the extent necessary for further assessment. And not every requirement is analyzed in detail in the same way.
Implementation of agile software development
Agile work in general, but especially in agile software development, requires above all common goals, a lot of personal responsibility, open communication, the ability to take criticism, customer proximity, the will to learn, a certain degree of maturity and willingness to self-reflect. The new method must be supported and shared equally from above and below. It is also important to follow best practices during the introduction or to seek external support. The consultants at Firnkorn and Stortz can contribute and support agile software development, some with more than 40 years of practical knowledge.
Your contact person at Firnkorn & Stortz on the topic of Agile Software Development
Firnkorn + Stortz GmbH
Thomas Firnkorn