Unit I
Unit I
Many of today’s projects have more unknowns than a traditional project management methodology
can adequately handle. This uncertainty makes it challenging to document requirements and adapt
to changes successfully.
This guide will explain the Agile methodology, including which projects will benefit from an Agile
approach and how to implement one effectively.
If you would like to incorporate the Agile methodology into your projects, you can get started with
Wrike’s pre-built and customizable Agile template.
Agile methodology is an approach to project management that uses four values and 12 principles to
organize projects.
The Agile method works in ongoing sprints of project planning and execution, enabling you to
continuously adapt and mature your plan, scope, and design throughout the project.
Agile projects require an iterative approach, which supports incremental, frequent, and consistent
delivery of workable products to your customer or client. This innovative approach ensures your
project team can consistently deliver concrete products without being delayed by changes and
evolving requirements.
Agile has a high level of customer involvement and includes frequent reviews of progress with both
the project team and the customer.
You can run an Agile project using several different frameworks. Some of the more popular ones
include:
Scrum
Kanban
Extreme Programming
DSDM
This video on the Agile methodology further explains the approach, breaking down everything from
the core principles to the Agile frameworks.
Depending on the source, the origins of Agile methodology can be traced back to the 1990s, 1975, or
even as early as the 1960s. However, everyone agrees that Agile took root with the creation of the
Manifesto for Agile Software Development, also known as The Agile Manifesto.
The Agile Manifesto was originally released in February 2001 to create a new way of managing
software development. A group of leading software developers wrote the manifesto on a retreat in
Utah, where they had met to discuss industry problems and potential solutions.
This group understood that the software industry needed a better, quicker way to get products to
market. Their goal was to develop new methods for changing a product and project that would not
impact the cost or delay the production schedule.
They determined that dividing a project into shorter iterations would allow for faster development
and testing. Reviews (called sprint retrospectives) would take place at the end of every iteration, and
changes could then be made without having to wait for the end product.
The Agile Manifesto was initially drafted as a solution for software development management, but
the Agile methodology has since grown to encompass projects across various industries and
businesses.
The Manifesto for Agile Software Development outlines 12 Agile principles that all projects should
follow. These are:
1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable
software. The first principle of Agile methodology states that customers should receive project
deliverables or iterations across regular intervals throughout the project’s life cycle, rather than just
one product delivery at the end.
2. Welcome changing requirements, even late in development. Agile processes harness change for
the customer's competitive advantage. The Manifesto’s authors found that, with traditional project
management, it was difficult to accommodate last-minute change requests. This principle ensures
that Agile projects can adapt to any changes, no matter how late in the game, with minimal delay.
3. Deliver working software frequently, from a couple of weeks to a couple of months, with a
preference for shorter timescales. Agile projects plan for frequent, short project timelines that allow
for a fast turnaround of workable products. Teams will often break Agile projects into one to four
week-long sprints or project intervals, each one ending in the delivery of a product.
4. Business people and developers must work together daily throughout the project. This Agile
principle states that regular communication with all stakeholders is critical to the project’s success.
Commonly, this involves a short daily meeting with both the project team and any other key
stakeholders.
5. Build projects around motivated individuals. Give them the environment and support they need,
and trust them to get the job done. A central concept of the Agile project management methodology
is that the right people need to be placed in the right positions and given the autonomy required to
do their jobs well. It’s essential to design a project team based on capabilities rather than job
positions or titles. The project manager’s focus should be on motivating the project team and
supporting them, rather than micromanaging them.
6. The most efficient and effective method of conveying information to and within a development
team is face-to-face conversation. The Agile Manifesto emphasizes the importance of co-locating
teams and stakeholders whenever possible, as face-to-face communication is more effective than
email or phone. If your team cannot be co-located, video conferencing is an option that can still
capture the value of non-verbal cues.
7. Working software is the primary measure of progress.The Agile methodology aims to provide
complete, working deliverables. This goal should always take priority over any additional
requirements, such as project documentation. Other metrics, such as hours spent or time elapsed,
are not considered as important as delivering working products.
8. Agile processes promote sustainable development. The sponsors, developers, and users should be
able to maintain a constant pace indefinitely. According to this principle, Agile projects should have a
consistent pace for each iterative cycle or sprint within the project. This breakdown should eliminate
the need for overtime or crashing schedules while promoting frequent output of workable products.
It should also create a repeatable cycle that the team can continuously follow for as long as
necessary.
9. Continuous attention to technical excellence and good design enhances agility. An Agile project’s
primary focus should be on improving the end product and achieving advancements consistently
over time. Each iteration should always improve on the previous one, and the team should always be
looking to innovate.
10. Simplicity – the art of maximizing the amount of work not done – is essential. An Agile project
aims to get just enough done to complete the project and meet the requested specifications. Any
additional documentation, steps, processes, or work that does not add value to the customer or
enhance the project outputs should be avoided or eliminated.
11. The best architectures, requirements, and designs emerge from self-organizing teams. Agile is
based on the belief that you need motivated, autonomous, and skilled teams to deliver the best
results and products. Teams should be empowered to organize and structure themselves as
required. They should have the freedom to collaborate and innovate as they see fit, without being
hampered by too much oversight.
12. The team discusses how to become more effective at regular intervals, then tunes and adjusts its
behavior accordingly. A successful, self-motivated team requires a strong focus on advancing their
skills and processes to grow and improve. The team should have regular reviews on their
performance and outcomes, including discussions on improving as they move forward.
The benefits of Agile project management are many, particularly for the following organizations and
project types:
Any project that evolves or does not have clear scope and requirements at the start
Organizations that need to work closely with their customers and other external parties throughout
the life of the project
Companies that emphasize process and product improvement and are constantly looking to
innovate
Projects with many interdependent tasks, where the team needs to work closely and frequently
communicate to ensure success
Companies that need to create a prototype before building the final project outcome
Projects that require rapid feedback from stakeholders about each product iteration before moving
on to the next version or draft
The Agile process is founded on a set of principles and values aimed at fostering
flexibility, collaboration, and iterative development in the field of software
development. Here are the fundamental principles that underpin the agile approach
Individuals and interactions over processes and tools: Agile values communication and
collaboration among team members. It emphasizes the importance of human
interactions and teamwork over relying solely on tools and processes.
Scrum: A popular Agile framework involving short, fixed -length iterations called sprints,
typically lasting two weeks to a month. It emphasizes close collaboration, adaptability,
and continuous improvement.
Kanban: A visual method for managing work as it moves through a process. It promotes
a steady flow of work, limiting work in progress, and enhancing transparency in the
development cycle.
Collaboration: Team members work closely together, with open communication and
frequent feedback exchanges.
The Agile methodology is a software development approach that emphasizes flexibility, collaboration,
adaptability, and customer satisfaction. It focuses on iterative and incremental development, allowing
teams to respond to change and deliver high-quality products in a more efficient manner. Here are
the fundamental aspects of the agile process
Why Agile?
Before delving into Agile to understand what it is, let's look at why it came into being. Agile evolved
because of the very nature of software building processes.
Software building processes that cater to different market needs or business requirements are rather
complex. The complexity of these processes can be defined along the following dimensions for better
understanding:
1. Certainty of requirements - indicates the extent of certainty of 'WHAT' is being built and 'HOW'
likely it is to change
2. Certainty of technology - indicates the extent of certainty of any approach or technology used
to build the software and the way it is built
It is easy to build software applications, if the requirements do not change and there is a clear way to
implement them. In such cases, all traditional methodologies work well, as we go with the assumption
that requirements are analysed, frozen, and implemented in sequence to meet a fixed target. But, it
is usually a rare scenario!
In reality, requirements for software to be built are unknown, unclear, or keep changing. This makes
the Software Building process complex or chaotic, thereby rendering traditional methods difficult to
deal with.
Many software projects fail or get scrapped somewhere along the way, not because of the inefficiency
of the software building team, or the lack of knowledge or budget alone, but because of the nature of
work which includes constant change and uncertainty, leading to greater efforts and higher costs due
to rework.
This brought in the need for a new approach to software development that must keep changing and
evolving.
1. Iterative Development:
Agile promotes incremental and iterative development cycles, allowing for continuous improvement
and evolution of the product.
3. Customer Collaboration:
Close collaboration with stakeholders and customers is a core principle in Agile to ensure the end
product meets customer needs.
Agile values individuals and their interactions over processes and tools, fostering a people-oriented
approach.
5. Working Software:
Agile focuses on delivering functional, working software in short, regular intervals, ensuring visible
progress.
6. Face-to-Face Communication:
7. Embracing Changes:
Agile processes are designed to handle changes and requirements, welcoming changes even late in
development.
8. Continuous Improvement:
Agile teams regularly review their work to identify areas for improvement and implement changes in
subsequent iterations.
9. Cross-Functional Teams:
Encourages collaboration among cross-functional teams, bringing together diverse skills and
perspectives.
Agile Frameworks:
Scrum: Iterative and incremental framework focusing on specific time-bound iterations (Sprints).
Kanban: Visualized workflow that emphasizes continuous delivery without time-bound iterations.
Extreme Programming (XP): Encourages specific engineering practices to improve software quality.
Agile Practices:
Daily Stand-ups: Short meetings to discuss progress, challenges, and plans for the day.
Sprint Planning: Meetings to plan work for the upcoming Sprint in Scrum.
Retrospectives: Regular reviews of work and processes to identify areas for improvement.
Benefits of Agile:
Agile methods offer a flexible and collaborative environment that empowers teams to adapt to
changing requirements and deliver high-quality software in shorter development cycles. The core
principles and practices of Agile methodologies foster a more responsive and customer-oriented
approach to software development.
In Extreme Programming (XP), the team structure and roles are oriented towards promoting high-
quality software development and maintaining a collaborative and productive environment. XP
teams work together using a set of practices that emphasize coding standards, quick feedback loops,
and continuous improvement. Here are the key aspects of XP teams:
1. Pair Programming:
Collaborative Coding: Two developers work together at one workstation. One writes the code
(driver), while the other reviews each line as it is typed (navigator). Roles switch regularly.
Benefits: Improves code quality, knowledge sharing, and reduces the likelihood of errors.
Writing Tests First: Tests are written before the actual code to guide the coding process. Code is
developed incrementally to pass these tests.
Benefits: Ensures the code meets requirements, catches bugs early, and enhances design and
modularity.
3. Continuous Integration:
Frequent Code Integration: Code changes are integrated into a shared repository multiple times a
day.
Benefits: Reduces integration issues, ensures working software, and allows for rapid feedback.
Shared Responsibility: The entire team takes responsibility for maintaining and improving the
codebase.
5. Sustainable Pace:
Benefits: Increases productivity and quality while avoiding burnout and errors caused by fatigue.
Cross-Functional Skills: Team members are expected to have diverse skill sets, collaborating on
various aspects of the project.
XP Team Dynamics:
Flexibility and Adaptability: Embraces changes in requirements and continuously adapts to meet
evolving needs.
Emphasis on Code Quality: Prioritizes quality, simplicity, and clean code practices in development.
The XP team structure and practices emphasize collaboration, continuous feedback, and a collective
ownership of the codebase. By fostering a collaborative coding environment and putting a strong
emphasis on testing and integration, XP aims to ensure high-quality software development while
maintaining a sustainable pace for the team.
Agile Principles:
The Agile Manifesto is supported by twelve guiding principles, which further elaborate on the core
values. Here is a summary of the key principles:
Customer Satisfaction: Deliver valuable software that satisfies the customer's needs.
Frequent Delivery: Deliver working software in short timescales, promoting a consistent pace.
Collaboration: Close collaboration between business people and developers throughout the project.
Supportive Environment: Build projects around motivated individuals and provide the environment
and support they need.
Face-to-Face Communication: The most efficient and effective method of conveying information is
face-to-face conversation.
Working Software: Measure progress through working software; it's the primary measure of
progress.
Continuous Attention to Technical Excellence: Continuous attention to technical excellence and good
design enhances agility.
Simplicity: The art of maximizing the amount of work not done is essential.
Self-organizing Teams: The best architectures, requirements, and designs emerge from self-
organizing teams.
Reflection and Adaptation: At regular intervals, the team reflects on how to become more effective,
then adjusts behavior accordingly.
The Agile Manifesto and its principles are the backbone of Agile methodologies. They prioritize
collaboration, adaptability, and customer-centric approaches to software development, guiding
teams to deliver high-quality software that meets evolving customer needs.
Stakeholders play a vital role in Agile projects, representing various interests, perspectives, and
responsibilities. Their involvement is crucial in ensuring project success. Challenges often arise in
managing these stakeholders effectively. Here's a breakdown of stakeholders and potential
challenges in Agile projects:
Development Team:
Scrum Master:
Changing Requirements:
Continuous changes may challenge stakeholders' understanding of the evolving project scope.
Prioritization Conflicts:
Different stakeholders may have conflicting priorities, leading to challenges in deciding what
features to develop first.
Limited Availability:
Availability and engagement of stakeholders for feedback and decision-making can be a challenge,
impacting the pace of the project.
Managing Expectations:
Ensuring clear and realistic expectations among stakeholders to avoid disappointments in the final
product.
Communication:
Effective and transparent communication among diverse stakeholders can be challenging, impacting
shared understanding.
Resistance to Change:
Resistance from stakeholders accustomed to traditional methods may hinder the adoption of Agile
practices.
Active Involvement:
Encourage active participation and collaboration among stakeholders throughout the project.
Frequent Feedback:
Regularly solicit and act upon feedback to maintain alignment with stakeholder expectations.
Clear Communication:
Use various communication channels and ensure clear and consistent messaging.
Educate stakeholders about Agile principles, methods, and their roles in the process.
Conflict Resolution:
Agile development models are methodologies or frameworks used in software development that
emphasize iterative, flexible, and collaborative approaches. Here's an overview of some common
Agile development models:
1. Scrum:
Description: Scrum is an iterative and incremental Agile framework. It divides work into time-boxed
iterations called sprints, usually lasting 2-4 weeks.
Key Features: Roles include Product Owner, Scrum Master, and Development Team. It focuses on
sprint planning, daily stand-ups, sprint reviews, and retrospectives.
Key Features: Pair programming, test-driven development (TDD), continuous integration, and
frequent releases.
3. Kanban:
Description: Kanban is a visual scheduling method that limits work in progress, allowing teams to
manage their tasks efficiently.
Key Features: Work items are represented on a Kanban board, moving through different stages of a
process.
Description: FDD is model-driven and focuses on building features. It breaks down the development
process into specific feature sets.
Key Features: Feature list, domain object modeling, iterative and incremental development.
5. Crystal:
Description: Crystal methodologies adapt to the specific needs of a project, varying based on project
size and criticality.
Key Features: Different versions (Crystal Clear, Crystal Orange, etc.) tailored for various project sizes.
Description: Lean focuses on maximizing value and minimizing waste in the development process.
Key Features: Emphasizes eliminating waste, delivering fast, empowering teams, and building
integrity.
Key Features: Emphasizes user involvement, iterative development, and prioritization of features.
Each Agile development model has its unique approach and set of practices, but they share common
characteristics such as adaptability, collaboration, iterative development, and customer focus.
Teams often choose or combine elements from these models based on project requirements and
team preferences to achieve effective software development.
Scrum is an Agile framework that is widely used in software development for managing complex
projects. It provides a structured approach to deliver high-value products iteratively, emphasizing
adaptability, collaboration, and efficiency. Here are the key components and concepts of Scrum:
Roles:
Product Owner: Represents the customer's interests, manages the product backlog, and prioritizes
the work.
Scrum Master: Ensures the team follows Scrum practices, removes impediments, and facilitates
Scrum events.
Artifacts:
Sprint Backlog: Work items selected from the product backlog for a specific sprint.
Increment: The sum of all the product backlog items completed during a sprint.
Sprint Planning: Collaboration between the Product Owner and Development Team to select work
items for the sprint.
Daily Stand-up (Scrum): A short daily meeting for the Development Team to synchronize their work
and plan for the next 24 hours.
Sprint Review: The team demonstrates the work completed in the sprint to stakeholders and
receives feedback.
Sprint Retrospective: A meeting to reflect on the previous sprint and identify improvements for the
next.
Key Concepts:
Iterative Development: Work is broken down into short, fixed-length iterations called sprints (usually
2-4 weeks).
Self-Organization: Teams are encouraged to organize themselves and determine how best to
accomplish their work.
Transparency: The framework promotes visibility of all aspects of the project among the team
members.
Value Delivery: Prioritizes the delivery of valuable and potentially shippable increments in each
sprint.
Benefits of Scrum:
Improved Communication: Daily stand-ups and other events foster better communication.
Faster Delivery: Incremental development allows for regular delivery of usable software.
Adoption: Transitioning to Scrum may require a change in the team's mindset and working practices.
Team Dynamics: Ensuring a cohesive and self-organizing team requires time and effort.
Scrum is highly regarded for its effectiveness in managing complex projects and enabling teams to
adapt to change. When implemented properly, it can enhance collaboration, increase productivity,
and deliver value to stakeholders in a predictable manner.
Pair Programming:
Two programmers work together at one workstation, with one writing code (the driver) and the
other reviewing and providing immediate feedback (the navigator). Roles switch regularly.
Developers write tests before writing code. The code is developed incrementally to pass these tests.
Helps ensure the code meets the requirements and reduces bugs early in the development process.
Continuous Integration:
Code changes are integrated into a shared repository multiple times a day.
Reduces integration issues, ensuring working software and allowing for rapid feedback.
Simple Design:
Emphasizes creating the simplest design that fulfills the current requirements.
Small Releases:
Delivers software in small, frequent releases to gather feedback and ensure rapid adaptation to
changes.
Refactoring:
Improves the internal structure of the code without changing its external behavior.
All team members are responsible for maintaining and improving the codebase.
Continuous Feedback:
Regularly seeks and acts on feedback to improve the development process and the software
product.
Customer Satisfaction: Frequent feedback loops ensure the product meets customer needs.
Challenges:
Cultural Shift: Requires a significant mindset change for teams used to more traditional development
methods.
Pair Programming Adoption: Not all developers may be comfortable with or immediately productive
in a paired programming environment.
Extreme Programming is well-regarded for its focus on software quality and responsiveness to
change. When applied effectively, it can improve team collaboration, code quality, and the ability to
meet changing customer needs efficiently.
Feature Driven Development (FDD) is an Agile software development methodology that emphasizes
building features as the primary unit of work. It focuses on iterative and model-driven development,
breaking down the project into specific feature sets. Here are the key aspects and practices of
Feature Driven Development:
Feature Sets:
Development is broken down into smaller feature sets, each designed to deliver a specific, tangible
piece of functionality.
Emphasizes working on one feature set at a time, allowing for manageable and focused
development.
Develop Overall Model: The project's scope and object model are developed by domain experts and
chief architects.
Build Feature List: The overall model is used to derive a feature list, detailing the required
functionalities.
Plan by Feature: Planning occurs by feature, focusing on the design, implementation, and review of
each feature.
Design by Feature: Features are designed, often by small teams, ensuring consistency across the
project.
Build by Feature: Teams work on each feature set incrementally and integrate the completed
features.
Regular inspections of the progress and adaptation to any changes are emphasized.
Milestones are set for feature sets, allowing tracking and progress measurement.
Domain Object Modeling: Detailed and domain-specific modeling of the object-oriented design.
Individual Feature Teams: Small, dedicated teams focused on specific feature sets.
Regular Reuse of Design Patterns: Using proven design patterns for consistency and quality.
Regular Inspections and Review: Regular reviews and inspections to ensure quality and adherence to
standards.
Predictability: Clear milestones and progress tracking provide predictability in project delivery.
Quality Emphasis: Emphasis on design and review ensures quality in the product.
Scalability: Can scale well with larger projects due to the modular nature of feature sets.
Challenges:
Team Dynamics: Requires experienced and disciplined teams for effective execution.
Initial Modeling Effort: The upfront modeling and planning phase might be time-consuming.
Feature Driven Development is beneficial for larger projects that require a structured approach to
managing and delivering a complex set of features. It is suitable for teams that are experienced and
disciplined in software development. The methodology's emphasis on structured modeling, clear
milestones, and feature-centric development provides a framework for systematic and quality-
focused software delivery.
The Crystal methodologies, developed by Alistair Cockburn, are a family of Agile software
development methodologies that adapt to the specific needs of a project based on its criticality,
team size, and other factors. Crystal methodologies are characterized by their flexibility and
adaptability to varying project conditions. They include several versions, each suited for different
project sizes and criticality levels. Here is an overview:
Multiple Versions:
Emphasizes the importance of team collaboration, communication, and trust among team members.
Adaptive Nature:
Adapts to specific project needs, adjusting practices based on the project's unique characteristics.
Prefers a lighter touch in terms of processes and documentation, focusing more on interactions and
teamwork.
Team Collaboration: Encourages strong teamwork, open communication, and trust among team
members.
Focus on Learning: Acknowledges that learning is an essential aspect of a successful project and
encourages continuous improvement.
Reflective Practices: Regularly reviews and adapts to improve processes and performance.
Flexibility: Adaptable to specific project needs, accommodating different sizes and criticality levels.
Emphasis on People: Focuses on the human aspect of software development, valuing team dynamics
and interactions.
Challenges:
Adaptation Difficulty: Might be challenging for teams unfamiliar with adaptable methodologies.
Lack of Specific Guidelines: Some projects might need more prescriptive guidance, which might be
lacking in Crystal methodologies.
The Crystal methodologies offer a flexible and adaptive approach to software development, catering
to various project sizes and criticality levels. By valuing people, collaboration, and adaptability,
Crystal provides a framework that allows teams to tailor their practices according to their specific
project requirements, promoting successful and efficient software delivery.
Kanban is an Agile methodology primarily focused on visualizing work, managing flow, and limiting
work in progress (WIP). It originated in manufacturing but has since been widely adopted in software
development and other knowledge work areas. Kanban enables teams to manage and optimize their
workflow, emphasizing continuous delivery and flexibility. Here are the key components and
concepts of Kanban:
Represents the workflow and its stages using columns on a physical or digital board.
Visualizes the status of work items, showing how they move through the workflow.
Imposes limits on the number of work items allowed in each stage of the workflow.
Continuous Flow:
Emphasizes a steady and smooth flow of work through the system, with work items moving through
stages efficiently.
Pull System:
Work is pulled into the system based on capacity rather than pushed in by higher-level scheduling.
New work is started only when there is available capacity within the WIP limits.
Key Practices and Principles:
Visual Management: Utilizes a visual board to represent the workflow and make it transparent to all
team members.
WIP Limits: Restricts the number of items allowed in each stage, preventing overburdening and
helping maintain flow.
Continuous Improvement: Encourages teams to reflect on their process continually and make
incremental changes.
Benefits of Kanban:
Efficiency: Focuses on optimizing flow, reducing waste, and improving lead times.
Transparency: Provides a clear, visual representation of work, making it easier to spot bottlenecks
and inefficiencies.
Stress Reduction: WIP limits prevent overload, reducing stress and improving focus.
Challenges:
Defining Workflow Stages: Identifying and optimizing the stages in the workflow may require careful
analysis.
Adaptation Difficulty: Implementing WIP limits and shifting to a pull-based system might be
challenging for teams used to traditional methods.
Kanban is valuable for its simplicity and effectiveness in managing workflows and optimizing the
delivery of work. By emphasizing visual management, WIP limits, and continuous improvement,
Kanban allows teams to achieve a smooth and efficient workflow, adapt to changes quickly, and
continually improve their processes.
Eliminate Waste:
Identify and eliminate activities that do not add value to the customer (waste), such as unnecessary
processes, delays, and rework.
Emphasize building quality into the product from the start rather than fixing defects later.
Defer Commitment:
Postpone decisions and commitments until the last responsible moment to accommodate changing
requirements.
Embrace flexibility and the ability to make decisions based on the latest information.
Deliver Fast:
Respect People:
Optimize the entire process, including interdependent activities, for maximum efficiency.
Value Stream Mapping: Analyzing and visualizing the steps in the process to identify waste and
bottlenecks.
Pull Systems: Work is pulled based on demand rather than pushed in by higher-level scheduling.
Customer Value: Prioritizes customer value by delivering what's necessary with minimal waste.
Flexibility and Adaptability: Embraces change and defers decisions until necessary, allowing for more
flexibility.
Challenges:
Cultural Change: Adopting a lean mindset might require a cultural shift within the organization.
Defining Value: Determining what truly adds value to the customer can be a challenge.
Lean Software Development, based on Lean manufacturing principles, aims to create more value for
customers with less waste and effort. By emphasizing efficiency, value delivery, continuous
improvement, and respect for people, Lean methodologies strive to optimize the entire
development process for maximum efficiency and customer satisfaction.