Saltar al contenido principal

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.