<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://blog.mikebowler.ca/atom.xml" rel="self" type="application/atom+xml" /><link href="https://blog.mikebowler.ca/" rel="alternate" type="text/html" /><updated>2026-05-14T09:19:01-07:00</updated><id>https://blog.mikebowler.ca/atom.xml</id><title type="html">Mike Bowler</title><subtitle>Writing on agile practices, team dynamics, flow, and the psychology and neuroscience behind why teams succeed or struggle.</subtitle><author><name>{&quot;name&quot; =&gt; nil, &quot;picture&quot; =&gt; nil, &quot;email&quot; =&gt; nil, &quot;twitter&quot; =&gt; nil, &quot;links&quot; =&gt; [{&quot;title&quot; =&gt; nil, &quot;url&quot; =&gt; nil, &quot;icon&quot; =&gt; nil}]}</name></author><entry><title type="html">Neuroception: Why knowing you’re safe isn’t enough</title><link href="https://blog.mikebowler.ca/2026/05/14/neuroception/" rel="alternate" type="text/html" title="Neuroception: Why knowing you’re safe isn’t enough" /><published>2026-05-14T00:00:00-07:00</published><updated>2026-05-14T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/05/14/neuroception</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/05/14/neuroception/"><![CDATA[<p>A few years ago I was asked to facilitate a multi-team retrospective across a department. It had been previously noted that there seemed to be a psychological safety problem across this department and I was asked to address that specifically, so I did. I introduced the topic, provided some context around psychological safety, and we started to explore what people were noticing and how they felt.</p>

<p>Within about twenty minutes, I and my co-facilitators were receiving panicked messages from managers who had not been invited to the retrospective. They were telling me to stop the conversation and leave it alone. It turned out that people inside the retrospective had felt so uncomfortable just talking about this subject that they had reached out to their own management to get it shut down.</p>

<p>An interesting point is that by the end of the retrospective, everyone inside the room was calm and feeling good about the outcome of the meeting.</p>

<p>Outside the room however, the panic continued for weeks. Various levels of management pulled me into meetings to discuss what had happened. What could have been a clean two-hour retrospective became a weeks-long organizational disruption, triggered not by anything that happened in the room, only by the alarm signals that had spread outward from it.</p>

<p>So what was actually happening?</p>

<h2 id="neuroception">Neuroception</h2>

<p>Dr. Stephen Porges, a neuroscientist who spent decades studying the nervous system, coined the term <strong>neuroception</strong> to describe something that happens constantly, below conscious awareness. Your nervous system is continuously scanning the environment for signals of safety or threat, and it makes that assessment before thought, before language, before any conscious decision. By the time you are aware of feeling unsafe, the call has already been made.</p>

<p>This is distinct from <strong>perception</strong>, which involves conscious awareness. Neuroception happens underneath it. And critically, it doesn’t evaluate logic or intent. It evaluates signals: tone of voice, facial expressions, the predictability of your environment, whether the people around you seem calm or alarmed. A well-reasoned argument arrives too late. The nervous system has already decided.</p>

<h2 id="what-this-means-in-organizations">What this means in organizations</h2>

<p>The people in that retrospective weren’t being obstructive. Their nervous systems had detected threat signals before anything particularly alarming had been said. The topic itself, psychological safety, in a department where safety was already uncertain, was enough. They responded to the signal the context was sending, not to the content of the conversation.</p>

<p>When they reached out to their managers, they became threat signals themselves. The managers outside the room had no direct experience of what was happening inside it. Their nervous systems received an alarm and responded accordingly. The panic propagated through the organization, not because the situation was actually dangerous, only because the signals indicated it was.</p>

<p>This pattern shows up constantly in organizational change. A leadership team announces a restructure. They communicate clearly, hold town halls, answer every question, explain the rationale. Yet, the team still can’t focus. Still seems unsettled weeks later. Still isn’t performing the way it was before.</p>

<p>This is not stubbornness, or apathy, or unprofessionalism. It is neuroception having made a threat assessment, and no amount of rational communication reaches the system that made that call.</p>

<h2 id="the-implication">The implication</h2>

<p>For leaders and coaches, this matters because it reframes the problem. If you believe that felt safety is primarily a communication problem, you will keep reaching for communication solutions. Clearer messaging, more transparency, better town halls. And you will keep being puzzled when it isn’t enough.</p>

<p>Neuroception tells us that felt safety is a nervous system problem. The signals the environment sends matter more than the logic it offers. Resistance to change isn’t stubbornness. Disengagement isn’t apathy. Persistent anxiety after a well-handled announcement isn’t irrational. It’s biology doing exactly what it evolved to do, in an environment it wasn’t designed for.</p>

<p>Understanding what’s actually happening is the first step toward addressing it effectively. This is the kind of work I do with teams and organizations. <a href="https://www.mikebowler.ca">Let’s talk</a>.</p>

<p>See also: <a href="/2024/01/14/polyvagal-theory/">Polyvagal Theory</a></p>]]></content><author><name>Mike Bowler</name></author><category term="unconsciousagile" /><summary type="html"><![CDATA[A few years ago I was asked to facilitate a multi-team retrospective across a department. It had been previously noted that there seemed to be a psychological safety problem across this department and I was asked to address that specifically, so I did. I introduced the topic, provided some context around psychological safety, and we started to explore what people were noticing and how they felt.]]></summary></entry><entry><title type="html">Tacit knowledge and hiking</title><link href="https://blog.mikebowler.ca/2026/05/07/tacit-knowledge-and-hiking/" rel="alternate" type="text/html" title="Tacit knowledge and hiking" /><published>2026-05-07T00:00:00-07:00</published><updated>2026-05-07T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/05/07/tacit-knowledge-and-hiking</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/05/07/tacit-knowledge-and-hiking/"><![CDATA[<p>Recently, I’ve done a number of hikes on very steep trails with lots of loose shale. What that really means is that the surface is very unstable and at any moment your feet can slide out from underneath you.</p>

<figure class="small_right">
  <img src="https://files.mikebowler.ca/images/carrot_mountain.png" height="450" width="600" />

  <figcaption>View from Carrot Mountain, West Kelowna, BC, Canada</figcaption>
</figure>

<p>As I was coming back down from Carrot Mountain (picture), it occurred to me that this is an excellent example of <a href="/2025/12/05/tacit-knowledge/">tacit vs explicit knowledge</a>.</p>

<p>When we’re first starting to hike on surfaces like this, we’re sliding regularly but it doesn’t take more than a few hours of this before we’re sliding less. Before we get to a point where we know which rocks are stable to put our weight on and which ones will slide.</p>

<p>And yet, even now if you were to ask me where you can step, even though I can point out the rocks that will hold my weight, I often can’t tell you how I know that. It’s not that the rocks necessarily look that different. I just know<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup>.</p>

<p>This is tacit knowledge. It’s not something I learned from a book, or that someone showed me once, it’s knowledge that I absorbed through doing. In fact, it’s information that cannot effectively be learned without actual practice.</p>

<p>How is this relevant here? A lot of the information that we need in order to do our jobs really effectively is that tacit knowledge. It’s not something that we can learn from a book, or from a lecture. It’s something we have to do. This is why so many trainings are experiential - if you’re not actually doing the skill, you can only learn the explicit portion of it, not the tacit portion, and the tacit portion is usually the more interesting.</p>

<p>When I teach classes, they’re always deeply experiential. If I’m teaching development practices, we’re actually going to write code together. We’re doing to do simulations and exercises because this is how we absorb tacit knowledge. If you want to know how to not slide on the shale then come hiking with me and step where I step.</p>

<p>This is also the value in coaching. Not reading an article and expecting to have gained all the knowledge, but working with a coach as you’re going through the work. Getting corrections in the moment.</p>

<p>There are many things that you can learn from a book or a video (explicit knowledge). There are an equal number of things that you can’t (tacit knowledge), and for those you need to try something different.</p>

<p>I can help with that. Let’s talk.</p>

<p>See also: <a href="/2025/12/05/tacit-knowledge/">Tacit knowledge</a></p>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>I don’t always know, and I slide often enough to come home scraped and bruised. The key is that I’m right surprisingly often. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Mike Bowler</name></author><category term="UnconsiousAgile" /><category term="Learning" /><summary type="html"><![CDATA[Recently, I’ve done a number of hikes on very steep trails with lots of loose shale. What that really means is that the surface is very unstable and at any moment your feet can slide out from underneath you.]]></summary></entry><entry><title type="html">Agile is more than just meetings</title><link href="https://blog.mikebowler.ca/2026/05/06/agile-more-than-meetings/" rel="alternate" type="text/html" title="Agile is more than just meetings" /><published>2026-05-06T00:00:00-07:00</published><updated>2026-05-06T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/05/06/agile-more-than-meetings</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/05/06/agile-more-than-meetings/"><![CDATA[<p>Somehow the perception has built over time that Agile is just about meetings. It’s not. It’s about the entire system and how we deliver value to our clients.</p>

<p>So when I hear crazy things like “agile isn’t needed anymore because of AI”, I have to ask:</p>
<ul>
  <li>Do you no longer care what the customer needs or about the value you’re delivering?</li>
  <li>Do you no longer care about the quality or reliability of the product?</li>
  <li>Do you no longer care if you’re able to sustain what you’re doing into the future?</li>
</ul>

<p>Sure, some of the specific practices are going to change, but agile is a set of values and principles and those haven’t changed at all. Improving the way we deliver value to our clients is still critical.</p>

<p>Want to hear more? <a href="https://www.mikebowler.ca/agile-coaching">Let’s talk</a>.</p>]]></content><author><name>Mike Bowler</name></author><category term="metrics" /><category term="Wip" /><summary type="html"><![CDATA[Somehow the perception has built over time that Agile is just about meetings. It’s not. It’s about the entire system and how we deliver value to our clients.]]></summary></entry><entry><title type="html">Cascading failures</title><link href="https://blog.mikebowler.ca/2026/05/04/cascading-failures/" rel="alternate" type="text/html" title="Cascading failures" /><published>2026-05-04T00:00:00-07:00</published><updated>2026-05-04T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/05/04/cascading-failures</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/05/04/cascading-failures/"><![CDATA[<p>Early in my career, probably 30 years ago, I recall shipping some significant application at a bank. I don’t even remember what the product was but I do remember that management was really worried about things not going well. So we rolled out to a small subset of our customers for a couple of weeks, while developers were on call for the support desk. In the first few days support called regularly and we’d come down and fix the problems right away.</p>

<figure class="small_right">
  <img src="https://files.mikebowler.ca/images/alicja-domino-9602003.jpg" height="2987" width="4470" alt="A line of dominos falling" />
  <figcaption>Image by <a href="https://pixabay.com/users/_alicja_-5975425/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=9602003">Alicja</a> from <a href="https://pixabay.com//?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=9602003">Pixabay</a></figcaption>
</figure>

<p>By the second week, the support team had stopped calling the developers and when we checked in with them, they said everything was going great. So we rolled out to the entire user base of 10,000 people.</p>

<p>Fast forward a couple of days, to discover that there were lots of problems, and had been problems all the way through the support period. The gotcha is that the support team had found workarounds so they had stopped reporting those problems. Once they’d figured out a workaround, they just walked users through that, rather than reporting it. Problem solved, or so they thought.</p>

<p>Until they were now supporting 10,000 people who all needed that workaround at the same time. All of a sudden the support team didn’t have enough capacity anymore, and it was a full panic. All hands on deck, and development in full fire fighting mode.</p>

<p id="continue">Where do we even start to unpack this?</p>

<p>Did we have quality issues? Obviously, yes. The fact that so many significant bugs had even been found, shows that there were quality problems.</p>

<p>Did we have a problem with support stopping with a workaround and not digging deeper to find the underlying problem? Again, yes. While this could have been a conscious choice (Satisficing Decision), it was most likely a <a href="/2024/11/10/cognitive-bias/">cognitive bias</a> (Einstellung Effect) that led them to stop looking for a better solution.</p>

<p>Did we have communication problems between development and support? Yes. The fact that development wasn’t even aware that things were breaking, was a significant problem.</p>

<p>Did we have problems with management not seeing the whole picture? Again yes. Despite the focus on wanting this to go smoothly, they didn’t have any of the overall picture. Each group was continuing to work in their own silo, and optimizing for their own behaviour. Looking at the bigger picture is a management responsibility, and they had abdicated that to the individual teams, telling them to figure it out on their own. Teams that were not in the habit of working together, and had never built up the skills or processes that would have made this effective.</p>

<p>When we see a significant failure, it’s rarely because one thing went wrong. We can usually correct for one mistake being made. The significant failures are due to a cascade of failures, as in this case.</p>

<p>It wasn’t just that there were bugs. It wasn’t just that support stopped reporting problems when they had a workaround.  It wasn’t just that groups weren’t talking to each other. It wasn’t just that management had taken their eyes off the ball.</p>

<p>All of these things had happened at once, and it was a disaster. Had only one thing happened, we likely would have compensated for it. The fact that they all happened at once made that impossible.</p>

<p>What made this a cascade rather than a recoverable problem was that each failure cut a feedback loop. Bugs had been reaching us through support calls, but once the workarounds were in place, we stopped hearing about them. We relied on support to escalate problems to development, but support had stopped calling. We expected management to track rollout health through what development reported, but we had nothing to report. Each failure silenced the signal we would have needed to catch the next one.</p>

<p>Each team was solving their own problem: support kept users moving, development fixed what they heard about, management tracked what development told them. Nobody was watching the whole system. Checking in with each team and hearing that everything is fine is not the same as understanding the health of the rollout. Silence is not a signal of success. Ask instead whether the feedback loops are still intact.</p>

<p>How could we have identified the individual problems before we had a cascading failure?</p>

<p>For people internal to the system, that’s the main point of retrospectives. Reflecting deeply into what’s going on and surfacing problems before they fail. If we’re only having superficial conversations then we won’t uncover these things, but if we’re having the right retrospectives, we will. See my course <a href="https://www.retrospectivemagic.com">Retrospective Magic</a> for more on improving your retrospectives.</p>

<p>The other option is to bring in someone from outside the system, as it’s often easier for an outsider to see things that the insiders have learned to ignore. That’s not a criticism of the insiders, but rather an acknowledgement of the way human brains work. The more we ignore a thing, the less chance of that thing even being brought into conscious awareness - we literally stop seeing it. Refer to the reticular activating system in <a href="/2026/04/02/poor-code-and-the-ras/">this article on poor code</a></p>

<p>If you’d like help with either of those then <a href="https://www.mikebowler.ca/agile-coaching">let’s talk</a>.</p>

<p>See also:</p>
<ul>
  <li><a href="/2024/11/10/cognitive-bias/">Cognitive Bias</a></li>
  <li><a href="/2024/07/03/rapid-feedback/">Rapid feedback</a></li>
  <li><a href="/2025/08/05/optimizing-for-our-own-effectiveness/">Optimizing for our own effectiveness</a></li>
</ul>]]></content><author><name>Mike Bowler</name></author><category term="unconsciousagile" /><category term="CognitiveBias" /><category term="Leadership" /><category term="Retrospectives" /><summary type="html"><![CDATA[Early in my career, probably 30 years ago, I recall shipping some significant application at a bank. I don’t even remember what the product was but I do remember that management was really worried about things not going well. So we rolled out to a small subset of our customers for a couple of weeks, while developers were on call for the support desk. In the first few days support called regularly and we’d come down and fix the problems right away.]]></summary></entry><entry><title type="html">Unconscious mind and negative phrasing</title><link href="https://blog.mikebowler.ca/2026/04/29/unconscious-and-negatives/" rel="alternate" type="text/html" title="Unconscious mind and negative phrasing" /><published>2026-04-29T00:00:00-07:00</published><updated>2026-04-29T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/04/29/unconscious-and-negatives</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/04/29/unconscious-and-negatives/"><![CDATA[<p>Imagine that you see your child precariously picking up a glass of water and you shout at them <em>“don’t spill that!!”</em>. You know what’s next; water all over the floor.</p>

<p>You may have heard that this happens because the unconscious mind can’t process negatives, and while that’s a common belief, the truth has more nuance to it. The unconscious mind can process negatives, just not always as fast or as effectively as we need it to.</p>

<p>In order to process a negative, we first need to bring up the positive. If I say <em>“Don’t think of a purple elephant”</em>, what’s the first thing that pops into your mind? A purple elephant, of course. Then you try to push it away or distract yourself with other thoughts so that you can NOT think of that.</p>

<p>The key point is that when processing a negative, we do it in two steps. We first bring up the positive, and then as a second step, we try to not do that thing.</p>

<p>So if both of us are relaxed and I hand you a glass of water and calmly say <em>“don’t spill the water”</em>, your brain will first consider the actual spilling and then will realize that it’s a negative and not do it. So far, so good.</p>

<p>The gotcha is when we’re stressed or things are happening fast around us. In this case, our brains start to prioritize all the items coming at us and it gives a higher priority to the first part (spill the water) than to the second (don’t do it) and it becomes possible for other items to get in between them. We’re reacting so fast that we finish processing the spill before our brains realize that the <em>“don’t”</em> is coming.</p>

<p>Now we’ve got water all over the floor and we’re left wondering why we did that.</p>

<p>How is this relevant in an office environment? High stress or anxiety causes exactly the same problems, and many workplaces are hot-beds of both.</p>

<p>If people are calm and the pace is slow then it doesn’t matter how you phrase things, but you don’t know what other people are dealing with. They may be stressed for reasons unrelated to the current situation.</p>

<p class="key_point">When giving instructions, say what you want, not what you don’t.</p>]]></content><author><name>Mike Bowler</name></author><category term="Language" /><summary type="html"><![CDATA[Imagine that you see your child precariously picking up a glass of water and you shout at them “don’t spill that!!”. You know what’s next; water all over the floor.]]></summary></entry><entry><title type="html">Scrum Master vs Coach</title><link href="https://blog.mikebowler.ca/2026/04/25/sm-vs-coach/" rel="alternate" type="text/html" title="Scrum Master vs Coach" /><published>2026-04-25T00:00:00-07:00</published><updated>2026-04-25T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/04/25/sm-vs-coach</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/04/25/sm-vs-coach/"><![CDATA[<p>I was talking to someone who had been asked to be the Scrum Master (SM) for four scrum teams at the same time. My initial reaction was that the manager who had set this up has no understanding of the SM role.</p>

<p>That then led to the obvious question of why is it ok for an agile coach to work with four or more teams at once but not for a SM? After all, there’s an awful lot of overlap between the skills required of both roles.</p>

<p>The key differentiator is that the SM is internal and the Coach is external.</p>

<p>The SM is a part of the team and contributes to the teams goals; they are embedded and doing the work of the team. The coach, on the other hand, is always trying to disengage from the team. They’re building up capacity, and teaching skills so that the team becomes self-sufficient and doesn’t need them anymore.</p>

<p>The coach is always planning to leave, the SM is planning to stay. That focus is quite different, and the results from having each is quite different.</p>

<p>So when I hear <em>“one SM for four teams”</em>, that either means that someone is using the wrong labels and what they really want are teams without SM’s at all, and a coach that floats between them, or they fundamentally don’t understand what an SM does for the teams. I find it’s more often the latter.</p>]]></content><author><name>Mike Bowler</name></author><summary type="html"><![CDATA[I was talking to someone who had been asked to be the Scrum Master (SM) for four scrum teams at the same time. My initial reaction was that the manager who had set this up has no understanding of the SM role.]]></summary></entry><entry><title type="html">The three legs</title><link href="https://blog.mikebowler.ca/2026/04/22/three-legs/" rel="alternate" type="text/html" title="The three legs" /><published>2026-04-22T00:00:00-07:00</published><updated>2026-04-22T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/04/22/three-legs</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/04/22/three-legs/"><![CDATA[<p>When I’m teaching agile classes, one of the first things I talk about are what I think of as the three legs of the table we’re working from.</p>

<p>⮕ <strong>Building it right:</strong>
Do we have strong technical practices? Are we able to quickly and reliably get features built that will then run with high quality in production? If we can’t make a change without breaking something else we’re not winning.</p>

<p>⮕ <strong>Building the right thing:</strong>
Building the wrong thing fast, helps nobody. Are we actually building the right thing at the right time? Are we validating that what we built did meet the clients needs?</p>

<p>⮕ <strong>Building it sustainably:</strong>
Are we able to maintain the current pace indefinitely or are we burning our people out? Are we balancing out long term need against short term need to avoid taking too many shortcuts?</p>

<p>All too often we focus on just one or two of these. The hype around AI is a perfect example. Yes, it makes us able to write code significantly faster, but are we building the right things and doing it in a way that we can sustain? Are we building a foundation that we can keep working with, or are we making a lot of short term decisions that are going to come back and make our lives miserable later?</p>

<p>In some cases, I see teams that are successfully achieving all three with the use of AI and getting amazing results. In others, I see them deliver the wrong things faster than ever before, and in ways that will come back to haunt them.</p>

<p>It’s worth asking: are we keeping an eye on the bigger picture or are we hyper-focused on the shiny new toy?</p>]]></content><author><name>Mike Bowler</name></author><category term="improvingflow" /><summary type="html"><![CDATA[When I’m teaching agile classes, one of the first things I talk about are what I think of as the three legs of the table we’re working from.]]></summary></entry><entry><title type="html">Visualizing WIP limits</title><link href="https://blog.mikebowler.ca/2026/04/13/visualizing-wip-limits/" rel="alternate" type="text/html" title="Visualizing WIP limits" /><published>2026-04-13T00:00:00-07:00</published><updated>2026-04-13T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/04/13/visualizing-wip-limits</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/04/13/visualizing-wip-limits/"><![CDATA[<p>I’ve been wanting to do a good visualization around WIP limits for a while and now I finally have one that I’m happy with. This is specifically around column based WIP limits since that’s all that Jira supports, and pretty much all my clients use that.</p>

<p>Let’s start with the problem first. What decisions am I trying to enable by visualizing WIP in this way? There are a couple:</p>

<ol>
  <li>First, are there WIP limits on all the active columns? For a kanban team there absolutely should be and for a scrum team, it’s still a reasonable practice, even though scrum manages WIP through the timebox.</li>
  <li>Are the limits set at a reasonable place? They should be low enough to force us to do the things we don’t want to do, and yet high enough that they aren’t constantly getting in the way. Even when limits are in place, most teams don’t have them set at reasonable values.</li>
  <li>Are there patterns in the WIP data that could identify obstacles?</li>
</ol>

<p><img src="https://files.mikebowler.ca/images/wip_by_column_chart.png" height="718" width="2370" /></p>

<p>The Y axis shows how many items were in progress (WIP). This is measured by counting all the items that have started but not yet finished at any point in time.</p>

<p>The X axis shows the active columns on the board. Active meaning that items were in these columns while the work was considered started. You won’t see “to do” or “done” columns here because the work was not active at that time.</p>

<p>Then within each cell on this chart, there is a rectangle that tells us how much of the total time that items were in the column, was spend at this WIP level.</p>

<p>From this diagram, you can see at a glance that the <code class="language-plaintext highlighter-rouge">design</code> column almost never had any work it it; that most work skipped right over it. Even in the rare case that something was here, it was only ever one item at a time.</p>

<p>You can also see that while the <code class="language-plaintext highlighter-rouge">UAT Testing</code> column occasionally had more than 4 items in it, that was exceptionally rare.</p>

<p>Next up, there are potentially three dashed lines in each column, labelled <code class="language-plaintext highlighter-rouge">min</code>, <code class="language-plaintext highlighter-rouge">max</code>, and <code class="language-plaintext highlighter-rouge">rec</code>. The first two are the minimum and maximum as configured in Jira so you can see at a glance how often we’ve exceeded either limit. The third is a recommended maximum that is calculated based on the distribution of data. If your max is set to the recommended level then you should hit the limit occasionally but not constantly (roughly 15% of the time).</p>

<p>In the example here, you can see at a glance that the max of 11 in the <code class="language-plaintext highlighter-rouge">ready</code> column is ridiculous as we haven’t even gone past 1 in the time period we’re looking at. That number should be lowered and the recommendation limit is 1.</p>

<p>What about patterns in the data?</p>

<p>We can clearly see that almost no work enters the <code class="language-plaintext highlighter-rouge">design</code> column. Do we still need that column or could we just remove it? If it’s not delivering value to us then it’s just noise. Noise slows us down.</p>

<p>We can also see that the <code class="language-plaintext highlighter-rouge">development</code> column is never empty and rarely has fewer than 2 items. If this is a scrum team then this could indicate that we’re not actually finishing the work at the end of the sprints.</p>

<p>I’ve seen one data set where the <code class="language-plaintext highlighter-rouge">in progress</code> column alternated wide and narrow bars as they WIP went up. A wide bar for a WIP of 3 and a narrow bar for 4, then a wide again for 5. That could suggest that we have some kind of phase gate that only operates on alternate days. There’s nothing conclusive in the pattern but it does help us frame the questions we should ask.</p>

<p>Like this chart? It’s now available in <a href="https://jirametrics.org">JiraMetrics</a>.</p>

<p>If you’d like help making better decisions from your teams metrics then <a href="https://www.mikebowler.ca">let’s talk</a>. I’m available to help.</p>]]></content><author><name>Mike Bowler</name></author><category term="metrics" /><category term="Wip" /><summary type="html"><![CDATA[I’ve been wanting to do a good visualization around WIP limits for a while and now I finally have one that I’m happy with. This is specifically around column based WIP limits since that’s all that Jira supports, and pretty much all my clients use that.]]></summary></entry><entry><title type="html">Cognitive load and AI</title><link href="https://blog.mikebowler.ca/2026/04/12/cognitive_load_and_ai/" rel="alternate" type="text/html" title="Cognitive load and AI" /><published>2026-04-12T00:00:00-07:00</published><updated>2026-04-12T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/04/12/cognitive_load_and_ai</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/04/12/cognitive_load_and_ai/"><![CDATA[<p>A couple of things have passed through my feed today about how AI is increasing <a href="/2024/01/28/cognitive-load/">cognitive load</a>.</p>

<p>The first was a video, that I didn’t save and can’t find again, talking about call centres and how automating away all the simple calls, meant that the call centre staff no longer had any real downtime. Instead of getting a mix of easy calls and difficult calls, now they get nothing but difficult calls with no gaps between them and this makes the work significantly harder. They used to get a bit of a mental break when handling the easy calls and now that’s gone.</p>

<p>The second was <a href="https://flowlabs.substack.com/p/6-cognitive-load-the-hidden-cost?triedRedirect=true">this article</a> by André Meyer, showing the same idea but expressed in different terms. [This is his diagram, not mine]</p>

<p><img src="https://files.mikebowler.ca/images/CognitiveLoadAI.png" height="612" width="1070" /></p>

<p>Yes, AI is allowing us to move much faster through the easy work but is at the same time taking away those opportunities for our brains to pause for a moment. Now the work is much more demanding, all the time, and if we don’t force ourselves to stop periodically, this will ultimately lead to burnout.</p>

<p><strong>Update 2026-05-03</strong>: <a href="https://www.linkedin.com/posts/jurgendesmet_cognitiveload-trunkbaseddevelopment-softwareengineering-activity-7456689275112353792--WJR">Another article</a> on LinkedIn by Jürgen De Smet, framing trunk based development as a cognitive load practice, rather than an engineering practice.</p>]]></content><author><name>Mike Bowler</name></author><category term="unconsciousagile" /><category term="CognitiveLoad" /><summary type="html"><![CDATA[A couple of things have passed through my feed today about how AI is increasing cognitive load.]]></summary></entry><entry><title type="html">Jira API: Knowing if an issue is visible on the board</title><link href="https://blog.mikebowler.ca/2026/04/11/jira-is-the-issue-visible/" rel="alternate" type="text/html" title="Jira API: Knowing if an issue is visible on the board" /><published>2026-04-11T00:00:00-07:00</published><updated>2026-04-11T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/04/11/jira-is-the-issue-visible</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/04/11/jira-is-the-issue-visible/"><![CDATA[<p>When we see an item aging unnecessarily in the data, one of the first questions I ask is <em>“is the issue even visible on the board?”</em> If it isn’t then I think we immediately understand why we’re ignoring it. <em>“Out of sight, out of mind”</em> is a very real thing.</p>

<p>So you’re thinking <em>“how can I tell if it’s visible on the board?”</em> and that’s more complicated than you would think.</p>

<p>If you only care about whether it’s on the board right now then there’s an API for that.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>GET /rest/agile/1.0/board/{boardId}/issue
</code></pre></div></div>

<p>Unfortunately, if you need historical data, as I do, it’s much messier.</p>

<h2 id="kanban-board-in-a-company-managed-project">Kanban board in a company-managed project</h2>

<p>If we’re looking at a Kanban board in a company managed project then it’s pretty straightforward. We look at the <a href="/2024/04/17/jira-api-board-details/">board details</a> to see all the visible columns and from there, we find the statuses mapped to each of those columns. If the issue is in one of those statuses, it’s visible.</p>

<p>The only gotcha here is that we have to look at status ids, not status names because we might have multiple <em>“In Progress”</em> statuses and the one mapped to the board may not be the one in the issue. I’ve seen cases where a single issue has historically been in four different statuses all called <em>“In Progress”</em>, and only one of those is mapped to the current board.</p>

<h2 id="scrum-board-in-a-company-managed-project">Scrum board in a company-managed project</h2>

<p>For a scrum board in a company-managed project then the issue will be visible on the board if the statuses map in the same way as for kanban above AND this issue is in a currently active sprint. Not just “in a sprint”, it must be in a sprint that is currently active.</p>

<h2 id="a-team-managed-project-with-sprints-enabled">A team managed project with sprints enabled</h2>

<p>If it’s in a sprint then it’s eligible to be on the board but still must be mapped to a status that’s on the board.</p>

<h2 id="a-team-managed-project-with-sprints-not-enabled">A team managed project with sprints not enabled</h2>

<p>This is the case where the board behaves mostly but not entirely like a kanban board in a company managed project.</p>

<p>The status mappings are the same as the kanban described above. What’s different is that the issue must also have been moved to the board in the backlog view. It’s easy to tell in the UI if it’s been moved, but that information <strong>is not exposed in the API</strong>.</p>

<p>When you drag the issue upwards in the UI, we do get a <code class="language-plaintext highlighter-rouge">Ranked higher</code> entry put into the history, but that does not tell us if it was moved out of the backlog to the board or just higher in the backlog.</p>

<p>So how can we tell if it’s visible? We can’t.</p>

<p>In a team managed project with sprints not enabled, there is no way to tell if the issue had been visible. The best we can do is call the API at the top to see if it’s currently visible.</p>

<p>This is unfortunately not too surprising. Team-managed projects seem to consistently be an afterthought, and that’s one of the reasons I suggest that people avoid them.</p>

<hr />

<div class="related-posts">
  <p>Other articles about the Jira API:</p>
  <ul>
    <li><a href="/2026/01/29/jira-api-sprints/">Sprints</a></li>
    <li><a href="/2024/04/17/jira-api-board-details/">Board details</a></li>
    <li><a href="/2024/04/12/jira-api-statuses/">Statuses</a></li>
    <li><a href="/2024/04/09/jira-issue-history/">Issue history</a></li>
    <li><a href="/2024/04/07/jira-api-intro-authentication/">Intro and authentication</a></li>
  </ul>
</div>

<p>See also the <a href="https://jirametrics.org">JiraMetrics</a> tool, which is the reason I’ve had to learn the idiosyncrasies of the Jira API. If you just want access to the data then let JiraMetrics do it for you.</p>]]></content><author><name>Mike Bowler</name></author><category term="agiletechnicalexcellence" /><category term="JiraApi" /><summary type="html"><![CDATA[When we see an item aging unnecessarily in the data, one of the first questions I ask is “is the issue even visible on the board?” If it isn’t then I think we immediately understand why we’re ignoring it. “Out of sight, out of mind” is a very real thing.]]></summary></entry><entry><title type="html">Poor code and the Reticular Activating System (RAS)</title><link href="https://blog.mikebowler.ca/2026/04/02/poor-code-and-the-ras/" rel="alternate" type="text/html" title="Poor code and the Reticular Activating System (RAS)" /><published>2026-04-02T00:00:00-07:00</published><updated>2026-04-02T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/04/02/poor-code-and-the-ras</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/04/02/poor-code-and-the-ras/"><![CDATA[<p>My last post on refactoring generated a lot of conversation so lets look at a different aspect of that.</p>

<p>When I teach refactoring, one of the exercises I use is a <a href="https://github.com/emilybache/Tennis-Refactoring-Kata">kata for scoring a tennis game</a>. I give the attendees some working code with reasonably good tests and the instructions to refactor the code to make it better. I tell them up front that the goal is improving the code, not just moving things around, and that I’ll be asking them during the debrief how they made that code better.</p>

<p>Even though the code isn’t very large, there are enough problems with it that you could spend multiple hours cleaning it up.</p>

<p>This particular kata illustrates so many teaching points but there’s one in particular that I want to talk about today.</p>

<p>I’ll split the group into pairs and have them work on the code-base with their pair. Inevitably at least one pair, and sometimes the whole group, will stop about ten minutes in and say <em>“there’s nothing else to fix so we’re done”</em>.</p>

<p>They made a couple of superficial changes and declared that everything left was great. Why is this?</p>

<p>It would be easy to say that these people are lazy or unmotivated and yet that’s rarely true. The real problem is that just don’t see what was right in front of them.</p>

<p>Our brains receive billions of bits of information every second, and our conscious minds are able to understand almost none of that. Research shows that an average person can hold 5-9 (often described as 7±2) chunks of information in our working memory at any time. Only the tiniest bit of that information that we receive every second actually makes it to our conscious awareness.</p>

<p>The part of our brain that decides which bits are important enough to bring to conscious awareness is called the Reticular Activating System (RAS) and it has some fairly simple rules that it follows, that revolve around survival, personal relevance and beliefs, your goals and intentions, and various emotional cues.</p>

<p>The key bit here is that the RAS re-tunes itself constantly based on what you tell it is important.</p>

<p>Have you ever found yourself looking for a new car and when you select one, now you start seeing cars like that one everywhere you go? That is your RAS tuning itself for that particular make of car. Those cars were always present but you didn’t see them until the RAS decided that they were important.</p>

<p>How is this relevant to the original point of people not seeing poor quality code? It’s because the people who aren’t seeing the problems in the code, have never trained their RAS to look for problems in the code, and so they honestly don’t see them. <em>“The code all looks great to me”</em>.</p>

<p>This is why we continue to propagate poor code - because we can’t fix what we can’t see.</p>

<p>As a quick aside, you may be thinking that AI tooling will solve this because it will write better code. AI is a fantastic amplifier - if you’re already writing great code, it will help you write lots more of that. But if you’re writing lots of poor quality code, it’s going to help you do that really fast too. And you won’t be able to correct the AI if you can’t see the problems with the code that it’s generating.</p>

<p>So how do we train our RAS to identify that poor code? The real answer is repetition. We need to spend time looking for problems in the code. Perhaps we’re doing katas to actually improve that code or perhaps we’re doing things like Code Smell Bingo where we make a game out of identifying problems. We need to train our brains to recognize problems so that our RAS starts to help us rather than hiding the problems. Doing that requires repetition.</p>

<p>Can we train our RAS without doing katas? Certainly, we could focus on that through more disciplined code review. That’s just going to take a lot longer, particularly if we’re doing individual and asynchronous pull request reviews, rather than actually talking through the code as a group. Then in the meantime, we’re continuing to add poor quality code to the system.</p>

<p>Want to help your teams improve their ability to find and fix problems in the code? <a href="https://www.mikebowler.ca">Let’s talk</a>. I’ve been doing this for decades now.</p>

<p>See also: This article on how we often <a href="/2024/08/05/no-blockers/">don’t see blockers</a> which can be caused by exactly the same problem.</p>]]></content><author><name>Mike Bowler</name></author><category term="agiletechnicalexcellence unconsciousagile" /><summary type="html"><![CDATA[My last post on refactoring generated a lot of conversation so lets look at a different aspect of that.]]></summary></entry><entry><title type="html">Deliberate practice</title><link href="https://blog.mikebowler.ca/2026/03/28/deliberate-practice/" rel="alternate" type="text/html" title="Deliberate practice" /><published>2026-03-28T00:00:00-07:00</published><updated>2026-03-28T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/03/28/deliberate-practice</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/03/28/deliberate-practice/"><![CDATA[<p>I frequently give the advice to developers that we should always be leaving the code cleaner than when we arrived. That we should be refactoring aggressively to ensure the the code is in good shape. This usually brings people out who violently disagree with this and argue that we should never refactor without permission or that we should only touch the smallest amount of code to satisfy the new feature, no matter how ugly the system is.</p>

<p>The benefits to keeping the code clean should be obvious, so why do we see this reaction so frequently?</p>

<p>There are several reasons, including a misunderstanding of what refactoring even means<sup id="fnref:definition"><a href="#fn:definition" class="footnote" rel="footnote" role="doc-noteref">1</a></sup>. One I’m going to talk about now is that these these people often don’t spend time improving their skill in a safe-to-fail environment. They only ever work in critical production systems where mistakes have consequences.</p>

<p>How do we get better at anything? By doing more of it. If we want to be able to make safe refactoring to keep the code clean, we need to do lots of it. The more practice, the better we’ll get. Except we won’t get that practice if we don’t have a safe-to-fail environment to practice in.</p>

<p>This is where coding katas come in, or coding dojos. Times and places where we can do deliberate practice to hone our craft. Safe-to-fail environments where we can safely learn from our mistakes and improve our skill.</p>

<p>So now the question is why do so many developers not do coding katas? Why do they not do deliberate practice, to hone their craft?</p>

<p>If we feel that we can’t safely refactor the code then we should ask why we never took the time to develop that skill.</p>

<p>If you’d like to be doing deliberate practice but aren’t sure where to start then <a href="https://www.mikebowler.ca">let’s talk</a>. I teach classes where we do this, and facilitate sessions on it.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:definition">
      <p>Refactoring is very simply the act of changing the code without changing the behaviour. Renaming a variable to make it more meaningful is refactoring. Fixing a bug is not, as that changes behaviour. <a href="#fnref:definition" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Mike Bowler</name></author><category term="agiletechnicalexcellence" /><summary type="html"><![CDATA[I frequently give the advice to developers that we should always be leaving the code cleaner than when we arrived. That we should be refactoring aggressively to ensure the the code is in good shape. This usually brings people out who violently disagree with this and argue that we should never refactor without permission or that we should only touch the smallest amount of code to satisfy the new feature, no matter how ugly the system is.]]></summary></entry><entry><title type="html">Cumulative flow diagrams (CFD)</title><link href="https://blog.mikebowler.ca/2026/03/27/cumulative-flow-diagram/" rel="alternate" type="text/html" title="Cumulative flow diagrams (CFD)" /><published>2026-03-27T00:00:00-07:00</published><updated>2026-03-27T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/03/27/cumulative-flow-diagram</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/03/27/cumulative-flow-diagram/"><![CDATA[<p>For years, I’ve been watching teams show off cumulative flow diagrams as an indication of their progress. Everyone nods their heads and pretends that they understand what they’re looking at, thinking that it must be obvious to everyone else. Except it isn’t.</p>

<p>It’s a great chart, packed with useful information, but its only helpful if we know how to read it and most people don’t. I deliberately put off adding a cumulative flow diagram to <a href="https://jirametrics.org">JiraMetrics</a> for years, for this exact reason. [Spoiler: it’s there now]</p>

<p>Then to make it worse, there are many poor implementations of CFD’s (ie Jira) that inaccurately render the diagram so even if you do know how to read it, the information is wrong.</p>

<h2 id="the-fundamentals">The fundamentals</h2>

<p>Let’s start with the fundamentals. What is it graphing in the first place?</p>

<p>We’re showing how many items were in each workflow state (typically columns on a board) at any given time. Ignore the crosshatching for the moment - that’s a subtlety that not all CFD’s will show.</p>

<p>In this board below, we can see that there are five workflow states ranging in order from Ready to Done.</p>

<p><img src="https://files.mikebowler.ca/images/cfd-basic.png" width="1854" height="466" /></p>

<p>We can see that the Done section is steadily growing, which is good because it shows that we’re actually completing work. The slope of the line tells us how fast we’re completing things.</p>

<p>The thickness of each of the bands above Done tell us where the work was piling up. We can see, for example, that at the beginning, we had far more items Ready than we had in active development and that indicates that we’re planning further ahead than perhaps we need to. This same team later reduced that Ready band, showing that they were beginning to operate more in a just-in-time fashion.</p>

<p>Is that necessarily better? No, the data tells us what’s happening but not why. It’s generally better that we have a smaller Ready band, but that isn’t always going to be true. The CFD provides no judgement of what’s happening, only visibility.</p>

<h2 id="arrival-and-departure-rates">Arrival and departure rates</h2>

<p>The CFD can show us the arrival and departure rates as seen by the red and green dashed lines that move from bottom left to top right.</p>

<p><img src="https://files.mikebowler.ca/images/cfd-arrival-departure-lines.png" width="1854" height="466" /></p>

<p>The arrival rate and departure rate lines tell us respectively the rate at which work is arriving in the system and the rate at which it’s leaving. If the two lines are parallel then we have a stable system. Things are leaving at the same rate as they arrive.</p>

<p>If the lines are diverging then we likely have a problem. We’re taking on more and more work and as our Work In Progress (WIP) increases, we’re going to get worse in almost every measurable way.</p>

<p>If the lines are converging then we are lowering our WIP and are likely getting better at everything. Again, the CFD provides no judgement. The lines tell us what is happening but not why.</p>

<h2 id="getting-into-littles-law">Getting into Little’s Law</h2>

<p>The three key flow metrics of WIP, Cycle time, and Throughput have a clear relationship as defined in this formula that makes up Little’s Law.</p>

<p style="border: 1px solid gray; padding: 0.5em;" title="Little's Law">
<math display="block">
  <mn>Average Cycle Time</mn>
  <mo>=</mo>
  <mfrac>
    <mrow><mn>Average WIP</mn></mrow>
    <mrow><mn>Average Throughput</mn></mrow>
  </mfrac>
</math>
</p>

<p>We can see this relationship visually in the CFD as shown by the black triangle in the diagram below.</p>
<ul>
  <li>For any point in time, the total <em>WIP</em> is the distance from the top of the highest band to the top of the lowest band (usually “done”).</li>
  <li>From the top of that line, if we draw another line horizontally to the right until it crosses the top of the bottom band then this line measures the <em>approximate average cycle time</em>. Why approximate? We’ll come back to that.</li>
  <li>Then if we complete the triangle by drawing a line from the bottom of the WIP line to the far right of the cycle time line, we get the <em>average throughput</em>.</li>
</ul>

<p><img src="https://files.mikebowler.ca/images/cfd-flow-triangle.png" width="1854" height="466" /></p>

<p>If you’re watching closely, you’ll have already noticed that the triangle isn’t exactly Little’s Law. The law is a relationship of averages of all three and the triangle has absolute WIP as one of the sides. They’re not exactly the same and yet the triangle is still a helpful indicator.</p>

<p>Also note that Little’s law has <a href="/2021/09/12/improving_predictability/">four key assumptions</a> that must be true for the relationship to hold.</p>

<h2 id="flow-debt">Flow debt</h2>

<p>I said we’d come back to the <em>approximate</em> average cycle time that is the top line of the triangle. If we were processing all the work in a perfect first-in first-out order, the assumption is that this would be <em>exactly</em> the average cycle time. Unfortunately, that doesn’t happen with any team that I’ve ever seen. We reorder the work. We do one thing earlier than another because it’s easier or some resource is available now that won’t be available later. Sometimes we give preference to starting new work over finishing work already started, and every time we do that, we interfere with the steady flow of the system. We introduce <em>flow debt</em> and that flow debt causes the calculation to be ever so slightly off.</p>

<h2 id="the-cross-hatching">The cross hatching</h2>

<p>Let’s come back to the cross hatching, and at the same time to why the Jira CFD is broken. Note that the cross hatching is something specific to <a href="https://jirametrics.org">JiraMetrics</a> and is not part of a standard CFD.</p>

<p>A Cumulative Flow Diagram by it’s very definition is cumulative; it can only go up. Yet, the Jira CFD sometimes goes down. What’s happening there?</p>

<p>Jira’s approach seems to be to count WIP in each column at any point in time and graph that. It sounds like a reasonable approach on the surface, but it doesn’t take into account that tickets are allowed to move backwards on the board. When a ticket moves backwards, their implementation now shows the “cumulative” flow going down.</p>

<p>To draw the CFD properly, we can’t allow the lines to drop down, and yet we have to accept the fact that people are still going to move tickets backwards and make a mess of the data. That’s where the cross hatching comes in. If the fill colour for that part of the board is cross hatched, it means that we had to fudge the data to account for people doing things they shouldn’t have done.</p>

<h2 id="conclusion">Conclusion</h2>

<p>The CFD is a powerful tool, packed with useful information, and its worth learning how to read. Just be aware that if you show it in a presentation, you’re likely to lose most of your audience.</p>

<p>With all these things wrong with it, why am I explaining this one in so much depth? Because it’s the one chart that people keep pulling out, and so it’s worth understanding.</p>

<h2 id="see-also">See also:</h2>
<ul>
  <li>For a more in depth look at flow metrics, see our <a href="https://funnel.gargoylesoftware.com/flow-metrics-basics">Flow Metrics Basics course</a>.</li>
  <li>The <a href="https://jirametrics.org">JiraMetrics</a> tool and specifically the CFD that it generates. All the images in this article came from that.</li>
  <li>The <a href="/2021/09/12/improving_predictability/">four key assumptions</a> for Little’s Law</li>
</ul>]]></content><author><name>Mike Bowler</name></author><category term="metrics" /><category term="Flow" /><summary type="html"><![CDATA[For years, I’ve been watching teams show off cumulative flow diagrams as an indication of their progress. Everyone nods their heads and pretends that they understand what they’re looking at, thinking that it must be obvious to everyone else. Except it isn’t.]]></summary></entry><entry><title type="html">Debunking Monte Carlo myths</title><link href="https://blog.mikebowler.ca/2026/03/23/debunking-monte-carlo-myths/" rel="alternate" type="text/html" title="Debunking Monte Carlo myths" /><published>2026-03-23T00:00:00-07:00</published><updated>2026-03-23T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/03/23/debunking-monte-carlo-myths</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/03/23/debunking-monte-carlo-myths/"><![CDATA[<p>This started as a question on reddit about “if you don’t use Monte Carlo for forecasting, why don’t you”, and it uncovered all kinds of incorrect assumptions about what it is and why you’d use it. We unpack some of these here.</p>

<div class="responsive-embed responsive-embed-16by9">
  <iframe src="https://www.youtube.com/embed/9HpPH5TNjGQ?si=EDabkoTnRXagEE5f" frameborder="0" allowfullscreen=""></iframe>
</div>

<p>See also: <a href="/2026/02/27/why-people-dont-use-monte-carlo/">Why people don’t use Monte Carlo</a> from a few weeks ago.</p>]]></content><author><name>Mike Bowler</name></author><category term="improvingflow" /><category term="Forecasting" /><summary type="html"><![CDATA[This started as a question on reddit about “if you don’t use Monte Carlo for forecasting, why don’t you”, and it uncovered all kinds of incorrect assumptions about what it is and why you’d use it. We unpack some of these here.]]></summary></entry><entry><title type="html">Quick tips for demos</title><link href="https://blog.mikebowler.ca/2026/03/18/tips-for-demos/" rel="alternate" type="text/html" title="Quick tips for demos" /><published>2026-03-18T00:00:00-07:00</published><updated>2026-03-18T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/03/18/tips-for-demos</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/03/18/tips-for-demos/"><![CDATA[<p>I’ve seen a lot of bad team demos over the years. Here are two fast tips to improve those.</p>

<ol>
  <li>
    <p>Only talk about things that are finished. If it’s half done, it’s not ready for a demo.</p>
  </li>
  <li>
    <p>Ony talk about the value delivered, not how you got here. The audience doesn’t care that you were busy. They care about the things that they can now do that they couldn’t do before. They care about things that used to annoy them and don’t anymore.</p>
  </li>
</ol>

<p>If you’re an amazing storyteller then you can probably break both these rules and still have a riveting demo. Most people can’t do that. Stick to these two points and your demo will improve right away.</p>

<p>The first question I always get is “what if we don’t have anything that’s finished or anything that’s valuable?” Cancel the demo. You aren’t ready, and you’d just be wasting everyone’s time.</p>

<p>If you want a third tip, it’s this…</p>

<ol start="3">
  <li>Show actual working product, not a slideshow. Nobody wants to see a slideshow.</li>
</ol>]]></content><author><name>Mike Bowler</name></author><category term="improvingflow" /><summary type="html"><![CDATA[I’ve seen a lot of bad team demos over the years. Here are two fast tips to improve those.]]></summary></entry><entry><title type="html">Imprints in the ground</title><link href="https://blog.mikebowler.ca/2026/03/16/imprints-in-the-ground/" rel="alternate" type="text/html" title="Imprints in the ground" /><published>2026-03-16T00:00:00-07:00</published><updated>2026-03-16T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/03/16/imprints-in-the-ground</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/03/16/imprints-in-the-ground/"><![CDATA[<p>After a forest fire has passed, some trees will be left standing but scorched from the fire. Others, however, will have disappeared entirely. Sometimes the trunk and then the roots will continue to smolder until there is nothing left but ash, and then with some rain, even the ash will disappear.</p>

<p>This leaves us with a hole in the ground, in the shape of a tree. Tunnels where the roots used to be but with no obvious reason to be present. If you hadn’t known that a fire had come through, you wouldn’t understand why this hole was there or what the tunnels were for.</p>

<p>This particular picture was taken a year after a forest fire had raged through the Kelowna area, where I live. All that’s left is the hole, although you can see that nature is returning and that some flowers are now growing where the tree used to be.</p>

<p><img src="https://files.mikebowler.ca/images/tree_after_the_fire.png" width="800" height="548" /></p>

<p>Organizations leave the same kind of imprints. When a process, a system, or a person is removed, the shape of what was there often remains as review steps that nobody questions, signoffs that slow everything down, and manual steps that everyone agrees are unnecessary but nobody is willing to automate.</p>

<p>The most common cause I’ve seen is some kind of production outage. Something goes wrong, people panic, and a gate gets added. A mandatory sign-off. A required review. A checklist before deployment. These gates are designed to prevent <em>that specific thing</em> from ever happening again, and in the immediate aftermath they make good emotional sense (although often not logical sense).</p>

<p>The problem is that they’re rarely revisited. The incident fades from memory, the people involved move on, and the gate remains, and nobody remembers why.</p>

<p>Sometimes the gate was never really about the risk at all. It was about a specific person who got burned, or who got yelled at by <em>their</em> boss. The process existed, in part, to protect them. When they leave, the emotional logic of the process leaves with them but the hole remains.</p>

<p>I was once in a meeting of senior people at a bank, discussing whether physical signatures on paper forms could be replaced with electronic ones. The legal team had already weighed in: electronic signatures provided just as much legal protection as the physical ones, and yet nobody in the organization was willing to sign off on dropping the physical signature requirement. There was too much personal risk for the person who would make that decision.</p>

<p>If you remove the requirement and nothing goes wrong, nobody notices. However, if you remove it and something goes wrong, you are now the person who removed the safeguard. The fact that the safeguard wasn’t actually providing any protection is irrelevant to your career. So the rational move for each individual person is to leave it in place; even when everyone in the room agrees it serves no purpose.</p>

<p>This is how imprints persist.</p>

<p>If you’re experiencing unexplained friction in your organization, steps that feel like they shouldn’t be there, approvals that nobody can justify, processes that seem to exist for their own sake, it’s worth asking what used to be there. There’s usually a hole in the ground. Sometimes there’s a tree still smoldering. And occasionally, if you look carefully enough, you can find someone who remembers the fire.</p>

<p>If you’re in a position to remove these imprints, the good news is that in my experience it rarely backfires. The processes are usually not doing what people think they’re doing. The harder problem is getting anyone to accept the personal risk of being the one who removed the safeguard. That often requires someone with enough organizational authority to absorb the risk, or enough credibility to make the argument that the risk was never real to begin with.</p>

<p>The flowers in that photograph are growing where the tree used to be. Nature isn’t sentimental about the hole, and we shouldn’t be either.</p>]]></content><author><name>Mike Bowler</name></author><category term="improvingflow" /><summary type="html"><![CDATA[After a forest fire has passed, some trees will be left standing but scorched from the fire. Others, however, will have disappeared entirely. Sometimes the trunk and then the roots will continue to smolder until there is nothing left but ash, and then with some rain, even the ash will disappear.]]></summary></entry><entry><title type="html">When “make it visible” is the wrong approach</title><link href="https://blog.mikebowler.ca/2026/03/15/when-make-it-visible-is-the-wrong-approach/" rel="alternate" type="text/html" title="When “make it visible” is the wrong approach" /><published>2026-03-15T00:00:00-07:00</published><updated>2026-03-15T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/03/15/when-make-it-visible-is-the-wrong-approach</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/03/15/when-make-it-visible-is-the-wrong-approach/"><![CDATA[<p>My general approach to fixing almost any organizational problem starts with <em>“make it visible”</em>. Make the problem visible enough and sometimes other people will step in and fix it without any effort on my part.</p>

<p>There is one big exception to this approach however, and it just came up in a conversation.</p>

<p>That’s when we’re trying to fix a morale problem. Many companies will start by trying to visualize <em>“team happiness”</em> with something like a Niko-Niko calendar, and this can backfire spectacularly.</p>

<p>First, the companies that try to track happiness/morale, already know they have a problem or they wouldn’t have asked for this. Second, when the results come in and show that teams are not happy, management rarely does anything positive to address that. Why do I say that? Because the companies that already have a good plan to address morale/happiness, don’t start by asking people to quantify how they feel.</p>

<p>So now we’ve made it really visible that there’s a morale problem, and that we’re not willing to do anything about it, so morale drops even further, which gets even lower scores, which we again do nothing about.. and it spirals downwards.</p>

<p>So now when I hear a company say they want to start tracking happiness, I ask them what specific actions they’ll take when the results show that the teams are not happy. If they don’t have a solid plan already, I advise them not to track it at all. If you’re not prepared to fix it, don’t make it visible. That’s just going to make it worse.</p>]]></content><author><name>Mike Bowler</name></author><category term="unconsciousagile" /><summary type="html"><![CDATA[My general approach to fixing almost any organizational problem starts with “make it visible”. Make the problem visible enough and sometimes other people will step in and fix it without any effort on my part.]]></summary></entry><entry><title type="html">Delivery pressure</title><link href="https://blog.mikebowler.ca/2026/03/09/delivery-pressure/" rel="alternate" type="text/html" title="Delivery pressure" /><published>2026-03-09T00:00:00-07:00</published><updated>2026-03-09T00:00:00-07:00</updated><id>https://blog.mikebowler.ca/2026/03/09/delivery-pressure</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/03/09/delivery-pressure/"><![CDATA[<p>I once engaged with a team that had just finished the development of a new service and were blocked, waiting for legal approval, before they could turn it on. They effectively had nothing to do and so management thought this was a good time to bring some coaches in.</p>

<p>We didn’t know how long we’d have before the approval arrived so we started with a bit of training on technical practices and then started working all together (<a href="/2023/04/22/ensemble-programming/">ensemble work</a>) on reviewing and improving their existing code. We refactored the code to make it cleaner and more maintainable, and improved the automated testing. We optimized their build pipeline and got them ready for continuous delivery (CD), something they hadn’t previously considered.</p>

<p>When the legal approval came along a few weeks later, this codebase was already in far better shape than when we’d arrived. The code was cleaner, there were fewer bugs, and all the team members had a better shared understanding of everything.</p>

<p>Additionally, this new service was released on a working CD pipeline, releasing to production on every commit.</p>

<p>How was this all possible? The most significant reason is that for the first time, they had no delivery pressure. Nothing was splitting their attention twenty different ways. Nobody was insisting that they work on multiple things at once, or watching to <a href="/2023/05/20/busyness/">make sure they were busy</a>.</p>

<p>Their only goal was improving what they already had. They had time to focus on the quality of the code. They had time to optimize their pipeline. They had time to learn new skills that they didn’t already have.</p>

<p>And then they delivered something amazing.</p>

<p>The most frequent objection that I get to new improvement activities is <em>“delivery pressure”</em>. We’re too busy to do that now. The problem, of course, is that no matter what we might tell ourselves, that pressure is never going away. We won’t have time to improve unless we make time.</p>

<p>If we don’t improve then we’ll continue to deliver at the same rate that we were delivering before. If we do improve, we’re likely to deliver much faster than that. There is a cost to not improving, and it’s one we often disregard.</p>

<p>If that team at the beginning hadn’t taken a few weeks to fix their system then they’d still be responding to quality issues the way they always had. They’d still be manually deploying the way they always had. They’d be just as busy, and as ineffective as they always had been.</p>

<p>They were lucky. A legal complication had given them an amazing opportunity to improve and they did. Other teams aren’t as fortunate and don’t have that slack time handed to them.</p>

<p>If we want to improve, we have to make the time for that, regardless of how much delivery pressure we might feel.</p>

<p>See also:</p>
<ul>
  <li>Tom DeMarco’s classic book <a href="https://amzn.to/4spnn6O">Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency</a></li>
  <li><a href="/2025/05/01/playing-the-long-game/">Playing the long game</a></li>
</ul>]]></content><author><name>Mike Bowler</name></author><category term="improvingflow" /><category term="Flow" /><category term="EnsembleProgramming" /><category term="Improvement" /><summary type="html"><![CDATA[I once engaged with a team that had just finished the development of a new service and were blocked, waiting for legal approval, before they could turn it on. They effectively had nothing to do and so management thought this was a good time to bring some coaches in.]]></summary></entry><entry><title type="html">Why people don’t use Monte Carlo</title><link href="https://blog.mikebowler.ca/2026/02/27/why-people-dont-use-monte-carlo/" rel="alternate" type="text/html" title="Why people don’t use Monte Carlo" /><published>2026-02-27T00:00:00-08:00</published><updated>2026-02-27T00:00:00-08:00</updated><id>https://blog.mikebowler.ca/2026/02/27/why-people-dont-use-monte-carlo</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/02/27/why-people-dont-use-monte-carlo/"><![CDATA[<p>A few weeks ago there was a question on Reddit, asking people who don’t use Monte Carlo forecasts, why they don’t.</p>

<p>I expected to see a lot of answers along the lines of:</p>
<ul>
  <li>I don’t know what that is or how it would help me.</li>
  <li>I know how to use the Monte Carlo but don’t understand the math underneath it and therefore can’t trust the answers. [<a href="/2024/06/05/monte-carlo/">How it works</a>]</li>
</ul>

<p>While I did see some of those, the answers were mostly full of people who very confidently said they understood Monte Carlo and then gave reasons for not using it, that clearly demonstrated that they don’t, in fact, know how it works.</p>

<p><a href="https://www.prokanban.org">ProKanban</a> decided to debunk some of these misconceptions so earlier this week <a href="https://www.linkedin.com/in/colleen-johnson/">Colleen Johnson</a>, <a href="https://www.linkedin.com/in/huserben/">Benjamin Huser-Berta</a>, and I recorded a session together. <a href="/2026/03/23/debunking-monte-carlo-myths/">Watch it here</a></p>

<p>First of all, let’s define what the problem is, that we would use a Monte Carlo simulation for. Monte Carlo itself is a general statistical tool that can be used for a variety of purposes. In this case, we’re using it to determine one of two things:</p>
<ol>
  <li>Given a number of work items, how long will it take to complete?</li>
  <li>Given a defined end date, how many work items can we complete between now and then?</li>
</ol>

<p>The Monte Carlo will use historical data to make a <a href="/2024/06/02/probabilistic-forecasting/">probabilistic forecast</a> about the future. The fundamental assumption here is that the future is likely to look like the past. If we’re starting something now that is completely unlike what we’ve done in the past then that assumption will not be valid.</p>

<p>On the other hand, if we’ve been doing software development over the last three months and we expect to continue doing software development for the next three then the assumption holds and this can give us a highly accurate forecast.</p>

<p>Now what’s this probabilistic part? The answer that a Monte Carlo will give us is made up of a percentage and a range. <em>“There is an 85% probability that we’ll be done on or before October 1”</em>. The opposite would be a deterministic answer like <em>“We’ll be done on October 1 at 3:05pm”</em>. While <a href="/2026/01/06/craving-certainty-probabilistic-forecasts/">our brains prefer a deterministic answer</a>, the more accurate one is probabilistic.</p>

<h2 id="back-to-the-reddit-posts">Back to the Reddit posts</h2>

<h3 id="too-much-work">Too much work</h3>

<p>A couple of posts stated that doing a Monte Carlo was too much work compared to estimation, and that you wouldn’t learn anything more than the estimation would give you.</p>

<p>First of all, nobody is ever going to calculate a Monte Carlo by hand. You’re doing to use a tool for it. If you’re using a built-in tool like ActionableAgile then it’s a small number of minutes to get the first results.</p>

<p>Even if you’re using a spreadsheet, like the one that <a href="https://www.linkedin.com/in/troymagennis/">Troy Magennis</a> gives away for free, it might be half an hour to get the first forecast complete, as you’re having to copy data into the spreadsheet, and then a small number of minutes for each subsequent one.</p>

<p>Unless your idea of estimating is sticking a finger in the air to see which way the wind is moving, the Monte Carlo will always be faster.</p>

<h3 id="too-much-data-required">Too much data required</h3>

<p>There were a number of posts that incorrectly claimed that lots of different data points were required as input. Things like <em>“average time”</em>, <em>“standard deviation”</em>, and <em>“correlation between each task”</em>.</p>

<p>In fact, we need none of those. All we need is historical throughput. How many items did we complete last week? How about the week before that, and the one before that. All we need is throughput, although we do want enough data points. With eleven data points we have a fairly accurate forecast, although I usually aim for 15-20 data points.</p>

<h3 id="shifting-priorities">Shifting priorities</h3>

<p>One person said <em>“priorities shift way too fast for the math to stay relevant”</em>, which sort of misses the point of what any kind of forecast or estimate gives you. The forecast tells you how many items you can complete, not which specific ones you will do. Once you know how many, you still need to prioritize effectively.</p>

<h3 id="not-culturally-accepted">Not culturally accepted</h3>

<p>A couple of people brought up the perception that a probabilistic forecast may not be accepted by management as they want that deterministic answer instead, and that’s a valid point.</p>

<p>The probabilistic answer will be more accurate than the estimate, and less work to prepare, but if the culture in your company isn’t willing to accept it then you’ll need to fall back to the less accurate answer instead.</p>

<h2 id="conclusion">Conclusion</h2>

<p>What I took away from this exercise is that there is an incredible amount of misinformation around Monte Carlo and probabilistic forecasting in general. It’s a lot easier than most people seem to think, requires less data than people assume, and is a lot more accurate than traditional estimates.</p>

<p>Is it always the right tool? Of course not, there is no tool that works in 100% of the cases. Monte Carlo does assume that we have a relatively stable system and that what’s happened in the past is a reasonable predictor of the future. If either of those isn’t true then it’s the wrong tool.</p>

<p>If we don’t have any of that historical data, then there are still other probabilistic approaches that might work however, like <a href="/2024/04/10/forecasting-projects/">reference class forecasting</a>.</p>]]></content><author><name>Mike Bowler</name></author><category term="[&quot;metrics&quot;]" /><category term="Forecasting" /><summary type="html"><![CDATA[A few weeks ago there was a question on Reddit, asking people who don’t use Monte Carlo forecasts, why they don’t.]]></summary></entry><entry><title type="html">Controlling emotions</title><link href="https://blog.mikebowler.ca/2026/02/21/controlling-emotions/" rel="alternate" type="text/html" title="Controlling emotions" /><published>2026-02-21T00:00:00-08:00</published><updated>2026-02-21T00:00:00-08:00</updated><id>https://blog.mikebowler.ca/2026/02/21/controlling-emotions</id><content type="html" xml:base="https://blog.mikebowler.ca/2026/02/21/controlling-emotions/"><![CDATA[<p>Brain scientist Dr. Jill Bolte Taylor talks about the 90 second rule for emotions. She describes the chemical release of an emotion only lasting 90 seconds. Effectively that means that if you’re feeling sad or angry, you’re only feeling that for 90 seconds at a time.</p>

<p>I’m sure you’re thinking <em>“but I can be angry or sad for hours or sometimes days at a time”</em>, and what’s happening in those cases is that you’re continually retriggering those same emotions over and over again. It’s not the same chemical release over a long time, it’s a continual retriggering of those chemical releases.</p>

<p>What does that mean for practical purposes? It means that if we can interrupt the patterns that we’re following, we’ve got at most another 90 seconds to put up with those negative emotions before we start to feel better.</p>

<p>Why do I only mention negative emotions? Because I’m assuming that you have no interest in interrupting happy emotions. Let’s let the happy ones continue to run.</p>

<p>What could that interrupt look like? It could be as simple as the phone ringing and grabbing your attention. It could be movement to shift your state, particularly movement into a different environment such as walking outside. Just standing up and shaking your body can be a powerful interrupt.</p>

<p>For even more powerful interrupts, almost any of the techniques that I show in the <a href="https://www.mikebowler.ca/anxiety-reset">Anxiety Reset</a> will help here. I teach them in the context of anxiety but they’re powerful interruptions and will work in other situations too.</p>

<p>When you’re feeling those negative emotions for long periods of time, you’re just running habitual patterns in your brain, and those patterns can be interrupted.</p>

<p>What’s even better is that the more often we interrupt those patterns, the less we’ll run them. This is just another aspect of Hebb’s law: <em>“Neurons that fire together wire together”</em>. The more we run the same patterns, the stronger they’ll become. The more we interrupt them, the weaker they become.</p>

<p>A related trick is to label emotions when we notice them. The simple act of saying to ourselves <em>“I am feeling angry”</em> or <em>“I am feeling sad”</em> will weaken that effect on us. This technique is called <em>“affect labeling”</em> and is surprisingly effective.</p>

<blockquote>
  <p><em>“Behavioral and neuroimaging studies suggest that merely putting feelings into words can serve as a regulatory strategy”</em> <br />
— Levy-Gigi, E., &amp; Shamay-Tsoory, S. (2022). Affect labeling: The role of timing and intensity. PloS one, 17(12), e0279303.</p>
</blockquote>

<p>The key point here is that if we’re regularly feeling emotions that we don’t want to feel, there are ways to lessen that, and many of them are quite simple to do.</p>

<p>Standard disclaimer: There are no approaches that work for all of the people, all of the time. If what you’re trying isn’t working for you, perhaps you should seek out a professional to find approaches that will work in your context.</p>]]></content><author><name>Mike Bowler</name></author><category term="unconsciousagile" /><summary type="html"><![CDATA[Brain scientist Dr. Jill Bolte Taylor talks about the 90 second rule for emotions. She describes the chemical release of an emotion only lasting 90 seconds. Effectively that means that if you’re feeling sad or angry, you’re only feeling that for 90 seconds at a time.]]></summary></entry></feed>