Agile Notes Unit 1 and 2
Agile Notes Unit 1 and 2
Unit 1:
Agile practices and Principles
Agile principles are a set of guiding values and concepts that underlie the Agile Manifesto, a
foundational document for Agile software development. These principles provide a framework for
teams and organizations to adopt Agile practices and achieve more adaptive, customer-focused, and
collaborative ways of working. Here are the 12 Agile principles:
These Agile principles guide organizations and teams in delivering value to customers
through iterative development, collaboration, adaptability, and a focus on individuals and
interactions. Agile methodologies like Scrum, Kanban, and Extreme Programming (XP)
operationalize these principles, helping teams and organizations implement Agile
practices effectively. The goal is to respond to change, deliver customer value, and
continuously improve processes and products.
Agile Lean principles represent a blend of concepts from both the Agile and Lean methodologies.
They provide a comprehensive approach to product development, emphasizing customer value, waste
reduction, and continuous improvement. Below are the key Agile Lean principles:
1. Customer-Centric Value: Focus on delivering value to the customer. Understand their needs and
prioritize features and tasks that provide the highest value.
2. Value Stream: Identify and analyze the value stream, which is the end-to-end process from concept
to delivery. This helps in identifying areas of waste and opportunities for improvement.
3. Flow: Strive for a smooth, uninterrupted flow of work through the development process. Minimize
delays and handoffs between stages.
4. Pull System: Use a pull-based approach, where work is pulled based on actual demand rather than
being pushed onto the team. This helps prevent overloading and improves responsiveness.
5. Continuous Improvement (Kaizen): Foster a culture of continuous improvement. Encourage teams
to regularly reflect on their processes, identify areas for enhancement, and implement changes.
6. Optimize the Whole: Focus on optimizing the entire value stream rather than just individual
components. Consider the end-to-end process and how each part contributes to delivering value.
7. Empowered Teams: Empower teams to make decisions and take ownership of their work. Encourage
self-organization and trust in the team's abilities.
8. Respect for People: Treat individuals with respect and recognize their expertise and contributions.
Create an environment where team members feel valued and empowered.
9. Eliminate Waste (Muda): Identify and eliminate activities or processes that do not add value to the
customer. This includes unnecessary documentation, waiting time, and rework.
10. Amplify Learning: Encourage a learning culture within the organization. Embrace experimentation,
feedback, and adaptability to improve processes and outcomes.
11. Decentralized Decision-Making: Push decision-making authority to the lowest appropriate level.
Allow those closest to the work to make decisions, reducing bottlenecks and delays.
12. Optimize for Flow Efficiency: Focus on optimizing the flow of work through the system, rather than
optimizing individual tasks. This involves minimizing handovers and ensuring work moves smoothly
from one stage to the next.
13. Visual Management: Use visual tools (e.g., Kanban boards) to provide transparency and make it
easier to monitor progress, identify bottlenecks, and manage work.
14. Limit Work in Progress (WIP): Place constraints on the amount of work that can be in progress at
any given time. This prevents overloading and helps maintain a manageable flow of work.
By combining the principles of Agile and Lean, Agile Lean practices aim to create a more efficient,
value-driven, and adaptable approach to product development. These principles guide teams and
organizations in delivering higher quality products, reducing waste, and continuously improving their
processes.
1. Scrum: Scrum is one of the most widely used Agile frameworks. It involves cross-
functional teams working in time-boxed iterations called sprints, usually lasting two to
four weeks. Scrum includes roles such as Scrum Master, Product Owner, and
Development Team, and it relies heavily on ceremonies like daily stand-up meetings,
sprint planning, sprint review, and sprint retrospective.
2. Kanban: Kanban is a visual management method for software development. It focuses
on visualizing the work process on a Kanban board, which helps teams manage and
optimize their workflow. Unlike Scrum, Kanban does not have predefined time-boxed
iterations; work is pulled as capacity allows. It's especially useful for teams with variable
workloads.
3. Extreme Programming (XP): XP is a software development methodology that
emphasizes practices like test-driven development (TDD), continuous integration, pair
programming, and frequent releases. XP aims to improve software quality and
responsiveness to changing requirements.
4. Lean Software Development: Lean principles, inspired by lean manufacturing, have
been applied to software development. This approach seeks to eliminate waste, optimize
processes, and deliver value to customers as efficiently as possible. Lean encourages
small batch sizes, quick feedback loops, and continuous improvement.
5. Dynamic Systems Development Method (DSDM): DSDM is an Agile framework that
provides a set of principles and practices for rapid software development. It includes
iterative and incremental development, timeboxing, and focuses on prioritizing the most
important features for delivery.
6. Crystal: Crystal is a family of Agile methodologies developed by Alistair Cockburn. Each
"color" of Crystal represents a different level of formality and is suited to different project
sizes and criticalities. Crystal emphasizes early and frequent delivery of working
software.
7. Feature-Driven Development (FDD): FDD is an Agile approach that focuses on
building software through a feature-centric approach. It involves breaking down the
system into discrete, well-defined features and managing their development individually.
8. Adaptive Software Development (ASD): ASD is an Agile approach that emphasizes
collaboration, continuous learning, and adapting to changes in requirements. It involves
three phases: speculation, collaboration, and learning, and it encourages frequent
reassessment and adaptation.
9. Scaled Agile Framework (SAFe): SAFe is an Agile framework designed to scale Agile
principles and methods to large organizations. It provides guidance on how to coordinate
and align multiple Agile teams to work together effectively.
10. Nexus: Nexus is a framework for scaling Scrum to large organizations. It helps multiple
Scrum teams work together to deliver integrated software at scale.
Each of these Agile process models has its strengths and weaknesses, and organizations
may choose the one that best fits their specific needs, project size, and culture. Many
organizations also customize Agile approaches to create hybrid models that combine
elements from multiple methodologies. The key to success in Agile development is the
commitment to collaboration, adaptability, and delivering value to the customer early
and frequently.
An iterative process makes progress through successive refinement. The development team develops
the first cut of the system, knowing in advance that some/many parts are incomplete. The team then
iteratively enhances those parts until the product is satisfactory. With each iteration, customer feedback
is taken into account and the software is improved through the addition of greater detail.For example,
let us take an example of search functionality on a website. In the first iteration, a simplistic search
screen can be built. In the next iteration, advanced search criteria can be added.
Incremental Process
An incremental process involves delivering components of the software in parts. Each increment
represents a complete subset of functionality and is fully coded and tested.For example, for an e-
commerce store, initially, payment can be supported only via credit and debit cards. In the next release,
payment via wallets can be supported.
During a development “iteration” where we build several features some may be iterating to
improve, modify or remove existing functionality, while others may be incrementally adding
new functionality.
Scrum
is one of the implementations of agile methodology in which incremental builds are delivered
to customers in iterative cycles of 2 to 4 weeks.
Scrum Teams are self-organizing and cross-functional teams of 7 +/- 2 members. There are
three roles in a scrum team viz. Product Owner, Scrum Master and Development team
member.
Scrum Artifacts
1. Product Backlog
2. Sprint backlog
The above artefacts contain a list of Epics and User Stories ordered by their priorities. The product
backlog contains a list of all the stories that are available and need to be developed. The sprint backlog
contains the list of stories that the team plans to take up in a particular sprint.
Scrum Events
The sprint starts with sprint planning, in which the top priority stories from the product backlog which
can be taken up by the team in the current sprint are added to the sprint backlog. Every day a small
activity called daily standup is done to track the amount of work left. At the end of the sprint, there is a
sprint review/demo to the product owner to ensure that all the acceptance criteria are met and the
delivery is as expected. After that, there is another activity named sprint retrospective, in which the
sprint is reviewed and opportunities for further improvement are discussed.
Unit 2:
1. Broad Skills (The Horizontal Bar of the "T"): These are skills that cover a wide range of
areas or domains. In an Agile team context, this might include skills such as communication,
collaboration, adaptability, and problem-solving. These skills enable team members to work
effectively with others, embrace change, and tackle various challenges that may arise during
the project.
2. Deep Skills (The Vertical Stem of the "T"): These are specialized skills or expertise in a
specific area. In Agile, this typically refers to a person's primary role or area of specialization,
such as a software developer, tester, designer, or business analyst. Deep skills are what allow
team members to contribute specialized knowledge to the project.
The idea behind a T-shaped person in Agile teams is that they can perform their specialized
role (the vertical stem) while also collaborating effectively with others and contributing to
different aspects of the project (the horizontal bar). This combination of skills fosters cross-
functional teamwork and ensures that team members are not overly siloed in their roles. It
promotes a sense of ownership, shared responsibility, and adaptability within the team.
1. Dynamic: The product backlog is dynamic and continuously evolving. It's not a fixed or static
document. As the product evolves and stakeholders provide feedback, new items can be added,
existing items can be reprioritized, and items can be removed or refined. This dynamic nature allows
the team to adapt to changing requirements and priorities.
2. Prioritized: Items in the product backlog are prioritized based on their importance to the product's
success. The product owner is responsible for defining and maintaining the priority of backlog items.
Higher-priority items are typically at the top of the backlog and are addressed sooner than lower-
priority items.
3. User-Centric: The product backlog focuses on delivering value to users or customers. Each item in
the backlog should represent a user need, feature, enhancement, or bug fix that contributes to the
overall product's value proposition.
4. Detailed: While the product backlog items do not need to be overly detailed, they should contain
enough information for the development team to understand what needs to be done. This might
include a brief description, acceptance criteria, and any necessary attachments or references.
5. Estimable: Backlog items should be clear and well-defined enough for the team to estimate the effort
required to complete them. Teams often use techniques like story points or relative sizing to estimate
the complexity of backlog items.
6. Emergent: As the team learns more about the product and its users, new ideas and insights may
emerge. These can result in the addition of new backlog items or changes to existing ones. The
backlog is responsive to emerging requirements and knowledge.
7. Cross-Functional: The product backlog includes items that require contributions from multiple
disciplines, such as development, design, testing, and others. This encourages cross-functional
collaboration within the team.
8. Visibility: The product backlog is visible to the entire Agile team, including the product owner,
Scrum Master, and development team members. This transparency ensures that everyone is aware of
the work to be done and the priorities.
9. Dependencies: The product backlog may include dependencies between backlog items. These
dependencies should be identified and managed to ensure that work can progress smoothly and
efficiently.
10. Refinement: Backlog refinement, also known as backlog grooming, is an ongoing process where the
team reviews, clarifies, and prepares backlog items for upcoming sprints. This helps ensure that items
are ready for implementation when they are selected for a sprint.
11. Sprint-Bound: While the product backlog contains all the work to be done on the product, only a
subset of these items is selected for each sprint during sprint planning. The sprint backlog is derived
from the product backlog for each sprint.
12. Evolutionary: As the product progresses and customer feedback is received, the product backlog
evolves. Items may be reprioritized or modified based on the evolving understanding of user needs
and market dynamics.
13. Owned by the Product Owner: The product owner is responsible for managing the product backlog.
They make decisions about what to prioritize, what to include, and how to refine items. However, the
entire Agile team collaborates in backlog refinement and sprint planning discussions.
14. Measurable: Backlog items may include acceptance criteria or success criteria that allow the team to
measure whether an item has been successfully completed.
Overall, the product backlog is a central element of Agile project management, serving as a living
document that guides the team's work and ensures alignment with the product's vision and goals. It is
a dynamic and adaptable tool that supports Agile principles such as customer focus, collaboration, and
responsiveness to change.
1. Dynamic: The product backlog is not a static document. It evolves over time as new ideas,
requirements, and feedback emerge. Items can be added, modified, or removed based on changing
priorities and needs.
2. Prioritized: Items in the product backlog are prioritized based on their business value, customer
needs, and other relevant factors. The most important and valuable items should be at the top of the
backlog, allowing the team to focus on delivering the highest value first.
3. User-Centric: Items in the backlog are often user stories or user-centric features. They are written
from the perspective of end-users or customers and describe what the product should do to meet their
needs.
4. Estimable: Items in the backlog should be sufficiently well-defined and clear so that the development
team can estimate the effort required to implement them. This helps in planning and scheduling work
in iterations or sprints.
5. Small and Independent: Ideally, backlog items should be small and independent of each other. This
allows for greater flexibility in prioritization and execution. Smaller items are easier to estimate and
can be completed within shorter time frames.
6. Emergent: The backlog is not fixed or fully defined at the beginning of the project. New items can
emerge as the team learns more about the product, market, and customer needs. It's essential to
embrace change and adapt the backlog accordingly.
7. Cross-Functional: The backlog includes items that require various skills and expertise to implement.
It's not limited to just development tasks but may also include design, testing, documentation, and
other activities necessary to deliver a complete product.
8. Detailed When Necessary: While high-priority items may have detailed descriptions and acceptance
criteria, lower-priority items may have less detail. The level of detail increases as items move closer
to the top of the backlog and become candidates for development in upcoming iterations.
9. Owned by the Product Owner: The Product Owner is responsible for managing and prioritizing the
product backlog. They work closely with stakeholders to understand requirements and ensure the
backlog reflects the highest business value.
10. Visible and Accessible: The product backlog is typically a shared and visible artifact, often
maintained electronically using tools like Jira or Trello. This visibility helps the entire team stay
aligned and informed about upcoming work.
11. Subject to Continuous Refinement: The backlog is subject to continuous refinement, which
involves clarifying requirements, adding more detail, and ensuring that the top items are ready for
development. This process helps maintain the backlog's health.
12. Used for Sprint Planning: During sprint planning meetings, the team selects a subset of items from
the product backlog to work on during the upcoming sprint. These items become part of the sprint
backlog.
Overall, the product backlog is a critical tool in Agile development, enabling teams to deliver
value incrementally while remaining responsive to changing business needs and customer
feedback
1. Format: User stories are typically written in a specific format, which consists of a short,
simple sentence that follows the template: "As a [user role], I want [an action] so that
[benefit/value]." For example: "As a customer, I want to be able to view my order history so
that I can track my purchases."
2. User Role: This part of the user story identifies the user or stakeholder who will benefit from
or interact with the feature. It helps provide context for the development team.
3. Action: The action describes the specific functionality or behavior the user is requesting. It's
a concise and clear statement of what the software should do.
4. Benefit/Value: This section explains the reason behind the user's request and the value it
brings to them or the business. It helps prioritize user stories based on their importance.
5. Conversation: User stories encourage conversation and collaboration between team
members, including developers, product owners, and stakeholders. The user story is not
intended to be a detailed specification but rather a starting point for discussions and
clarifications.
6. Acceptance Criteria: To add more detail to a user story, acceptance criteria are often
included. These are specific conditions that must be met for the user story to be considered
complete. Acceptance criteria help define the boundaries of the user story and provide a clear
definition of "done."
7. Estimation: Development teams often estimate the effort required to implement a user story
using techniques like story points or time-based estimates. This helps with prioritization and
sprint planning.
8. Prioritization: User stories are typically maintained in a prioritized product backlog. The
product owner is responsible for prioritizing user stories based on business value, customer
feedback, and other factors.
9. Small and Independent: User stories are ideally small in scope and independent of each
other. This allows for incremental development and delivery of value. Smaller user stories are
easier to estimate and fit into shorter iterations or sprints.
10. Negotiable: User stories are negotiable, meaning they can be refined and modified based on
feedback and evolving requirements. The goal is to maintain flexibility and adapt to changing
needs.
11. Vertical Slices: User stories should aim to deliver a vertical slice of functionality, meaning
that they encompass all layers of the software stack (e.g., user interface, business logic, and
data layer) necessary to provide value to the user.
12. Testable: User stories must be testable, meaning that it should be clear how the development
team can verify that the story has been successfully implemented based on the acceptance
criteria.
User stories are a crucial tool for Agile teams to capture requirements, ensure alignment
between development and business goals, and deliver software that meets user needs. They
promote collaboration, flexibility, and a customer-centric approach to software development.