Professional Documents
Culture Documents
Professional Scrum Developer - 1 Workbook
Professional Scrum Developer - 1 Workbook
www.accentient.com
Visual Studio ALM Experts
Accentient, Inc.
Boise, Idaho USA
info@accentient.com
No part of this manual may be reproduced or transmitted in any form or by any means, electronic
or mechanical, including photocopying and recording, for any purpose without the express written
permission of Scrum.org and Accentient Inc. Unauthorized duplication or usage of the material
violates existing copyright agreements and will be enforced by law.
DISCLAIMER
While Scrum.org and Accentient Inc take great care to ensure the accuracy and quality of these
materials, all material is provided without any warranty whatsoever, including, but not limited to,
the implied warranties of merchantability or fitness for a particular purpose.
Team size
Knowledge and competencies
Co-located vs. distributed
Sympathy and who wants to work with each other
Diversity
Scrum Teams also need a Scrum Master, so make sure that you select one within your team. Your
trainer will be your Product Owner during this course, so there is no need to worry about that role.
For those of you reading this in a black and white book, here are the colors mentioned on the slide …
Quality/Test Red
Architecture/Design Green
Coding Blue
ALM/Automation/DevOps Silver
Scrum Gold
• Teacher – leading the training, presenting the material, answering your questions
• Product Owner – playing the case study’s Product Owner as needed
• Coach – helping with specific questions and concerns during activities and Sprints
Please write down the names and email addresses of your instructor and any assistants:
This course will have both technical and team-oriented operational components. One minute you
may be working individually on a task, and the next minute you may be defending your team’s
approach to prioritizing and ordering its work.
Each Scrum Team is expected to self-organize and manage their own work during each Sprint.
Pairing is highly encouraged. Your instructor will be available if there are questions or impediments,
but will be hands-off by default. You should be prepared to communicate and work with your fellow
team members in order to achieve your Sprint Goal. If you have development-related questions or
get stuck, your partner or team should be your first level of support.
Record the relevant start time, end time, break times, lunch time, and other logistical details below:
The same goes for this course. The planning, execution, review, and
retrospective cycle are your “wax on, wax off” movements. Later, when your
actual team gets into software “combat”, these memorized motions will
serve you well.
Scrum.org strives to provide all of the tools and resources needed by Scrum practitioners to deliver
value using Scrum. Scrum.org provides Scrum assessments to allow people to evaluate themselves
and improve, host community forums and webcasts to foster discussion and knowledge transfer,
and define industry-leading Scrum training for practitioners at all levels.
Scrum.org was founded in 2009 by Ken Schwaber, the co-creator of Scrum, out of extreme
dissatisfaction with the state of the art. For more information about the origins of Scrum.org visit
https://www.scrum.org/about.
With everything that we do as an organization, Ken Schwaber, our founder, chairman and the co-
creator of Scrum asks: “How does this fit into our mission of helping people and teams solve
complex problems?” and if it doesn’t, we often revisit the intent of doing it. So, as we move through
this class, this mission will be at the heart of the materials and a major part of the goals we have
coming out of the class.
Scrum.org assessments are grounded in the Scrum Body of Knowledge, the Scrum Guide, which is
written and maintained by Scrum's founders, Ken Schwaber and Jeff Sutherland. The Scrum Guide
can be found in 30 different languages at http://scrumguides.org.
Open Assessments
Before attempting an assessment, it is recommended that you take and pass an Open assessment,
such as the Scrum Open or others. These assessments are shorter than the proper ones, but will
familiarize you with the types of questions that will be asked. Think of the Open assessments as
another learning tool that you can use.
Audience
This course assumes you are familiar with Scrum and have hands-on experience in a Software
Development environment. You should also have passed the Scrum Open and Scrum Developer
Open assessments.
We will also introduce the elements of the Scrum framework, its roles and accountabilities, events
and artifacts and how they work together.
At the end of the module we will look at how complementary practices can make Scrum more
successful in a given context. These practices are not mandatory and finding the right practices for
the right team, organization and context is difficult and a constant improvement cycle.
This class teaches the rules of the game, and only a little strategy of how to play well. It’s up to you
to play the game well and succeed. For a great analogy of how Scrum is like the game of chess, read
Ken Schwaber’s blog post on the subject: http://bit.ly/1p1KsHR.
This chart has two axes: “Agreement on what we make” which represent the requirements and
“Certainty on how we do it” which represents the technology used. Values in both axes can range
from simple to chaos. In a simple environment, everything is known up front. Complicated
environments are where more is known than unknown. Complex environments are just the
opposite, and more is unknown than known. In chaotic environments, very little is known. This may
be the situation for some startups.
1. Transparency – The aspects of the process that affect the outcome are visible, as well as what is
being seen must be known in its realistic state.
2. Inspection – Frequent enough inspection allows the detection of unacceptable variances. The
frequency of inspection should not exceed the tolerance to inspection.
3. Adaptation – If inspection reveals elements outside acceptable limits, the process or the
materials being processed are adapted as quickly as possible to minimize further deviation.
The Scrum Framework offers four formal opportunities for inspection and adaptation during these
events:
Sprint Planning
Daily Scrum
Sprint Review
Sprint Retrospective
Product Owner
The Product Owner is responsible to optimize the value of the product. She is doing so by managing
the Product Backlog, deciding what goes on the Product Backlog and what is removed and how it is
ordered. To understand value, the Product Owner must understand the needs and the environments
of the users of the product as well as the needs of other stakeholders.
Developers
The responsibility of the Developers is to create and deliver a Done Increment. It is responsible for
its technical quality and its sustainability. Finding ways how this can be achieved best is also part of
the responsibility of the Developers as they are self-managing.
Scrum Master
In Scrum the Scrum Master ensures that the Scrum Framework is understood correctly by the Scrum
Team as well as by other parts of the organization. The Scrum Master coaches people to help them
finding and applying improvements and helps by removing impediments.
Note
While the Scrum Framework defines specific accountabilities, one should not misinterpret this as
working on those topics alone. Collaboration and providing different perspectives and expertise to
open discussions is a way to get a broader picture. For example, the Product Owner should consult
with the Developers about ordering the Product Backlog. But in the end, there is always one role
which is in charge to decide if no consensus can be achieved.
Courage – Show courage in not developing what nobody wants. Show courage to not deliver undone
software. Show courage in sharing all relevant information (transparency). Show courage in
admitting you are not perfect (nobody is). Show courage to change direction. Show courage in asking
for help.
Focus – Focus on what you know (think: YAGNI – You Ain’t Gonna Need It). Focus on what’s most
important. Focus on what’s most nearby in time. Focus on your work. Focus on the simplest thing
that might possibly work. Focus on getting to Done.
Commitment – Commit to the team. Commit to quality. Commit to collaborate. Commit to learn.
Commit to do the best you can, every day. Commit to the Sprint Goal. Commit to be professional.
Commit to self-organize. Commit to excellence. Commit to the agile principles
(http://agilemanifesto.org/principles.html). Commit to deliver working software. Commit to look for
improvements. Commit to your team’s Definition of Done. Commit to following the rules of Scrum.
Commit to deliver value. Commit to finish work (before starting new work or multi-tasking). Commit
to continuously inspect and adapt. Commit to transparency.
Respect – Respect people for their experience and personal background. Respect diversity (it makes
you stronger). Respect different opinions (you can learn from them). Respect each other’s
accountabilities.
Openness – Be transparent. Be open about your work status. Be open for people. Be open to
collaborate across disciplines and skills. Be open to collaborate with stakeholders and the
organization. Be open in sharing feedback. Be open to receive feedback. Be open for change. Be
open to working outside your comfort zone.
1. A Product Owner orders the work for a complex problem into a Product Backlog.
2. The Scrum Team turns a selection of the work into an Increment of value during a Sprint.
3. The Scrum Team and its stakeholders inspect the results and adjust for the next Sprint.
4. Repeat
Scrum makes clear the relative efficacy of your product management and development practices so
that you can improve. The Scrum framework consists of a Scrum Team and its associated
accountabilities, events, artifacts, and rules. Each component within the framework serves a specific
purpose and is essential to Scrum’s success and usage.
In Scrum, time is divided into something called Sprints. A Sprint lasts one month or less and all
Sprints have the same duration. A Sprint is timeboxed; that means that it is never extended (even by
one or two days). Every Sprint has a time scheduled at its end to inspect the software being
developed in that Sprint. This is called the Sprint Review. It is important to define the date and time
of the Sprint Review and to invite the interested stakeholders.
The team creates software during the Sprint. At the Sprint Review, the stakeholders provide
feedback and the plan for the next Sprint is adapted according this feedback.
Scrum’s artifacts represent work or value in various ways that are useful in providing transparency
and opportunities for inspection and adaptation. Artifacts defined by Scrum are specifically designed
to maximize transparency of key information needed to ensure Scrum Teams are successful in
delivering a Done Increment.
Prescribed events are used in Scrum to create regularity and to minimize the need for meetings not
defined in Scrum. Scrum uses time-boxed events, such that every event has a maximum duration.
This ensures an appropriate amount of time is spent planning without allowing waste in the planning
process. Other than the Sprint itself, which is a container for all other events, each event in Scrum is
a formal opportunity to inspect and adapt something. These events are specifically designed to
enable critical transparency and inspection. Failure to include any of these events results in reduced
transparency and is a lost opportunity to inspect and adapt.
Developers are cross-functional, which is to say the entire team must collect all of the skills
necessary to create an increment of work. Individual Developers often have specialized skills, such as
analysis, design, programming, testing, etc. A Scrum Team should work on overlapping skills. If more
than one Developer is able to do a task, planning gets simpler and the team has more options. This is
the reason why the team should strive to overlap in their skills to some degree. This is not to say that
a team of generalists is preferred. Some team members will still be “rock stars” in certain areas, but
they should strive to teach as well as pick up new skills, especially if they are needed but not
available.
The Developers:
The Scrum Master helps those outside the Scrum Team understand which of their interactions with
the Scrum Team are helpful and which aren’t. The Scrum Master helps everyone change these
interactions to maximize the value created by the Scrum Team. The Scrum Master helps the team
and the organization adopt Scrum. The Scrum Master teaches the team by coaching and by leading it
to be more productive and produce higher quality products. The Scrum Master helps the team
understand and use self-management and cross-functionality. The Scrum Master does not manage
the team because the team is self-managing.
Does not enforce solutions, but enables the Scrum Team to find its own solutions to problems
Does not direct, but enables the Scrum Team to become self-organizing
Does not organize the Scrum events but enables the Scrum Team to do so
Is responsible for establishing Scrum practices and rules
Ensures the process is followed
Shields the Scrum Team from distractions and helps remove obstacles
Ensures the Scrum Team is fully functional, productive, and improving its quality
Enables close cooperation across all roles and functions and removes barriers
Educates everyone on the Scrum process
Facilitates rather than directs
Helps the Product Owner understand how to best utilize the capabilities of the Developers
Removes impediments in the organization (but not necessarily within the Scrum Team)
The Product Backlog lists all features, functions, requirements, enhancements, experiments, and
fixes that constitute the changes to be made to the product in future releases. Each item in the
Product Backlog is known as a Product Backlog item (PBI). A PBI typically has the attributes of a
description, order, and size.
The Sprint Backlog makes visible all the work that the Developers identify as necessary to meet the
Sprint Goal. To ensure continuous improvement, it may include high priority process improvement
items identified during Sprint Retrospective.
The Sprint Backlog is a plan with enough detail so that changes in progress can be understood in the
Daily Scrum. The Developers modify the Sprint Backlog throughout the Sprint, and the Sprint Backlog
emerges during the Sprint. This emergence occurs as the Developers work through the plan and
learn more about the work needed to achieve the Sprint Goal.
The Scrum Team demonstrates the Increment at Sprint Review. The Increment is inspected by
stakeholders (customer, marketing, sales, etc.) who are encouraged to provide feedback and to
collaborate on making the best product possible. This feedback may be captured in the Product
Backlog as new, updated, or removed items.
“A Scrum project is only one Sprint long. A release of software is the sum of multiple
increments (and previously developed software, if any). A Scrum project cannot fail, only
deliver unacceptable return on investment.” – Ken Schwaber.
Each Sprint may be considered a project with no more than a one-month horizon. Like projects,
Sprints are used to accomplish something. Each Sprint has a definition of what is to be built, a
flexible plan that will guide building it, the work, and the resultant product.
Sprints are limited to one calendar month. When a Sprint’s horizon is too long the definition of what
is being built may change, complexity may rise, and risk may increase. Sprints enable predictability
by ensuring inspection and adaptation of progress toward a goal at least every calendar month.
Sprints also limit risk to one calendar month of cost.
A Sprint could be cancelled if the Sprint Goal becomes obsolete. Only the Product Owner has the
authority to cancel the Sprint.
Sprint Goal
While the Developers forecast the Product Backlog items they will deliver in the Sprint, the Scrum
Team crafts a Sprint Goal. The Sprint Goal is an objective that will be met within the Sprint through
the implementation of the Sprint Backlog, and it provides guidance to the Developers on why they
are building the Increment. The Sprint Goal gives the Developers some flexibility regarding the
functionality implemented within the Sprint. The Sprint Goal can be any other coherence that causes
the Developers to work together rather than on separate initiatives.
Daily Scrums can improve communication, eliminate the need for other meetings, highlight and
promote quick decision-making, and improve everyone’s level of knowledge. Daily Scrums can also
be used to identify and remove impediments to productive development. Follow-up meetings can
occur to make adaptations to the upcoming work in the Sprint. The intent is to optimize the
probability that the team will meet its goal.
Note: It is called the Daily Scrum not the Daily Standup. If the Developers decide to stand, they may.
The Product Owner identifies what forecasted work is Done and what work is not Done
The Developers demonstrate the work that they have Done and answer questions about the
Increment
The Product Owner discusses the Product Backlog as it stands and forecasts likely completion
dates based on progress to date
The entire group collaborates on what to do next, so that the Sprint Review provides valuable
input to subsequent Sprint Plannings
The result of the Sprint Review is a refined Product Backlog that defines the probable Product
Backlog items for the next Sprint. The Product Backlog may also be adjusted overall to meet new
opportunities.
Inspect how the last Sprint went with regards to people, relationships, process, and tools
Identify and order the major items that went well and potential improvements
Create a plan for implementing improvements to the way the Scrum Team does its work
The Scrum Master encourages the Scrum Team to improve its development process and practices to
make them more effective and enjoyable for the next Sprint. During each Sprint Retrospective, the
Scrum Team may also plan ways to increase product quality by adapting the Definition of Done as
appropriate.
By the end of the Sprint Retrospective, the Scrum Team should have identified improvements that it
will implement in the next Sprint. To ensure continuous improvement, they may include high priority
process improvements identified to the Sprint Backlog of the next Sprint. Implementing these
improvements in the next Sprint is the adaptation to the inspection of the Scrum Team itself.
Although improvements may be implemented at any time, the Sprint Retrospective provides a
formal opportunity to focus on inspection and adaptation.
Tip: Keep retrospectives simple and consider sharing improvements with other teams.
This diagram illustrates some of the many popular people-centric and engineering-centric
complementary practices and techniques a Scrum Teams can benefit from. It is part of self-
management of the team to decide which practices will be helpful in their situation and this
continuously should be inspected and adapted.
If the burndown chart is used with tasks, one must be careful that finishing all tasks does not equal
to achieving the Sprint Goal which should be the primary desire of the Scrum Team.
Sprint Backlog
On the Sprint Backlog it should be visible how many items are already finished and how many are
still open. Updating the Sprint Backlog frequently creates transparency about the current state and
let the Develops raise the right questions early.
When using Velocity (number of story points finished per Sprint) it should be made absolutely clear
that this will not allow to calculate a forecast with a high precision but that the Cone of Uncertainty
applies. This refers to best-case, worst-case and most likely case scenarios.
Another option is to use Probabilistic Forecasting based on statistical methods like the Monte Carlo
Simulation. You can read more about Monte Carlo Simulation here: https://bit.ly/3szO4JM
The primary goal of the case study is to let students experience great Scrum and what
differentiates Professional Scrum from mechanical Scrum
The case study offers plenty of opportunities to experiment with technical practices discussed during
the training. It shows enough examples of Inspect & Adapt for a Scrum team. The case study covers
the following learning objectives.
An explicit and concrete Definition of Done may seem small but it can be the most critical checkpoint
of work in Scrum. Without a consistent meaning of Done, velocity cannot be estimated. Conversely,
a common Definition of Done ensures that the increment produced at the end of Sprint is of high
quality, with minimal defects. The Definition of Done is the soul of Scrum and mature Developers
will resist demonstrating at the Sprint Review (let alone deploying) any increment that is not Done.
The Product Owner can accept the work at any time during the Sprint. The Sprint Review should not
be an “acceptance meeting”, but rather an opportunity to inspect the Increment and adapt the
Product Backlog.
What’s worse is that “undone” work from the first Sprint gets piled on by “undone” work from the
2nd, 3rd, etc. Sprints require even more work to reach done. That is, “undone” work accumulates
logarithmically not linearly. This introduces a new degree of uncertainty or unpredictability into a
process that is supposed to promote transparency and predictability.
Note: There is no such thing as “done-done”. If there was, it would imply that Done wasn’t really
Done.
Plan on revisiting your DoD during each Sprint Retrospective in this course.
The Developers have to be careful how they formulate their Definition of Done. The criteria stated in
the DoD must reflect what is actually done by the Developers. For example, they might precisely
state if a new criterion applies to all the existing codebase or only to added or modified code.
Note: You should use this definition throughout this class as you identify and report bugs.
If the Product Owner deems the bug as being critical and requiring an immediate fix then the
Developers should drop what they are doing and fix the bug. The hotfix may or may not require all
Developers’ capacity. Regardless, everyone must realize that the Sprint's forecast may be missed and
achieving the Sprint Goal might even be in jeopardy. The Product Owner weighs these risks and,
after collaborating with the Developers, makes the decision.
Note
Failing tests are not bugs that can then be put on the Product Backlog and fixed later. Failing tests
are a signal that something has been destroyed and that the increment is not Done yet. If the
Definition of Done does not require passing tests, it is strongly recommended to reconsider this.
• If it’s a small bug (< n hours to fix) and won’t impact the burndown, then just fix it. The
Developers decide what "n" equals. A value of 2 is commonly used.
• If it’s a larger bug (> n hours to fix) and won’t impact the ability to achieve the Sprint Goal or
forecast, then create a bug work item, associate a task work item, and have a Developer code
the fix during the Sprint. The work items will explain the reason behind the hiccup in the
burndown.
• If it’s a larger bug (> n hours to fix) and will impact the ability to achieve the Sprint Goal or
forecast, then create a bug work item and discuss the situation with the Product Owner. She
may value the bug fix over another PBI in the forecast. If not, then the bug will be left in the
code this Sprint and the bug work item will be refined and fixed in a future Sprint.
• If another team member finds a small bug and it's not possible to collaborate on an immediate
fix, then a bug work item should be created and assigned to the current Sprint. The Developers
must decide if it can be fixed in the current Sprint or in a later one. If the bug is left in the code,
the Product Owner should be consulted, and everyone needs to realize that the Sprint's forecast
may be missed and achieving the Sprint Goal might be in jeopardy. What's worse is that you
have now added technical debt to your software product.
Out-of-Sprint Bugs
Bugs found in production code, or in a Done Increment waiting to be released to production, are
referred to as “out-of-Sprint” bugs. Typically, these bugs don't impact the code associated with the
forecasted work the Developers are working on at the moment. If code is impacted, then treat them
as in-Sprint bugs. Otherwise, consider the guidance I give a Scrum Team for handling out-of-Sprint
bugs:
• If the Product Owner determines the bug is critical, the Developers should do whatever needs to
be done to get a fix into production. Everyone must realize that the Sprint's forecast may be
missed and achieving the Sprint Goal might be in jeopardy.
• If the bug is not critical, then create a bug work item. The Product Owner will decide if and when
the bug is refined and forecasted in a future Sprint.
• If the number of critical bug occurrences increase, consider adjusting the Developers’ capacity or
dedicating a Developer to supporting maintenance issues like these. The Scrum Team should
also look for the root cause of these critical bugs and a solution during the next Sprint
Retrospective.
Note: Fellow Professional Scrum Developer Charles Bradley has created the Bradley Bug Chart,
which is a flowchart that encapsulates the above workflow. Check it out at http://bit.ly/2P8qIb2.
A good, clear title is a must. A Developer should be able to grasp the essence of the bug from the
title alone. If there are many bug reports, having a clear title will help the team as they refine the
bug, forecast it, and develop the fix.
You should only report one bug per report. If you document more than one bug, some of them may
be overlooked. Atomic bug tracking like this helps in the same way atomic testing does – it provides
a very precise understanding of what’s working and what isn’t.
A picture is worth a thousand words. Sometimes words just can’t demonstrate the issue like a
screenshot or mockup can. Developers will appreciate these extra efforts because they need to find
the problem in the shortest amount of time. Any helpful documentation like this can be attached to
the bug report.
Bug reports should always contain the observed as well as the expected results. This is a good
practice because sometimes Developers don't think that the bug is a real bug. The variance between
expected and observed should prove the case.
Refining the Product Backlog includes the acts of adding detail, estimate sizes, and order items in the
Product Backlog. This is an ongoing process in which the Product Owner and the Developers
collaborate on the details of Product Backlog items. While refining the Product Backlog, items are
reviewed and revised. However, they can be updated at any time by the Product Owner or at the
Product Owner’s discretion.
Refining the Product Backlog is a part-time activity between the Product Owner and the Developers.
How and when refining is done is decided by the Scrum Team. There was a suggestion in previous
versions of the Scrum Guide that Product Backlog refinement usually not takes more than 10% of
the Developers’ capacity. But this has been removed now as there might be specific situations that
would need much more or less of Product Backlog refinement. The Developers are responsible for
sizing Product Backlog items. The Product Owner may help the Developers understand and select
trade-offs, but the people who will perform the work estimate the size.
Note: Some Scrum Teams will refer to refinement sessions as “story-time” or “requirements
workshop”.
The requirement itself is communicated from the Product Owner to the Developers through the
second C, which is conversation: an exchange of thoughts, opinions, and feelings. This conversation
takes place over time, particularly when the Product Backlog item is being refined and estimated.
The conversation is largely verbal but can be supplemented with documents. The best supplements
are examples; the best examples are executable; we call these examples confirmation.
No matter how much discussion or how much documentation is produced, the Scrum Team can’t be
certain about what is to be done. The third C adds confirmation that is sorely need. This component
is implemented by the acceptance tests. During Product Backlog refinement, during various bilateral
discussions and at the beginning of the Sprint, the Product Owner communicates to the Developers
what she wants. She is telling that not only in form of what she wants, but also by telling them how
she will confirm that they’ve done what is needed. She defines the acceptance tests that will be used
to show that the item has been implemented correctly.
For more information read Ron Jeffries blog post here http://bit.ly/1PqFBuS.
Organizations can't expect their Developers to gain this knowledge on their own, although some
Developers will. I know many Developers who consider their profession as their hobby. For these
geeks, learning new things is just fun. For the rest of the world, this learning will have to come during
company time on the company dime. But how does this fit with Scrum? The answer is to perform a
spike, which is another word for a technical investigation, proof of concept (POC), or an experiment.
The outcome of a spike is just enough knowledge to be able to give the Developers some confidence
in their estimate. Ultimately, Scrum is about learning from data derived from experiments, so the
spike concept fits right in.
Most spikes are small and executed as needed throughout the Sprint. In fact, I wouldn't even call
them a spike. They are just part of development. Some Scrum practitioners call them spike tasks (as
opposed to the larger spike stories). If a Developer needs to clarify a technical issue, and another
team member cannot help, the Developer can create a quick spike instead. Timeboxing should
always be used to keep spikes as small as is necessary. The Developers can decide on the criteria for
when to track the task in the Sprint Backlog, such as by creating a work item.
Estimation should be performed as late as possible. Early estimates are less accurate than later ones.
You always know more today than you did yesterday. You also don't want to waste the Developers’
time estimating items that are "way down the list". Proper ordering of the Product Backlog can
reduce waste when estimating. The Product Owner should know what's coming up next or soon
thereafter and focus on those items. He or she should wait until larger PBIs are decomposed.
Agile estimation is not a silver bullet. In fact, it's the worst form of estimation except all the others
that have been tried. Agile estimation techniques won't remove uncertainty from early estimates,
but they also won't waste unnecessary time. Estimates will become more accurate over time. This is
due to the empirical nature of Agile estimation techniques where actual work is taken into account.
Everyone should have laser focus and actively listen to the estimator's reasons. Everyone else should
remain silent. There should be no discussion or judgment. If the Developer does not stick the card to
the board within one minute, the card is placed in a default, medium-sized column. The player then
restarts the timer for the next player. After a few rounds, there should be an assortment of cards
stuck to the whiteboard. Team members can now, on their turn, choose to move one of the cards to
a different column instead of selecting a new card from the deck. The player should read the item
out loud as well as the reason supporting the decision to change the estimate.
Eventually all of the cards will be stuck to the whiteboard and estimated. Each player, on their turn,
can either move a card between columns or simply pass. Passing means that they are satisfied with
the current estimates. If a Developer does not make a decision within one-minute, it will be
generally understood to be a pass. The estimation game ends when the pile of cards is now on the
whiteboard and every Developer signals pass.
Note: This technique is similar to the Affinity and White Elephant estimation techniques.
The units represented are typically story points in a limited Fibonacci sequence. There may also be
question mark, infinity, and coffee break cards. The cards are numbered in this sequence to account
for the fact that the larger an estimate is, the more uncertainty it contains. Thus, if a developer
wants to play an 8 he is forced to reconsider that some of the perceived uncertainty does not exist
and play a 5, or accept a conservative estimate accounting for the uncertainty and play a 13.
Typically, the most knowledgeable team member for a given PBI provides a short overview. The
team is given an opportunity to ask questions and to discuss and clarify assumptions and risks. A
summary of the discussion should be recorded. Estimation commences and team members with
high estimates and low estimates are given an opportunity to justify their estimate and then
discussion continues. The team should repeat the process until a consensus is reached. If consensus
is not reached after 2-3 rounds, estimation should be tabled. More will be known later.
The estimate becomes anchored when the Product Owner, or an experienced Developer, says
something like, "I think this is an easy fix, I can't see it taking longer than a couple of days", or when
another Developer says, "I think we need to be very careful, clearing up the issues we've had in the
database could take months". Whoever starts the estimating conversation with, “I think it's 13
points” immediately has an impact on the thinking of the other team members; their estimates have
been anchored. In other words, they are all now likely to make at least a subconscious reference to
the number 13 in their own estimates.
Those who were thinking 21 points are likely to reduce and those who thought 5 are likely to
increase. This becomes a particular problem if the 13 is spoken by an influential member of the team
when the rest of the team are predominantly thinking higher or lower. Because the remainder of the
team has been anchored, they may consciously or otherwise fail to express their original unity; in
fact, they may fail to even discover that they were thinking the same thing. This can be dangerous,
resulting in estimates that are influenced by agendas or individual opinions that are not focused on
getting the job done right.
Usually Wall Estimation should be much faster than Planning Poker as we have less discussions. This
is an advantage and a disadvantage as well. Some teams use Wall Estimation to estimate a bigger
number of new PBIs and then refining them in smaller batches by using Planning Poker. This is part
of the refinement process we have for the evolution of a PBI.
Another valuable combination is that Wall Estimation visualizes the relation in a great way so you
could have a wall with some reference PBIs while doing Planning Poker. This can help to prevent a
slip of your references over time.
There are other good estimation techniques available. Find out which one fits your team and your
situation best.
The Scrum Team decides which estimation unit and technique fits their needs best, also considering
the needs of the Product Owner. The minimum of estimation the Scrum Guide is requesting is the
ability to craft a forecast for the next Sprint.
More and more Scrum Teams don’t work with estimates any more. This has become popular under
the Twitter Hashtag #NoEstimates, which is misleading: it doesn’t mean that a team is not
estimating anymore; it just means that they don’t use estimation values.
#NoEstimates expects Product Backlog items to be right-sized, which means they are small enough
to fit into a Sprint. The search for an estimation value (hours, sizes or Story Points) is replaced with
more clarification and slicing of big items into smaller ones. To achieve right-sizing, teams can use
techniques like Planning Poker®, Wall Estimation or others with just 2 options: size 1 or “too big”.
That way the Developers can spend more of their valuable time working on the items instead of
thinking about their size. Since every estimate is a guess this reduces waste.
As with the other estimation techniques #NoEstimates is not by itself a goal or the only way of
working. It is one possible way of working with the Product Backlog.
A question that can’t be answered by #NoEstimates alone (which can’t be answered by Story Point
estimates as well, BTW), is the valid question of “When will it be done?”. This question needs more
tools, which we will talk about in the next section.
To predict based on #NoEstimates, flow and throughput are important. Improving these might also
help improving the process. For deeper insights into these topics you might consider looking at the
Professional Scrum with Kanban (PSK) training by scrum.org (http://www.scrum.org/psk).
For more information on predictability based on flow metrics, consider reading Daniel Vacanti’s
book:
With Story Points we can use the Scrum Team’s velocity. In a #NoEstimates context we can use the
throughput of our past Sprints and simulate probable outcomes based upon this data. A commonly
used technique to do this is the Monte Carlo simulation. It uses the past throughput data (e.g.
number of items finished per day) and runs simulations on that. It simulates a certain number of
Sprints (e.g. 10,000) and uses a random distribution of our possible throughputs from the past.
These simulations create a bell curve distribution of probable outcomes.
In a second step we add the percentiles we are interested in, by asking: if we simulate 10,000 times,
what date will we be done with a certain number of items (e.g. 100 for the next release) in 85% of
the cases? The number of items is related to right-sized items. So, you can either limit your forecast
horizon to this part of your Product Backlog or you could estimate bigger items based on how many
right-sized items they might contain. But then there is no big difference to estimating with Story
Points. Be careful, there are some downsides if you right-size PBIs too far into the future.
The results of the Monte Carlo simulation can then be translated into a calendar view. In the above
example we have a 50% probability to finish the desired set of PBIs by February 3rd or later, a 70%
probability to finish February 7th or later and so on. The later in the calendar, the higher the
probability that we will be finished by then. But there is no 100% probability.
Monte Carlo simulation gives you probabilities and confidence levels. It does not give you release
dates. Based on this simulated data and the confidence levels they represent you can then discuss
possible release dates and scopes with your stakeholders.
For more information on flow-based planning also consider the Professional Scrum with Kanban
Training (PSK). For more information visit http://www.scrum.org/psk.
The Product Owner presents the refined Product Backlog to the Developers. The Developers then
select an achievable set of work from the highest-ordered items. This is their forecast. Together they
also create a Sprint Goal and a plan on how to develop those items.
The Developers will then proceed to work efficiently and effectively through their plan (tasks). After
the development timebox has expired, the team should have built an Increment of functionality with
at least some demonstrable business value. This is then demonstrated to stakeholders in the Sprint
Review where feedback is solicited and recorded in the Product Backlog. The team then inspects and
adapts their performance in the Sprint Retrospective in order to make improvements in the way
they work in the following Sprints.
Considerations
Considerations
Will you use your work planning/tracking tool to track the states of tasks?
Will you maintain and use a Sprint burndown chart to assess progress?
How will you handle impediments?
How will you ensure that your work is Done?
When and where will you meet for your Daily Scrum?
When refining the Product Backlog, will you use your team’s velocity?
Consider revisiting and re-estimating some PBIs that were previously refined
Considerations
Considerations
The inventors of the term “DevOps” haven’t created a strict definition. They argued that defining
DevOps will prevent its further evolvement. This leads to interesting discussions in the software
delivery community around what DevOps means and how it is applied – from a DevOps engineer via
a tool stack to a new culture of collaboration.
The DevOps Handbook was inspired by the principles of lean production and the Toyota Production
System as described in “The Goal”: https://amzn.to/2QHgs7z
You can find a quick introduction into the three ways here: http://bit.ly/2Dk2C7k
1st Way
The first way helps to increase value by delivering value to users earlier and more
frequently. It lowers the risk through smaller and more frequent releases. In the first way
teams usually invest in automation to avoid problems. The more often you practice releases,
the more frequently you learn how to avoid problems.
2nd Way
The second way helps to increase value through early feedback. We can sooner learn what
value means for our end users and customers. The second way reduces risk because we can
lower the investment in uneconomical features by earlier identifying the real value.
3rd Way
The third way describes a culture of experimentation and learning, which needs a culture to
treat errors as learning opportunities. This lowers risk because errors are no longer glossed
over but made transparent. It increases value by using concepts like hypothesis driven
development. This means, we treat each change as a hypothesis that will increase the value
of our product. It remains a hypothesis until we can measure the real impact. This is
different to Product Owners being sure about what customers want and then take a big
investment before delivering the changes.
These three ways and their contribution to our goal of increasing value while simultaneously
reducing risk are very similar to some of the basic concepts in Scrum.
Empiricism
To build the right product, Scrum uses empiricism. While learning from real feedback from
stakeholders and end users and adapting our plan accordingly, we reduce the risk of wasting
too much time and money building unnecessary features or having to do a lot of rework.
Focusing our efforts on valuable features helps to increase the overall value of the product.
Continuous Improvement
A big part of continuously improving the way of creating value are the five Scrum Values.
They define a culture where we openly discuss opportunities for improvements. They create
a safe environment for a team to try out new things and learn from them. This helps to
become better and build more value. It also reduces the risk of having serious problems
uncovered too late in the process.
Continuous Testing
Traditional approaches of quality assurance are often based on getting all implementation finished
before verifying the latest build of the product before delivering it to production. In contrast
continuous testing is a practice of integrating testing as a fundamental and ongoing part of
development. It helps to identify and fix issues much earlier and so lowers risk drastically.
Continuous testing is especially powerful if combined with practices like test automation, clean code
and others which help to reduce regression testing efforts.
Continuous Integration
Continuous Integration is the practice of integrating changes from different developers and teams
working on the same code base as early and as frequently as possible. This prevents big divergence
of code and lowers effort for merging changes into one single base. It also allows to find problems
and risks earlier which makes it easier to fix them.
Continuous Delivery and Continuous Deployment are often used synonymously. While they have a
lot in common, there are slight differences. While Continuous Delivery is describing the ability to
automatically build and distribute the latest artifacts on a test-environment, Continuous Deployment
goes one step further by deploying into production. For more details see https://bit.ly/3c3GRI3.
Testing in Production
What sounds like a very dangerous approach can help not only to reduce cycle time but also make
your tests more reliable. It means to execute various tests right in the production environment. To
reduce the risk of affecting production operations with untested and failing functionality, various
technologies can be used to make the new functionality only available to the test process or a very
small set of users while other users will use the previous functionality. The change will be rolled out
to all users once the test was successful. This practice will help you to get rid of various test stages
like QA, UAT, Staging etc. And as the tests run in the real production environment, you can eliminate
the risk of using a test environment that behaves slightly different from your production
environment.
Monitoring
Obviously, it is helpful to know the current state of your system. While most systems support logging
to analyse what happened during an outage or a problem, monitoring is used to check the current
state continuously. Once one or more parameters get out of a healthy range, alarms can be
triggered to initiate some actions.
Cycle Time
Cycle Time is the time between working on an item that has been started and the item is finished
(usually delivered to real end-users). Cycle Time defines how fast work can flow through a system
and minimizing Cycle Time helps not only to make the system more efficient but also to increase
predictability and the ability to quickly respond to changes or new insights.
Blue-Green Deployment
Blue-Green Deployment is a practice that helps reducing down-times while upgrading the system to
a new version. It has other positive effects like fast rollbacks in case of emergency. It uses two
identical environments. One environment (called blue to differentiate it from the other identical
one) is handling all requests and executing all production operations. The other environment (green)
can handle software updates and configuration changes without impacting production. Even tests
can be executed on the green environment without risk. Once the green environment is ready, all
requests are switched over to this one and it becomes the new blue environment. The previous blue
environment at the same time becomes the green one and can be used for the next update.
Test-Automation
Automating tests is not only a way to increase the quality of a product, it also helps to reduce cycle
time. If you see test execution as one form of feedback, automated tests help to get this feedback
much earlier. This lowers the effort of fixing issues and allows to deliver releasable increments much
faster.
Vertical Teams
In traditional organizations, there are many different teams and departments involved in the process
from a customer providing feedback or suggesting an improvement to delivering the new version to
customers. Sales & Marketing, Product Management, Development, Quality Assurance, Operations
and more jump to mind. But each different department or team means there is a handoff. Handoffs
tend to be slow and error-prone. In contrast a vertical team combines all the necessary
competencies to handle the whole process end-to-end. In such scenarios teams typically are only
responsible for small parts of the whole product. So instead of splitting the organization into
horizontal layers (departments) this approach suggests slicing the product.
Infrastructure as Code
Instead of setting up and configuring infrastructure and environments, this process can be
automated by scripts and parameter files. While this approach is not faster for the initial setup of the
infrastructure (it might even be slower), it provides a lot of advantages. The scripts and configuration
files can be stored in version control together with the source code of the software. This allows to
create exactly the matching environment for a given version of the software. Changes to the
environment are documented in version control as they are no longer executed on the environment
directly but by changing and executing a script. And new instances of an exact copy of the
production environment can easily be created, for example for testing purpose.
Release-Pipelines
Automating the steps from code commit into version control to delivery in production help
increasing speed and reliability of this process. This practice is often referred as Release-Pipelines as
this pictures the ideal of a steady stream of changes delivered.
Blameless Postmortems
The purpose of a Blameless Postmortem is to understand systemic factors that lead to an outage
and identify learnings and actions that can help to prevent this kind of failure from recurring. This
practice is based on the idea that in hindsight we usually know how the outage could have been
Error Culture
How mistakes are handled has an important impact on an organizations ability to innovate. If people
feel that errors are something negative and try to avoid them, they might be much less likely to take
a risk and try something new. Instead encouragement for experimentation and learning is important
while at the same time considering how to tame risks and decrease the impact of failures.
Application Telemetry
Understanding how a product is used is a key factor for taking better decisions on where to invest.
Application Telemetry can provide some insights to increase this understanding by showing usage
statistics, performance parameters, user workflows and other relevant information.
A/B Testing
A/B Testing extends the idea of hypothesis driven development by evaluating two or more different
implementations to find out which one works best. Usually this is done by having different
implementations and then route a part of our users to each of them. This allows to measure which
implementation better supports the expected user behaviour. A/B Testing is often combined with
Feature Flags and Application Telemetry.
The first way optimizes the flow of work through the system. This system includes everything from
planning the work until the end user can benefit from it. The goal is to decrease the time it takes for
a single piece of work to flow through this system. At the same time this flow should be as
standardized and as painless as possible by making it a non-event.
In the second way we amplify feedback loops. We bring back the learnings and insights from
productive use by real users in order to improve the overall system. This feedback needs to be
generated and delivered as quickly as possible, as efficiently as possible and it should generate
exactly the right kind of information we need to improve our decision-making.
What batches do we have in Scrum and how can their size be reduced?
The main benefit of the hosted version is that an organization or team can get started quickly. There
is no infrastructure to provision or manage. In fact, a developer can go from zero to their first team
project in minutes, including the sign-up process. In addition, Microsoft has a three-week cadence to
release new Azure DevOps Services features and bug fixes. This means that internally, Microsoft has
adopted a Continuous Delivery (CD) approach of their own, releasing new capabilities to the service
every 3 weeks.
Release Management for Visual Studio originally launched in 2009 as InRelease by InCycle Software.
InRelease version 2.0 launched in 2010 and version 3.0 in 2013. It was acquired by Microsoft in 2013
and released in November 2013. Release Management was updated for Visual Studio 2015 and is
available as a web-based UI with a new architecture and a new set of simplified concepts. In 2017 it
has been renamed to Release Pipelines
Release Pipelines use the same agent as the build server. It shares also the same set of tasks with the
build so those can be used to design a process of steps executed during a release. There are more
tasks available from the Visual Studio Marketplace. Learn more here http://bit.ly/2IVSqnq.
Continuous Delivery
Jez Humble, David Farley
https://amzn.to/2JzhMsA
Continuous Integration
Paul M. Duvall
https://amzn.to/2xJy3GO
Then we will of course also talk about testing with its different test types, tools and strategies to
ensure a high-quality product.
The three pillars of empiricism can be used to optimize your software quality.
Use Transparency to identify problems and areas of dissatisfaction. Then use Inspection to identify
the most important issues. In the Adaption phase create strategies to resolve these issues and start
using them. Then use Transparency again to make the impact of your changes visible and verify in
the Inspection if the change was successful and which changes could be applied with the current
view on the situation.
This will help to develop a fit-for-purpose strategy which will focus on your specific topics and will
avoid waste in areas with no or not important issues.
A good example for this is how you could work with bugs. Use them to identify opportunities to
improve your process to create high quality software. Select a bug and do a root cause analysis. Try
to go deep until you find the real problem behind the symptoms. Just saying “We should have tested
this better” is not enough. You could use the 5-Whys-Thechnique
(https://en.wikipedia.org/wiki/5_Whys).
You can now discuss how to handle code reviews in the future and hopefully find a way to improve
your way of building software and being able to prevent some bugs in the future by this
improvement.
1. Testing activities can start with the writing of test cases covering the new functionality just after
Sprint Planning. For this, the Developer uses her knowledge about the system gained during the
last Sprints and from collaborative discussions during this Sprint as well as from acceptance
criteria.
2. She carefully listens to those performing the coding activities for any problems or difficulties at
which time she may consider expanding the test cases in these areas.
3. As soon as possible, she runs the tests and discusses any surprises, such as discovered bugs. She
then collaborates on their removal. Where necessary, she adapts/improves the test descriptions.
4. When a PBI approaches Done, she runs the associated tests and collaborates on the fixing of any
bugs.
5. At the end of the Sprint, all test cases developed in this Sprint are executed again.
Ideally, all test cases are supported by automated tests, but depending on the available technology
and testing possibilities, they may be manual. It is also possible to develop the test cases manually
and automate them later, e.g., during a future Sprint.
But even if development would finish in time, there is a high risk of not finishing the project in time.
In fact, the test phase is not testing only as we must fix all the issues we find during testing and then
retest them and fix again if needed. To predict how long this phase will take, we would have to
predict how many bugs we will find and how long it will take to fix them, a thing that is impossible.
So, we put the phase with the highest unpredictability top the very end of our project and so we
have high risks till the very end.
Although tests may be based on more up-to-date requirements and test cases may become more
reusable, the testing “phase” is still abbreviated since development takes longer.
The tests are added to the pile of already existing tests and are executed as often as possible. If
automated, they might run several times a day. If manual, they might be executed when
appropriate.
For more information on how to practice Acceptance Test-Driven Development within Scrum, read
fellow Mario Cardinal’s book on Executable Specifications with Scrum https://amzn.to/3FjTpt5.
Development
Development tests support Developers while coding. They help ensure that the Developer “builds
the thing right”. They can also be a design tool and safety harness. Development tests are most
often unit tests developed in parallel with the code. One of the most popular techniques is test
driven development (TDD). Development tests isolate parts of the system and test them
independently. This makes them fast, but when refactoring this part, they might become
superfluous.
In contrast to acceptance tests, development type tests run a few classes or one component isolated
from the system. Due to this fact, they typically run faster than acceptance tests. On the other hand,
when the according code is refactored, they need to be refactored or even thrown away quite often.
A system with thousands of development tests might therefore become hard to refactor.
These tests are of value for the customer since they check the requirements of the system.
Furthermore, they are of value to the Developer since they support him in developing new
functionality. That is the reason why these tests have most value: More than exploratory tests since
they are automated. More than unit tests since they cover more code and do not change that often.
There are specialized acceptance testing frameworks to automate such tests. But often, a unit
testing framework does the job as well as a specialized framework. When you are using a specialized
framework, make sure that the majority of the Developers are able to write, adapt and run these
tests. Since the tests are automated, they can run regressively: Over and over again, several times a
day.
Exploratory
The objective of these tests is mainly to find new bugs. They can cover the entire system. These tests
have to be executed manually and their description offers the explorer the possibility to adapt the
test steps according to his personal instinct of finding bugs. The completely integrated system is
used to test, but it is running in an isolated test environment: The database usually contains test
data and changes do not affect any productive system.
It is not the nature of these tests to be automated since they allow the explorer to adapt the
tests based on her intuition
Interacting with a GUI often requires a dedicated scripting language that is known by a few
experts in the team only. Only those experts are able to write new automated tests. The
Developers may not want to learn the scripting language or are not able to run and debug those
tests.
A GUI is not made for automation and the test results may not be trustworthy.
Yet errors found during exploratory testing can be validated in automated tests and run frequently
to ensure that fixed defects are not re-introduced into the product by accident.
The concept of a unit test is straightforward: It is a test of the unit of functionality in which you write
the program, such as a method in C# or in Java.
A positive test, checking that the method behaves as expected with valid input (a.k.a.
“happy path”)
Other tests checking alternative paths through the logic to cover all relevant code blocks
Negative tests, validating that it does not behave unexpectedly with invalid input (a.k.a.
“error path”).
As a Developer, you should write your own unit tests. You know what you intend your code to do.
You know how to validate it. Writing the unit tests ensures that you have thought this subject
through, and it provides a necessary safety net for the future when you have to maintain the code.
Test Explorer – lets you run unit tests and view test results by using Microsoft’s or 3rd party
frameworks
Code coverage tools – determine the amount of code that your tests exercise
Microsoft Fakes isolation framework – create substitute classes and methods for code that is
hard to test
Microsoft unit test framework for C++ and native code – for the non .NET developers
CodeLens
CodeLens displays items that are related to your code without leaving the code editor. It displays
code references for classes & methods, team information, changeset information, author
information, and unit test status & in-line test execution details.
Code coverage is an exquisite tool for showing you which blocks of code have not been exercised by
your tests. Use code coverage to identify gaps where you need more unit tests. Do not let good code
coverage make you too confident, however. Code coverage tells you neither that your tests are good
nor that the acceptance criteria has been met. How much code coverage is enough?
The ideal code coverage would seem to be 100%, wouldn’t it? Unfortunately, this is rarely
obtainable. Frequently, there is some error-handling or integration code for which it is impractically
expensive to write unit tests. In these cases, you need to perform careful code reviews and exercise
the code in a debugger. The value returned in achieving ultra-high code coverage numbers in this
range is typically not worth the effort required.
Read Martin Fowler’s short summary on the value of test (code) coverage here:
http://bit.ly/1uzkqP8.
Rework or remove unstable tests, such as tests that sometimes pass, sometimes fail
Eliminate duplicate tests
Avoid conditional logic in tests: switch, if, else, for, while
Test only one thing
Make tests easy to run
The result of the tests shall be independent on the test run order
The result of the tests should be transparent to all Developers
It’s better to have a lower number of high-quality tests, than a large number of untrustworthy ones.
Why test private methods? If a method is worth testing, it is also worth being public
Remove duplicate code. Move it to a setup or private helper methods used in several tests
Avoid multiple asserts. Instead, create multiple tests or a data-driven test
Tests should also be readable. This means not just being able to read a test but also figuring out the
problem if the test seems to be wrong. Without readability, the other two pillars fall pretty quickly. A
good naming convention will go a long way. Tests shouldn’t require comments for a reader to figure
out its behavior or intent.
[MethodUnderTest]_[Given]_[Then] cmdCd_WithBacklash_ChangesToRoot()
cmdCd_WithoutParameter_PrintsCurrentDirectory()
[ServiceUnderTest]_[Given]_[Then] executeSamples_ClientIdNull_ThrowsPalAccessDeniedException(
)
executeSamples_WithOneInvalidSample_InvalidSampleIsRefused
()
[RequirementUnderTest]_[Given]_[The abort_WhileExecuting2ndSample_Aborts2ndand3rdSample()
n] bug2123_ParsingScript_MustCauseValidationError()
To review, development tests focus on the method, class, and even component level. Exploratory
tests focus on the entire system end-to-end, primarily looking for bugs. Acceptance tests focus on
specific feature scenarios. They are definitely bigger that development tests in scope, and usually
smaller than exploratory tests.
You can use Azure DevOps test plans to help you define and manage your testing effort by using test
plans. You create a test plan and add any test suites, test cases, or configurations that you need. The
configurations are used to determine which set ups you want to use to run test suites or test cases.
Test Plan – lets you specify what you want to test and how to run those tests. You can for
example have test plans for the various sprints and another one for regression tests.
Test Suite – lets you group your test cases together by organizing them into a test suite hierarchy
in your test plan. Scrum Teams typically create a requirement-based suite per Product Backlog
item.
Test Case – these are the test case work items that contain action and validation steps that a
developer can use to step through a sequence of actions in order to validate behavior.
Test Configuration – a set of variables that specify the correct setup required for testing an
application. These variables include hardware, operating system, software, and any other
characteristics that are important to use when you run the tests. Each test configuration can
represent an entry in your test matrix.
For more information on planning and managing test plans, test cases and shared steps visit
https://bit.ly/34R3NsD.
For web-based application you can install a browser plug-in that helps exactly with that. It not only
allows you to record the steps you executed while testing but also add notes, screen shots and
screen recording. You can the create bug work items right from the plug-in containing all the
information collected during your test session. For more information visit https://bit.ly/2QGvaNP.
Another option you could use is the Steps Recorder which is a build-in tool in Microsoft Windows
which records steps on desktop applications and can create an HTML output reporting these steps.
You can find more information about the Step Recorder here: https://bit.ly/34RXKUx.
Navigator
The Navigator is focussing on understanding the requirement and the overall direction and
the design of the solution.
Driver
The Driver is focussing on writing code and make it compile correctly.
In other words, the ideas of the Navigator must go through the Drivers ears, brain and hands to get
into the computer. But by no means this should be understood as everyone just doing her own job.
On the contrary, in a typical pairing session you can observe a lot of discussion, conversation and
even friendly arguing. The two roles make sure that we cover the two main perspectives in these
conversations, the requirement and overall solution perspective as well as the implementation
perspective. It is important to switch these roles frequently by defining a timebox. Pair Programming
is not one person watching the other person doing work. Both roles are actively engaged during the
whole time.
While some people would argue that this is two people doing the work of one, Pair Programming
has a lot of advantages which makes this practice beneficial for a variety of situations:
Pair Programming is amazingly effective in sharing knowledge and harmonizing code styles.
It creates better, more creative solutions as two brains are working together and challenge
each others’ ideas.
The quality of the implementation and the resulting code is better, mistakes are discovered
much earlier.
Pair Programming also helps to build better relationships between team members by
fostering respect and understanding for each other’s thinking and motives.
Mob Programming
Most things from Pair Programming also apply to Mob Programming which is working with three or
more people on the same task together on one computer at the same time. There is one Driver and
multiple Navigators. It is especially necessary that we have all competencies in the mob needed to
solve the current task. This might include Product Owner, people with testing skills, infrastructure
skills or designers. That helps to drastically reduce wait time and increase the flow as the mob is
working on one task at a time and there are no or little dependencies to people outside the mob. It
is the perfect format to getting things done.
It ties back to the quote from the start slide “Quality comes from people – not from process”.
Specification by Example
Gojko Adzic
https://amzn.to/2xMV0Jr
Agile Testing
Lisa Crispin, Janet Gregory
https://amzn.to/2sBFhrk
The Product Owner presents the refined Product Backlog to the Developers. The Developers then
select an achievable set of work from the highest-ordered items. This is their forecast. Together they
also create a Sprint Goal and a plan on how to develop those items.
The Developers will then proceed to work efficiently and effectively through their plan (tasks). After
the development timebox has expired, the team should have built an Increment of functionality with
at least some demonstrable business value. This is then demonstrated to stakeholders in the Sprint
Review where feedback is solicited and recorded in the Product Backlog. The team then inspects and
adapts their performance in the Sprint Retrospective in order to make improvements in the way
they work in the following Sprints.
Considerations
Considerations
Will you use your work planning/tracking tool to track the states of tasks?
Will you maintain and use a Sprint burndown chart to assess progress?
How will you handle impediments?
How will you ensure that your work is Done?
When and where will you meet for your Daily Scrum?
When refining the Product Backlog, will you use your team’s velocity?
Consider revisiting and re-estimating some PBIs that were previously refined
Considerations
Considerations
In complex environments where we use Scrum, we do not know all requirements up-front, so how
can we define an architecture for our code up front? This is why we need to postpone some design
and architectural decisions and let the architecture emerge as we know more. This module describes
how a Scrum Team can handle various challenges and maximize the benefits that come with this
approach.
The mansion is renowned for its size and utter lack of any master building plan. According to popular
belief, Winchester thought the house was haunted by the ghosts of the people who fell victim to
Winchester rifles, and that only continuous construction would appease them. There are doors and
stairways that lead nowhere, and a vast array of colors and materials were used. You can read more
here http://bit.ly/5IdJk.
In software we might finally end up with a Winchester Mystery House with doors to nowhere and
other traps. The goal of this module is to highlight these risks and to describe strategies to avoid
them while still building the architecture while building the product.
In this context, “hard” means that changing these decisions later might be very costly or come with
high risk, for example risk of compromising the system. Architecture decisions are a subset of all
decisions we must make regarding the structure of our code which are usually referred to as
“software design.” In other words, “all architecture is design but not all design is architecture.”
The full quote by Grady Booch says “… not all design is architecture. Architecture represents the
significant design decisions that shape a system, where significant is measured by cost of change.”
The decision for a specific UI technology is usually widespread in the client code and needs a great
effort to change later. It would classify as an architectural decision. The internal structure of a
method (its local variables and logic) is usually comparatively easy to change and therefore referred
to as design.
Both, software architecture and software design are important for the future maintainability and
cost of a product. While this module focuses on software architecture, the next module “Quality
Code” highlights important aspects of software design.
Some decisions have to be made at the very beginning, for example deciding on the programming
language that will be used.
They are simply decisions that are more expensive and/or risky to change than others. Therefore, we
should balance the amount of time and work we put into making a decision with the cost and risk to
correct them (if it becomes necessary).
For a simple decision that can easily be corrected, it is not necessary to spend much time and effort
analyzing the problem and preparing to make the decision. Often it is cheaper to just decide and
change the decision later, if necessary.
In contrast, if a decision is risky and expensive to change, a certain amount of planning and
preparation is appropriate (this is illustrated by the diagonal bar on the slide).
a. On the upper left is the area where we have to make decisions that are hard to change but
we make them with very little up-front planning. That means there is a bigger chance of
missing important aspects and taking more risks than we should.
b. On the lower right is the area where we spend too much time planning and preparing a
decision, even if the decision is easy to correct. That not only means that we are wasting
time, but we also delay the decision and therefore increase the time it needed for us to
deliver value to our customers.
Who – who is responsible for doing architectural work and how does this align with the
responsibilities of the Scrum roles?
How – how do we organize architectural work and how can we use the Scrum artifacts?
When – how do we integrate architectural work in our sprint flow and in the Scrum events?
Many people apart from Developers may have an influence on software architecture. They are not
responsible for making the decisions, but the Developers should consider their opinions and insights
into account.
These are:
Product Owner: the quality goals the Product Owner has for the product have a big
influence on architectural decisions; if security is an essential goal, this usually calls for a
different software architecture than if performance was the most important quality goal.
Organization: the organization defines the boundaries in which the product is being
developed; these boundaries are reflected in the technical and business constraints
Developers have to respect. These include technologies, programming languages that may
be used, and others; these standards provide guidance and can have value but may at times
need to be challenged.
Technical Experts: the expertise (and opinions) they bring to the team influences the
Developers’ solution and architectural decisions; technical experts can be internal or
external coaches that help Developers learn and use a broader set of experience for their
decisions.
Depending on the most important quality attributes (the product’s quality goals) the resulting
software architecture can change. A system that is optimized for modifiability will most probably
look different from one that is optimized for performance.
Examples for quality goals defined in different areas of our work are:
Our Product Vision describes that we will building the fastest and most easy to use platform
for searching service providers.
If performance is a crucial product attribute, it should be part of our Key Value Indicators.
One indicator could be how many users are using our search and how often. Our hypothesis
could be that faster searches lead to more and more frequent usage.
This might result in a Quality Goal for executing searches in less than 1 sec even if there are
more than 1 million records in our database.
Decisions on the level of Software Architecture might include topics like database
technology, scaling approaches and service architecture.
These architecture decisions will then impact our Software Design where we might decide
how to structure the search logic into different classes.
As always, the results of our architecture work and their impact on our quality goals can only be
measured by working software. It is therefore important to regularly (or continuously) validate
software, e.g. through fitness functions or architecture validation workshops.
If our current software architecture and its implementation is not fit for purpose regarding our
quality goals, we have to adapt it and let it emerge further.
This could be visualized in a spider web chart and regularly be compared with the status quo. In this
example the scrum team could focus on performance efficiency as a next step.
Functional suitability
Performance
Maintainability
efficiency
Security Usability
Current Target
This hopefully leads to a better understanding of our goals and objectives, which can and should also
be fine-tuned and adapted as needed.
The increase in quality in one area could lead to a decline in another area. This is not a problem if
the Scrum Team is continuously going through this cycle of deciding and validating. This will help to
continuously balancing out the varies goals and being able to respond quickly where necessary.
Daily Scrum
Sprint Review
Sprint Retrospective
Sprint
It is very hard to plan a software product’s evolution more than a few months ahead. The devil is in
the details, and the details are the last thing you find out. A design is validated by working software,
so it makes sense to minimize the time between design creation and design implementation.
But it isn’t:
Architecture evolves, as does code, as the environment of your product does, as you iterate your
way through the software project. Always keep in mind these principles so that you don’t over-
architect your application during any one Sprint:
Every subsequent Sprint, more and more of the Architecture and design emerge, in response to
feedback and implementation of more business functionality. Although this sounds like a “make it
up as you go” approach to architecture, it is not. Teams should already understand available
patterns and practices and their pros of cons as well as an overarching vision which might be
changed if necessary.
Turns out it delayed the realization of business value. Given a standard, n-tier architecture and
assuming each layer takes two weeks to build, it would be two months before the business could
derive any value from this solution. This is because the last layer to be developed (the UI) is required
before the business could actually use the software.
Contrast this with an emergent (sliced) architecture approach in which each Sprint develop a slice of
each layer (and sometimes refactored). This ensures that just enough of each layer is implemented
in order to deliver the functionality. At the end of each two-week Sprint the customer can actually
use the software.
Tips
Make smart decisions (and delay whenever possible)
Use popular, maintainable, and testable architectures, frameworks, and patterns
Refactor appropriately
Test early, often, and automatically
Adaptive Code: Agile coding with design patterns and SOLID principles
Gary McLean Hall
https://amzn.to/2Jz2zrC
We will cover different ways to ensure high quality source code, like coding principles, patterns and
practices. We will also introduce tools for code quality and analysis or Continuous Integration
Test Driven Development as a software design practice will be covered, as well as code reviews or
refactoring.
Successful Scrum Teams include Developers who all enjoy building a quality product. There should
be good collaboration and communication, especially when it comes to writing code to meet
requirements. Programmers may not understand all the nuances of the business requirements. They
may also not be adept in understanding all the “edge cases” when writing automated tests and
providing test data.
Producing a quality product is the responsibility of all team members. Programmers don’t get a pass
on testing because “it’s somebody else’s job”. The team members doing the programming tasks are
just as responsible for the quality of the Increment as the team members doing the testing tasks. In
fact, programmers should be held to a higher quality standard, because they are the ones closest to
the code, its meaning, and its execution. Writing good developer tests is an attribute of a
professional Developer.
Functionally complete
Having high quality
Delivering high value
Therefore, successful Developers typically add technical practices to their implementation of Scrum
to improve the above-mentioned criteria.
Most teams already use a version control system like SVN or Git. If not, this should be the first step
to take. After that having one automated build is a valuable asset to have for your product. And
automated tests that are executed by this automated build are the next one. Once you have this
continuous integration you can proceed to implement continuous delivery, where you test your
product quality by pushing it into test systems, later production-like systems. The final step can be
continuous Deployment where after all those checks during continuous deployment you have an
automated decision to deploy in to the productive environment.
Practices like Test Driven Development (or Acceptance Test / Behavior Driven Development), feature
toggles, A/B testing and will most likely help you on this journey to technical excellence.
If Developers don’t apply good principles, patterns, and practices, then their velocity will be
impacted. This may not be apparent, until a few Sprints into a release. Unfortunately, by then, it may
be too late as you’ve acquired technical debt and an inventory of the wrong architecture. Ideally
teams use the Sprint Retrospective to decide if they are going in the right direction architecturally.
Design Patterns
Design patterns are an extremely powerful tool for a Developer actively engaged in any
development endeavour. Design patterns ensure that common problems are addressed via well-
known and accepted solutions. The fundamental strength of patterns rests with the fact that most
problems have likely already been encountered and solved by other individuals or teams. As such,
patterns provide a mechanism to share workable solutions between Developers and organizations.
Design patterns are recurring solutions to software design problems that you run into again and
again, during software development. These patterns are about design and interaction of objects, as
well as providing a communication platform concerning elegant, reusable solutions to commonly
encountered programming challenges. Developers should collaborate to select a pattern and, after
learning it and using it, should retrospect on it and decide if the team wants more or less of that
pattern.
For more information as well as a list of the popular design patterns visit http://bit.ly/1jf8uPP.
The principles of SOLID are guidelines that can be applied while working on software to remove code
smells by causing the programmer to refactor the software's source code until it is both legible and
extensible. It is typically used with test-driven development and is part of an overall strategy of agile
software development.
Aimless refactoring (replacing crappy code with different crappy code) has no value. Developers
should develop their own practices of quality code. SOLID provides useful practices. There are
applications using patterns for everything, even for simple if/then/else statements. Professional
Scrum Developers should find its balance and not use patterns everywhere, but only where it makes
sense.
Dependency Injection
Dependency Injection (DI) is a way of doing Dependency Inversion. DI is a design pattern that allows
a choice of component to be made at run-time rather than compile time. This is helpful for
dynamically loading plugins or mock vs. real objects.
Who is going to read your code? Nobody. That’s sad and not true because YOU are always reading
YOUR OWN CODE; over and over again. How many times did you wonder about the code you have
written a year ago, a month ago, a week ago, or just yesterday?
How many times did you ask yourself when reading code: “What’s this code going to do?” The code
was not readable, not understandable, and therefore not expandable or changeable. You got stuck
in a pile of unmaintainable code. If you do not keep your code clean, in other words if you let it rot,
then you are going to bring your product and team into deep problems sooner rather than later.
What about when you are replacing an old system? The big problem usually is to deliver the new
system in short time with all the features the old system already had. When the pressure is on, code
can rot fast. New projects do not produce cleaner code. It’s up to you to keep the code of the old
system clean so that you can replace only parts with code based on a new technology.
What matters if we add three additional lines to a method measuring 300 lines of code? What is
wrong increasing a class’s method count from 45 to 48? Why do we need to care about good design
if we don’t even understand the design (but the unit tests tell us that we successfully added the new
functionality without breaking old functionality)? Do you see the broken windows?
Determining what is and is not a code smell is often a subjective judgment, and will often vary by
language, Developer and development methodology. Fortunately, there are many tools available to
Developers to help identify code smells. We will look at those shortly.
SQL Server Data Tools (SSDT) provides a similar Static Code Analysis capability, but for the code
found in SQL Server databases. Using these tools, a database developer can eliminate potential
design and naming problems and avoid performance pitfalls.
SonarQube
SonarQube (formerly Sonar) is an open source platform for Continuous Inspection of code quality.
SonarQube is a web-based application that supports more than 20 languages, including C# and
VB.NET. It scans architecture & design, duplications, unit tests, complexity, potential bugs, coding
rules, and comments. SonarQube integrates with Visual Studio and Azure DevOps. Learn more by
visiting www.sonarqube.org.
Code metrics is a set of software measures that provide developers better insight into the code they
are developing. By taking advantage of code metrics, developers can understand which types and/or
methods should be reworked or more thoroughly tested. Developers can identify potential risks,
understand the current state of a project, and track progress during software development.
Maintainability Index – Calculates an index value between 0 and 100 that represents the relative
ease of maintaining the code. A high value means better maintainability.
Cyclomatic Complexity – Measures the structural complexity of the code. It is created by
calculating the number of different code paths in the flow of the program.
Depth of Inheritance – Indicates the number of class definitions that extend to the root of the
class hierarchy. The deeper the hierarchy the more difficult it might be to understand the code’s
intent.
Class Coupling – Measures the coupling to unique classes through parameters, local variables,
return types, method calls, generic or template instantiations, base classes, interface
implementations, fields defined on external types, and attribute decoration.
Lines of Code – Indicates the approximate number of lines in the code. The count is based on the
IL code and is therefore not the exact number of lines in the source code file.
Another common phenomenon concerns the use of copy and paste; a developer may copy a chunk
of code that performs some useful task from one project or file to another. If this occurs several
times, it is possible that the same code is added to different parts of the same project. Furthermore,
if the code that is copied contains a bug, the developer has probably duplicated this bug in multiple
places. The result is code that takes longer to test and correct.
You can use the Code-Clone Analysis tool in a couple of ways. In the first scenario, the Code-Clone
Analysis tool examines your solution to look for logic that is duplicated, enabling you to factor this
code out into one or more common methods. The Code-Clone Analysis tool is intelligent—it does
not just search for identical blocks of code, it searches for semantically similar constructs by using
heuristics.
You can search through an entire solution to find all possible code clones, or you can highlight a
block of code and have the Code-Clone Analysis tool find any code that is similar. This technique is
useful if, for example, you are correcting a bug in a piece of code and you want to know whether the
same bug resulting from a similar piece of code occurs elsewhere in the project.
The strongest argument in favor of TDD is that it uses tests as technical product requirements.
Because you must write a test before writing the code under test, you are forced to understand the
requirements and filter out any ambiguity in order to define the test. This process, in turn, makes
you think in small increments and in terms of reuse so that you do not write any unnecessary code.
In other words, TDD imposes a clear and atomic design, which is easier to grow and maintain.
The next argument is that TDD enables continual refactoring to keep the code clean. If you have
tests that cover 100% of the code and immediately report failing results when there are any side
effects from refactoring, you have the safety net to refactor with confidence. Indeed, the experience
of TDD is that you do much less debugging of your code because your unit tests pinpoint errors that
you would otherwise isolate only by laboriously stepping through the execution with the debugger.
Download the “Realizing quality improvement through Test-Driven Development: results and
experiences of four industrial teams” report in PDF format: https://bit.ly/3FgNp4l
“It takes too much time to write the tests.” … how much does not having tests cost your
organization today in terms of debugging, re-writes, re-activations, and fixes introducing new bugs?
Having tests also gives you the confidence to refactor properly.
“It takes too long to run the tests.” … you should consider refactoring your tests, limiting the tests
you are running, or upgrading your hardware.
“My job is to write code, not tests.” … no, your job as a Developer is to deliver business value in the
form of working software. Remember that TDD is a design tool and its usage is considered a
software development activity.
https://amzn.to/2YjDmuT
“TDD leads to bad architecture” … only if you let it. Bad decisions lead to bad architecture.
Remember, it doesn’t take smart people to practice TDD – it takes smart people to write software.
Scalable Topology
Azure Pipelines can support many different size and types of build systems, from the very simple to
the very complex. For example, a small team working on small projects can setup a build system on a
single machine with a single agent or even use cloud-based solutions provided and maintained by
Microsoft. Larger teams building large, more complex solutions can provision multiple agents on
high-speed, dedicated machines. For more information on ways to scale out Azure DevOps build visit
https://bit.ly/3jFn8kM.
Cross-Platform Builds
Azure Pipelines can build more than just Windows, Windows Universal Platform, and ASP.NET web
apps. It can also build Java (using Maven, Gradle or other build platforms), Xcode, JavaScript (e.g.
node.js), Cordova, and many other types of apps on Windows and other platforms. You can also
build your code on different platforms like MacOs, Linux and Windows or use Docker containers to
execute your pipeline. For more information see https://bit.ly/3jFaORn.
Note: There are various feedback tools available to software development teams. In general, these
tools are best used when the individuals are not available to provide in-person feedback.
Code Review
A code review is a simple way to assure code quality by having another Developer look at the code.
This assurance can cover multiple levels of quality. It can assure that the code works, is fit for
purpose, is absent of bugs, is absent of avoidable technical debt, is readable, meet's the team's
agreed-upon coding standards as well as the DoD. Additionally, the Developer whose code is being
reviewed can use the conversation as an opportunity to learn about the way he or she writes code.
Code reviews don't have to be a formal process. They can happen spontaneously. They also
shouldn't be despised or avoided. High-performance software development teams actually look
forward to code reviews. This is because those teams know that the code is owned collectively.
Problems and criticisms aren't directed at a single Developer, but rather are learning opportunities
for the entire team. Every code writer and code reviewer will have different perspectives, and
approaches to solving problems.
Asynchronous communication often happens via chat clients like Microsoft Teams, Skype, Slack or
others. While on a first glance it might not make a lot of sense if people send messages to each other
while sitting in the same room, this can exactly help to avoid the interruptions as the reader can
consume the information on what ever time is convenient for them, e.g. after finishing a task.
Azure DevOps can integrate with almost all of those communication tools to post important
messages into the chat, e.g. when a build failed. The first team member that gets available can
consume the message and start working on the build issue. To avoid duplicated work, this person
might post to the chat that she is already checking this.
In software engineering, refactoring source code means improving it without changing its overall
results and is sometimes informally referred to as “cleaning it up”. Refactoring neither fixes bugs nor
adds new functionality, though it might precede or follow either activity. Rather, it improves the
understandability of the code, changes the internal structure and design, or removes dead code.
These changes are intended to make the code easier to comprehend, more maintainable, and more
amenable to change. Refactoring is usually motivated by the difficulty of adding new functionality to
a program or fixing a bug in it.
In Scrum, refactoring is an integral part of the software development cycle: first Developers write
tests, then write code to make the tests pass, and finally refactor the code to improve its internal
consistency and clarity. Automatic unit testing helps to preserve correctness of the refactored code.
The last step in TDD is to refactor the code and re-run tests. By re-running the tests, the Developer
can be confident that refactoring is not damaging any existing functionality. The concept of
removing duplication is an important aspect of any software design.
Professional Scrum Developers should build solutions that are fit for purpose while avoiding gold
plating. Gold plating is any design or coding that is above and beyond what is absolutely necessary
for the task at hand. For example, if a PBI requires a method that calculates the sales tax for the
state of Washington and the Developer adds additional logic to handle the nearby states, that's gold
plating. The Developer may try to justify the extra coding as being required down the road, for a
future Sprint.
In order to maximize value and minimize waste, Developers should solve today's problem today and
tomorrow's problem tomorrow (in the next Sprint as it is in Scrum).
Visual Studio provides the following C# refactoring commands on the Refactoring menu:
SQL Server Data Tools (SSDT) provides support for building, debugging, maintaining, and refactoring
SQL Server databases. SSDT provides the following refactoring commands:
Rename
Move to Schema
Wildcard Expansion
Fully Qualify Name
Technical debt obscures true progress and clouds the transparency required for empirical decision
making by the Product Owner and stakeholders. Technical debt will be paid back, either in deliberate
time spent correcting technical issues, or in loss due to shipping late or with poor quality.
Developers must carefully choose only as much work as they can do in a Sprint. They learn how
much work this is through experience. Still, a team has to employ modern engineering practices like
automated build and regression testing to accomplish much of anything. If these are not employed,
the manual work tends to overwhelm a team after only a few Sprints.
Technical debt will always exist, but it doesn’t have to be debilitating. Here is an example of
technical debt in a healthy Scrum Team.
The Product Owner presents the refined Product Backlog to the Developers. The Developers then
select an achievable set of work from the highest-ordered items. This is their forecast. Together they
also create a Sprint Goal and a plan on how to develop those items.
The Developers will then proceed to work efficiently and effectively through their plan (tasks). After
the development timebox has expired, the team should have built an Increment of functionality with
at least some demonstrable business value. This is then demonstrated to stakeholders in the Sprint
Review where feedback is solicited and recorded in the Product Backlog. The team then inspects and
adapts their performance in the Sprint Retrospective in order to make improvements in the way
they work in the following Sprints.
Considerations
Considerations
Will you use your work planning/tracking tool to track the states of tasks?
Will you maintain and use a Sprint burndown chart to assess progress?
How will you handle impediments?
How will you ensure that your work is Done?
When and where will you meet for your Daily Scrum?
When refining the Product Backlog, will you use your team’s velocity?
Consider revisiting and re-estimating some PBIs that were previously refined
Considerations
Considerations
This is the goal of this section: to address some of the more common challenges Scrum Teams are
facing and helping them make good decisions.
What Done doesn't mean is that the PBI has been coded but not yet tested. In Scrum all software
engineering activities, including testing, must be finished before a PBI can be considered Done. It's a
dysfunction when Developers are not able to complete their work according to the DoD. Perhaps
their definition is too stringent. Perhaps the Sprint length is too short. More likely, their Sprint length
is too long. Nothing focuses the Scrum Team like knowing it has a Sprint Review in the same week
that the Sprint starts.
Regardless of the type of undone work, or its level of undone-ness, the guidance is the same:
The PBI(s) are not demonstrated in the Sprint Review as Done work, although they can be
presented for a chance of inspection and feedback – with a disclaimer.
The PBI(s) are moved back to the Product Backlog.
The Product Owner will consider developing the PBI(s) in a future Sprint.
In the event that a Sprint ends with unfinished work, there may be a lot of manual effort required to
exclude the unfinished code and behavior from the rest of the Increment. Single piece flow (limiting
work in progress by swarming on a PBI) is one such approach. The Developers can just decide that
they will not advance to the next PBI in the Sprint Backlog until the prior one is done, documented,
and an installer exists, for example. For some environments, this is not practical so other, more
engineering-centric solutions are required. The two common approaches are to create a version
control branch per PBI or to use feature toggles in the application.
The actual implementation of the feature toggle can vary. Menu items can be disabled. Entries in
config files can be used. Even compiler directives can be leveraged. While these techniques can be
easily implemented by most Developers, there are some third-party libraries available to further
simplify the practice.
Ideally, the Developers will finish a partially-completed feature in an upcoming Sprint, prior to the
release. This minimizes waste and also ensures the toggled feature doesn't become long-term
technical debt in the product. Even more ideal is that the team gets better about completing its
forecasted work and doesn't need such solutions in the first place. Be careful releasing a software
product with feature toggles, as they can (by design) cause different behavior in different
deployments, which can make the process of triaging a bug very complex.
The term “renegotiating scope” can mean that the Developers have completed all of their forecasted
work and want to add more PBIs to their Sprint Backlog (scope increases). In the context of this
module however, I'm talking about the more challenging scenarios where the forecasted work was
not completed or has become irrelevant (scope decreases).
Canceling a Sprint
If it is determined that the Sprint Goal becomes obsolete, the Product Owner can cancel the Sprint.
In other words, the Sprint could be canceled if the Product Owner determines that there is no
chance to realize any value in any of the forecasted work being developed. For example, if a
company suddenly decides to abandon support for a particular platform, the Sprint could be
cancelled if it only contained PBIs targeting that platform. Only the Product Owner has the authority
to cancel the Sprint, but he or she can do it under the persuasion of stakeholders or others on the
Scrum Team.
When a Sprint is cancelled, any Done PBIs should be reviewed to determine if they are releasable.
The Product Owner may choose to accept the work. All undone PBIs are moved back to the Product
Backlog. They should be re-estimated if required or left to sink to the dark depths of the backlog if
they are not.
It may take several Sprints for the Developers to even know what functionality it has or is required.
When Scrum was first adopted in an organization, all of the analysts, programmers, and testers were
united on the development team. Since each of them played a role in the development of the
Increment, they became known as a Developer. As self-management and collective ownership
attitudes became established, the backgrounds and titles previously held by the Developers became
blurred.
The Agile Manifesto clearly states that while there is value in process and tools, there is more value
in interacting with individuals. This is to say that Agile software development recognizes the
importance of people and the value they bring when working together. After all, it's people who
build software, not the process or the tool. If you put bright, empowered, motivated people in a
room with no process and inadequate tools, they will still be able to get something accomplished.
Their velocity may suffer, but they will produce value. They will also inspect and adapt their
processes, looking for improvement. Conversely, if the people don't work well together, no process
or tool will fix that. A bad process can screw up a good tool, but bad people can screw up everything.
Remember that life happens. We're all human and have a life outside of software development.
When issues emerge, be open and honest about it, and take the necessary time to get your head
right. Be appropriately transparent with the rest of your team.
Scrum has two formal opportunities to identify impediments: each day during the Daily Scrum and at
the end of the Sprint during the Sprint Retrospective. However, impediments can be identified at
any time during the Sprint. More importantly they can and should be removed at any time. The
problem is not finding the opportunity to identify impediments, but rather getting the Developers to
be honest about their existence.
It's common to hear software developers say that nothing's blocking them. Hearing this repeatedly
does not reflect reality and might actually be a smell of an underlying dysfunction. Developers have
a lot of work to do and can easily find something else to work on. They may not realize that
"blocking" can also mean that they are experiencing slow or non-optimal progress. Also, nobody
wants to bother others with something as depressing as an impediment. What they don't realize is
that by sharing their problems with the rest of the team, that honesty and openness will actually
invite others to help. The impediment might just disappear sooner than expected.
It’s a smell if a Scrum Team relies on their Scrum Master to remove impediments. Servant leadership
only goes so far and can be abused by the rest of the team if allowed. While Scrum Masters are
typically associated with being impediment-removers, a healthier team behavior is for the person
who identified the impediment to become the one who removes it, if possible. Don't let the words
"that's not my job" be uttered.
It's a smell when there is an epic PBI near the top of an ordered Product Backlog. It should be
decomposed well in advance of the Sprint in which it is forecasted to be developed.
• The Ideal Trend line indicates an ideal situation in which the team burns down all of the effort
that remains at a constant rate by the end of the Sprint
• The In-Progress series shows how much work remains for tasks that are marked as In Progress in
a Sprint
• The To-Do series shows how much work remains for tasks that are marked as To Do in a Sprint
You can review the report to determine the progress that your team has made in a release and
answer the following questions:
• Actual and ideal trend line are diverging or are far apart
• The total amount of work is increasing
• Actual performance is significantly above the Ideal Trend line
• Tasks move to Done prematurely, then the reactivation shows as a bump in the burndown
• Not creating tasks for large pieces of work that come up during the Sprint
• Tasks stay “in progress” for more than two days
Consider this – how would the burndown look if each Developer takes on their own PBI and works it
diligently throughout the Sprint, getting them each 95% done. The burndown will look great,
declining toward the goal just like it should with one big exception. The remaining work is the hard
testing and integration. It’ll look great, except the testing and integration work at the end which is
very hard and risky.
Tip: Overlay the last N number of Sprint burndowns and look for patterns, dysfunctions, and
improvements.
ScrumAnds
Doing Scrum, and doing it properly, is only the beginning. You are “doing Scrum” if you have the
formal elements in place. Without the formal elements in place, you are not “doing Scrum”.
Improving is an option at any point on the continuum. A ScrumAnd is any number of a myriad of
elements included in or attached to the use of the Scrum framework that results in an improvement,
or a movement to the right on the chart below:
Organizations tend to overlook the scaling potential in the way Scrum is being played. Take
advantage of these options first, enjoy the cumulative effect of multiple ScrumAnds and avoid the
additional complexity that arises from volume-oriented scaling like adding people, adding teams,
adding roles, adding phases.
For more information read Gunther Verheyen’s post on the topic http://bit.ly/1tzBpS0.
The Scrum Master above and beyond anything has to enforce the rules. Many of the processes that
are used in organizations create impediments to the team's progress. It is often easier to simply give
in and accept that the organizational processes can't be changed and compromise the efficiency of
Scrum and the team's output. So, it is vital in order to keep the high productivity of Scrum that the
rules are followed precisely and kept running regardless. By doing that, everything in the
organization that is dysfunctional and gets in the way of building software regularly becomes
obvious. It is the job of the Scrum Master to remove any impediment, within or external to the team
that prevents them reaching their goal of building the functionality they forecasted at the beginning
of each Sprint.
Remember, the Product Owner is one person, not a committee. He or she may represent the desires
of a committee in the Product Backlog, but those wanting to change a Product Backlog item’s
priority must convince the Product Owner. For the Product Owner to succeed, the entire
organization must respect his or her decisions. The Product Owner’s decisions are visible in the
content and ranking of the Product Backlog. No one is allowed to tell the Developers to work from a
different set of priorities, and the Developers aren’t allowed to act on what anyone else says.
Removing a dysfunctional behavior can be difficult. Identifying it in the first place can be very
difficult, especially if you are in the middle of it, or the cause of it. Part of becoming good at Scrum, is
the ability to inspect and detect dysfunctional behavior. At first this may just be able to know when
your team isn't following the rules of Scrum, according the Scrum Guide. But that's not enough.
It may seem like the Scrum Guide has an answer for everything, but it doesn't. The complex world of
software delivery will sometimes put you and your team in the middle of two practices that conflict
with each other. Your abilities should transcend from just knowing the rules to knowing (and
applying) the principles and values of Scrum. Knowing the higher-level reasoning behind Agile
software development and why Scrum works allow you to identify and resolve such conflicts.
Remember, Scrum provides a framework for more efficient product development. It is focused
around working together in small teams. As Scrum matures within the enterprise, each individual
contributor’s responsibility is to improve their game such that teams continuously work more
effectively together. We’re moving beyond the individual to the team to the enterprise. At the same
time, the individual has the opportunity for intellectual and professional growth.
A Professional Scrum Developer is more than just a good developer that knows Scrum. Professional
Scrum Developers who have gone through the program, learned the skills and how to balance them,
and how to inspect and overcome dysfunction able to navigate the realities of today’s enterprises.
By practicing Scrum according to its rules, they can transform their organization through higher
transparency and productivity.
There are often centers of excellence in software engineering organizations that group people of
unique, highly specialized skills, like usability engineering, database experts, security experts, and
system architects. When these people's skills are needed, they should become part of the Scrum
Team. That is, they're not outside experts who simply give advice but they become part of the Scrum
Team for those Sprints when they're needed to develop architecture, to develop infrastructure, or to
develop the database. They are doing the work while mentoring, monitoring and guiding the other
Developers. The key differentiator here is that they are no longer just participating. They get
involved at the start of a Sprint and are committed to achieving the Sprint Goal and delivering the
functionality that was forecasted.
Developer Responsibilities
• Working on a team practicing Scrum is different than working on a traditional team
• You are now committing to achieving the Sprint Goal as a team
• You now have the autonomy to do anything (within reason) you need to hit your target
• You are working closely with people with other skill sets
• The way you communicate inside and outside the team has changed
• You are now being allowed to work rather than being instructed to work
There are many frameworks and techniques out there trying to capture and categorize the attributes
of people and their interpersonal relationship. One of those (FIRO-B) is interesting because it focuses
on capturing and measuring the interpersonal needs of members of small groups. The theory is
based on the belief that when people get together in a group, there are three main interpersonal
needs they are looking to obtain: affection/openness, control, and inclusion. The instrument helps
teams measure and control their feelings when it comes to these needs. For more information, visit
http://bit.ly/Q0OYGO.
• Normal behaviors – this is how team members usually see each other
• Problem solving behaviors – mentally fully engaged, getting stuff done
• Stress behaviors – usually quite different from normal and often harder for the rest of the team
to deal with
Forming – in the first stages of team building, the forming of the team takes place
Storming – every group will then enter the storming stage in which different ideas compete for
consideration
Norming – the team manages to have one goal and come to a mutual plan for the team at this
stage
Performing – certain teams are able to function as a unit as they find ways to get the job done
smoothly and effectively without inappropriate conflict or the need for external supervision
High-performance Scrum Teams might even add another phase to the model:
Swarming – when the team voraciously, but efficiently attacks a single Product Backlog item to
get it Done!
Weasel Words
Here are some examples of weasel words. These are a smell of a deeper dysfunction, such as the
individual has not yet reached the team-based mentality (or doesn’t care for it).
It’s easy for a weak, dysfunctional team member to “blend in” and hide on a team. Don’t allow this
to happen. Take advantage of all of the inspect and adapt points that Scrum offers.
Tip: Practice HARD communication at all times. HARD stands for Honest, Appropriate, Respectful,
Direct.
Consider the alternative to collective code ownership, where each Developer owns an assembly,
namespace, or a class. On the surface it may seem like a good idea. The Developer is the expert on
this component and also the gatekeeper for all changes. But strong code ownership like this has a
tendency to block productivity. Consider the situation where two Developers (Art and Dave) are
working on separate tasks that both need to touch a common component owned by a third
Developer (Toni). Dave will have to wait while Art's functionality is coded and tested. A collective
code ownership model would allow Dave to code the feature himself. The source control tools in the
configuration management system (Azure DevOps, Git, Eclipse) would track who made what changes
to which files and enable a merge (or a rollback) to occur if there were any problems. Another
potential problem with strong code ownership pops up when refactoring. Modern refactoring tools
can do this safely, but if the file (or files) is locked then productivity is blocked again.
When forming a new Scrum Team, co-location should be a requirement. This is not just a nice-to-
have feature. It's required if you want a high-quality product and process. By co-location, I'm not
talking about being in the same time zone, city, or building. While these options are better than
some I've seen, I want the team in the same room or in adjacent rooms. The Product Owner should
be nearby too, but not necessarily in the same room. This way the face-to-face communication can
occur on-demand.
However, company politics and availability of experts sometimes require distributed teams. You are
not able to move Developers from China to Europe or vice versa. But with good communication tools
and frequent traveling you can build up trust and establish a high-performance team as well. What
you should look for are short distance distribution: You should intervene if a team is distributed
among several buildings on the same campus or in the same city. These are situation you could
change to increase the team’s performance.
Recommended Reading
The 7 Habits of Highly Effective People teaches you how to be proactive, begin with the end in
mind, put first things first, think-win-win, seek first to understand, synergize, and sharpen the
saw.
The Five Dysfunctions of a Team teaches the dysfunctions of absence of trust, fear of conflict,
lack of commitment, avoiding accountability, and inattention to detail.
Crucial Conversations and Crucial Confrontations teaches how to communicate best when it
matters most, such as when you are at work on a Scrum Team.
High-performance Scrum Teams think in principles, not practices. This is to say that they know that
the complexities of software delivery will routinely place them in situations that cannot be solved by
thinking at the practice or procedure level. In other words, they won’t be able to pull out the Scrum
Guide and “look up the answer”. Rather, they can only solve these types of impediments and
dysfunctions by abstracting to the principle level of Scrum, and choosing the solution that provides
the most value with the least amount of waste while staying true to Scrum’s values of focus,
courage, openness, commitment, and respect.
A common language referring to the process must be shared by all participants; and,
A common Definition of Done
The Product Backlog and Sprint Backlog artifacts are specifically designed to maximize transparency
of key information needed to ensure Scrum Teams are successful in delivering a Done Increment.
Also, each event in Scrum is an opportunity to inspect and adapt something. These events are
specifically designed to enable critical transparency and inspection. Failure to include any of these
events results in reduced transparency and is a lost opportunity to inspect and adapt.
For example, a Scrum Team may be very diligent about scheduling and attending their Sprint
Retrospective. They may have rich conversations and discuss the high and low points of the Sprint.
They may even identify things to do differently in the next Sprint. Multiple team members capture
this information and then do nothing with it. They have inspected, but not adapted.
If you want to know how a Scrum Team is doing, and if they are improving, ask about their Sprint
Retrospectives. The Sprint Retrospective is usually the first to suffer when times get rough. Sure, the
team may meet and discuss but they may not act on their findings. Therefore, "rough times" often is
code for "we didn't like what we discovered" or "we didn't want to improve".
A high-functioning Scrum Team has an immune system which inspects and corrects or expels team
members who don't deliver over time. Mitigating ineffective team members needs to be handled
firmly, impartially, and impersonally. A good Scrum Master (or Scrum coach) handles this effectively,
tactfully, and persistently and can convert such dysfunctional team members into genuine
contributors.
Pomodoro Technique
The Pomodoro Technique is a time management method that uses a
timer to break down periods of work into 25-minute intervals called
“pomodoros” (from the Italian word for tomato) separated by breaks.
Closely related to the concept of timeboxing and iterative and
incremental development used in software design, the method has been
adopted in pair programming contexts. There are five basic steps to
implementing the technique:
This technique also deters interruptions because other team members can see that you are busy
(because the pomodoro still has time left on it). More importantly, they know to come back in X
minutes, and you’ll be taking a break. For this reason, your pomodoro should be placed in a visible
location on your desk. For more information visit http://bit.ly/4q8yD6.
A big part of improving is knowing where to start. There are tactical improvements, which help the
team successfully deliver the Increment during the Sprint while not generating waste. Mastering
some of the common challenges that Scrum Teams run into will help with this. There are also
strategic improvements, such as learning to become more cross-functional and self-managing.
Teams that improve in these areas will see orders of magnitude increases in capability and
performance.
1. Product structure: The degree to which different concerns are independently separated in
the product will greatly affect the complexity of creating an integrated product release.
2. Communication structure: The way that people communicate within and between teams
affects their ability to get work done; delays in communication and feedback reduce the flow
of work.
Nexus builds upon Scrum by enhancing the foundational elements of Scrum in ways that help solve
the dependency and collaboration challenges of cross-team work. Nexus (see Figure 1) reveals an
empirical process that closely mirrors Scrum.
Accountabilities: The Nexus Integration Team ensures that the Nexus delivers a valuable,
useful Integrated Increment at least once every Sprint. The Nexus Integration Team consists
of the Product Owner, a Scrum Master, and Nexus Integration Team Members.
Events: Events are appended to, placed around, or replace regular Scrum events to augment
them. As modified, they serve both the overall effort of all Scrum Teams in the Nexus, and
each individual team. A Nexus Sprint Goal is the objective for the Sprint.
Artifacts: All Scrum Teams use the same, single Product Backlog. As the Product Backlog
items are refined and made ready, indicators of which team will most likely do the work
inside a Sprint are made transparent. A Nexus Sprint Backlog exists to assist with
transparency during the Sprint. The Integrated Increment represents the current sum of all
integrated work completed by a Nexus.
So, what about the other 7 hours and 45 minutes of the day? What should the Scrum Team, the
Product Owner, Scrum Master, and Developers, be doing during that time? That's the million-dollar
question. The short answer is: the Developers should be doing the right thing—even when nobody is
looking. There are many longer answers. The contents of this script will hopefully reveal several
answers to this question.
Peopleware
Tom DeMarco, Tim Lister
https://amzn.to/2Lvx2UG
One thing that we hope has been made clear to you, is that high-performance Scrum Teams know
they can always do better. They can build a better product. They can increase its quality. They can
build it faster. They can build with less waste. They can learn new techniques that will help them
improve personally and as a team. While you may be done with class, you are far from done
improving as a Scrum Team member and software developer.
Read the Scrum Guide in your native language and then read it in English
(http://scrumguides.org).
Take the Scrum Open assessment until you can achieve 100% repeatedly
(http://bit.ly/X8vJdp).
Study for the PSD-I assessment by reading …
- The APS-SD Subject Areas (http://bit.ly/1C5GAg8).
- The APS-SD course, end-to-end.
- Any of the books referenced in the course as needed.
Take the Developer Open assessment until you can achieve 100% repeatedly
(http://bit.ly/X8vJdp).
Set aside a clear time to study and then take the exam.
A. Process Domain
a. The Scrum Framework
a. Scrum Theory and Principles
b. Cross Functional, Self-Managing Development
B. Productivity Domain
a. Analysis
a. Emergent Architecture
b. Programming
c. Test First Development
C. Quality Domain
a. Standards
a. Testing
b. DevOps
For more information on the details of the APS-SD Subject Areas, visit http://bit.ly/1C5GAg8.
Also by attending this class, you are eligible to a 40% discount for the PSM I assessment. So if you
want to get PSM I certified, please send an email to support@scrum.org for a coupon.
Find more information and resources online to broaden and deepen your knowledge and
understanding of being a professional Scrum team member.
Scrum is a journey of continuous improvement, therefore the learning path never comes to an end.
There is always a next topic to explore, always another skill to acquire. Have fun doing so.
1. Evaluate the course – feedback is incredibly important, and we take it very seriously; your
feedback helps us to continually inspect and adapt our courses to your needs:
http://scrum.org/feedback.
3. Join the elite group of other APS-SD certificate holders – if you pass the assessment then you are
certified; once you have become certified, you join the ranks of other distinguished developers;
you can view this elite list of developers here: https://www.scrum.org/certification-
list.
Thank you!
Software in 30 Days
Ken Schwaber, Jeff Sutherland
https://amzn.to/2HoZLIB