<?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/ensemble.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/ensemble.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">Three reasons to get a Samman coach</title><link href="https://chocolatedrivendevelopment.com/2023/08/30/learning-on-the-job/" rel="alternate" type="text/html" title="Three reasons to get a Samman coach" /><published>2023-08-30T00:00:00+00:00</published><updated>2023-08-30T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2023/08/30/learning-on-the-job</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2023/08/30/learning-on-the-job/"><![CDATA[<p>Writing software is knowledge work. 
The quality of the codebase, infrastructure and team interactions affects both the profit 
and the well-being of the team. 
My favourite way to share knowledge is called Samman Technical Coaching.
<a href="https://sammancoaching.org">It is described more in detail on this website</a>
and <a href="/references/samman.html">in the book by Emily Bache</a>. 
It can be used to improve both code quality,
infrastructure (as code) and team interactions.</p>

<p>In short Samman coaching consists of two parts, a learning hour and working in an ensemble. 
The learning hour is interactive and tailored to the needs of each team.
It is a way to explore new skills and concepts in a safe and well prepared setting.</p>

<p>The ensemble working is done in production code and is coach facilitated.
<a href="/posts/#ensemble">I have several posts on working in ensemble and its benefits</a></p>

<p>I claim that this is far more powerful than it initially seems,
at least when done right.
I want to compare it to regular courses,
since I think they are the closest alternative.</p>

<h3 id="with-your-people">With your people</h3>
<p>Samman technical coaching is done with your team.
No more returning from a course and trying to convince the others of the value in what you learned.
It is also adjusted to the knowledge level of your team and 
facilitates learning and teaching within the team.
Samman technical coaching provides new knowledge, a learning culture
and tools for learning together.</p>

<h3 id="where-you-know-the-domain">Where you know the domain</h3>
<p>Learning how to deal with complex problems is hard. 
You need a complex problem to solve, 
understand that complex problem and still have cognitive capacity left 
to learn a new tool or method to solve it.
When working with problems found in your production code,
you already understand the domain. 
That leaves more room for learning the tools, without having to use an 
unrealistic and limited problem.
(The coach needs to know the material well enough to teach it in any codebase.)
This brings more confidence in the tools and skills, 
since the team can see that they can be applied in their reality.
(If the tools do not work in the current production code
the coach will have to adapt the plan for the learning hours.
That feedback is not possible with traditional courses.)</p>

<h3 id="solving-your-problems">Solving your problems</h3>

<blockquote>
  <p>Happy families are all alike; every unhappy family is unhappy in its own way.</p>

  <p>– <cite>Leo Tolstoy in Anna Karenina</cite></p>
</blockquote>

<p>The goal is code that is dependable and easy to change.
How to get there is different for each team.
As a Samman technical coach you listen to the team and read their code.
The goal is to provide as much value as possible in a digestible way. 
All topics are presented one hour at the time,
often in small steps.
That way new concepts have a chance to get repeated and to stick.
As it is directly tried in the production code 
(it does not have to be producing value, but it can)
the team can try things out at their own pace.
This creates an offer of knowledge that can then be pulled into everyday use.
Change is best done without fear.
Samman coaching provides the specific tools that your team needs for change, 
but in a way that is safe and fun.</p>

<h3 id="conclusion">Conclusion</h3>
<p>Samman technical coaching brings the team together.
By using familiar production code it can teach more complex topics.
As the content is tailored to the needs of the team, 
and proven useful to them in their codebase,
it sticks and provides value in the everyday work for a long time.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="ensemble" /><category term="agile" /><category term="code" /><summary type="html"><![CDATA[Samman technical coaching improves learning by applying the knowledge in a familiar environment as a team. Everyone learns together and can validate the new skills where they will be applied.]]></summary></entry><entry><title type="html">Ensemble to make a smarter team</title><link href="https://chocolatedrivendevelopment.com/2022/11/29/collective-intelligence/" rel="alternate" type="text/html" title="Ensemble to make a smarter team" /><published>2022-11-29T00:00:00+00:00</published><updated>2022-11-29T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2022/11/29/collective-intelligence</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2022/11/29/collective-intelligence/"><![CDATA[<p>Problem solving ability is not only related to relevant knowledge or expertise.
For one person, doing cognitive work,
the explaining factor is called general intelligence (IQ).</p>

<p>IQ is a measurement widely used,
though problematic, due to its history and how it has been used.
(<a href="https://radiolab.org/series/radiolab-presents-g">I recommend this series by RadioLab</a>)</p>

<p>For a group working together the same phenomenon is called “collective intelligence factor”.
Just like individual intelligence, it aims to describe why some teams have consistent better performance,
independent of the nature of the task. 
<a href="https://www.einsteinmed.edu/uploadedFiles/diversity/collective-intelligence-science.pdf">Research by Woolley et al.</a>
shows that there are two major factors
that contribute to how intelligent a group of people is.</p>

<blockquote>
  <ol>
    <li>Correctly reading the emotional state of others</li>
    <li>Equal contribution in conversations and turn taking</li>
  </ol>
</blockquote>

<p>Compare this with aspects of ensemble programming.</p>

<ol>
  <li>
    <p><strong>Regular retrospectives create a place
for learning about others experiences.</strong>
Retrospectives are a great way to improve your work, 
and one aspect is practising empathy.
It creates a forum for sharing your perspective, including how you feel. 
An ensemble session ending with a short retro builds a feedback system for the team interactions.</p>
  </li>
  <li>
    <p><strong>Talking on a timer creates a framework
for distributing contribution.</strong>
<a href="https://pure.mpg.de/rest/items/item_68785_7/component/file_506904/content">We are not very good at judging how talking time is actually distributed.</a>
Strict ensemble working, with a timer, helps us get input from everyone. 
It could also help us get a better sense of what equal talking time feels like.</p>
  </li>
</ol>

<p>The interactions of a team is more important for the result than their individual
intelligence. 
That is good news. 
It is hard (or even impossible, depending on definition) to improve ones intelligence.
The dynamics of a team, and how we read and regard others emotions, can develop.</p>

<p>If you want to improve the general performance of a team, help them:</p>

<ol>
  <li>Take note of each others emotions.</li>
  <li>Get the input from everyone.</li>
</ol>

<p>One way to do this is through ensemble working, ending it with a short retrospective.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="ensemble" /><category term="empathy" /><category term="retros" /><summary type="html"><![CDATA[Teams perform better when dividing talking time and recognizing each others emotions. Working in an ensemble facilitates both of them, when done right.]]></summary></entry><entry><title type="html">A forest of developers</title><link href="https://chocolatedrivendevelopment.com/2022/07/29/random-forest/" rel="alternate" type="text/html" title="A forest of developers" /><published>2022-07-29T00:00:00+00:00</published><updated>2022-07-29T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2022/07/29/random-forest</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2022/07/29/random-forest/"><![CDATA[<p>Random forest is a machine learning algorithm.
It is an ensemble algorithm composed of decision trees.
Ensemble machine learning algorithms use the fact that kind of good models 
gets really good if a lot of them are used together. 
They just have to be fully independent of each other.</p>

<p>In ensemble programming we can use the same principle,
but for a forest of developers. 
Everyone in the team does not have to be good at everything.
The important thing is that the team has enough psychological safety so that all
developers are “independent” and can add to the total result.</p>

<p>This is one way to understand the power of ensemble programming.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="ensemble" /><category term="empathy" /><category term="code" /><summary type="html"><![CDATA[Ensemble programming does with developers what the machine learning model random forest does with decision trees. The combination is far better than the parts, if independent enough.]]></summary></entry><entry><title type="html">Explaining ensemble programming with hardware</title><link href="https://chocolatedrivendevelopment.com/2021/12/13/explaining-ensemble-programming-with-hardware/" rel="alternate" type="text/html" title="Explaining ensemble programming with hardware" /><published>2021-12-13T00:00:00+00:00</published><updated>2021-12-13T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2021/12/13/explaining-ensemble-programming-with-hardware</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2021/12/13/explaining-ensemble-programming-with-hardware/"><![CDATA[<p>Ensemble programing (aka mob programming) is an expansion of pair programming
to include an entire team.
More information can be found at <a href="https://mobprogramming.org/">mobprogramming.org</a></p>

<p>In this text I will try to explain why this is so awesome
by talking about processing units in a computer.</p>

<blockquote>
  <p>Why would you use more than one processing unit in a computer?</p>
</blockquote>

<p>I will use the answers to this question
to show some of the things I like with ensemble programming.</p>

<h2 id="speed">Speed</h2>

<p>Processing units have limitations,
but if the code is written in a way that let them collaborate,
you can let them join forces.
Threading will also allow a process to go do something else,
without the rest being blocked.
The same way that computations are distributed in a GPU,
cognitive load can be distributed in an ensemble.
Also — if you need to look something up,
one person can “spawn” and consult their laptop,
returning with more knowledge when it is their turn to navigate.
The ensemble can solve another part of the task at hand during that time,
not being blocked.</p>

<h2 id="specialization">Specialization</h2>

<p>Having both a CPU and a GPU in a computer is standard today.
They are good at different things, because they work differently,
but need to collaborate.
In an ensemble you can bring a differentiated group of people together,
and thus solve problems better.</p>

<h2 id="validation">Validation</h2>

<p>When put in an airplane, or voting machine,
a computer needs to have protection against bit-flips.
(Radio Lab has a nice piece on it
<a href="https://www.wnycstudios.org/podcasts/radiolab/articles/bit-flip">here</a>)
Basically you let two, or more,
systems perform the same task and that way,
you can see if one of them has been influenced by cosmic rays.
People make mistakes without cosmic rays,
so multiple people validating what is happening in the code is a good thing.</p>

<h2 id="redundancy">Redundancy</h2>

<p>Having a backup system is always nice.
For software today there can be an orchestrated cluster,
that is making sure that there are always “computers” available serving the customers,
even if one, or more,
instances are down. Coding in an ensemble is tiring, since there is so much action.
But it is ok to take a break.
And to be home sick or take vacation
is not such a threat to the productivity of the team as it might be otherwise.
Both leaving the ensemble for a shorter time, or a longer,
will be fine, since the structured collaboration transfer knowledge.</p>

<p>So, this is my try to explain some benefits of ensemble programming
with hardware metaphors.
Hope it helped.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="ensemble" /><summary type="html"><![CDATA[Multiple processing units in a computer can provide speed, validation, redundancy and specialization. The same is true for software developers working in an ensemble.]]></summary></entry><entry><title type="html">Ensemble programming and Lean</title><link href="https://chocolatedrivendevelopment.com/2020/07/05/ensemble-programming-and-lean/" rel="alternate" type="text/html" title="Ensemble programming and Lean" /><published>2020-07-05T00:00:00+00:00</published><updated>2020-07-05T00:00:00+00:00</updated><id>https://chocolatedrivendevelopment.com/2020/07/05/ensemble-programming-and-lean</id><content type="html" xml:base="https://chocolatedrivendevelopment.com/2020/07/05/ensemble-programming-and-lean/"><![CDATA[<p>Never optimize for individual performance.
Success is when touch time is a substantial part of the lead time.
Sounds familiar? These are two of my takeaways from reading <a href="/references/goal.html">The Goal</a>.
by Goldratt.</p>

<p>So what if we made all time touch time
with total disregard for individual productivity?
If we instead optimize for the groups productivity,
making sure that a feature never has to wait for information
needed to be completed.</p>

<p>With a batch size of one and only one workstation, where would we end up?</p>

<p>And people are surprised that using ensemble programming can be a competitive advantage.</p>]]></content><author><name>Ester Daniel Ytterbrink</name></author><category term="ensemble" /><category term="empathy" /><category term="ToC" /><summary type="html"><![CDATA[The Goal teaches us to optimize for 'touch time'. Coding in an ensemble, all time is touch time, and the batch size is one. That optimizes for throughput.]]></summary></entry></feed>