Skip to content

Instantly share code, notes, and snippets.

@MangaD
Created February 9, 2025 18:19
Show Gist options
  • Select an option

  • Save MangaD/38668e1820e8525923afc87e0485742c to your computer and use it in GitHub Desktop.

Select an option

Save MangaD/38668e1820e8525923afc87e0485742c to your computer and use it in GitHub Desktop.
Agile & Methodologies

Agile & Methodologies

CC0

Disclaimer: ChatGPT generated document.

Agile is a set of principles and values for software development (and increasingly, for other industries) that emphasize flexibility, collaboration, and customer satisfaction. The Agile Manifesto, published in 2001, outlines the core values and principles of Agile, advocating for a shift from heavy, plan-driven approaches to more flexible and people-centered methods. Since its inception, Agile has grown into a broad family of methodologies, each with its own set of practices and emphases.

In this explanation, I’ll provide a thorough overview of Agile itself, followed by detailed descriptions of the most important Agile methodologies, including Scrum, Kanban, Lean Software Development, Extreme Programming (XP), Crystal, Feature-Driven Development (FDD), Dynamic Systems Development Method (DSDM), and Agile Unified Process (AUP).


Agile: The Core Concepts

Agile Manifesto:

The Agile Manifesto outlines four key values:

  1. Individuals and interactions over processes and tools.
  2. Working software over comprehensive documentation.
  3. Customer collaboration over contract negotiation.
  4. Responding to change over following a plan.

Agile Principles:

Agile’s 12 principles include:

  • Early and continuous delivery of valuable software.
  • Welcoming changing requirements, even late in development.
  • Delivering working software frequently.
  • Encouraging close collaboration between business people and developers.
  • Building projects around motivated individuals and trusting them.
  • Prioritizing face-to-face communication.
  • Working software is the primary measure of progress.
  • Sustainable development pace.
  • Continuous attention to technical excellence and good design.
  • Simplicity—the art of maximizing the amount of work not done.
  • The best architectures, requirements, and designs emerge from self-organizing teams.
  • Regular reflection on how to become more effective, adjusting behavior accordingly.

These principles guide all Agile methodologies, although different frameworks may emphasize certain aspects over others.


1. Scrum

Overview:

Scrum is one of the most popular Agile frameworks, focusing on delivering iterative, incremental work through defined time periods known as sprints (usually 2-4 weeks). Scrum emphasizes transparency, inspection, and adaptation, and is particularly suited for complex projects.

Key Concepts:

  • Product Backlog: The prioritized list of features, enhancements, bug fixes, and technical work to be done.
  • Sprint Backlog: A subset of the Product Backlog that is selected for completion within the current sprint.
  • Sprints: Time-boxed iterations of work, usually lasting between 2-4 weeks, within which a potentially shippable product increment is created.
  • Scrum Team: Typically composed of the Product Owner (responsible for the backlog), the Scrum Master (responsible for ensuring Scrum is understood and enacted), and the Development Team (those who do the work).
  • Daily Standup (Daily Scrum): A short meeting (usually 15 minutes) where team members synchronize their work, discussing what they did yesterday, what they plan to do today, and any impediments.

Scrum Roles:

  1. Product Owner: Manages the Product Backlog, represents the customer’s interests, and makes prioritization decisions.
  2. Scrum Master: Ensures that the Scrum process is followed, removes obstacles, and facilitates meetings.
  3. Development Team: Cross-functional professionals who execute tasks and produce the increment.

Scrum Events:

  1. Sprint Planning: A meeting where the team plans the work for the upcoming sprint.
  2. Daily Scrum: A short, daily meeting to synchronize work and plan for the next 24 hours.
  3. Sprint Review: At the end of the sprint, the team presents the work done to stakeholders and collects feedback.
  4. Sprint Retrospective: A reflection on what went well, what didn’t, and how to improve in the next sprint.

Pros:

  • Clear roles and responsibilities.
  • Regular feedback and adaptability.
  • Continuous improvement through retrospectives.

Cons:

  • Can be rigid if team members don’t adhere to Scrum roles.
  • May require experienced Scrum Master to be effective.

2. Kanban

Overview:

Kanban is a highly visual method for managing work, which focuses on continuous delivery, improving efficiency, and limiting work-in-progress. Kanban is more flexible than Scrum in terms of roles and iterations, making it adaptable for teams who want less structure.

Key Concepts:

  • Kanban Board: A visual board that represents the flow of work, often divided into columns such as "To Do," "In Progress," and "Done." Cards (representing tasks) move through these stages.
  • Work in Progress (WIP) Limits: Limits on the number of tasks that can be in certain stages of development at any one time, helping to prevent overloading and encouraging focus.
  • Pull System: Work is “pulled” into the next stage of development only when the team is ready, preventing bottlenecks.

Pros:

  • Flexibility in work flow (no fixed sprints).
  • Focus on improving flow efficiency and eliminating bottlenecks.
  • Simple to implement, especially for teams transitioning to Agile.

Cons:

  • Less structure may result in less accountability if not properly managed.
  • Less emphasis on regular feedback loops like in Scrum.

3. Lean Software Development

Overview:

Lean focuses on eliminating waste, improving workflow, and optimizing efficiency. It originated from Toyota's lean manufacturing principles and was adapted for software development. Lean places a strong emphasis on delivering value to the customer and optimizing the development process.

Key Concepts:

  • Eliminate Waste: Avoiding unnecessary work or processes that don’t add value.
  • Amplify Learning: Encouraging experimentation and learning throughout the project lifecycle.
  • Decide as Late as Possible: Making decisions when they are most informed.
  • Deliver as Fast as Possible: Prioritizing speed of delivery to meet customer needs quickly.
  • Empower the Team: Allowing the team to make decisions and take ownership of their work.
  • Build Quality In: Ensuring high-quality standards throughout the development process, not just at the end.

Pros:

  • Focus on efficiency and customer value.
  • Encourages learning and adaptability.
  • Strong emphasis on team empowerment.

Cons:

  • Requires discipline in identifying and eliminating waste.
  • May require a cultural shift in organizations used to traditional development.

4. Extreme Programming (XP)

Overview:

Extreme Programming (XP) is an Agile methodology focused on improving software quality and responsiveness to changing customer requirements. It emphasizes frequent releases, paired programming, continuous testing, and close collaboration with customers.

Key Practices:

  • Pair Programming: Two developers work together at one workstation, reviewing each other’s code in real-time.
  • Test-Driven Development (TDD): Writing tests before the code is written, ensuring that each function meets its specification.
  • Continuous Integration (CI): Code is integrated and tested regularly (often several times a day).
  • Refactoring: Continuously improving code design to reduce complexity and improve maintainability.
  • Frequent Releases: Delivering small, frequent releases of working software.

Pros:

  • High-quality code due to practices like TDD and pair programming.
  • Constant customer involvement and feedback.
  • Encourages simplicity in design.

Cons:

  • Can be costly in terms of developer time (especially pair programming).
  • May be overkill for smaller, less complex projects.

5. Crystal

Overview:

Crystal is a family of Agile methodologies created by Alistair Cockburn, which is highly adaptable to different project sizes and team dynamics. The Crystal family is color-coded based on the size and criticality of the project, with Crystal Clear being suitable for small, non-critical teams and Crystal Red or Crystal Violet for larger, more critical projects.

Key Concepts:

  • Human-Centered: Crystal focuses heavily on the people involved in development and the ways they communicate.
  • Flexibility: Crystal methodologies adapt to the needs of the project, with no strict set of practices.
  • Frequent Delivery: Emphasis on delivering working software frequently and early.
  • Reflective Improvement: Teams are encouraged to reflect and adapt their processes continuously.

Pros:

  • Adaptable to different project sizes and criticality levels.
  • Strong focus on communication and collaboration.
  • Light process with minimal overhead.

Cons:

  • Less prescriptive, which may lead to inconsistency.
  • Requires a high degree of discipline and self-management by the team.

6. Feature-Driven Development (FDD)

Overview:

Feature-Driven Development (FDD) focuses on building software by developing features, which are client-valued pieces of functionality. FDD is highly structured compared to other Agile methodologies, blending Agile’s flexibility with a formal, model-driven approach.

Key Practices:

  • Feature List: The project is broken down into features (usually in the format: action, result, object), which are then implemented individually.
  • Model-Driven Development: FDD begins with a domain object model to provide a detailed understanding of the business domain.
  • Regular Builds: FDD emphasizes frequent, short iterations with regular, scheduled builds.
  • Role-Based: Teams are structured with specific roles, such as Chief Architect, Chief Programmer, and Domain Expert.

Pros:

  • Scalable to large projects due to the structured nature.
  • Emphasizes planning and architecture upfront.
  • Provides clear, measurable progress through feature completion.

Cons:

  • More rigid than other Agile methodologies.
  • Requires a detailed upfront design, which may lead

to less adaptability in rapidly changing environments.


7. Dynamic Systems Development Method (DSDM)

Overview:

DSDM is one of the earliest Agile methodologies, with a strong focus on governance and risk management. It emphasizes the need for clear business justification for projects and delivering in defined timeframes and budgets. It is well-suited for projects with strict time and budget constraints.

Key Concepts:

  • MoSCoW Prioritization: Requirements are categorized as Must have, Should have, Could have, and Won’t have.
  • Timeboxing: Work is divided into fixed-length time periods, similar to sprints in Scrum.
  • Business-Centric: Strong focus on aligning development with business needs.
  • Iterative Development: Like most Agile methods, DSDM advocates iterative development with regular delivery of functional software.

Pros:

  • Well-suited for projects with fixed budgets and strict timelines.
  • Provides governance and control, making it ideal for larger organizations.
  • Focus on delivering business value.

Cons:

  • More rigid and prescriptive than some other Agile methodologies.
  • Heavy on documentation compared to lighter frameworks like Scrum or Kanban.

8. Agile Unified Process (AUP)

Overview:

The Agile Unified Process (AUP) is a simplified version of the Rational Unified Process (RUP) that applies Agile principles. It aims to be iterative and incremental, with a strong focus on producing high-quality software through minimal and well-defined process steps.

Key Concepts:

  • Phases: The AUP is divided into four phases: Inception, Elaboration, Construction, and Transition.
  • Disciplines: There are seven disciplines (modeling, implementation, testing, deployment, configuration management, project management, and environment).
  • Minimalism: AUP reduces the complexity of the full RUP, keeping only essential processes and eliminating unnecessary overhead.
  • Iteration: Like other Agile methodologies, AUP focuses on iterative development cycles.

Pros:

  • A balanced blend of Agile principles with formal processes.
  • Scalable to large, complex projects.
  • Offers more guidance than less-structured Agile methodologies like XP or Crystal.

Cons:

  • Heavier on documentation and process compared to lightweight Agile frameworks.
  • May be overkill for small, simple projects.

Conclusion

Each Agile methodology has its strengths and weaknesses, and the best one to use depends on your specific project needs, team size, and organizational structure. Here’s a quick recap to help guide your choice:

  • Scrum: Best for teams looking for structured, iterative progress with defined roles.
  • Kanban: Ideal for teams wanting continuous delivery and flexibility without the strict time-boxing of Scrum.
  • Lean: Suitable for those focused on improving efficiency and eliminating waste.
  • XP: Great for teams wanting to improve code quality through practices like pair programming and TDD.
  • Crystal: Works well for teams needing a flexible, communication-focused approach.
  • FDD: Well-suited for large, complex projects requiring clear, structured development processes.
  • DSDM: Ideal for projects with fixed budgets and timelines, requiring strong governance.
  • AUP: Perfect for teams needing a structured Agile process with clear guidelines but without the full overhead of traditional RUP.

By understanding each of these methodologies, you can choose the right one to maximize productivity, deliver value, and respond to changes throughout your project lifecycle.


Agile vs DevOps

No, Agile is not a subset of DevOps, but the two are closely related and often complementary practices. Agile and DevOps are distinct methodologies with different focuses, but they both aim to improve software development and delivery by fostering collaboration, flexibility, and efficiency.

Key Differences Between Agile and DevOps:

  1. Focus and Scope:

    • Agile focuses on the development process itself, promoting iterative and incremental delivery of software, emphasizing collaboration between developers and customers, and adapting to changing requirements. It concentrates on improving how software is planned, designed, developed, and tested in short cycles (e.g., sprints).
    • DevOps, on the other hand, focuses on the end-to-end software delivery lifecycle, including not just development but also operations, deployment, and maintenance. Its goal is to bridge the gap between development (Dev) and operations (Ops) teams by automating processes, improving collaboration, and ensuring faster, more reliable software delivery.
  2. Roles and Teams:

    • Agile mainly involves development teams, product owners, and stakeholders. The methodology is centered on creating and iterating on features and meeting customer needs through close collaboration.
    • DevOps expands beyond the development team, involving operations and IT infrastructure professionals, and sometimes security teams (often referred to as DevSecOps). It emphasizes continuous integration (CI), continuous delivery (CD), automation, monitoring, and maintaining the infrastructure and systems that support software development.
  3. Practices and Tools:

    • Agile relies on frameworks like Scrum, Kanban, and Extreme Programming (XP), which focus on planning, executing, and reviewing small, iterative work increments. Tools commonly used in Agile are Jira, Trello, and other project management systems to manage backlogs, sprints, and task boards.
    • DevOps incorporates practices like continuous integration (CI), continuous delivery (CD), automated testing, infrastructure as code (IaC), and monitoring. DevOps tools include Docker, Kubernetes, Jenkins, Terraform, Ansible, and Prometheus, among others, to facilitate automation, deployment, and system monitoring.

How Agile and DevOps Complement Each Other:

  • Agile focuses on speed of development and customer feedback, ensuring that development teams are building the right thing by delivering small, workable pieces of software frequently.
  • DevOps ensures that the software developed can be delivered quickly, efficiently, and reliably by automating deployment and improving operational collaboration.

In short, Agile improves the speed and flexibility of development, while DevOps improves the speed, reliability, and automation of deployment and operations. Many organizations adopt both Agile and DevOps together to streamline their software development lifecycle (SDLC), with Agile guiding the development phase and DevOps handling the deployment and operational phases.

Thus, Agile and DevOps are distinct, yet complementary practices that together help achieve faster, more reliable, and continuous software delivery.


Backlog

A backlog in the context of Agile and project management is a prioritized list of tasks, features, bug fixes, or work items that the team needs to complete in the future. The term is commonly used in methodologies like Scrum and Kanban, where it plays a crucial role in organizing and planning work.

Why It’s Called a Backlog:

The term "backlog" originates from its traditional use to describe accumulated, pending work that hasn’t yet been completed. In software development, a backlog represents work that needs to be done but hasn’t started yet, essentially a queue of tasks waiting to be addressed. The idea is that these items are "backlogged" because they are not immediately being worked on but will be addressed in the future, based on priority.

Types of Backlogs:

  1. Product Backlog:

    • A list of all the desired features, improvements, and fixes for a product. It’s owned and managed by the Product Owner and constantly reprioritized based on feedback and business value.
    • Contains user stories, epics, technical tasks, and non-functional requirements.
  2. Sprint Backlog (in Scrum):

    • A subset of the product backlog selected for development during a sprint (a short, time-boxed period of development). It consists of tasks that the development team commits to completing during that sprint.
    • The sprint backlog is more immediate and actionable compared to the product backlog, which is more long-term.

Why a Backlog is Important:

  1. Prioritization:

    • A backlog helps teams focus on what’s most important first. Items are usually ranked based on customer needs, business value, or urgency, ensuring that the team works on tasks that provide the highest value.
  2. Transparency:

    • It provides visibility into upcoming work and the project’s overall progress, ensuring stakeholders and team members are aligned on what’s to come.
  3. Flexibility:

    • The backlog is dynamic and continuously updated to reflect changing priorities, customer feedback, or market conditions. It allows teams to be adaptive and responsive to changes.
  4. Organizing Work:

    • The backlog breaks down complex work into manageable pieces, helping teams estimate and plan their workload more effectively.

In summary, a backlog is a critical organizational tool that ensures work is well-prioritized, visible, and aligned with business goals. It’s named "backlog" because it represents work that is "in the back," waiting to be addressed, with new items added as the project evolves.


Sprint

A sprint is a fundamental component of the Scrum framework, which is commonly used in Agile development. It refers to a fixed, time-boxed period during which a team works to complete a set amount of work from the product backlog. Sprints are typically 1 to 4 weeks long and follow a regular cadence throughout the project.

Why It’s Called a Sprint:

The term "sprint" is used to emphasize the focus on speed, intensity, and urgency in completing a set of work within a short, fixed period. Just like a runner sprinting to reach a goal within a short time, a development team commits to completing a specific set of tasks or features within a defined time frame. The sprint metaphor highlights the concentrated effort and drive needed to reach the goal.

In contrast to traditional development cycles that can be lengthy, sprints are short, iterative, and focused. The name "sprint" suggests that, during these periods, the team pushes to achieve clear, incremental progress toward the overall product or project goals.

Key Characteristics of a Sprint:

  1. Fixed Timeframe:

    • A sprint typically lasts between 1 to 4 weeks, with 2 weeks being a common duration. The length of the sprint is consistent throughout the project to maintain a predictable rhythm.
  2. Sprint Planning:

    • At the beginning of each sprint, the team conducts a sprint planning meeting to decide which backlog items (features, bug fixes, tasks) they will work on during the sprint. This selection becomes the sprint backlog.
  3. Commitment to Goals:

    • The team commits to completing all the tasks selected during sprint planning. The goal is to have a potentially shippable product increment by the end of the sprint.
  4. Daily Standups:

    • During the sprint, teams hold short daily meetings (called daily standups or daily Scrums) to discuss progress, identify blockers, and ensure alignment.
  5. Sprint Review and Retrospective:

    • At the end of the sprint, the team holds a sprint review to demonstrate the completed work to stakeholders and gather feedback.
    • After that, they conduct a sprint retrospective to discuss what went well, what could be improved, and how to enhance future sprints.
  6. Incremental Progress:

    • The sprint is designed to deliver a small, incremental piece of the final product that is fully functional. Each sprint should bring the product closer to completion with tangible progress.

Why Sprints are Important:

  1. Focus on Delivering Value:

    • Sprints ensure that teams continuously deliver small, workable increments of the product, providing immediate value to stakeholders and users.
  2. Adaptability:

    • With short time frames, teams can quickly adapt to changes. If priorities shift or feedback from previous increments emerges, the team can adjust the upcoming sprints.
  3. Predictability:

    • The fixed length of sprints creates a predictable cadence, helping the team and stakeholders plan and manage timelines effectively.
  4. Team Collaboration:

    • Sprints encourage intense collaboration, with daily standups keeping everyone aligned and driving progress.
  5. Feedback Loops:

    • Frequent sprint reviews and retrospectives provide regular feedback loops, helping teams continuously improve both the product and their processes.

In summary, a sprint is a time-boxed development cycle aimed at delivering specific, prioritized work in a short time, with a focus on rapid, iterative progress. The name "sprint" highlights the team's focused, fast-paced effort to achieve the sprint goal within a defined timeframe.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment