Skip to main content

Agile

Updated Mar 14, 2022 ·

Agile Software Development

Agile is a flexible, customer-centered approach to software development. It became official in 2001 with the creation of the Agile Manifesto.

  • Adapts to changing requirements
  • Delivers small, frequent updates
  • Prioritizes customer collaboration
  • Encourages continuous feedback and improvement

The Agile Manifesto

The Agile Manifesto is a set of guiding values and principles for software development. It emphasizes a customer-focused, iterative approach to software development, with a focus on delivering working software quickly and responding to change in a flexible and adaptive manner.

  • Individuals and interactions

    • Prioritizes collaboration over processes and tools
    • Emphasizes teamwork and communication
  • Working software

    • Focus on functional software over comprehensive documentation
    • Delivering a functional product that meets the customer's needs
  • Customer collaboration

    • Promotes customer collaboration throughout the development process
    • Encourages frequent feedback and iteration from customers
  • Responding to change

    • Adapts to changing requirements rather than rigidly following a plan
    • Evolving circumstances are a natural part of software development
  • Embracing uncertainty

    • Recognizes the complexity of development
    • Promotes flexibility and adaptability

Agile Principles

The manifesto lists twelve different principles:

  1. Customer focus

    • Deliver software early and continuously.
    • Prioritize customer satisfaction at every stage.
  2. Embrace change

    • Adapt to changing requirements, even late in the project.
    • Use change as a competitive advantage.
  3. Frequent delivery

    • Deliver working software regularly, ideally every few weeks.
    • Shorter timeframes are preferred for quicker feedback.
  4. Collaboration

    • Facilitate daily collaboration between business and developers.
    • Close communication ensures alignment on goals.
  5. Motivated teams

    • Build projects around motivated individuals.
    • Provide the support and trust needed for them to succeed.
  6. Face-to-face communication

    • Face-to-face is the most effective form of communication.
    • Use it to ensure clarity and quick decision-making.
  7. Working software

    • Progress is measured by delivering functional software.
    • Focus on tangible outcomes over documentation.
  8. Sustainable pace

    • Maintain a consistent, sustainable work pace.
    • Avoid burnout to ensure long-term productivity.
  9. Technical excellence

    • Continuous attention to technical quality enhances agility.
    • Good design improves adaptability to change.
  10. Simplicity

  • Focus on the essentials, minimizing unnecessary work.
  • Keep solutions as simple as possible.
  1. Self-organizing teams
  • The best outcomes come from self-directed teams.
  • Empower teams to make decisions about architecture and design.
  1. Continuous improvement
  • Regularly reflect on team performance and processes.
  • Make adjustments to enhance effectiveness.

The Agile Infrastructure and Velocity Movement

This movement extends Agile principles to IT infrastructure and operations, emphasizing speed, automation, and collaboration for efficient delivery.

  • Infrastructure as code

    • Use code and automation to manage infrastructure.
    • Increases speed, consistency, and efficiency.
  • Collaboration and communication

    • Break down silos between teams for better cross-functional work.
    • Emphasize open communication across departments.
  • Continuous delivery

    • Automate delivery pipelines to release value faster
    • Deliver value more frequently.
  • Velocity measurement

    • Measure and optimize delivery speed by identifying bottlenecks.
    • Eliminate inefficiencies to accelerate delivery and improve quality.
  • Resilience and scalability

    • Design systems that can handle changing demands and unexpected failures.
    • Emphasizes the importance of resilience and scalability

Agile Methods

The Agile Manifesto was intentionally open-ended, allowing for the evolution and adaptation of its ideas. Over time, several popular Agile methodologies have emerged.

  • Agile Scrum

    • Focuses on small, self-organizing teams.
    • Teams work in iterative sprints.
    • Daily, short meetings to track progress.
    • Constantly adapt deliverables to meet changing requirements.
    • Inspired by rugby’s scrum, where players gather to gain possession of the ball.
  • Lean

    • Aims to eliminate wasted effort in planning and execution.
    • Reduces cognitive load on developers.
    • Inspired by Lean Manufacturing principles.
  • Extreme Programming (XP)

    • More prescriptive about software engineering best practices.
    • Focuses on improving the quality of life for development teams.
    • Emphasizes collaborative work and continuous feedback.
  • Feature-Driven Development (FDD)

    • Develops software feature by feature.
    • Uses an overall model to estimate and plan feature delivery.
    • Assigns defined roles for the core development team and support staff.

Of these, Agile Scrum is the most widely used, with common Scrum concepts adopted across many Agile practices.

Sprints

In Agile, the software development life cycle (SDLC) consists of many quick iterations called sprints. Unlike the waterfall method, which has one long iteration, Agile emphasizes frequent delivery of working software.

  • Sprint Duration

    • Time-boxed to 2 to 4 weeks, ideally as short as possible.
    • Duration should be decided beforehand and rarely changed.
  • Sprint Goals

    • Teams take on tasks that can be completed within the sprint.
    • Software must be working and deliverable by end of sprint.
    • Software doesn't necessarily need to be always released.

Backlog

The backlog is a prioritized list of features created by the product owner, derived from the Requirements & Analysis phase.

  • Includes features not in the immediate release.
  • New features can be added anytime.
  • Product owner can reprioritize based on feedback.

User stories

As features rise in priority, they are broken down into user stories.

  • Should be small enough to complete in a single sprint.
  • If too large, it should be divided further.

A user story is a simple statement of what a user (or a role) needs, and why. The suggested template for a user story is:

Completing a user story requires completing all of the phases of the SDLC, with defined requirements from the product owner. The team taking on the user story needs to come up with a design for the task, implement it and test it.

Scrum Teams

Scrum teams are collaborative, self-managed groups ideally no larger than 10 members.

  • Daily Standups

    • Short meetings (max 15 minutes) held at the same time daily.
    • Sync team members on accomplishments, goals, and obstacles.
  • Facilitation

    • The scrum master facilitates standups and helps remove obstacles.

Fun fact: it's called a "standup" because ideally it should be short enough for the team to accomplish it without having to sit down.


Feedback