<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.2.2">Jekyll</generator><link href="https://chocolatedrivendevelopment.com/feed/by_tag/product.xml" rel="self" type="application/atom+xml" /><link href="https://chocolatedrivendevelopment.com/" rel="alternate" type="text/html" /><updated>2025-08-04T06:59:12+00:00</updated><id>https://chocolatedrivendevelopment.com/feed/by_tag/product.xml</id><title type="html">Chocolate Driven Development</title><subtitle>The blog Chocolate Driven Development contains things to help in making your software creation better for the business, as well as for the developers.</subtitle><entry><title type="html">The point of estimates</title><link href="https://chocolatedrivendevelopment.com/2023/09/19/size/" rel="alternate" type="text/html" title="The point of estimates" /><published>2023-09-19T00:00:00+00:00</published><updated>2023-09-19T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2023/09/19/size</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2023/09/19/size/"><![CDATA[<p>Imagine you have a jar full of beads. 
Your job is to guess (estimate) how many beads there are,
so you ask your team of bead experts.
They hand the jar around and give widely different estimates.
In the discussion that unfolds you learn about the density of different bead materials,
the distribution of sizes in different bead mixes and the sound beads make in a jar.</p>

<p>When you open the jar you will know much more of what to expect than just the amount of beads,
but “how many beads?” was the only question needed to start the conversation.</p>

<p>Estimates in software is not about scheduling tasks or defining velocity.
“How big is this task?” is a shortcut to a discussion on scope, 
technical limitations and prerequisites.</p>

<p>We need to understand our options when prioritizing.
The scope might be interpreted in different ways.
Members of the team have relevant knowledge unique to them that 
changes the understanding of work required.
All of this will show in an estimate of size.</p>

<p>Instead of taking all the beads out of the jar to sort them,
we just ask how many they are.
Then we keep the information it generates and throw out the estimate.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="agile" /><category term="product" /><category term="code" /><summary type="html"><![CDATA[Estimation is a place for quick assessments that everyone agree on the scope. It is also a way to discover technical knowledge that needs to be shared in the team.]]></summary></entry><entry><title type="html">IT-stress, part 2 — change</title><link href="https://chocolatedrivendevelopment.com/2023/08/22/stress-2/" rel="alternate" type="text/html" title="IT-stress, part 2 — change" /><published>2023-08-22T00:00:00+00:00</published><updated>2024-02-16T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2023/08/22/stress-2</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2023/08/22/stress-2/"><![CDATA[<p>Software that is unreliable or hard to use causes stress in the work place. 
It also lowers productivity.</p>

<p><a href="/2023/08/21/stress-1/">The previous post is on coping with IT-stress</a>
This is about preventing it.</p>

<h3 id="software-can-change">Software can change</h3>
<p>Software is named in contrast to hardware.
Computer programs should be easy to change.
You can get an update into production in less then an hour, with modern methods.
( Refer to <a href="/references/accelerate.html">Accelerate</a> 
if you encounter someone who says otherwise.)
If the software is not working, for the ones using it, the software should be changed.</p>

<h3 id="be-a-part-of-the-process">Be a part of the process</h3>
<p>Half of corporate budgets for software (in Sweden) is used for customisation. 
Either for modifications of existing software by external parties
or external developers working on in-house projects.
On top of that, about 40% of IT-workers in Sweden work for companies that produce something else than software.</p>

<p>That is a lot of software being written with a specific customer in mind.
If you are that customer, demand to be a part of the entire process.
Software tailored to your needs requires your input,
just as a suit or dress is made with multiple fittings.</p>

<p>“Off the shelf”-software has to be tried by the end users before committed to.
The cognitive ergonomics when investing in software should be considered similar
to ergonomics when furnishing a workshop or office.</p>

<p>If the software is a part of your “competitive edge”, consider having a dedicated 
team of software developers, who get to know you and your domain really well.
Provide them with direct access to the end user
and put them close to (or in) the product team.</p>

<blockquote>
  <p>The software team should be like a painters brush, 
swift in the hands of product development.</p>
</blockquote>

<p>If your software team can not deliver on that, provide them with training and other support until they do.
Your organisation deserves it.</p>

<h3 id="put-the-user-in-the-center">Put the user in the center</h3>
<p>The purpose of software is to make things better.
It is a failure if the end user can not easily use the product.
We can check that we are building the right thing as we go,
if we have the end user close and work in small steps.
In Extreme Programing, a flavour of agile, the customer is represented in the team.
If that does not work, find another way to get constant and real feedback.
This avoids delivering something that is “done”, but can not be used.</p>

<h3 id="expect-more-of-software">Expect more of software</h3>
<p>Whenever you can, demand more of software you encounter.
<a href="/references/accelerate.html">Accelerate</a> 
is a good book on what can be expected of an organisation delivering software.
<a href="/references/devops-2021.html">The DevOps report 2021</a>
and
<a href="/references/devops-2019.html">The DevOps report 2019</a> 
are shorter reports covering the findings from the research.
Remember that soft in software is soft as in changeable.
If you are in charge of spending money on software, off-the-shelf or in developer hours,
take your responsibility.
Software development is best done with the end user in focus and in small steps.
Don’t accept less.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="quality" /><category term="product" /><category term="agile" /><summary type="html"><![CDATA[IT-stress has gotten into the top list of problems in the workplace. This is a text about changing that.]]></summary></entry><entry><title type="html">IT-stress, part 1 — coping</title><link href="https://chocolatedrivendevelopment.com/2023/08/21/stress-1/" rel="alternate" type="text/html" title="IT-stress, part 1 — coping" /><published>2023-08-21T00:00:00+00:00</published><updated>2023-08-21T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2023/08/21/stress-1</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2023/08/21/stress-1/"><![CDATA[<blockquote>
  <p>It is not your fault.</p>
</blockquote>

<p>Software causes stress in the workplace.</p>

<p>The stress can come from things breaking down unexpectedly,
like projectors not starting,
audio missing in the video conference call or
the e-mail draft disappearing as you refill your coffee.</p>

<p>There are also the thousand cuts from the paper free work place.
Interfaces that are clunky,
dropdowns with a thousand options, where the most common is the last.
Forms demanding you to type in the same information three times
and then complains about the format.
(Perhaps by erasing everything you entered in so far.)
Information portals with unreliable search and no predictable structure.
Not to get stared on permissions to add or change information (or structure).</p>

<h2 id="coping">Coping</h2>

<p>This text is about coping with what you can not change.
Part two is about eliminating the source of the stress (bad software).</p>

<h3 id="put-the-blame-where-it-belongs">Put the blame where it belongs</h3>

<p>Software should never make you feel stupid.</p>

<p>When the printer throws a tantrum or an app suddenly restarts,
the responsible people are:</p>
<ul>
  <li>involved engineers</li>
  <li>their managers</li>
  <li>the one buying/financing the software (sometimes)</li>
</ul>

<p>Unless you are on that list, it is not your fault.</p>

<p>Software doesn’t have to be like that. 
The industry knows how to create intuitive interfaces.
There are processes for writing reliable software.
User research exists, just not enough.
You deserve better software. 
No human is non-technical, 
it is the technology that is inhumane.</p>

<h3 id="write-a-bug-report">Write a bug report</h3>

<p>Reporting issues with software has two benefits.
If the software organisation is good, it will use the feedback.
For organisations too immature to appreciate it, 
at least you can use it to let out some steam.
Put your frustration into precisely worded descriptions
and screen recordings showing the problem. 
Be polite, since that will help the organisations who welcome it and
annoy those who don’t.</p>

<h2 id="for-managers">For managers</h2>
<p>If the workbench has the wrong height,
or the knives are blunt,
you can not expect the best results.
The same is true with IT.
You have to adjust the expectations on your staff accordingly.
(At least until you are able to fix the software.)</p>

<p>The cognitively ergonomics of a workplace are as important as the physical ergonomics.
Software that is hard to use and/or unreliable, will affect the work,
regardless of the attitude among the employees. 
It is biology.</p>

<h2 id="the-it-industry">The IT-industry</h2>
<p>Software developers also suffer from IT-related stress.
No one is too clever to benefit from easy to use software.
If you are taxed by flaky tests or buggy editors,
know that you also deserve good interfaces and reliable experiences.
You are not less for wanting to work smart rather than hard.
If you struggle with getting software to work,
it has nothing to do with your aptitude as a developer.
You don’t have to be smart to make someone else feel stupid.</p>

<p>If you are a manger, or a role model, in IT, don’t idealise fire fighting.
Acknowledge when infrastructure and tooling are slowing you down,
and celebrate the canaries in the team.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="empathy" /><category term="equity" /><category term="product" /><summary type="html"><![CDATA[IT-stress has gotten into the top list of problems in the workplace. This is a text about coping with it.]]></summary></entry><entry><title type="html">The value of quality</title><link href="https://chocolatedrivendevelopment.com/2023/08/03/the-value-of-quality/" rel="alternate" type="text/html" title="The value of quality" /><published>2023-08-03T00:00:00+00:00</published><updated>2023-08-03T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2023/08/03/the-value-of-quality</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2023/08/03/the-value-of-quality/"><![CDATA[<p>This text is a reaction to this micro blog post:</p>

<blockquote>
  <p>early-career people should take the time to download and look at the leaked farcry code.
not to learn some new technical lessons,
but to disabuse themselves of the notion of “clean code”. 
<a href="https://twitter.com/nice_byte/status/1675621641131556864?s=61&amp;t=Mchgzl3goM1KCJAvA_p9oQ">nicebyte</a></p>
</blockquote>

<p>From reading more of the thread, my interpretation is:
“You don’t need good programming practises to make money from software.”
That might be true, in some circumstances, but to make it an “early-career”-advice I would like to add some
perspective.</p>

<p>First I want to separate internal and external software quality,
<a href="/2023/08/01/external-internal-quality/">as described in this post</a>.
Internal quality is from a developer perspective,
external quality is what the user sees.
They can be more or less dependent of each other, but have different effects.</p>

<p>J.B. Rainsberger has a talk on “The economics of software design” (<a href="https://youtu.be/TQ9rng6YFeY?t=735">video</a>).
There he introduces t0, the point in time where the total cost of having written the code is the same
regardless of if we just did it fast and sloppy or slower and intentionally sustainable.
We don’t know when t0 will be, but it exists for every project.
After t0 you reap the profit from having continuously improved the code since the start.
In just implementing features as fast as possible,
we bet against the project surviving past t0.
We only save money by not caring about “clean code” if the project does not reach t0.
The t0 measure is about the value of internal quality.</p>

<p>It is interesting to use a game as an example for when internal quality is unnecessary.
Games are one of the few kinds of software still distributed on physical media.
I believe that a lot of games change less over time then other software.
The cost of a messy codebase come when we want to edit it.
Bugfixes in a feature complete codebase can be plastered on,
as long as the code do not move.</p>

<p>In my <a href="/2023/07/27/useworthiness/">post on useworthiness</a>
I talk about how utility and usability mix to decide if software is worth using. 
If we can not add new features utility will suffer. 
Usability will be a problem if the internal quality problems show as 
external quality problems, or slow down improvements in user experience over all.</p>

<p>For games that change more over time, like Pokémon Go,
the condition of the codebase matters, and will start to show.
<a href="https://www.eurogamer.net/pokemon-go-developer-commits-to-improving-games-quality-after-recent-remote-raid-shiny-snafu?fbclid=IwAR26nV1LOSzsa7lygePIacsFofsfagyYKJlCEUHHfFf4fbTrSB2uPHjq57A"> Niantic has publicly stated that they have quality problems</a>.
In Pokémon Go the problems shows as defects, delayed features and draining of the users resources such as mobile data and battery.
All of that results in lower external quality.</p>

<p>The gamble here is both with t0, “will the project die before the codebase does?”, 
and with the users tolerance for unreliability, in relationship to how the game makes money.</p>

<p>Pokemon Go makes <a href="https://mobilegamer.biz/mays-top-grossing-mobile-games-worldwide/">money</a>, 
but Niantic has still recently <a href="https://variety.com/2023/digital/news/niantic-layoffs-pokemon-go-shutting-down-games-1235658759/">laid off 25% of its workforce</a>.</p>

<p>This is why my “early-career” advice is:</p>
<blockquote>
  <p>Find work where they care about code quality.</p>
</blockquote>

<p>It will be better for your mental health as well, but that is for another post.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="quality" /><category term="code" /><category term="product" /><summary type="html"><![CDATA[Is "clean code" important for successful software development? It depends on the life expectancy of the software, if it needs to follow changes in the business and how well the user reacts to defects.]]></summary></entry><entry><title type="html">Useworthiness</title><link href="https://chocolatedrivendevelopment.com/2023/07/27/useworthiness/" rel="alternate" type="text/html" title="Useworthiness" /><published>2023-07-27T00:00:00+00:00</published><updated>2023-07-27T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2023/07/27/useworthiness</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2023/07/27/useworthiness/"><![CDATA[<p>A product that only improves my life marginally has to be really good 
for me to keep using it.</p>

<p>On the other hand, a badly designed, or even unstable, product that provides
something really valuable, will be used anyway.
(That is, until something better is available, or the pain grows too big.)</p>

<p>Useworthiness is the combination of usability and utility.
How well it works is weighted with how valuable the function is.
Both impact how the user interacts with your product.</p>

<p>Compare it with food.
That something is easy to eat and that it is tasty is two
different things. 
Eating canned corn with a spoon is really easy.
Despite that, I prefer to eat it fresh on the cob, 
including the flossing required afterwards.</p>

<p>If you work with software that provides something really useful,
people might be using it <em>despite</em> its level of quality.</p>

<p>If it is something that the user has to do,
participation data is even less valuable to decide the quality of your product.</p>

<p>Get feedback from you user, besides recorded data,
to separate the usability from the utility and retain customers over time.</p>

<p>If you take pride in producing quality user experience and product stability,
make sure you work with something valuable to people, so that it is not wasted.</p>

<p>User research is the best way to get useworthy products.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="product" /><category term="quality" /><category term="code" /><summary type="html"><![CDATA[Useworthiness is the combination of usability and utility. How well it works is weighted with how valuable the function is. Both impact how the user interacts with software.]]></summary></entry><entry><title type="html">What is tugging at your team?</title><link href="https://chocolatedrivendevelopment.com/2023/07/24/tug-of-war/" rel="alternate" type="text/html" title="What is tugging at your team?" /><published>2023-07-24T00:00:00+00:00</published><updated>2024-02-16T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2023/07/24/tug-of-war</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2023/07/24/tug-of-war/"><![CDATA[<p>External dependencies cause:</p>
<blockquote>
  <ol>
    <li>Communication overhead</li>
    <li>Risk of conflicting interests</li>
    <li>Temporal dependencies and scheduling problems</li>
  </ol>
</blockquote>

<p>(Interruptions from auditing, or bugs found by external quality assurance,
is a version of temporal dependencies.)</p>

<p>This consumes resources that could’ve created value.</p>

<p>As soon as the software organization grows enough for the developers to split into more than one team,
the dependencies will change.
In the worst case both teams depend on everything the old team depended on, 
and each other. 
Managing dependencies more important in bigger companies (due to math).
<a href="https://tidyfirst.substack.com/p/scaling-extreme-programming-dependencies">Kent Beck has a great text on what you can do to deal with dependencies from within an
existing team</a>.
The suggestions below require more influence over the organization.
The goal is to create working software with as few dependencies as possible for each team,
while maintaining a reasonable team size.
The book <a href="/references/team-topologies.html">Team Topologies</a>
covers much more on how to organize teams, so I include their names for different teams along my own.</p>

<h2 id="including-the-stakeholder-in-the-team">Including the stakeholder in the team</h2>
<p>This is done in DevOps. 
When running the code is included in the responsibilities for the team,
operations is no longer a stakeholder.
The same can be done with product, security and user experience.
This is one of the reasons to have the customer be part of the team in XP.
A cross functional team gathers all expertise in one place.
The main focus is solving the business problem as well as possible.
This improves all three listed problems with dependencies,
since collaboration is moved to within the team.</p>

<h2 id="intent-centered-software-teams--slicing-teams-along-intent">Intent centered software teams — slicing teams along intent</h2>
<p>Organize teams around their goal (user path or feature) instead of what technology they use.
This also requires cross functional teams.
It is easier for the code to adhere to the single responsibility principle 
when the team has only one goal.
In Team Topologies the “Stream aligned team” is clearly intent centered.
“Subsystem teams” and “platform teams” can also fit the description,
if the other teams are seen as their customers. 
Solving the scheduling aspect of the dependencies relies on that the stream aligned teams can move forward independently of the subsystem and
platform teams.
(Platform teams are very different from a backend team,
that still has to implement changes for each feature in the frontend.)</p>

<p>One way to see it is that the business logic is created by stream aligned teams. 
The technical advantage can be created as a subsystem or platform,
used to improve the work of other teams as it gets available.</p>

<h2 id="service-teams--from-push-to-pull">Service teams — from push to pull</h2>
<p>If the overhead from having specialists in each team gets too big, 
you can have service teams.
In Team topologies those are “Enabling teams”.
This flips the direction of dependency between teams. 
If the legal team is there to control, it is a stakeholder for the software team.
On the other hand, if the software teams take full responsibility for the
legality of their code, the legal team can be there to serve them.
The legal team then has the software teams as their stakeholder.
It can still create delays, but the control and the responsibility is with the development team.
Legal advice is pulled from the legal team instead of pushed to the development team.
This can be used for other areas as well.
Service teams still have to manage their time, but they should at least not have to explain
why their work is needed. So the conflict in interests is solved.</p>

<h2 id="universal-design--including-diversity-in-the-norm">Universal design — including diversity in the norm</h2>
<p>The core in universal design is to move away from the able bodied user as a norm.
People with disabilities are not a new kind of user, they are a part of the general user.
We design for different screen sizes, without having stories like 
“as an iPad user I want to be able to buy a ticket”.
The same way we can simply make accessibility a part of how we work.
This is easier with a diverse team.
Universal design can also be expanded to include other marginalized groups. 
I don’t think that “as an African American I want to be able to use face recognition” should (need to) be its own story.
It is what we want to achieve that differentiates users,
not the circumstances we are (currently) in.</p>

<h2 id="bonus-cutting-dependencies-within-a-team">Bonus: Cutting dependencies within a team</h2>
<p><a href="/posts/#ensemble">Read my posts on working in an ensemble!</a>
This deals with all the listed problems with dependencies, 
but between individuals within the team.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="agile" /><category term="product" /><category term="code" /><summary type="html"><![CDATA[The software quality suffers when a team, and their code, try to satisfy conflicting needs. Communication overhead, and hard dependencies on work by other teams, make it worse. This is a compilation of some things commonly done to limit this.]]></summary></entry><entry><title type="html">The Octopus Theory</title><link href="https://chocolatedrivendevelopment.com/2023/05/02/octopus/" rel="alternate" type="text/html" title="The Octopus Theory" /><published>2023-05-02T00:00:00+00:00</published><updated>2023-05-02T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2023/05/02/octopus</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2023/05/02/octopus/"><![CDATA[<p>Octopuses in captivity have <a href="https://www.neaq.org/blog/octopus-box/">puzzle boxes</a> 
to keep them happy and occupied.
A bored octopus, <a href="https://www.telegraph.co.uk/news/newstopics/howaboutthat/3328480/Otto-the-octopus-wrecks-havoc.html">like the german octopus Otto</a>,
might cause the electricity to short circuit,
throw rocks at the glass, 
juggle hermit crabs or start moving things around in the aquarium.
When lacking stimuli, an octopus might even <a href="https://www.peta.org/features/5-times-octopuses-made-headlines/">die from it</a>.</p>

<p>I believe that software developers are a lot like octopuses.
To thrive, we need problems to solve, or we will create new problems, 
and in some cases, problems for others.</p>

<p>Most software development can be done quite simply today.
We have high level languages, frameworks and libraries for
technical advanced things that used to be done by each team.
Now the work consists of using existing tools to express the domain and adapt them for the product.
Most software today is developed where the programming part does not require you to be very clever.
(In a proper, modern, environment. Unless you are doing something totally new, most are not. I am not even going into AI.)</p>

<p>Implementing a solution, screen by screen, or api-call by api-call, 
that someone else designed, is not enough of a puzzle.</p>

<p>So, what options are there for a developer who loves problems?</p>

<p>My suggestion is that programmers should be a part of product development.
Give software developers business problems to solve, as part of a team.
Then we can safely aim to make our codebase easy to work with, even boring,
because we know that we will never run out of problems to solve.
The cognitive ability will be put to use where it is most needed, 
to solve hard technical problems when they arise,
and to support the business at all time.
And that is only one of the benefits!</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="product" /><category term="agile" /><category term="code" /><summary type="html"><![CDATA[Creatures with an innate need to solve problems, like octopuses and software developers, will look for problems to solve. Invite the development team to be a part of solving the business problems, and provide octopuses in captivity with puzzle boxes.]]></summary></entry><entry><title type="html">Anti-work polluters</title><link href="https://chocolatedrivendevelopment.com/2022/10/28/anti-work-polluters/" rel="alternate" type="text/html" title="Anti-work polluters" /><published>2022-10-28T00:00:00+00:00</published><updated>2022-10-28T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2022/10/28/anti-work-polluters</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2022/10/28/anti-work-polluters/"><![CDATA[<p>Anti-work, the unplanned work, that eliminates planned work, as it uninvited enters your day.
It is everything from fire fighting to bug fixes and cleaning up afterwards. 
Your intentions for progress goes up in proverbial smoke.</p>

<p>Not only will anti-work make life harder inside the organisation, 
it also leaks into the surrounding world. 
Anti-work pollution!</p>

<p>There is a lot of literature on the topic targeting the IT-industry.
<a href="/references/phoenix.html">The Phoenix Project</a> both describes where it comes from, 
and parts of what we can do about it. 
Preventing anti-work is also something a Technical Coach helps with.</p>

<p>We want to minimise anti-work to be more profitable and a better work place. 
We should also pay attention to what our anti-work does to people outside the company.
An organisation that fails to prevent anti-work for its employee,
will also cause anti-work for its customer.</p>

<p>It might not be that the entire system is down. 
It is enough that there is some kind of unavailability or error,
that will ask more of the customer than they planned for. 
Restarting apps or devices.
Forms that clear all entries on a single error.
Data that don’t sync properly.
Having to wait or reschedule your task for another time.
And it is not only software that manifests it,
though it is often software involved.
(Or better software could have prevented it.)</p>

<p>Ordered food that only partly show up might not seem like a biggie, 
but it might also cause the anti-work that blows up something really 
important for that individual at that time.</p>

<p>When the anti-work hits your life, instead of your work,
we often lack protective systems. 
The nuclear-family team of two, or one, doesn’t have the redundancy of an IT-department.
If the service you build is of any use, or importance at all, 
it hurts when it fails the user. 
It might only be a paper cut,
but could be one of thousands in total. 
It will probably hit harder for people with less privilege to start with. 
As a system, a society, we should all be more careful with each others time and energy.</p>

<p>Don’t be an anti-work polluter! Take care to build quality software!</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="quality" /><category term="product" /><category term="equity" /><summary type="html"><![CDATA[Anti-work in an organization will spread to its customers. No defect is too small to lower the quality of life for people a bit, and combined it is an unnecessary burden for the often already disadvantaged.]]></summary></entry><entry><title type="html">Feature requests and ice cream</title><link href="https://chocolatedrivendevelopment.com/2021/04/12/feature-requests-and-ice-cream/" rel="alternate" type="text/html" title="Feature requests and ice cream" /><published>2021-04-12T00:00:00+00:00</published><updated>2021-04-12T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2021/04/12/feature-requests-and-ice-cream</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2021/04/12/feature-requests-and-ice-cream/"><![CDATA[<p>In parenting you often have to say no to requests.
It can be the newest toy,
ice cream in the store
or another chapter of the book before bedtime.
A trick taught in parenting books 
is to show that you wish you could meet the request.
“Oh, yes, it would be awesome if we had time to read the entire book,
but you need to sleep now.”</p>

<p>Then the focus is moved to connecting with the child.</p>

<p>“What part of this chapter did you like the most? What do you think will happen?”
Most of the time the request is actually about connecting with the parent.</p>

<p>Next time I get a feature request,
that will not be instantly prioritised,
I will try the same.</p>

<p>“Yes, it would be nice to also be able to filter days by phase of the moon
. If it would not have caused any other tradeoffs we would implement it today,
but it is not possible at the time.”
Then move on to connecting and getting the customers perspective.
“What problem would filtering on moon phase solve for you?
What made you come up with that idea?”
It might be that this customer has insights that you can not get from your perspective
(some live their lives by the rhythm of the moon).
It can also be that the customer likes your service
and wants to be a part of the work,
feel connected and seen.
By both asking about the feature and taking interest in the customer
the questions move from justifying the request to understanding the customer.</p>

<p>So next time a customer scream for ice cream, see it as an opportunity to connect.</p>

<p>Ps. One such parenting book is this 
<a href="/references/krantz-lindgren.html">“Med känlsa för barns självkänsla”</a>.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="product" /><category term="empathy" /><summary type="html"><![CDATA[A wish for connection can sometimes be disguised as a request. By focusing on the needs and emotions of the requester we learn more about the request and build relationships.]]></summary></entry><entry><title type="html">Three ways to look at continuous backlog grooming</title><link href="https://chocolatedrivendevelopment.com/2020/08/14/three-ways-to-look-at-continuous-backlog-grooming/" rel="alternate" type="text/html" title="Three ways to look at continuous backlog grooming" /><published>2020-08-14T00:00:00+00:00</published><updated>2020-08-14T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2020/08/14/three-ways-to-look-at-continuous-backlog-grooming</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2020/08/14/three-ways-to-look-at-continuous-backlog-grooming/"><![CDATA[<p>Not all teams do ensemble programming,
where everyone work on the same task,
all the time.
If you do not always have access to everyone,
you need to have some function where knowledge is shared
for each item in the backlog.
I use “backlog grooming” as a name for this meeting.
This is where you check that the information on the items in the backlog
is enough for everyone in the team to understand them,
and that people agree somewhat on what is intended with the item.
It is important that everyone in the team is present,
most so for new teams.
I argue that we should have these meetings more often and make them shorter,
almost regardless of how we do it today.
Here I present the three ways to look at continuous backlog grooming
that made me come to that conclusion.</p>

<h2 id="building-inventory">Building Inventory</h2>

<p>In the analogy with a factory our groomed backlog items
can be seen as work in process.
Throughput in a system is limited by high work in process.
Backlog items do not take up floor space.
But they can get old and irrelevant,
or stress the team by being a metaphorical mountain of waiting work.
The buffer before a machine is calculated by using the throughput
and the time to replenish.
Therefore I suggest that the meetings for grooming the backlog
should be scheduled in proportion to the team velocity
and the current size of groomed items.
A rule of thumb is</p>

<blockquote>
  <p>time to next meeting = work in groomed backlog / (velocity * 2)</p>
</blockquote>

<p>This is not precise,
so you do not have to measure velocity,
just get it about right.</p>

<h2 id="knowledge-work">Knowledge work</h2>

<p>Going through backlog items is hard cognitive work,
and we are not very good at doing this for long periods of time.
So having shorter,
more frequent meetings,
will help us stay fresh and focused.
Pick a time in the morning,
when the brains are fresh,
or after lunch and some rest where the brains have gotten new energy.
Then keep it short,
preferable under one hour,
and focus.
That way you will make better decisions and stay engaged.</p>

<h2 id="continuous-improvement">Continuous improvement</h2>

<p>We get better at things that we do often.
Things that are painful,
but important are good things to get better at.
Hence,
do painful things more frequent.
For Toyota this was setup for the machines.
For me it is time reporting.
For some software teams it is grooming the backlog.
Do a short retrospective after each meeting and focus on the improvement of the processes.
Then we will get really good at preparing our work,
and well prepared work is more fun to complete.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="ToC" /><category term="agile" /><category term="product" /><summary type="html"><![CDATA[We want to build less inventory, limit cognitive waste and practise continuous improvement. This applies also when working on the project backlog.]]></summary></entry><entry><title type="html">Waste In Process and User Research</title><link href="https://chocolatedrivendevelopment.com/2020/07/07/waste-in-process-and-user-research/" rel="alternate" type="text/html" title="Waste In Process and User Research" /><published>2020-07-07T00:00:00+00:00</published><updated>2020-07-07T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2020/07/07/waste-in-process-and-user-research</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2020/07/07/waste-in-process-and-user-research/"><![CDATA[<p>Goldratt describes,
in the book The Goal,
how a failing factory is transformed into a success.
One of the steps,
as the purpose of the story is to describe Theory Of Constraints,
is to find the bottlenecks of the production in the factory.
When this is done,
they try to find ways to grow the capacity of the bottlenecks.</p>

<p>They go to the quality assurance team that tests finished products.
There they find a lot of things that passed through a bottleneck,
but got discarded.
since they had shortages in quality.
By moving parts of the QA before the bottleneck,
they save the limiting station from working on things
that are already broken.</p>

<p>What is the equivalent to this in software?</p>

<p>I do TDD and BDD! you might say.
If we assume that the developers are the bottleneck
 I would say that it is rather like making sure that the products
 are not broken during or after they are at the bottleneck.</p>

<p>My suggestion is that we see user research and design sprints
as our way to make sure that we do not have products
that are already broken taking up valuable time at the bottlenecks.
Every feature,
that is not tested against a real user,
risk being waste in process instead of work in progress
already when it reaches the development team.</p>

<p>The best way to increase the capacity of a bottleneck is
to find what it should not do.
By doing <a href="https://www.gv.com/sprint/">design sprints</a> and user research
you can try a lot of ideas
that do not have to go though the full development cycle.
(It has other advantages too.)
By investing in usability and design a lot of redo and undo can be saved.</p>

<p>Make sure that all tasks that get turned into code
has first been checked that they actually should be implemented.
That is how user research limits waste in process.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="ToC" /><category term="quality" /><category term="product" /><summary type="html"><![CDATA[User research can save as much effort in the IT-industry as QA before a bottleneck does in manufacturing.]]></summary></entry></feed>