What is Agile Software Development?
Agile software development is an umbrella term for different project management methods and was designed as an alternative concept to the traditional waterfall method.
The agile approach is characterized by its iterative and leightweight processes which minimize feedback loops with clients and entrepreneurial risk and which foster better and faster results.
Agile software development emerged in the 1970s and gained ground in the 1990s when corporations realized that the technological development was progressing at such a fast speed that traditional management methods could no longer deliver optimal results. Specifications started to change during the course of a project. That's why developers started to experiment with more flexible project management approaches. Back then, agile methods were already used but still under different names.
A milestone of agile software development was the publication of "Extreme Programming" by Kent Beck in 1999 which laid the groundwork for further development of agile methodologies. In 2001 seventeen software developers, one of them Kent Beck, met in Utah to discuss the different lightweight methods which were in practice to that date. As a result of their discussion they published the Manifesto for Agile Software Development which defined principles, values and methods of the agile approach.
Values and principles
Agile software development sets different priorities than traditional software development but without rejecting all of its values and principles.
The 4 values of the Agile Manifesto
- Individuals and interactions are more important than processes and tools
- Working software is more important than comprehensive documentation
- Customer collaboration is more important than contract negotiation
- Responding to change is more important than following a plan
The 12 agile principles
The four values offer no actual guidelines for project managers. Therefore, Beck and his colleagues added twelve principles to illustrate how those values can be transfered into everyday business:
Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
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.
Agile software development is an umbrella term which describes a number of different agile methods.
The core element they all have in common is the iterative approach or the incremental delivery of software. In the traditional methodology, the different phases of conception, planning, execution, testing and launch were completed in chronological order while with agile software development a sprint is created for each piece or version of the software.
In the agile world, developers create software elements or versions and optimize them via customer feedback until a satisfying result is reached. Time and budget work as framework. In contrast, in traditional projects you define a clear scope upfront.
The most popular agile methods
Three of the most popular and widespread agile methods are Scrum, Kanban und Extreme Programming.
Agile software development with scrum is one of the most popular applications of the agile approach. It is widely used outside of IT development to manage projects of all kinds.
Scrum is characterized by small teams of developers (three to nine persons), short sprints of up to four weeks and a high level of self-organization in the developer teams.
Kanban is a system which originally was invented at Toyota for lean supply management. In project management its visual approach allows to identify bottlenecks fast, define and test improvement measures and to secure a consistent workflow.
At the core of Kanban (literally signboard in Chinese and Japanese) is a Kanban Board which is divided into three columns labelled as "To Do", "In Progress" and "Done". All tasks are written onto cards and placed in one of the three columns according to their status of completion. Each card is assigned to only one team member who is currently working on it. Often, there is a limit defined how many cards/tasks one team member can work on at the same time to make sure everyone is focussed and delivers results.
Kanban is a method to structure task management. It can be combined with traditional methods of project management, i.e. gantt chart or PERT chart.
The name Extreme Programming is a reference to the method's extreme application of agile principles.
Extreme Programming assumes that a client is not able to have a clear understanding of his requirements at the beginning of a project. That's why changes are mandatory during the course of a project. To avoid cost explosion, Extreme Programming implements very fast development cycles (iterations). Developers, managers and customers communicate on a regular basis and on eye level.
In contrast to Scrum which follows a clear framework, Extreme Programming knows little rules. Relevant stakeholders define their rules in meetings at the beginning of each project. The structuring elements are time frames as the focus of Extreme Programming is on effective time management. Teams agree on which tasks and routines have to be completed in a certain time frame and then repeat this process in iterations until the project is done.
More agile methods in software development
- Adaptive Software Development
- Feature-Driven Development
- Pragmatic Programming
Agile software development has different advantages in comparison to traditional methods like the waterfall model or the spiral model.
- Faster results: As the software is created in increments, developers are able to present first results early on.
- Better quality: Quality assurance and testing are key components in every sprint.
- Clear communication: Communication is at the core of agile methodologies. Customer requirements and stakeholder interests are much more likely taken into account and satisfied than in traditional models.
- Minimized risks: Working in sprints allows teams to become aware of mistakes and make corrections earlier and normally before a lot of financial damage is done.
- Higher rentability: Increments of the software are released early and while developers continue to work on further features the company can already benefit from the new software and generate more sales.
However, there are some downsides and risks attached to using an agile approach which shall not be unmentioned:
- Uncertainty: In some cases, there is a lot of uncertainty about the final result of the project which can lead to frustration, unwise decision making and sloppy quality of work.
- Time: You need to schedule more time for communication if you go agile as many face to face meetings are required.
- Soft skills: You work much more closely together with customers than in traditional project management. To succeed your customer probably needs training or some kind of introduction. Also, developers are encouraged to practice their collaborative and communication skills.
- Scope: Agile projects pose the risk of getting out of hand when a customer keeps on giving unclear and new specifications so that the scope changes constantly.
Integrating agile elements with the software development process is beneficial. Today, that opinion is hardly denied. However, the radical agile approach is not always the best choice. It demonstrates its strengths in complex projects and projects which start without a clearly defined goal. If you know that changes in scope will be necessary during the course of the project, agile methods are the best fit.
And as popular as agile has become, there is one key element to success which lots of companies miss: Corporations will only reap the benefits of agile if they are willing to not only change their workflow but also their mindset.