# Agile

## What is Agile?

Agile is an iterative approach to project management and software development that prioritises customer feedback, collaboration, and adaptability. Rather than following a rigid, long-term plan, Agile breaks work into smaller, manageable chunks known as iterations or sprints, which are completed one at a time.

The process encourages continuous involvement from customers or stakeholders, ensuring the project stays aligned with their needs and expectations. Regular delivery of these smaller pieces allows for ongoing feedback and adjustments.

At its core, Agile values flexibility. Plans are not set in stone and can evolve based on what is learned and the feedback received. It also fosters teamwork by promoting close collaboration and shared responsibility, helping to build ownership and accountability across the team.

#### What is Agile by CircleCI

{% embed url="<https://circleci.com/topics/agile/>" %}

{% embed url="<https://www.youtube.com/watch?v=QLvBK9stdoM>" %}

{% embed url="<https://www.youtube.com/watch?v=Reqcvr9bcbQ>" %}

{% embed url="<https://www.agilealliance.org/agile101/12-principles-behind-the-agile-manifesto/>" %}

### User Stories

User stories are a simple way to describe a feature or function from the perspective of the user. They help teams shift their focus from writing about requirements to having conversations about them. Each story is a short, written description that sparks discussions about what the user needs and how the product should be built to meet those needs. They are written using the following template:

As a (type of user), I want (some goal) so that (some reason).

#### Examples

1. As a customer, I want to be able to search for products by category so that I can easily find what I'm looking for.
2. As a user, I want to be able to log in with my social media account so that I can quickly create an account.
3. As a store owner, I want to be able to track inventory levels so that I can avoid stockouts.
4. As a student, I want to be able to submit assignments online so that I can complete my coursework on time.
5. As a teacher, I want to be able to grade assignments online so that I can provide timely feedback to students.

User stories are crucial in Agile environments, serving as the foundation of the development process. They center the development process around the user, ensuring the team builds what the user needs. By facilitating clear communication and collaboration between technical and non-technical team members, user stories foster a shared understanding of the product vision. This shared understanding helps teams prioritise features based on their value to the user, leading to a more efficient and effective development process. User stories are also flexible and adaptable, allowing for changes in requirements as the project progresses. User stories encourage collaboration between the development team, product owner, and stakeholders, leading to better decision-making and problem-solving. While user stories are not the only tool in the Agile toolkit, they are undoubtedly one of the most important, helping to ensure that the final product delivers value to the user.

{% embed url="<https://www.productplan.com/learn/break-product-features-into-user-stories/>" %}

{% embed url="<https://www.mountaingoatsoftware.com/agile/user-stories>" %}

{% embed url="<https://teamhood.com/agile/user-stories-for-agile-and-scrum/>" %}

{% embed url="<https://www.atlassian.com/agile/project-management/user-stories>" %}

{% embed url="<https://www.wrike.com/agile-guide/user-stories-guide/>" %}

### Epics

Epics are a collection of user stories, tasks, or bugs that span across multiple sprints — with a common objective. They are a large body of work that is too big to be completed in a single sprint. It's a high-level user story that needs to be broken down into smaller, more manageable user stories to be delivered over multiple sprints. Think of an epic as a large project that encompasses multiple features or functionalities. By breaking down epics into smaller user stories, Agile teams can prioritize work, manage complexity, and deliver value incrementally.

{% embed url="<https://www.zoho.com/sprints/epics.html>" %}

{% embed url="<https://www.atlassian.com/agile/project-management/epics-stories-themes>" %}

{% embed url="<https://clickup.com/blog/epics-vs-features/>" %}

### Initiatives

Initiatives are collections of epics that drive toward a common goal.

{% embed url="<https://businessmap.io/agile/project-management/tasks-epics-initiatives-themes>" %}

{% embed url="<https://producthq.org/agile/project-management/stories-epics-vs-initiatives/>" %}

{% embed url="<https://www.cplace.com/en/glossary/initiative/>" %}

### Sprint Planning

Sprint planning is a crucial Agile ceremony where the development team and product owner collaborate to plan the work for the upcoming sprint. During this meeting, the team selects user stories from the product backlog that can be completed within the sprint timeframe. The team then breaks down these user stories into smaller, more manageable tasks. The goal of sprint planning is to create a shared understanding of the work to be done, estimate the effort required, and create a plan for completing the work within the sprint.

{% embed url="<https://www.atlassian.com/agile/scrum/sprint-planning>" %}

### Stakeholders

Agile and scrum teams have two key groups of stakeholders: organisational leaders and customers or end-users. The success of the project relies on understanding and addressing the goals of both groups. The Product Owner plays a crucial role in balancing and prioritising the needs of all stakeholders.

## Frameworks & Methodologies&#x20;

A framework provides a general structure or guideline that can be adapted and customised to fit specific needs while a methodology explicitly prescribes how to do something, it provides a specific process or set of rules to follow.

Imagine you are building a house. A framework is like the basic structure - the walls, the roof, the foundation. It gives you a shape, a starting point, but it doesn't tell you exactly what materials to use or how to decorate. You have flexibility to choose your own style within that structure. A methodology, on the other hand, is like a detailed blueprint. It tells you step-by-step how to build the house, what tools to use, what materials to buy, and even the specific order to do things in. It is a rigid set of rules to follow.

A framework provides a general structure while a methodology gives you a specific process to follow. Frameworks are flexible and allow for customisation while methodologies are more rigid and prescriptive.

#### Frameworks

1. Scrum
2. Kanban
3. Crystal
4. Feature-Driven Development (FDD)
5. SAFe (Scaled Agile Framework)
6. LeSS (Large-Scale Scrum)
7. DAD (Disciplined Agile Delivery)

#### Methodologies

1. Extreme Programming (XP)
2. Test-Driven Development (TDD)
3. Behavior-Driven Development (BDD)
4. Continuous Integration/Continuous Delivery (CI/CD)
5. Lean Software Development

## Frameworks

### **1. Scrum**

This is one of the most widely used Agile frameworks. It emphasises iterative development, teamwork, accountability, and continuous improvement. Scrum uses time-boxed iterations called sprints to deliver working software.

Scrum is a framework used in agile project management, particularly in software development. It's structured around collaboration, iteration, and flexibility, aiming to deliver high-value products iteratively and incrementally.

In Scrum, projects are divided into small, manageable units of work called "sprints," usually lasting from one to four weeks. During each sprint, a cross-functional team works together to complete a set of tasks, focusing on delivering a potentially shippable product increment by the end of the sprint.

Key roles in Scrum include the Product Owner, who represents the stakeholders and defines the product backlog (a prioritised list of features or tasks); the Scrum Master, who facilitates the Scrum process and removes any obstacles the team may encounter; and the Development Team, which is responsible for delivering the product increment.

Scrum emphasises frequent communication, transparency, and adaptability, with regular meetings such as the daily stand-up (a short daily check-in meeting), sprint planning (where the team decides what work to tackle in the upcoming sprint), sprint review (where the team demonstrates the completed work to stakeholders), and sprint retrospective (where the team reflects on the sprint and identifies areas for improvement).

{% embed url="<https://www.scrum.org/resources/what-scrum-module>" %}

{% embed url="<https://asana.com/resources/what-is-scrum>" %}

{% embed url="<https://www.nutcache.com/blog/5-ways-to-improve-teamwork-with-scrum-methods/>" %}

{% embed url="<https://www.atlassian.com/agile/scrum/sprints>" %}

{% embed url="<https://medium.com/the-liberators/what-scrum-is-not-b74a2474c03e>" %}

{% embed url="<https://matthijsz.medium.com/alternatives-to-endless-scrum-6d2310a86bde>" %}

### Bonus: Scrum Crash Course

Getting started with agile and Scrum can be daunting and, at times, overwhelming with what can seem like endless new terms and concepts. [Everyday Design](https://www.everyday.design/) has put together a great series of explainers for those getting started with Scrum that is well worth a read.&#x20;

1. What is the definition of Scrum?

{% embed url="<https://www.everyday.design/guides/what-is-the-definition-of-scrum>" %}

2. Why Scrum matters?

{% embed url="<https://www.everyday.design/guides/why-is-scrum-important>" %}

3. Everyday guide to using scrum

{% embed url="<https://www.everyday.design/guides/what-is-scrum>" %}

4. Scrum terminology cheat sheet

{% embed url="<https://www.everyday.design/guides/scrum-glossary-what-do-all-these-scrum-terms-mean>" %}

### 2. Kanban

Kanban is a visual method for managing work. It focuses on visualising the workflow, limiting work in progress, and continuously improving the flow of work. Kanban is often used for continuous delivery and DevOps.

While Kanban is a standalone Agile methodology, it's often used in conjunction with Scrum. This is because they complement each other well. Scrum provides a structured framework with time-boxed iterations (sprints), regular meetings (sprints, daily stand-ups, retrospectives), and defined roles. Kanban, on the other hand, offers a visual approach to managing work, focusing on workflow, limiting work in progress, and continuous improvement.

By combining the two, teams can benefit from:

* Improved workflow visualisation: Kanban boards help visualize the flow of work through different stages, making it easier to identify bottlenecks and areas for improvement.
* Increased transparency: Kanban boards provide real-time visibility into the progress of work, allowing teams to track their progress and make informed decisions.
* Enhanced focus: Kanban's emphasis on limiting work in progress can help teams focus on completing fewer tasks at a time, improving quality and reducing the risk of burnout.
* Continuous improvement: Both Scrum and Kanban promote continuous improvement through regular retrospectives and a focus on learning from mistakes.

It's important to note that while Kanban can be used within a Scrum framework, it's not a strict requirement. Teams can choose to use either methodology independently or combine them in a way that works best for their specific needs.

Kanban and Scrum can be used separately. They are both distinct Agile methodologies with their own strengths and weaknesses.

Key Differences as Standalone Methodologies:

Scrum:

* Time-boxed iterations: Scrum uses fixed-length iterations called sprints to deliver working software.
* Defined roles: Scrum has specific roles like Product Owner, Scrum Master, and Development Team.
* Regular ceremonies: Scrum follows a set of ceremonies like Sprint Planning, Daily Stand-ups, Sprint Review, and Sprint Retrospective.
* Focus on predictability: Scrum aims to deliver predictable results within each sprint.

Kanban:

* Continuous flow: Kanban emphasizes a continuous flow of work, without fixed iterations.
* Visual workflow: Kanban uses visual boards to visualize the workflow and identify bottlenecks.
* Work-in-progress limits: Kanban limits the amount of work in progress to improve efficiency and reduce context switching.
* Focus on continuous improvement: Kanban promotes a culture of continuous improvement through regular retrospectives and kaizen events.

When to Use Which:

* Scrum: Well-suited for projects with well-defined requirements and a need for predictability. It's ideal for teams that need a structured approach to deliver features in regular intervals.
* Kanban: More flexible and adaptable, making it suitable for projects with evolving requirements or unpredictable workloads. It's ideal for teams that prioritize continuous delivery and value a more flexible approach.

In conclusion, while Scrum and Kanban can be used independently, they can also be combined to create a hybrid approach that leverages the strengths of both methodologies. The best approach for a team will depend on their specific needs, preferences, and project characteristics.

{% embed url="<https://www.atlassian.com/agile/kanban>" %}

{% embed url="<https://www.atlassian.com/agile/project-management/kanban-principles>" %}

{% embed url="<https://www.geeksforgeeks.org/kanban-agile-methodology/>" %}

{% embed url="<https://www.siliconrepublic.com/advice/kanban-workflow-model-company-employer-employee-advice>" %}

### 3. Crystal

Crystal is a family of Agile methodologies that emphasises people and their interactions over processes and tools. It is a lightweight methodology that adapts to the specific needs of the team and project.

{% embed url="<https://fourweekmba.com/crystal-agile-framework/>" %}

### 4. Feature-Driven Development (FDD)

Feature-Driven Development (FDD) is a model-driven, short-iteration development process. It focuses on delivering features to customers in short iterations. FDD emphasises customer involvement, domain expertise, and teamwork.

{% embed url="<https://agilemodeling.com/essays/fdd.htm>" %}

{% embed url="<https://www.productplan.com/glossary/feature-driven-development/>" %}

{% embed url="<https://www.planview.com/resources/articles/fdd-agile/>" %}

{% embed url="<https://www.wrike.com/agile-guide/faq/what-is-fdd-in-agile/>" %}

### 5. SAFe (Scaled Agile Framework)

A comprehensive framework for scaling Agile practices across large organisations, providing a structured approach to align teams, programs, and portfolios.

### 6. LeSS (Large-Scale Scrum)

A lightweight framework for scaling Scrum to multiple teams, emphasising simplicity and self-organisation.

{% embed url="<https://www.atlassian.com/agile/agile-at-scale/less>" %}

### 7. DAD (Disciplined Agile Delivery)

A hybrid framework that combines elements of various Agile methods, providing flexibility and adaptability to different organisational contexts.

## Methodologies

### 1. Extreme Programming (XP)

Extreme Programming XP is a disciplined approach to software development that emphasises simplicity, communication, feedback, and courage. It uses practices like pair programming, test-driven development, and continuous integration.

{% embed url="<https://www.geeksforgeeks.org/software-engineering-extreme-programming-xp/>" %}

{% embed url="<https://www.agilealliance.org/glossary/xp/>" %}

{% embed url="<https://asana.com/resources/extreme-programming-xp>" %}

### 2. Test-Driven Development (TDD)

A methodology where tests are written before the actual code, driving development and ensuring code quality.

### 3. Behavior-Driven Development (BDD)

A collaborative approach that focuses on defining software behavior through shared understanding between developers, testers, and business stakeholders.

### 4. Continuous Integration/Continuous Delivery (CI/CD)

A set of practices that automate the building, testing, and deployment of software, enabling frequent and reliable releases.

### 5. Lean Software Development

Lean is a methodology that focuses on eliminating waste and maximising value delivery. It borrows principles from Lean manufacturing and applies them to software development. Lean emphasises continuous improvement, customer focus, and rapid delivery.

Lean software development and Agile are often used together, but they are not the same. Lean is a methodology focused on eliminating waste and maximising value, while Agile is a philosophy that emphasises iterative development and customer collaboration. &#x20;

Lean can be used as part of an Agile framework, but it can also be used independently. Some people consider Lean to be a subset of Agile, while others see them as complementary approaches leading to conflicting information as to whether lean is an agile methodology or not, stemming from this nuanced relationship between the two.

{% embed url="<https://networkinterview.com/agile-vs-lean/>" %}

{% embed url="<https://www.aha.io/roadmapping/guide/agile/agile-vs-lean>" %}

According to ProductPlan:&#x20;

*"Lean Software Development (LSD) is an agile framework based on optimizing development time and resources, eliminating waste, and ultimately delivering only what the product needs."*

{% embed url="<https://www.productplan.com/glossary/lean-software-development/>" %}

According to Atlassian:&#x20;

*"Often misunderstood as a subset of Agile, Lean is a distinct methodology with its own primary objectives — eliminating waste and improving operational flow."*

{% embed url="<https://www.atlassian.com/agile/project-management/lean-vs-agile>" %}

### Scrum Artifacts

* **Backlog**: Scrum includes two key backlogs – the product backlog and the sprint backlog. Together, they hold the complete list of tasks to be undertaken, with priorities set and maintained by the product owner.
* **Product Backlog**: The product backlog is a prioritised collection of features, bug fixes, technical tasks, and other items relevant to the product, all to be addressed by the development team. This backlog provides the selection pool for each new sprint.
* **Sprint Backlog**: The sprint backlog is a refined list of items drawn from the product backlog, which the development team intends to complete during the sprint.
* **Product Backlog Items (PBIs)**: Each item in the backlog represents specific work that delivers value. These PBIs are usually defined using user stories and acceptance criteria. During backlog refinement, PBIs may be split into smaller items if they are too large.
* **Definition of Done**: This is a clear list of criteria that must be met for a PBI to be considered "done." The team collectively creates, agrees upon, and revises this definition to ensure it effectively supports their work.
* **User Stories**: User stories structure PBIs around the end user’s goals, motivations, and needs, keeping the team focused on delivering value. Each PBI is assessed against its user story during the sprint review.
* **Acceptance Criteria**: Acceptance criteria specify the conditions that must be met for sprint outcomes to be accepted by the product owner. They follow a consistent format, often structured as "Given... When... Then..."
* **Story Points**: Story points are a measure of the relative effort required to complete a PBI. Unlike time-based measures, they gauge effort by comparing one PBI to others.
* **Velocity**: Velocity reflects the average number of story points a team completes per sprint, allowing the product owner to estimate when future features might be ready.
* **Increment**: The increment is the functional value delivered by the end of each sprint. Even if it’s not immediately released, the increment should be in a state ready for use by end users.
* **Impediment**: An impediment is anything hindering the team’s productivity or preventing them from completing sprint tasks. The Scrum master is responsible for resolving any obstacles the team faces.
* **Iteration**: This is the time allocated for the Scrum team to produce working software, typically lasting between one and three weeks.
* **Sprint Goal**: The sprint goal is a concise statement capturing the product owner’s vision for the sprint, guiding the development team and providing a cohesive theme for the sprint’s efforts.

## Tools & Software

#### Project Management and Collaboration Tools:

* Jira: A comprehensive agile project management and issue tracking tool that supports any agile methodology, be it scrum, kanban, or your own unique flavor.
* Trello: A visual Kanban board tool that helps teams organise and prioritise tasks.
* Asana: A versatile project management tool that supports various agile methodologies, including Scrum and Kanban.
* ClickUp: An all-in-one project management tool that offers a wide range of features, including task management, time tracking, and document collaboration.
* Monday.com: A highly customisable work management platform that allows teams to tailor their workflows to their specific needs.

#### Version Control Systems:

* Git: The most widely used version control system, enabling teams to track changes to their codebase and collaborate effectively.
* GitHub: A popular web-based hosting service for Git repositories, providing features like code review, issue tracking, and project management.
* Bitbucket: A Git repository management solution that offers features like code review, pull requests, and integration with other Atlassian tools like Jira.

Continuous Integration and Continuous Delivery (CI/CD) Tools:

* Jenkins: A flexible and open-source automation server that can be used to automate various tasks in the software development lifecycle, including building, testing, and deploying applications.
* CircleCI: A cloud-based CI/CD platform that provides a user-friendly interface and integrates with popular tools like GitHub and Bitbucket.
* GitLab CI/CD: A built-in CI/CD pipeline in GitLab, allowing teams to automate their build, test, and deployment processes.

Communication and Collaboration Tools:

* Slack: A popular team communication platform that enables real-time messaging, file sharing, and integration with other tools.  &#x20;
* Microsoft Teams: A versatile collaboration tool that offers features like chat, video conferencing, and file sharing.

## Notable Articles

{% embed url="<https://scrumguides.org/scrum-guide.html>" %}

{% embed url="<https://uxplanet.org/why-designers-fail-to-integrate-into-agile-teams-0c22b9095db8>" %}

{% embed url="<https://medium.com/@WJAgeling/how-relevant-is-agile-today-071a687d0911>" %}

{% embed url="<https://uxdesign.cc/successful-iteration-requires-going-beyond-agile-81ef0bc80798>" %}

{% embed url="<https://makeiterate.com/how-to-prioritize-features-in-agile/>" %}

{% embed url="<https://levelup.gitconnected.com/agile-and-the-ball-we-dropped-7fe82ce444d0>" %}

{% embed url="<https://davidavpereira.medium.com/agile-is-dead-so-what-why-you-shouldnt-fall-prey-to-agile-dogma-1e7e9fbef5a3>" %}

## Further Reading

{% embed url="<https://raindrop.io/TonyODonohoe/agile-49332436>" %}
