6  Agile Methodology

The Agile methodology is a modern project management approach that emphasizes flexibility, collaboration, and iterative development. It is widely used in software development and other industries where requirements may evolve over time, allowing teams to adapt quickly to changing needs.

6.1 Agile Manifesto and Principles

The Agile Manifesto, created in 2001 by a group of software developers, outlines the core values and principles of Agile methodology. It emphasizes flexibility, collaboration, and customer satisfaction in software development. It was developed as a response to the limitations of traditional, plan-driven project management approaches.

6.1.1 Agile Manifesto

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

That is, while there is value in the items on the right, we value the items on the left more.

6.1.2 Twelve Principles

  1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  2. Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
  3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference for the shorter timescale.
  4. Business people and developers must work together daily throughout the project.
  5. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
  6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
  7. Working software is the primary measure of progress.
  8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
  9. Continuous attention to technical excellence and good design enhances agility.
  10. Simplicity—the art of maximizing the amount of work not done—is essential.
  11. The best architectures, requirements, and designs emerge from self-organizing teams.
  12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

6.2 Frameworks

6.2.1 Kanban

The Kanban framework is a highly visual project management method that emphasizes continuous delivery without overburdening the team members. It is based on the principles of visualizing the work process, limiting work in progress, managing flow, making process policies explicit, implementing feedback loops, and collaborative or experimental evolution of the process.

Structure of a Kanban Board

A basic Kanban board (Figure 6.1) typically consists of the following columns:

  • To Do: Tasks that need to be started.
  • In Progress: Tasks currently being worked on.
  • Review/QA: Tasks that are ready for review or quality assurance.
  • Done: Tasks that have been completed.
%%{init: {
  "theme": "forest",
  "themeCSS": ".extension { fill: white !important; }; .divider { display: none; };"
}}%%

kanban
    column1[To Do]
        task1[Task 1]
        task2[Task 2]
    column2[In Progress]
        task3[Task 3]
    column3[Review/QA]
        task4[Task 4]
    column4[Done]
        task5[Task 5]
Figure 6.1: A Basic Kanban Board

The board’s simplicity and flexibility allow it to be customized to meet the specific needs of different teams and projects.

6.2.2 Scrum

Scrum is an Agile framework for managing product development that is iterative and incremental. It is designed to help teams work together more effectively by breaking complex projects into smaller, manageable sprints. Each sprint typically lasts 2-4 weeks and results in a potentially shippable product increment.

Key Roles

  • Product Owner: Responsible for defining the product vision, prioritizing the backlog, and ensuring the team delivers value.
  • Scrum Master: Facilitates the Scrum process, removes impediments, and ensures the team adheres to Scrum practices.
  • Development Team: A cross-functional group responsible for delivering the product increment during each sprint.

Key Events

  • Sprint Planning: The team plans what work will be done in the upcoming sprint.
  • Sprint: A time-boxed period during which the team works to complete the planned work.
  • Daily Scrum: A 15-minute daily meeting where team members synchronize their work and identify any impediments.
  • Sprint Review: The team demonstrates the completed work to stakeholders and gathers feedback.
  • Sprint Retrospective: The team reflects on their process and identifies ways to improve.
  • Backlog Refinement: Ongoing process of reviewing and updating the product backlog to ensure it is ready for future sprints.

The Scrum framework has evolved, with some companies adopting additional tools and practices beyond what is defined in the Official Scrum Guide. Since Scrum is no longer defined solely by the Scrum framework, it is essential to clarify how a team or company implements Scrum when discussing their processes.

6.2.3 Extreme Programming (XP)

Extreme Programming (XP) is an Agile software development framework that emphasizes technical excellence and customer satisfaction. It promotes practices such as pair programming, test-driven development, continuous integration, and frequent releases to improve software quality and responsiveness to changing customer requirements.

Key Features

  • User Stories: Short, simple descriptions of a feature told from the perspective of the user.
  • Pair Programming: Two developers work together at a single workstation, with one developer writing code and the other reviewing it.
  • Test-Driven Development (TDD): Writing tests before writing the code that makes the tests pass.
  • Continuous Integration (CI): Integrating code changes frequently into a shared repository.
  • Iterative Development: Developing software in small, manageable increments.
  • Frequent Releases: Releasing working software to customers regularly.
  • Collective Code Ownership: Allowing any team member to modify any part of the codebase.
  • Refactoring: Continuously improving the design of existing code without changing its functionality.
  • Sustainable Pace: Encouraging a work-life balance to prevent burnout.

6.2.4 ScrumBan

ScrumBan is a hybrid Agile framework that combines elements of Scrum and Kanban. It is designed to provide the structure of Scrum with the flexibility and visual management of Kanban. ScrumBan is particularly useful for teams that need greater adaptability than Scrum offers but still want to maintain some level of iteration and planning.

Key Features

  • Iterative Planning: Like Scrum, ScrumBan uses iterations (sprints) for planning and delivering work. These iterations can be time-boxed or flexible in length.
  • Pull System: Similar to Kanban, work items are pulled into the workflow based on team capacity rather than being assigned.
  • Planning on Demand: Planning sessions are held as needed rather than at fixed intervals.
  • Visual Workflow: Utilizes a Kanban board to visualize work items and their progress.
  • Work in Progress (WIP) Limits: Implements WIP limits to manage flow and prevent bottlenecks.
  • Continuous Improvement: Encourages regular retrospectives to reflect on processes and make improvements.
  • Flexible Roles: While Scrum roles can be maintained, ScrumBan allows for more fluid role definitions based on team needs.

6.2.5 Lean Software Development

Lean Software Development is an Agile framework that focuses on optimizing efficiency and minimizing waste in the software development process. Lean manufacturing principles inspire it and emphasize delivering value to the customer while reducing unnecessary activities.

Key Features

  • Eliminate Waste: Identifying and removing activities that do not add value to the customer.
  • Value Stream Mapping: Analyzing the flow of materials and information to identify bottlenecks and areas for improvement.
  • Continuous Improvement (Kaizen): Encouraging a culture of ongoing learning and process enhancement.
  • Just-In-Time Development: Producing only what is needed when it is necessary to reduce lead times.
  • Lean Metrics: Using metrics that focus on flow, cycle time, and customer value rather than traditional productivity measures.
  • Empowered Teams: Encouraging team autonomy and decision-making to foster innovation and accountability.
  • Decide as Late as Possible: Keeping options open and making decisions based on the most current information.
  • Build Quality In: Emphasizing quality throughout the development process to prevent defects and rework.