Agile is an incremental and iterative approach to software development that has become widely used in the software industry. Although you will have most likely heard people talk about ‘being Agile,’ and ‘doing Agile,’ it’s important to understand that Agile is a framework, a set of principles, rather than an exact method. So, then what is Agile software development?
The Agile Manifesto
The Agile methodology is comprised of four main principles, which are outlined in the Agile Manifesto.
Individuals and interactions over processes and tools – The Agile methodology treats software development as interactions between individuals, a human process, rather than viewing the software development team as a set of tools in a process. Agile encourages more cross-functional communication and changing the traditional organisational structure of a software company into smaller teams who work much closer together.
For example, the DevOps practice where software product teams are restructured to include people involved at all stages of the software development process for a product, rather than teams based on which function of the process they complete. Each product team typically includes everyone from the people who deal with the customers, to the people who do the high-level design software, to the people who are coding and reviewing and testing it, all in one team.
Working software over comprehensive documentation – The idea behind this principle is to get a solution up and running for the customer as quickly as possible. Once the working software has been released, customers gain initial value rather than waiting until the end of the project for the value transfer. The developers edit and iterate parts of the working software based on the feedback from customers to get it right, as opposed to trying to document every detail down in the initial design specs based on intuition and waiting until the development is complete to get feedback.
Customer collaboration vs. contract negotiation – Traditionally software development projects could be very adversarial between the customer and the company building the software solution. The development process would begin with lengthy negotiations over contract requirements before the design process could be started. However, most software projects are no longer treated like big engineering jobs, so it doesn’t have to be that way.
Software is more editable than a construction project. It’s easier to take a single piece of code out to test and measure it, or make changes, than to say; put up a brick wall, then tear it down and replace it with a wooden wall, then tear it down and keep changing the materials until the customer is happy with it. Focusing on customer collaboration promotes getting plenty of feedback early from the customer about what’s working and what’s not, and then iterating pieces of the code based on that feedback.
Responding to change over following a plan – Responding to change is about looking at trying to adapt as you go through the software development process. Using the incremental and iterative approach where you’re saying, “Here’s a step, let’s see if it works for the customer and let’s plan future steps based on how this one played out,” as opposed to using the traditional infrastructure-based or Waterfall approach where you have a giant project that you plan right from the start and then execute based on that plan.
Those are the four key parts to the Agile Manifesto and how they tend to play out in theory, and the intent behind them. But, what does this look like in practice and how do you know if you’re doing it?
Agile in Practice
For most small-to-medium-size software companies, the most practical approach to Agile is Scrum, specifically using the time-based concept of sprints. If you look at almost every software company that uses an Agile approach, they’re using sprints – where they plan out, generally, a fortnight’s worth of development work to create a value drop or deployable piece of code, and then focus and execute on only that planned chunk or increment.
Scrum may be one of the most highly-used and practical ways that the Agile methodology tends to be implemented, but it’s important to remember to distinguish between the framework of Agile and the practical application. There are multiple process models which can be used to manage software development following the Agile framework.
Software development teams following the Agile approach typically adopt a collaborative and iterative process where requirements and solutions evolve, with rapid delivery of value drops, rather than the traditional ‘plan, execute, deliver.’