Demystifying Agile Software Development

Agile has been a popular software development methodology since the early 2000s. Despite being around for over two decades, agile can still be misunderstood or incorrectly applied.

What is Agile?

Agile software development is rooted in the Agile Manifesto, which was established in February 2001 following a meeting by a prominent set of individuals from the software development community. The goal of this meeting was to define a set of principles that could steer software development in a more adaptive and customer-focused direction, and from this discussion, the Agile Manifesto emerged.

The manifesto is guided by a set of four values that are more broadly underpinned by 12 principles:

  1. Individuals and interactions over processes and tools
    Software development is a collaborative exercise that requires open communication, shared ideas, and effective collaboration within a team. While processes and tools are essential, success in software development relies on the collective skills, creativity, and collaboration of team members. This value focuses on the importance of people over rigid processes or specific tools, emphasising the significance of the skills and individuals who form the development team.
  2. Working software over comprehensive documentation
    Other, more traditional, software development methodologies often emphasise extensive upfront documentation. This value favours the delivery of working software as the primary focus. It acknowledges the essential role of documentation but highlights the importance of meeting end-users’ needs. Prioritising working software enables more frequent value delivery, facilitates stakeholder feedback, and ensures alignment with user expectations. This approach enhances flexibility in responding to changing requirements, mitigating the risk of investing significant time in potentially outdated or irrelevant documentation.
  3. Customer collaboration over contract negotiation
    Traditional development involves lengthy contract negotiations and rigid project plans. Rigid project plans do not accommodate the unpredictable and changing environment that most businesses operate within. This value stresses customer collaboration throughout the development process, acknowledging evolving needs. Continuous collaboration ensures software is aligned with customer expectations and focused on providing value. Regular customer feedback enables adjustments, fostering a stronger partnership and shared understanding of goals between the development team and the customer.
  4. Responding to change over following a plan
    Building software is a complicated process, made more challenging by the fact that a business (nor the environment it operates in) stands still while software is being developed. This value recognises the inevitability of change. It encourages an open and responsive mindset, emphasising the importance of adapting plans to evolving requirements, technology, or market conditions. Embracing change allows teams to stay agile and responsive, facilitating quicker adaptation to shifting priorities, emerging technologies, and unexpected challenges. This flexibility is essential for delivering software that remains relevant and valuable in a rapidly changing environment.

These values put people, their skills and collaboration at the centre of the software development process. Agile recognises the importance of the need to adapt, flexibility, and responsiveness in delivering high-quality software that meets the evolving needs of users and stakeholders. As a result, teams that embrace these values are better positioned to navigate the complexities of modern software development successfully.

These four values are reflected in the twelve principles that comprise the Agile Manifesto:

  1. Customer satisfaction by early and continuous delivery of valuable software.
  2. Welcome changing requirements, even in late development.
  3. Deliver working software frequently (weeks rather than months).
  4. Close, daily cooperation between business people and developers.
  5. Projects are built around motivated individuals, who should be trusted.
  6. Face-to-face conversation is the best form of communication (co-location).
  7. Working software is the primary measure of progress.
  8. Sustainable development, able to maintain a constant pace.
  9. Continuous attention to technical excellence and good design.
  10. Simplicity—the art of maximising the amount of work not done—is essential.
  11. Best architectures, requirements, and designs emerge from self-organising teams.
  12. Regularly, the team reflects on how to become more effective, and adjusts accordingly.

These 12 principles are the Agile Manifesto. Yes, it’s deliberately this brief and open-ended to encourage interpretation and adaptation – which internalises the manifestos 12th principle of “Regularly, the team reflects on how to become more effective, and adjusts accordingly” and the first value of “Individuals and interactions over processes and tools”. 

Agile Frameworks

The Agile Manifesto is a set of principles, a philosophical foundation, and nothing more than that.

The specifics of how to apply the principles of agile can vary based on the circumstances of any given project.

However, a number of popular agile frameworks have emerged which can form a starting point for applying agile software development to a project.

Some of the most popular agile frameworks include:

  • Scrum
    Scrum is perhaps the most widely adopted Agile framework, emphasising teamwork, accountability, and iterative progress. With Scrum, work is divided into fixed-length iterations called sprints, typically lasting between two and four weeks.

    The Scrum framework includes key roles such as Scrum Master, Product Owner, and Development Team, each with specific responsibilities.

    Daily stand-up meetings, sprint planning, and sprint review sessions are integral components of the Scrum methodology.
  • Kanban
    Kanban focuses on visualising work and optimising the flow of tasks through the development process to a state of completion.

    Kanban uses a visual board with columns representing different stages of development (e.g., to-do, in progress, done). Work items, represented as cards, move through the board as they progress.

    One of Kanban’s core principles is to limit “work in progress (WIP)”, which in turn focuses on prioritising the completion of in-progress work over starting new work items, as a result. Kanban encourages continuous delivery.
  • Extreme Programming (XP)
    XP is an Agile methodology that places a strong emphasis on technical excellence and customer satisfaction.

    XP includes practices such as pair programming, test-driven development (TDD), continuous integration, and regular releases.

    The goal of XP is to deliver high-quality software incrementally, with a focus on customer feedback and collaboration.

A word of caution

Agile methodologies can provide a good framework for practices and activities that can facilitate agile development. However, it is possible, and even increasingly common to use an agile framework without being truly agile.

Agile is about a mindset rather than following processes, tools, or specific ceremonies. Remember that the first value is “Individuals and interactions over processes and tools”. Blindly adopting Scrum, Kanban or some other framework and refusing to adapt it to a team’s specific circumstances is a common failure that we see within the industry – just because a project team doesn’t follow the textbook definition of Scrum doesn’t make it “not agile”. There could be legitimate and valid reasons to deviate from Scrum to maintain agile principles given the right circumstances.

This failure ultimately stems from a misunderstanding of what agile is – agile is about following the agile principles rather than specific processes. If the specific processes were unilateral, the manifesto would have dictated the use of Scrum, Kanban, XP or some other framework.

These are some of the common pitfalls to avoid when adopting an agile framework:

  • Lack of Agile Mindset
    Adopting a framework isn’t enough if the mindset isn’t there. We could apply scrum to a project, but refuse to adapt the requirements based on feedback as we go from sprint to sprint.

    Or we could opt to make decisions that would limit feedback from stakeholders or unintentionally increase cycle times.
  • Rigid Adherence to Processes
    If a team rigidly follows processes defined by an agile framework without adapting them to their unique context or without being open to change, they have missed out on the flexibility and adaptability that agile principles encourage.
  • Overemphasis on Ceremonies:
    This is often the most common and dangerous pitfall.

    Some teams might focus too much on the ceremonies of a given framework (such as daily stand-ups, sprint planning, and reviews) without truly understanding the principles behind them. This can lead to a superficial implementation of Scrum rather than a genuinely agile approach.

    To be truly agile, teams should not only adopt specific frameworks like Scrum but also cultivate an agile mindset, value collaboration and feedback, and be willing to continuously inspect and adapt their processes to improve efficiency and deliver greater value to customers.

Conclusion

Agile methodologies focus on an adaptive and collaborative approach to software development, with a strong focus on continuous improvement. The iterative nature of Agile enables swift responses to changing requirements and ensures regular delivery of incremental value. With a focus on customer collaboration, Agile ensures that delivered software aligns closely with user expectations. Overall, Agile empowers teams to efficiently deliver high-quality products, reduce time-to-market, and maintain adaptability in a rapidly evolving project landscape.

If you’re interested in understanding more about agile or how we can help you deliver your software projects using an agile approach, then get in touch!