marcusoft.net - sharing is learningMarcus Hammarberg - my thoughts on lean, agile, kanban, nodejs, nancyfx, koa and other things makes me learn fasterhttp://www.marcusoft.net/
Sat, 17 Feb 2018 14:51:40 +0100Sat, 17 Feb 2018 14:51:40 +0100Jekyll v3.6.2Flow and dependencies<p>I’m talking less and less about agile and even lean, these days. Instead, the poison I’m selling now is <strong>flow</strong>. In all honesty, it might be better to put it like this:</p>
<blockquote>
<p>Opening peoples eyes for the benefits focus on flowing work smoother and faster, alleviates discussions about lean and agile later.</p>
</blockquote>
<p>Flow is an eye-opener and shifts your perspective. Things that previously was paramount (ensuring people are not idle, for example) becomes irrelevant or uninteresting. New ways, practices, and innovation quickly spur.</p>
<p>But also new problems occur. One of the most common ones is the fact that flow is severely hurt by tasks that have many dependencies. I think I talk to teams about 4-6 times a week about this.</p>
<p>In this post, I will offer a few thoughts on how to handle this type of situations.</p>
<p><a name="more"></a></p>
<h3 id="you-say-problem---i-say-unrealized-improvement">You say ‘problem’ - I say ‘unrealized improvement’</h3>
<p>First of all - finding something that hinders flow is the reason focusing on flow is awesome. Because that is not a problem we see, it is an unrealize improvement opportunity. If we fix this, we actually improve the flow of the system. We will deliver faster, learn faster and have opportunities to make decisions more frequently (psst - that is called agility).</p>
<p>If you never find things that hinder your flow … then you are working with too many things at the same time. You should lower the number of things going on until some problems occur. This is what WIP (work in process) limits are: a tool for finding improvement opportunities.</p>
<p>Ok - it’s a Good Thing (TM) - but what is it? What are these dependencies that you are talking about?</p>
<h3 id="an-example-if-you-please">An example, if you please</h3>
<p>Examples are a great way of clarifying thoughts and reasoning (I’ll get back to that soon) so let’s take one.</p>
<p>Imagine a Team A that need some in-house software to do their work. This software is developed by Team B. Someone from Team A needs a change and ask to get a feature change request into the backlog of Team B.</p>
<p>The Product Owner (PO) of Team B is very nice and helpful and adds the ticket. Sadly Team B is bogged down with work and the feature change request gets down-prioritized for some weeks. But after 6 weeks Team B gets to work on it and finish it within two days.</p>
<p>Finish, I said? No - it’s now ready to be tested, what’s known as User Acceptance Testing. This has to be done by someone in Team A, hopefully, the person that ordered the change. Team B puts the ticket in the “Waiting for UAT”-state and … ah, well … waits.</p>
<p>Well, actually they go over to Team A and tells them that the feature change is ready for UAT. Together with 23 other features that are already waiting. Sadly, now Team A is swamped with work. It is that time of the month. So the UAT ticket gets stuck in “Waiting for UAT” for a few weeks. But after that Team A tests and approve the ticket and tell Team B to deploy it.</p>
<p>The feature is deployed and works flawlessly. Everyone is cheering!</p>
<p>Or not really, because Team A says that they always end up waiting for, even important, feature changes forever. Also, they get bothered with a lot of requests to help Team B testing. Always bad timed and often it is hard for them to remember what the feature is about once they get around testing it.</p>
<p>Team B answers “UAT” in unison when asked what their biggest problem is. Because they have a lot of items waiting for Team A in “Waiting for UAT”. They laugh when they relate the record of 46 items waiting in that column. And that time Team A was screaming for more work to be started.</p>
<p>Notice that I simplified the situation a lot now. First of all, these were only two teams that together could move independently. Secondly, there were no problems in the UAT. Nothing needed to be rewritten or changed, in my example. Thirdly anyone from Team A could do the testing and didn’t have to bother someone from Team B with help testing the feature. Most cases I’ve encountered in the wild don’t have this.</p>
<h3 id="what-to-do-what-to-do-what-to-do">What to do? What to do? What to do?</h3>
<p>My friends, this is easy to solve. It will not require new tools or (significant) changes in your processes.</p>
<p>Here are a few things that would significantly improve flow in this situation:</p>
<p>Don’t allow new things into the backlog if there are items waiting to be tested. At the very least don’t start new work unless there’s unfinished work in UAT. Finish that first, or potentially (and likely) throw the work away if it is too old and not relevant. Yes, it happens. I threw away 90 items from the backlog of one team without any complaints</p>
<blockquote>
<p>Stop starting - start finishing</p>
</blockquote>
<p>Just before Team B starts work on the feature request; check in with Team A to see if they are ready to do their part.</p>
<p>​ <strong>Team B:</strong> “Hey, Team A people? We are about to start work on feature change request 19293945212123. We need you to do testing a few days. You ready?”</p>
<p>​ <strong>Team A:</strong> “Are you crazy? It’s the end of the month. We cannot possibly test now!”</p>
<p>​ <strong>Team B:</strong> “Ok - great. Then <strong>I will not start this now since that would slow me down</strong>. I can do something else in the meantime. Let me know when you’re ready.”</p>
<blockquote>
<p>Do not start work that you know will be blocked. Ensure flow to the best of your ability</p>
</blockquote>
<p>When Team B start work with the feature sit down with Team A and talk about how this feature will be tested. Potentially come up with ways to speed up and improve quality of the tests - maybe we can automate the test?</p>
<p>If you cannot get that time (“Because Team A is busy all the time and never want to talk to us ever” for example), try this: document your understanding of the feature as a few tests or examples on how it should behave. Like this:</p>
<p>“We have understood it as</p>
<ul>
<li>You will check all values in X and if they are the same as the sum of Y. If so it is correct.</li>
<li>We should never see any negative values in Z</li>
<li>For all the values in A, B, and C - they should be correlated with the end result of the previous months A, B, and Cs”</li>
</ul>
<p>Send this to Team A and do not start work until they agree with your statements. It is simply too risky.</p>
<blockquote>
<p>Never be blocked</p>
<blockquote>
<p>Robert C. Martin, aka “Uncle Bob”</p>
</blockquote>
</blockquote>
<p>You can probably come up with other things that are better suited for your situation. The goal is to let the workflow as smooth and fast as possible. It could mean that not start it too early, or spend waiting/queuing time to ensure that the workflows smoother.</p>
<h3 id="swedish-police-passport-department">Swedish police passport department</h3>
<p>Let me take another, unlikely example that I ran into the other day.</p>
<p>I need to renew my passport and started to check how to go about doing that. It was surprisingly awesome from a flow perspective:</p>
<ul>
<li>I got to book a time slot, a few weeks from now. I got 10:20 as my designated time.</li>
<li>Once there I was instructed to take a queueing number and sit down</li>
<li>
<p>When I sat down, I had further written instructions:</p>
<ul>
<li>Get an identity card ready</li>
<li>Make sure your looks is as you want it</li>
<li>You will be asked to leave fingerprints - get ready</li>
<li>Etc</li>
</ul>
</li>
<li>When it was my turn the whole process took about 4 minutes to complete</li>
<li>I will get notified when my passport was printed</li>
</ul>
<p>I was out of before I knew what happened.</p>
<p>Notice how all the steps in the process above was there to ensure smooth flow;</p>
<ul>
<li>
<p>I and a suitable, limited number of other people got that time slot. Once enough people had booked that time slot it was full. They don’t want 100’s of people at the same time, even though 100’s of people wants to have their passports</p>
</li>
<li>
<p>When I got there, even though I had a time slot, they arranged another buffer of work. In this time I could prepare and they knew how many people they had to <strong>actually</strong> server. Maybe some didn’t come here, maybe some came on the wrong day etc. This ensures a smoother flow for us waiting</p>
</li>
<li>
<p>They prepared me so that I had my things ready when it was my turn to use the “register for passport”-service. Once I was using that limited capacity - they wanted to ensure that quality work was done. Hence they prepared the work (me and my stuff in this case) before I was allowed in.</p>
</li>
</ul>
<p>I was truly impressed to see this focus on flow and the experience was actually quite enjoyable for me as a customer as I felt like water running through the service. Flowing if you like.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Focusing on flow will give you new outlooks on problems. You will see new opportunities to improve flow and speed of execution. Bottlenecks will present themselves in the form of queues and wait time (remember the “Waiting for UAT”-column from our first example).</p>
<p>Resolving these problems is not expensive or hard - it just requires you to work a bit different around the bottleneck to ensure that time spent in that state is not waste.</p>
<p>There’s so much more to learn and read about this that this post is almost embarrassing to me. But I wanted to share some simple learnings that I’ve been teaching the last couple of weeks.</p>
<p>I hope you found them useful too.</p>
Thu, 15 Feb 2018 14:18:08 +0100http://www.marcusoft.net/2018/02/flow-and-dependencies.html
http://www.marcusoft.net/2018/02/flow-and-dependencies.htmlLeanAgileKanbanValues and living them<p>As a consultant, you get to see many, different organizations and look deeply into what makes them tick. This is a great benefit of my job, but at the same time quite hard to find from time to time. The reason for that is that most organizations have very lofty and worthy values but what is lived out is something else.</p>
<p>But I’ve <del>found</del>… who am I kidding … stolen a way that make values more tangible and important in our everyday life. It’s a simple trick that you can start using tomorrow.</p>
<p><a name="more"></a></p>
<p>Regarding these lofty values I mentioned in the intro, you know what I’m talking about, right? The values are words and statements that basically no-one would disagree with:</p>
<ul>
<li>Fun! Have you heard anyone say; <code class="highlighter-rouge">No - I'm not fun. I don't want to be part of that</code></li>
<li>Professional! - <code class="highlighter-rouge">BAH! That's a fad. It will pass</code></li>
<li>Open - <code class="highlighter-rouge">No. No. No! We are closed! How many times do I have to tell you…</code></li>
</ul>
<p>This is easy to make fun of these of course, but there’s a more serious flip side to this. Because these words are written down for a reason, and with some serious after-thought;</p>
<blockquote>
<p>These values paints a picture of the way we want to be or the way we think we are. If we don’t honor these values … we are not we.</p>
</blockquote>
<p>Woah… we want to be us, now don’t we?</p>
<p>The problem is that the values and culture of the company are present if we write it down or not. Writing a few words down a nice wall doesn’t automatically make these values ours. Even if you print it on a paper next to each desk, or have an awesome screensaver with them.</p>
<p>Because the values and culture are created in our interactions with each other. It’s a living thing.</p>
<p>Imagine, if you will, a company that grows (I’m making this up, from 2-3 experiences btw). We start with 4 founders that have an easy time sharing values. It just who we are. We hire people we know and we continue to share values and foster a common culture. We don’t even need to write it down. It’s just how we are.</p>
<p>Even when we are 20 people there’s no problem. Culture governance comes almost automatic. But now we buy another company. A bunch of new values enters. And soon we need a finance department or an IT-department - and they bring their own values.</p>
<p>So we write our values down; Fun! Professional! Open! Well… the problem is that they mean different thing to different people. Do you think IT-people have a different interpretation of “Fun” compared to Finance-people? (&lt;= rhetorical question. Every person has a different take).</p>
<h2 id="what-to-do-then">What to do then?</h2>
<p>Ok, enough with the gloomy; bring a solution to all of this!</p>
<p>Well… just as with most things you want to change in yourself you need to live it. Someone said:</p>
<blockquote>
<p>Be the change you want to see.</p>
</blockquote>
<p>It’s when we start to use the lofty values and motivational phrases in our stories about our behavior that we not only share our understanding of them but also reinforce how they are guiding us to a better tomorrow.</p>
<p>This is a great little mind trick that I picked up from <a href="https://www.davidmarquet.com/">David Marquet’s</a> book <a href="https://www.amazon.com/Turn-Ship-Around-Turning-Followers/dp/1591846404">‘Turn the Ship Around’</a>. It’s awesome - read it now! They started to use their values when they described each other’s behavior.</p>
<p>Let’s try it out. My goal here is to see if the values would help us to spot behavior that aligns with the values or not. After all, that is what the values are for - help us to align with behavior and steer us to a common culture that makes us stronger together.</p>
<p>I have the awesome opportunity to work for <a href="https://www.spotify.com/">Spotify</a> right now. Great place and great values. Let’s have some fun, <a href="https://hrblog.spotify.com/2016/09/02/spotifys-core-values/">using their values</a> to describe some hypothetical behaviors that I’m making up.</p>
<p>Nothing of this has happened in reality. These musings are just my own for this post, I’m just trying out a theory using the awesome values of Spotify as an example. For example, I don’t know an Anna at the company. Disclaimer over. But true.</p>
<h4 id="were-innovative"><strong>We’re innovative!</strong></h4>
<p>The first phrase is absolute key for Spotify and focuses on always thinking innovative. Let’s use it in a sentence:</p>
<blockquote>
<p>Anna was very <strong>innovative</strong> during the hack week last month. Her hack failed but we learned a great deal from her sharing what made it fail. Great work, Anna!</p>
</blockquote>
<blockquote>
<p>Anna - I would never have thought of trying Node as a backend service for our data volumes! Nice <strong>innovation</strong>!</p>
</blockquote>
<p>Yes! That is what we want to see. It works. Let’s <a href="http://www.sustainabletdd.com/2012/03/importance-of-test-failure.html">see it fail too</a></p>
<blockquote>
<p>Marcus helped us being <strong>innovative</strong> yesterday when he shut down 3 of 4 ideas for hacks as ‘not feasible’</p>
</blockquote>
<blockquote>
<p>When Marcus made it very clear that failure is not an option - well I tell ya… that really trigged my <strong>innovation</strong> spirit!</p>
</blockquote>
<p>Well… that’s not innovative. And it shows clearly.</p>
<h4 id="were-collaborative">We’re collaborative!</h4>
<p>One of the things that stand out on day one when you get to the Spotify organization is how much they are helping each other. I’ve <a href="http://www.marcusoft.net/2017/01/kindness.html">blogged about that before</a> without revealing the company name (psst - all Spotify for the good stuff).</p>
<p>Let’s try it:</p>
<blockquote>
<p>Anna, thanks for you <strong>collaborative</strong> spirit yesterday. I heard you went over to the other office and helped team X to set up their data for our common testing, without them asking. Thanks!</p>
</blockquote>
<p>Perfect! Lovely collaborative spirit!</p>
<p>And what about the opposite - would we spot it.</p>
<blockquote>
<p>Great <strong>collaboration</strong> yesterday, Marcus. That you sit in an isolated part of the office for hours upon end really helps us be more than individuals.</p>
</blockquote>
<blockquote>
<p>“I don’t care you do it - just do it. I tell. You do.” Those sentences in the email to all of us really put us into <strong>collaboration</strong> mode, Marcus. Thanks.</p>
</blockquote>
<p>No no no… that is not right. Good. It fails as expected.</p>
<h4 id="were-sincere">We’re sincere!</h4>
<p>Since the collaboration is tight and frequent we need a very clear communication. There cannot be politics, hidden agendas or “being nice and not telling” since that would muddle our interactions.</p>
<p>This is another thing that hits you in the face as you enter Spotify. I’ve been shut down in meetings more times here than in all other clients together. At first, I was offended but then I saw through it and realized that it was for the greater good.</p>
<blockquote>
<p>Anna - thanks for your <strong>sincerity</strong>! I realize that saying that we are going to be late on the important report must have been hard to do. Thank you! Now we know where we are and what we need to do to get out of here</p>
</blockquote>
<p>Let’s see the failing Marcus in action:</p>
<blockquote>
<p>Marcus, great <strong>sincerity</strong> yesterday when you said something in the meeting and then showed what you really meant at the coffee machine for everyone else to hear. That really undermined both me and the importance of the meeting. That’s sincerity, right there!</p>
</blockquote>
<p>or</p>
<blockquote>
<p>The <strong>sincerity</strong> of doing a deal with the company, without telling us, just because you know the founders are great.</p>
</blockquote>
<p>Oh my God - what’s his problem?! Opposite of what we wanted. Let’s leave this and move on.</p>
<h4 id="were-passionate">We’re passionate!</h4>
<p>Here Spotify talks about their passion is the thing that drives them, the makes them bold and wanting to take big bets.</p>
<blockquote>
<p>Anna is so <strong>passionate</strong>. She just lights up when you talk about the content distribution version 3.6. It’s contagious!</p>
</blockquote>
<blockquote>
<p>Thanks Anna for your <strong>passion</strong>! That was a bold bet we took, but you made us all believe in it.</p>
</blockquote>
<p>Yes! Great stuff, Anna! I see many Anna’s across the company and now it starts to make sense what passionate means.</p>
<p>Let’s try the opposite:</p>
<blockquote>
<p>That way that you always brings up the fact that work needs to be done because they have been in the backlog “like forever,” Marcus. That shows your <strong>passion</strong> for our product in a great way.</p>
</blockquote>
<p>Ok - that is not the kind of passion I meant at least.</p>
<h4 id="playful">Playful</h4>
<p>Spotify talks a lot about having fun at work. And they really live up to this in many places and situations! Have you <a href="https://twitter.com/spotifycares">followed their support account on Twitter</a> - they are oozing Playful! There are <a href="https://www.thepoke.co.uk/2017/02/21/spotify-have-made-a-playlist-to-soundtrack-trumps-bizarre-lastnightinsweden-claims/">many other examples from reality</a>, so I’ll just make up one of my own</p>
<blockquote>
<p>Playful was taken to new levels of geeky when Anna formatted the log file in “Happy New Year” using ASCII art for the New Years Eve. You crazy geek, you!</p>
</blockquote>
<p>And Marcus, what is he up to?</p>
<blockquote>
<p>Very <strong>playful</strong> spirit, voting for no decorations in public facing areas. Our professional appearance is more important. True!</p>
</blockquote>
<blockquote>
<p>Yes! Keeping the sound in the office to a minimum is very important. Not sudden burst of music and <strong>playful</strong>ness. Unless it is in the designated areas and times. Good point, Marcus. I’ll add it to the PM and we will circulate it for maximum compliance across the company.</p>
</blockquote>
<p>Well… he is not just following our values now, is he? Is he working for another company? With other values? Or does we just not share the definition of playful?</p>
<h2 id="conclusion">Conclusion</h2>
<p>My simple tip is this:</p>
<blockquote>
<p>Use the values of the company when you describe the behaviour you want to see.</p>
</blockquote>
<p>Do not do the negative thing, the “Marcus”-versions above, at least not in public. Do much more of the positive. Hey - <a href="http://developeronfire.com/podcast/episode-054-woody-zuill-turn-up-the-good">do only that</a>! Positive reinforcement is a powerful tool.</p>
<p>I think that we generally speak in terms of our values too seldom and too little. These values outline who we are - let’s keep that front and center!</p>
Wed, 14 Feb 2018 12:35:40 +0100http://www.marcusoft.net/2018/02/values-and-living-them.html
http://www.marcusoft.net/2018/02/values-and-living-them.htmlAgileLeanKanbanLife of a consultantSummarizing and filtering data with QUERY and a Google Sheet drop-down<p>I had another opportunity to learn a thing or two about Google Sheets and it’s internal functions. Again. <a href="http://www.marcusoft.net/2018/01/create-a-dynamic-updated-chart-in-google-sheets.html">On a similar topic as last time</a>.</p>
<p>This time around I had to summarise the data from 4 different sheets and then let the user filter the data dynamically.</p>
<p>To do this, I had to look up a lot of things, learn a little bit about the <a href="https://support.google.com/docs/answer/3093343?hl=en">QUERY-function</a> and then jump through some hoops. I write this down here so that I don’t have to learn this again. You can read it if you want to.</p>
<p><a name="more"></a></p>
<p>I’ve created a <a href="https://docs.google.com/spreadsheets/d/1h3_WRE2cgLy-8X4gm_DGE6NvYLfl7fbaip_SGVFMv3k/edit?usp=sharing">sheet with some example data</a>, similar but not the same as the data we had. This was also, as <a href="http://www.marcusoft.net/2018/01/create-a-dynamic-updated-chart-in-google-sheets.html">last time</a>, a survey about the state of our office that we needed to summarise for a meeting.</p>
<p>We had asked for input and asked people to classify the data in 4 areas; “Urgent”, “Great stuff”, “Could be improved” and “General questions”. Each of these was listed on a tab each.</p>
<p>As often, when you ask - you get answers. A lot of answers. So we went through the list of comments and added Category to each. For example, if it was about the fridge we added “Kitchen”. Comments about the dustbins were tagged with “Cleaning” etc.</p>
<p>That was great, but now we created another problem. Because all of a sudden a need to see all the comments about the kitchen, regardless of area, arose. That was a bit tricky to do now as each Area had its own sheet.</p>
<p>What I wanted to do was to create a possibility for a user to select a category and see all the comments, urgent things, questions etc. for that category.</p>
<p>Here’s what we going to do:</p>
<ul>
<li>Make a drop-down list with the categories - containing all the unique categories that the users have entered</li>
<li>When the user selects a category, get all the rows from all the sheets and display them</li>
</ul>
<h2 id="making-a-drop-down-list-of-categories">Making a drop-down list of categories</h2>
<p>Making a drop-down list is not that hard, as you basically can just make a data validation of a cell that only allows the user to select the correct values. For example:</p>
<ul>
<li>Click the cell where the drop-down box should be displayed. I have it in <code class="highlighter-rouge">C2</code></li>
<li>Go Data =&gt; Data validation … to open the dialog box to create the data validation</li>
<li>Select the range where the data for the drop-down box is located and enter it in Criteria …</li>
</ul>
<p>However, there’s a problem here because you cannot enter a formula into the Criteria-text box. Nor can you (easily) enter multiple ranges. Remember that we want all the unique values from all the sheets in our workbook.</p>
<p>But you can hack this. I created a new list in Column A of the <a href="https://docs.google.com/spreadsheets/d/1h3_WRE2cgLy-8X4gm_DGE6NvYLfl7fbaip_SGVFMv3k/edit#gid=1544983361">summary sheet</a>, containing all the unique values for Category. This can be accomplished by the following formula:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>=UNIQUE({'Urgent Disaster'!B2:B;'Great things'!B2:B;'Could be improved'!B2:B;'General questions'!B2:B})
</code></pre></div></div>
<p>There are a few moving parts here.</p>
<ul>
<li>First. <code class="highlighter-rouge">UNIQUE</code> is, of course, a formula that picks out the unique values of a range. Nothing strange.</li>
<li>The next part is a bit funky, but using curly brackets like that. But that’s just how you can concatenate many ranges together. They have to be structured the same way for Google Sheet to make any sense of it, but that is most likely what you need too.</li>
</ul>
<p>Fine - now we have the unique values listed in Column A of the <a href="https://docs.google.com/spreadsheets/d/1h3_WRE2cgLy-8X4gm_DGE6NvYLfl7fbaip_SGVFMv3k/edit#gid=1544983361">Summary-sheet</a>. Now it’s easy to set up a drop-down list. Let’s do that again:</p>
<ul>
<li>
<p>Click the cell where the drop-down box should be displayed. I have it in <code class="highlighter-rouge">C2</code></p>
</li>
<li>
<p>Go Data =&gt; Data validation … to open the dialog box to create the data validation</p>
</li>
<li>
<p>Select the range (<code class="highlighter-rouge">A2:A</code>) where the data for the drop-down box is located and enter it in Criteria</p>
</li>
<li>
<p>Click Save</p>
</li>
</ul>
<p>We now have a drop-down list with the unique categories, based on the data the users entered. Next!</p>
<h2 id="summarise-the-data-based-on-the-selection-in-the-category-drop-down">Summarise the data based on the selection in the category drop-down</h2>
<p>In order to get this to work, we are going to use the <a href="https://support.google.com/docs/answer/3093343?hl=en"><code class="highlighter-rouge">QUERY</code>-formula</a>. This is a super powerful formula that allows us to pose complex queries over ranges. It can be quite daunting but don’t worry, I’ll be here to hold your hand. We’ll make it together!</p>
<p>The moving parts of <code class="highlighter-rouge">QUERY</code> are pretty simple, it just needs two things:</p>
<ul>
<li>A range, where the raw data is located. This is all the data in all sheets for us</li>
<li>A query to structure, filter and order the data. This is much like SQL if you ever used this. There’s a <a href="https://developers.google.com/chart/interactive/docs/querylanguage">great description of the query language here.</a></li>
</ul>
<h3 id="make-one-big-range">Make one big range!</h3>
<p>The first part needs a trick, that we already used. We will concatenate all the data using the array concatenation syntax we used before <code class="highlighter-rouge">{Range1;Range2}</code>. Here’s the query that I have:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{'Urgent Disaster'!A:D; 'Great things'!A:D;'Could be improved'!A:D;'General questions'!A:D}
</code></pre></div></div>
<p>Quite simple, make one big range out of <code class="highlighter-rouge">A:D</code> (all rows) in those four sheets.</p>
<h3 id="make-a-query">Make a query</h3>
<p>Great - now we’re going to write the query itself.</p>
<p>Normally we would use the column names in our query. Like this, for example;</p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">A</span> <span class="k">WHERE</span> <span class="n">B</span> <span class="o">&gt;</span> <span class="mi">14</span>
</code></pre></div></div>
<p>(Get all the values from the A column where B is above 14).</p>
<p>Since we have concatenated a few sheets, the concept of column names will not be stable. In one sheet the data we are interested might be located in other columns, right? In our, well-structured workbook it is not, but imagine that the range we made looked like this:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>{'Urgent Disaster'!A:D; 'Great things'!B:E;'Could be improved'!C:F;'General questions'!D:G}
</code></pre></div></div>
<p>The format of the dataset will be something like</p>
<table>
<thead>
<tr>
<th style="text-align: left">Col1</th>
<th style="text-align: left">Col2</th>
<th style="text-align: left">Col3</th>
<th style="text-align: left">Col4</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left"><code class="highlighter-rouge">'Urgent Disaster'!A</code>s + <code class="highlighter-rouge">'Great things'!B</code>s + <code class="highlighter-rouge">'Could be improved'!C</code>s + <code class="highlighter-rouge">'General questions'!D</code>s</td>
<td style="text-align: left"><code class="highlighter-rouge">'Urgent Disaster'!B</code>s + <code class="highlighter-rouge">'Great things'!C</code>s + <code class="highlighter-rouge">'Could be improved'!D</code>s + <code class="highlighter-rouge">'General questions'!E</code>s</td>
<td style="text-align: left"><code class="highlighter-rouge">'Urgent Disaster'!C</code>s + <code class="highlighter-rouge">'Great things'!D</code>s + <code class="highlighter-rouge">'Could be improved'!E</code>s + <code class="highlighter-rouge">'General questions'!F</code>s</td>
<td style="text-align: left"><code class="highlighter-rouge">'Urgent Disaster'!D</code>s + <code class="highlighter-rouge">'Great things'!E</code>s + <code class="highlighter-rouge">'Could be improved'!F</code>s + <code class="highlighter-rouge">'General questions'!G</code>s</td>
</tr>
</tbody>
</table>
<p>Selecting column <code class="highlighter-rouge">A</code> now would be strange at. We want to select the first column in the data set we have constructed with this concatenation. We can use this knowledge to shape differently shaped data into one common structure.</p>
<p>Luckily there’s a well-hidden, way to change our query to refer to the order of the columns in the data our range has.</p>
<p>Let’s write a query, that will help us to get the right columns and do the filtering:</p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">Col4</span><span class="p">,</span> <span class="n">Col2</span><span class="p">,</span><span class="n">Col1</span><span class="p">,</span><span class="n">Col3</span> <span class="k">WHERE</span> <span class="n">Col2</span><span class="o">=</span><span class="s1">'Kitchen'</span>
</code></pre></div></div>
<p>Note here:</p>
<ul>
<li>I can refer to the columns with <code class="highlighter-rouge">Col</code> and then the number in the dataset. Hence the funky naming I used in the table above</li>
<li>I can order or shape the format of the returned data by just indicate the order of the columns in my <code class="highlighter-rouge">SELECT</code>. See how I used <code class="highlighter-rouge">Col4</code> first. That column has the <code class="highlighter-rouge">Area</code> data which is best to start with I think.</li>
<li>In the <code class="highlighter-rouge">WHERE</code>-clause I still refer to the columns by number. <code class="highlighter-rouge">Col2</code> is the category column in this example. I’ve hardcoded this to be ‘Kitchen’</li>
</ul>
<h3 id="use-the-data-the-user-selected">Use the data the user selected</h3>
<p>This is cool but there’s a part left. We want to use the value the user selected in the drop-down box. Remember? The one in <code class="highlighter-rouge">C2</code>. Let’s update the query to use that data, instead of our hardcoded <code class="highlighter-rouge">Col2='Kitchen'</code>.</p>
<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">SELECT</span> <span class="n">Col4</span><span class="p">,</span> <span class="n">Col2</span><span class="p">,</span><span class="n">Col1</span><span class="p">,</span><span class="n">Col3</span> <span class="k">WHERE</span> <span class="n">Col2</span><span class="o">=</span><span class="s1">'"&amp;C2&amp;"'</span>
</code></pre></div></div>
<p>We basically just create a string with the value in <code class="highlighter-rouge">C2</code> the <code class="highlighter-rouge">&amp;</code>-sign</p>
<h3 id="put-it-in-your-pipe-and-smoke-it">Put it in your pipe and smoke it!</h3>
<p>Finally - put it all together in one big <code class="highlighter-rouge">QUERY</code>- formula. You can do it! Like this:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>=QUERY({'Urgent Disaster'!A:D; 'Great things'!A:D;'Could be improved'!A:D;'General questions'!A:D}, "SELECT Col4, Col2,Col1,Col3 WHERE Col2='"&amp;C2&amp;"'")
</code></pre></div></div>
<p>Hit Enter and you should see the data being displayed.</p>
<p>Select another value in <code class="highlighter-rouge">C2</code> and the data should be updated.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Pretty cool - this is like a little data warehouse application in Google Sheets.</p>
<p>I know I will go back here. I hope you found it useful.</p>
<p>My <a href="https://docs.google.com/spreadsheets/d/1h3_WRE2cgLy-8X4gm_DGE6NvYLfl7fbaip_SGVFMv3k">Google Sheet is found here</a></p>
Wed, 31 Jan 2018 14:11:41 +0100http://www.marcusoft.net/2018/01/query-in-google-sheet-for-fun-and-profit.html
http://www.marcusoft.net/2018/01/query-in-google-sheet-for-fun-and-profit.htmlToolsLife of a consultantSome thoughts on backlogs<p>I was asked to join a team for a backlog grooming session. We went into the room and opened the backlog in JIRA. It was exactly 99 items long. Not too shabby, but still… 99!? Ninety-nine items of work we hadn’t done. Yet.</p>
<p>This of course triggered this jolly team to start singing and we soon where humming along:</p>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">99 tickets of work in the <a href="https://twitter.com/hashtag/backlog?src=hash&amp;ref_src=twsrc%5Etfw">#backlog</a><br />99 tickets of work<br />Take one down, pass it around, throw it out because it is not required anymore, even Done but we didn’t update JIRA or we might not understand what it says<br />98 tickets of work left in the backlog<br /><br />15 minutes spent <a href="https://twitter.com/hashtag/agile?src=hash&amp;ref_src=twsrc%5Etfw">#agile</a></p>&mdash; Marcus Hammarberg (@marcusoftnet) <a href="https://twitter.com/marcusoftnet/status/955775870807040000?ref_src=twsrc%5Etfw">January 23, 2018</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>In this post, I wanted to share how we cut the backlog in half in 45 minutes. And then share some thoughts on backlogs that I have running in my head.</p>
<p><a name="more"></a></p>
<h2 id="complete-half-of-the-backlog-in-45-minutes">Complete half of the backlog in 45 minutes</h2>
<p>We went into the room wanting to groom the backlog to ensure that we understood what was the next most important thing to do. And that we understood that thing on a correct level.</p>
<p>But we soon realized that we couldn’t see the forest for all the trees. We decided to clear the backlog up. We had simple guidelines for this cleaning. Remove everything that is:</p>
<ul>
<li>Wrong or outdated information that we couldn’t make sense of</li>
<li>Never should have been in there in the first place</li>
<li>No one in the room understood what it was</li>
<li>We will obviously not do in the foreseeable future</li>
</ul>
<p>Basically, it was a simple question:</p>
<blockquote>
<p>Should this take up a spot in our backlog (using those guidelines)?</p>
</blockquote>
<p>45 minutes later - 56 items were left. Half (ca) of the backlog completed or removed. We felt lighter. It was easier, but still not easy, to see the important items. Our Product Owner also was happier as he now had a more manageable list of things.</p>
<p>I was happy but in the back of my head I was thinking:</p>
<blockquote>
<p>Waste! Why was it in there in the first place?</p>
</blockquote>
<p>I <del>think I</del> tweeted about it:</p>
<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="en" dir="ltr">Went into a room with a team. 99 issues in the backlog. Took out everything that was; <br />- wrong<br />- never should have been in there<br />- no one understood<br />- we will obviously not do<br /><br />45 mins later - 56 issues left<a href="https://twitter.com/hashtag/backlog?src=hash&amp;ref_src=twsrc%5Etfw">#backlog</a> is inventory. It’s not free. <a href="https://twitter.com/hashtag/nobacklogs?src=hash&amp;ref_src=twsrc%5Etfw">#nobacklogs</a> <a href="https://t.co/RInDYIXWNa">https://t.co/RInDYIXWNa</a></p>&mdash; Marcus Hammarberg (@marcusoftnet) <a href="https://twitter.com/marcusoftnet/status/955792521682092032?ref_src=twsrc%5Etfw">January 23, 2018</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>That was what we did as a team. I promised some thoughts on backlogs in general that this interaction spurred. Here you go:</p>
<h2 id="some-thoughts-on-backlogs">Some thoughts on backlogs</h2>
<p>A backlog is defined by the <a href="https://www.scrum.org/resources/what-is-a-product-backlog">Scrum.org guide</a> as</p>
<blockquote>
<p>As described in the <a href="https://www.scrumguides.org/">Scrum Guide</a>, the Product Backlog is an ordered list of everything that is known to be needed in the product.</p>
</blockquote>
<p>It also says:</p>
<blockquote>
<p>A Product Backlog is never complete.</p>
</blockquote>
<p>It does not, however, say: Everything should be in there until it’s done. No. There’s even a refinement meeting to ensure that the backlog is being groomed.</p>
<blockquote>
<p>Product Backlog refinement is the act of adding detail, estimates, and order to items in the Product Backlog.</p>
</blockquote>
<p>Sadly I didn’t find: “Remove unneeded things” in that description. Missing this part has caused many teams I’ve been in, a lot of pain. The worst case I’ve seen was a backlog of 579 items. In order. I kid you not. 186 is a little bit more important than 187. People were employed to keep track of that backlog.</p>
<h3 id="an-ordered-list-whose-order-is-not-important">An ordered list whose order is not important</h3>
<p>I think the fact that the backlog is a list is causing much of the problems that I’ve seen with backlogs. It gives you a sense that the order is important. It’s not because once we get to pick something from the list there are many things that need to be considered in order to know which one to choose:</p>
<ul>
<li>What has happened since the last time we sorted the list</li>
<li>New opportunities</li>
<li>Other important work that has entered</li>
<li>Incidents to consider</li>
<li>Technical debt</li>
<li>Team constitution</li>
<li>Calendar, vacation etc</li>
</ul>
<p>In the meantime, the order sends a strong signal of commitment and promises, just by being in order. This is first, then we will do this and then that … No. We won’t. We want to, but we will most likely do it that order. Neither do you, dear creator of this ordered list of work.</p>
<p>I’m reminded of Dan North’s quote:</p>
<blockquote>
<p>We fear uncertainty so much that we pick something that we <strong>know</strong> is wrong rather than being uncertain.</p>
</blockquote>
<p>The order of the backlog items is at best unimportant. It could be a lie or faulty information. And in the worst case, it used to force decisions through, over using the information at hand to make better decisions - just because it’s been in the backlog for a long time.</p>
<p>I once witnessed a team of 8 people work for 6 months with a horribly complicated integration of a new payment provider, into our e-commerce solution. When it was done we couldn’t tell if the work was good or bad. The integration worked perfectly - it was quality work under hard conditions.</p>
<p>But was it good? We couldn’t tell. We simply didn’t know what the goal was. Did we expect bigger order, more customers, faster payments… We didn’t know. We did it because:</p>
<blockquote>
<p>It’s been in the backlog on the top 10 items for several months. The stakeholders are getting impatient.</p>
</blockquote>
<h3 id="behind-behind-behind">Behind, behind, behind</h3>
<p>I have problems with the word “backlog” too. Here’s the <a href="https://www.google.se/search?q=backlog+definition&amp;oq=backlog+defi&amp;aqs=chrome.0.0j69i57j0l4.2527j1j4&amp;sourceid=chrome&amp;ie=UTF-8">Google definition</a> (not related to agile).</p>
<blockquote>
<p>an accumulation of uncompleted work or matters needing to be dealt with</p>
</blockquote>
<p>Literally a log of work we have not yet done. We are behind. Before we started. There’s no way we can ever get to a good spot.</p>
<blockquote>
<p>You completed feature 12? Great! Only an ever-growing list of undone work to go… Hop to it! Now. You are already behind.</p>
</blockquote>
<p>That doesn’t spur me on, I can tell you.</p>
<p>And it’s not splitting hairs and calling one thing something else. Because you have to view backlog for what it is: inventory</p>
<h3 id="inventory">Inventory</h3>
<p>Inventory is not free. There’s a lot to read about this in any lean book worth its salt, but <a href="http://www.allaboutlean.com/inventory-cost/">here’s a good starting point</a>.</p>
<p>Not everything on that list translates over to keeping a long backlog but here are a few things that stood out for me:</p>
<p><strong>Handling cost</strong> - this was what we were doing, with the team that groomed the backlog at the start of the post. We had to take time to handle the backlog. After that meeting, no value had been created. The backlog was just cleaner. No customer ever thanked us for that.</p>
<p>Also, remember the time people, around the company, spend on handling backlogs. Just because they are long lists. Think about how much less time that would be, if the list was 10 instead of 100 items. Let’s sort that under <strong>Administration cost</strong></p>
<p><strong>Scrapping and Obsolescence</strong> - this is a bit far-fetched but let’s think about it like this: someone wrote that line into the backlog at some time. At this point, that feature would have been helpful. Every day that passes we are losing the opportunity to reap that features benefits (income, saving or what have you).</p>
<p>This is a poor-mans-version of the idea behind <a href="http://leanmagazine.net/lean/cost-of-delay-don-reinertsen/">Cost of delay</a>. There are <a href="https://www.amazon.com/Principles-Product-Development-Flow-Generation/dp/1935401009">awesome books</a> written on that topic</p>
<p><strong>Value or Cost of Response Time</strong> - “Yo! This new thing would be great to start next.”
“Well, sorry. But there are 43 items that we have promised before you. But you are 44! Congrats”</p>
<p>The order of the backlog often becomes a jail and hinders us from being fast and flexible in priority, as we wanted when we started to use agile in the first place.</p>
<p><a href="http://www.allaboutlean.com/inventory-cost/">The article</a> summarise by saying</p>
<blockquote>
<p>Overall, the <strong>cost of inventory is between 30% and 65% per year!</strong></p>
</blockquote>
<p>Luckily it’s not that bad for software. But we still spend a considerable amount of time talking, handling, planning and structuring the backlog. Just count the number of times you hear someone refer to the backlog in a day. You’d be surprised.</p>
<h2 id="alternatives-and--options-">Alternatives and … options ^^</h2>
<p>Ok. Let the ranting stop and the suggestion start.</p>
<p>First of all - drop the list. Create a mind map instead. I’ve <a href="http://www.marcusoft.net/2016/06/backlog-and-features.html">blogged about this before</a> and there are great tools for this, so I’ll keep this very short.</p>
<p>Check out:</p>
<ul>
<li><a href="https://www.impactmapping.org/">Impact mapping</a>, by Gojko Adzic - a purpose-built mind map that clearly shows how the things that we are doing connects back to the reason we are building it. One of my favorite tools!</li>
<li><a href="https://jpattonassociates.com/user-story-mapping/">User story mapping</a>, by Jeff Patton - another tool that helps you to break down things into small deliverables, without losing the sight of the overall problem we are trying to solve. Great for fleshing out “the simplest thing that could possibly work”. Great book too!</li>
</ul>
<p>Secondly;</p>
<blockquote>
<p><a href="http://www.marcusoft.net/2016/04/fear-of-loosing-important-things.html">Don’t fear forgetting things</a>. Per definition, important things will come back - if not they were not important.</p>
</blockquote>
<p>Don’t put things into a backlog just because you don’t want to forget it. Do it or drop it. Or create a mind map of ideas on a whiteboard, so that you can relate it to things that you want to do.</p>
<p>Which brings me to the last point; Call it options rather than a backlog. Because that is what it really is. A bunch (not a list) of ideas that we might do later, should nothing more important come up, until then.</p>
<h3 id="but-but-but">But.. but… but…</h3>
<p>I totally see that you, in most place I’ve been working in, need to communicate what you are working on and what is coming next - so do that. Hold a list of the next … 5 items we are going to do.</p>
<p>But do not hold a list of the next 450 items we are going to do. In order. We have tried that. Didn’t work at best and cost us a lot of money in lost opportunities at worst. We called it waterfall.</p>
<p>And don’t create a long list of good-to-haves. Create a short list of improvements with a limit. 15. For example. 15 improvements. When you want to add number 16 - take one (or 4) old ones out. I promise that it will make itself known again if it was important. Call me otherwise.</p>
<h2 id="conclusion">Conclusion</h2>
<p>I think we spend too much time in backlogs. Backlogs are inventory and should be kept to a minimum length. But not too short.</p>
<p>And not a list - because that implies an ordering that is hindering us from doing the right things now. We end up doing what we promised a long time ago instead.</p>
<p>And don’t call it a backlog. Call it options instead.</p>
Wed, 31 Jan 2018 10:56:52 +0100http://www.marcusoft.net/2018/01/backlog-drinking-song-a-story-about-waste.html
http://www.marcusoft.net/2018/01/backlog-drinking-song-a-story-about-waste.htmlAgileLeanKanbanScrumRespecting slack time<p>As a consultant and coach, I find it very fascinating to see how the same topic has a tendency to arise in many different place and conversations I’m in. All of sudden everyone needs to chat about flow, or estimation or what-have-you.</p>
<p>I like telling stories, as a mean to teach and explain abstract concepts. Often when I’ve told a story once it has a way to surface back into conversations in the near future. I partly blame it on my limited imagination, but when it fits the conversation it’s interesting to notice how you tell the same thing several times a day.</p>
<p>The last couple of days people have been asking me about slack, and I’ve related a story about the pastor that married me and Elin. He was excellent in manage his own time and respected a good slack!</p>
<p><a name="more"></a></p>
<p>Slack, in this context, is the time you get when you actually don’t have anything to do right now. While that sounds like an improbability it actually happens to you several times a day;</p>
<ul>
<li>You just finished a task and there are only 10 minutes to the next meeting. No use starting a new task</li>
<li>You arrived at the bus stop just to see the bus leave. Time to wait.</li>
<li>The work that you were going to together with your coworker cannot start until she arrives.</li>
</ul>
<h3 id="blocked-work-and-slack">Blocked work and slack</h3>
<p>Sometimes slack happens due to the way our work works. For example when your work is blocked by others. Let’s say that you have a policy of a limit of the number of items you are working on simultaneously (I <em>hope</em> you do. If not try it - it will help you). 2 items. No more.</p>
<p>What should you do now? You cannot start more work, due to the limit. Now you have slack-time. How should you use this precious time?</p>
<p>This is where innovation, improvements and better flow happens. A few suggestions:</p>
<ul>
<li>Ask others if they need help - flowing their work faster.</li>
<li>Do something that is not urgent but important. Fix something that helps you move faster later, for example.</li>
<li>Learn something</li>
<li>Rest, go for a walk to freshen up your head</li>
<li>Go over to the people that are blocking your work and talk to them, to see if you together can unblock the work.</li>
</ul>
<p>The good thing about all of these tasks is that they are not urgent. Not one of them. You can do this at your leisure.</p>
<p>Also, the thing that you end up doing with your slack time; make it something that you can put aside easily. This way, once one of your tasks is unblocked you can switch over to that. Don’t pick up something urgent, because then you increased the work in process and the likelihood that you will not be able to work with the urgent items once they are unblocked.</p>
<h2 id="slack-is-not-idle">Slack is not idle</h2>
<p><a href="http://www.everydaykanban.com/2012/07/27/slack-is-not-a-dirty-word-how-slack-can-improve-your-products/">Slack is not a dirty word</a>, as Julia blogged about, but has often been used as such in our workplace. Slack doesn’t mean put your feet up but is rather a break from full utilization.</p>
<p>Especially if you are doing development of any kind, leadership or innovation you need some spare time to let your brain process and think. If you keep the brain busy producing there’s no capacity left to reflect and think. I’m reminded of <a href="https://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374533555">Daniel Kahneman’s slow and fast thinking</a> — if you only allow yourself to do fast, reflex thinking there will be no slow, improvement thinking. I’ve once heard it stated like this (might be me messing up a quote, but still good advice):</p>
<blockquote>
<p>Without slack — no improvement</p>
</blockquote>
<h2 id="comments">Comments</h2>
<p>Two comments on what I just wrote:</p>
<p>Software <strong>development</strong> is innovation. I’m convinced of that. Software manufacturing would be CTRL-C+CTRL-V. Bam! Manufactured. But development is not like that. The thinking, problem-solving part is the hard part. Writing the code is “just” translating that thinking into a programming language.</p>
<p>Also, did you noticed what I snuck in the previous section? “If <strong>you only allow yourself</strong> to do …” Yes. It’s a choice. That you get to make. You can decide to take time to reflect.</p>
<p>In order to explain that last part, you first need to meet Hasse - the Salvation Army officer (pastor) that married me and Elin. At the time Hasse was the leader of the Salvation Army in Sweden and naturally very busy. However, he agreed to marry us, which we greatly appreciated since we know him well.</p>
<p>Naturally, we had a hard time find a time to prepare with him and went back and forth with many date suggestions. I remember that I suggested: “How about Thursday afternoon, around 16?”. The answer will stay with me forever:</p>
<blockquote>
<p>No. I can’t do that time. I’m free.</p>
</blockquote>
<p>[giving time to process the wisdom]</p>
<p>There. Yes. He was free at that time and would not change that. He knew, as a leader of a large organization, that he needs that time to process, breath and reflect.</p>
<p>Any person needs that time but it is particularly important if you are a leader to have slack in your schedule. Because leadership, I’ve come to notice, is about being there, being a beacon of the culture and acting the values of the company. If I, as a leader, am busy all the time - what signal am I sending to the organization? <code class="highlighter-rouge">Leadership amplifies</code> someone told me.</p>
<h3 id="what-to-do-then-mr-smartypants">What to do then, Mr smartypants?</h3>
<p>Just this week I was coaching a leadership team that had a really hard time to find finding time for retrospection, being together and the slow thinking that Mr. Kahneman talks about. Interesting enough, once we finally found time to do a retrospective we reminded ourselves that we had decided to <strong>make</strong> time for those things - but failed miserably.</p>
<p>I then suggested that it’s not about <strong>making</strong> time, but rather <strong>taking</strong> time (Honestly… very proud of the play on word. Not hiding it.)</p>
<p>That is; everyone has 8-12 (yes… that happens) hours to work per day. You cannot beat the system. Even if you throw in extra hours there will be extra work to do. Especially as a leader. Leadership will be needed.</p>
<p>Instead, we need to prioritize time for slack. Take time for lower urgency work. I’ve coached more than one team where we have put in meeting time called “Free” (thanks, Hasse).</p>
<p>Fridays 12-14 - Free time for the team. Sit together, learn, get to know each other, do non-urgent-work.</p>
<h2 id="summary">Summary</h2>
<p>Take time for slack. It is good for you.</p>
<p>Respect that time. Be Hasse. Be professional about your recovery, spare and innovation time.</p>
Thu, 25 Jan 2018 14:32:09 +0100http://www.marcusoft.net/2018/01/respecting-slack-time.html
http://www.marcusoft.net/2018/01/respecting-slack-time.htmlLeanAgileKanbanCreate a dynamically updated chart in Google Sheets<p>When I started my blog, almost 12 years ago, I often wrote posts of things that I would need to look up again. Sure enough, I sometimes stumble into my own posts when searching for solutions to problems I have.</p>
<p>This post is one of those posts. I was asked to conduct a survey throughout our department and needed to do some slicing and dicing of the stats. I used <a href="http://forms.google.com/">Google Forms</a> to collect the data and then did the analysis in <a href="http://sheets.google.com/">Google Sheets</a>.</p>
<p>It all came out pretty nice and allowed people throughout the department to drill down into the data in a quick and simple way.</p>
<p><a name="more"></a></p>
<p>I will not talk about the form since that was very easy to set up. Only know that <a href="http://forms.google.com/">Google Forms</a> store its data in <a href="http://sheets.google.com/">Google Sheets</a>. This means that it’s pretty simple for us to continue to process the data.</p>
<p>Also, there’s a nice basic summary of the responses, that for the most part is enough. But I wanted another dimension that was dependent on the answer to one of the questions.</p>
<p>The data that I collected looks like this:</p>
<table>
<thead>
<tr>
<th>Team</th>
<th>Question 1</th>
<th>Question 2</th>
<th>Question 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Team 1</td>
<td>1</td>
<td>6</td>
<td>1</td>
</tr>
<tr>
<td>Team 2</td>
<td>3</td>
<td>3</td>
<td>3</td>
</tr>
<tr>
<td>Team 1</td>
<td>2</td>
<td>4</td>
<td>4</td>
</tr>
<tr>
<td>Team 3</td>
<td>4</td>
<td>2</td>
<td>6</td>
</tr>
<tr>
<td>Team 1</td>
<td>6</td>
<td>3</td>
<td>6</td>
</tr>
</tbody>
</table>
<p>Meaning; there are a couple of scale-questions (1-6) and one question for which team you are in. The obvious question for this data is of course:</p>
<blockquote>
<p>Can I get the result per team?</p>
</blockquote>
<p>And me myself I wanted to see the result grouped in thirds (how many vote 1-2, how many 3-4 and how many vote 5-6).</p>
<p>This is not too hard to do and even get some nice graphs to show the result in. <a href="https://docs.google.com/spreadsheets/d/1aSel__vOK1u3Njsl9_SMKLlIRETY1RXo5V1vtYf_KJ4/">Here’s a Google Sheet</a> where I’m playing around with this.</p>
<h2 id="step-1---create-sheet-for-the-stats">Step 1 - Create sheet for the stats</h2>
<p>All the data from a survey ends up in a Google Sheet called <a href="https://docs.google.com/spreadsheets/d/1aSel__vOK1u3Njsl9_SMKLlIRETY1RXo5V1vtYf_KJ4/edit#gid=0">“Form Responses”</a> or something like that. I have created a heet like that, but there’s no connection to a form now. Doesn’t matter for our purpose. This sheet is now our raw-data and we will not touch it, as it gets the data from the Form.</p>
<p>After that I just added a new <a href="https://docs.google.com/spreadsheets/d/1aSel__vOK1u3Njsl9_SMKLlIRETY1RXo5V1vtYf_KJ4/edit#gid=51274800">“Stats”-sheet</a> where we will make our calculation. To start with I made something really simple; just the average for each question. That is two columns that looks like this:</p>
<table>
<thead>
<tr>
<th>Value</th>
<th>Average</th>
</tr>
</thead>
<tbody>
<tr>
<td>=’Form Responses’!C1</td>
<td>=Average(‘Form Responses’!C:C)</td>
</tr>
<tr>
<td>=’Form Responses’!D1</td>
<td>=Average(‘Form Responses’!D:D)</td>
</tr>
<tr>
<td>=’Form Responses’!E1</td>
<td>=Average(‘Form Responses’!E:E)</td>
</tr>
<tr>
<td>Totals</td>
<td>=AVERAGE(B3:B5)</td>
</tr>
</tbody>
</table>
<p>Nothing fancy at all here. Just getting started.</p>
<ul>
<li>In Column A we are copying the question titles</li>
<li>Column B contains the average. Note that it contains all the values from <code class="highlighter-rouge">Form Responses'!C:C</code>, including the question title. But the <code class="highlighter-rouge">Average</code>-function is of course smart enough to ignore the not numeric values</li>
</ul>
<h2 id="step-2---some-grouping">Step 2 - Some grouping</h2>
<p>All though the Responses feature of Google Forms has a nice auto-summary, I wanted to make some other, arbitrary, grouping of the results. Here’s my thinking:</p>
<ul>
<li>1-2 - detractors. They didn’t really like whatever this question was about</li>
<li>3-4 - the Meh’s. These respondents are a little bit either or…</li>
<li>5-6 - the attractors. These people really liked whatever we asked about.</li>
</ul>
<p>In order to do this we need to use another function; <code class="highlighter-rouge">CountIf</code>, that counts the number of rows that matches a criteria. Here’s an example row to get these values:</p>
<table>
<thead>
<tr>
<th>Value</th>
<th>1-2</th>
<th>3-4</th>
<th>5-6</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Question 1</td>
<td>=CountIf(‘Form Responses’!C:C,”&lt;=2”)</td>
<td>=CountIf(‘Form Responses’!C:C,”&gt;2”)-G3</td>
<td>=CountIf(‘Form Responses’!C:C,”&gt;4”)</td>
<td>=C3+E3+G3</td>
</tr>
</tbody>
</table>
<ul>
<li>1-2 - I just count the rows that have a value less or equal to 2 (<code class="highlighter-rouge">&lt;=2</code>)</li>
<li>5-6 - I just count the rows that have a value higher than 4 (<code class="highlighter-rouge">&gt;4</code>)</li>
<li>3-4 - I count the rows that have a value above two (<code class="highlighter-rouge">&gt;2</code>) and then subtract the number of 5-6.</li>
<li>I then added a total for the total number of answers for this question</li>
</ul>
<p>Nothing strange there and I even added a column with percentages for each group, that ended up not using. It was as easy as just diving the number of responses with the total (<code class="highlighter-rouge">=G3/I3</code>, for example).</p>
<h2 id="step-3---visualising-totals">Step 3 - Visualising totals</h2>
<p>Let’s make a diagram out of that to show our result.</p>
<ul>
<li>Select the data you want to include by holding down CTRL/CMD and selecting the data. This way you can select data that is not next to each other. For my sheet, I selected <code class="highlighter-rouge">A1:A5,C1:C5,E1:E5,G1:G5</code></li>
<li>Click the button for Insert Chart (or in the menu Insert =&gt; Chart)</li>
<li>Do some formatting of the labels, legend etc.
<ul>
<li>I removed the Horizontal axis title</li>
<li>Put the Legend on the bottom</li>
<li>And updated the Title of the Chart to <code class="highlighter-rouge">Spread of values - all teams</code></li>
</ul>
</li>
</ul>
<p>This gave me a nice graph that looks like this and is a good start.</p>
<iframe width="488.5" height="302.05583333333334" seamless="" frameborder="0" scrolling="no" src="https://docs.google.com/spreadsheets/d/e/2PACX-1vRmafos4hXNR2xJxecFkqa2HHUOftLjx5uysbk8Idxx3TF8tLtwG5ngE8B1DGyYUwEaVhhhnwn0zQ_M/pubchart?oid=1615789057&amp;format=interactive"></iframe>
<p>This is all too simple. Let’s be a little bit more daring</p>
<h2 id="step-4---slice-it-per-team">Step 4 - Slice it per team</h2>
<p>Now, the whole idea was that we could slice this per team. In order to do this, I copied the cells <code class="highlighter-rouge">A2:I2</code> down a new area where we can do this slicing. Mine ended up in <code class="highlighter-rouge">A17:I21</code></p>
<h3 id="create-drop-down">Create drop down</h3>
<p>I then added a new cell with a drop-down-box for the teams. This is easily done with a feature called data validation:</p>
<ul>
<li>Click the cell you want the data in, in my case <code class="highlighter-rouge">J18</code>
<ul>
<li>I added a heading at <code class="highlighter-rouge">J17</code> : “Team”</li>
</ul>
</li>
<li>Click the menu Data and then Data validation
<ul>
<li>Select Criteria “List from a range”</li>
<li>Enter the column with the Teams, in my case <code class="highlighter-rouge">'Form Responses'!B:B</code></li>
<li>Click OK to create a drop-down list of the team names</li>
</ul>
</li>
</ul>
<p>A nice little trick here is to ensure that you start from the second row in the range because the first row probably contains the title of the question (<code class="highlighter-rouge">Team</code>) in this case. You can easily do that by giving the range <code class="highlighter-rouge">'Form Responses'!B2:B</code>.</p>
<p>Pretty nifty; start on B2 and use the entire column.</p>
<h3 id="average-per-team">Average per team</h3>
<p>Ok that was nice but let’s use the value that the user selected in a formula. Let’s start with the average. Now we are going to do average only for the rows that match the selection in <code class="highlighter-rouge">J18</code>. For this, there’s a handy function called <code class="highlighter-rouge">AverageIf</code> which runs average on the rows that match a criteria.</p>
<p>Here’s an example row:</p>
<table>
<thead>
<tr>
<th>Value</th>
<th>Average</th>
</tr>
</thead>
<tbody>
<tr>
<td>=’Form Responses’!C1</td>
<td>=AverageIf(‘Form Responses’!B:B, $J$18,’Form Responses’!C:C)</td>
</tr>
</tbody>
</table>
<p>Let’s dissect the <code class="highlighter-rouge">AverageIf</code> formula a bit:</p>
<ul>
<li>The first part (<code class="highlighter-rouge">'Form Responses'!B:B</code>) is the range we are going to evaluate our criteria again. “If <em>these</em> rows matches”</li>
<li>The second part (<code class="highlighter-rouge">$J$18</code>) is the criteria itself. In this case just: “Same value that is in J18”
<ul>
<li>The $-signs is just a way to make sure that it’s always <code class="highlighter-rouge">J18</code> even when you copy the formula to another cell</li>
</ul>
</li>
<li>The final part (<code class="highlighter-rouge">'Form Responses'!C:C</code>) is the values to run average on.</li>
</ul>
<p>The whole thing could be read like:</p>
<blockquote>
<p>Get all rows whose B-value matches J18 and give me the Average of the values in the C-column</p>
</blockquote>
<h3 id="counts-per-team">Counts per team</h3>
<p>Now let’s do the same thing to count the 1-2, 3-4 and 5-6 values. This is not as easy it turns out. Because, if you remember we used <code class="highlighter-rouge">CountIf</code> to count the values. We need a way to evaluate more than one criteria.</p>
<p>Enter <code class="highlighter-rouge">CountIfs</code> that does precisely that. Here’s an example formula, to count 1-2 for a certain team:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>=CountIfs('Form Responses'!C:C,"&lt;=2", 'Form Responses'!B:B, $J$18)
</code></pre></div></div>
<p>Let’s dissect that too - it is not that complicated:</p>
<ul>
<li>The first part (<code class="highlighter-rouge">'Form Responses'!C:C,"&lt;=2"</code>) is the same as we did in the total section. Count all the values in <code class="highlighter-rouge">'Form Responses'!C:C</code> that is less or equal to 2</li>
<li>The second part (<code class="highlighter-rouge">'Form Responses'!B:B, $J$18</code>) is just another criteria of the same kind; count all the values in <code class="highlighter-rouge">'Form Responses'!B:B</code> that is equal to <code class="highlighter-rouge">$J$18</code>, the dropdown-box with a team name</li>
</ul>
<p>The trick is that these two criteria are connected with an AND;</p>
<blockquote>
<p>Count all the items that have C values less or equal to 2 AND that has B-values equal to J18</p>
</blockquote>
<p>Do the same for the other formulas (3-4 and 5-6), before continuing:</p>
<ul>
<li><code class="highlighter-rouge">=CountIfs('Form Responses'!C:C,"&gt;2", 'Form Responses'!B:B, $J$18)-G18</code></li>
<li><code class="highlighter-rouge">=COUNTIFS('Form Responses'!C:C,"&gt;4", 'Form Responses'!B:B, $J$18)</code></li>
</ul>
<p>Nice!</p>
<p>You can now try it out by select different teams in J18, which should update the values for the formula.</p>
<h3 id="watch-out">Watch out</h3>
<p>I noticed that in order to do this <em>change</em> people need to be able to <em>change</em> the Google Sheet if you share it with others. That is pretty obvious when you think about it, but I forgot to set that when I sent it out.</p>
<h2 id="step-5---charts-charts-charts">Step 5 - Charts, charts, charts</h2>
<p>Let’s, <strong>finally</strong>, use all of this for something useful. Let’s create a graph similar to the one above, but only for the team that the user has selected.</p>
<ul>
<li>As before, this requires some tricky selection using the CTRL/CMD key and selecting the <code class="highlighter-rouge">A16:A20,C16:C20,E16:E20,G16:G20</code> values.</li>
<li>The rest is the same as before:
<ul>
<li>Click the button for Insert Chart (or in the menu Insert =&gt; Chart)</li>
<li>Do some formatting of the labels, legend etc.
<ul>
<li>I removed the Horizontal axis title</li>
<li>Put the Legend on the bottom</li>
<li>And updated the Title of the Chart to <code class="highlighter-rouge">Spread of values - selected team</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Now the user can change team in the <code class="highlighter-rouge">J18</code>-dropdown box and see the graph update itself. Like a nice little reporting tool. Here’s how the graph looks for me:</p>
<iframe width="600" height="371" seamless="" frameborder="0" scrolling="no" src="https://docs.google.com/spreadsheets/d/e/2PACX-1vRmafos4hXNR2xJxecFkqa2HHUOftLjx5uysbk8Idxx3TF8tLtwG5ngE8B1DGyYUwEaVhhhnwn0zQ_M/pubchart?oid=505773454&amp;format=interactive"></iframe>
<h1 id="summary">Summary</h1>
<p>I learned a lot about Google Sheets and the formulas I used by trying to figure this out. I hope you did too.</p>
<p><a href="https://docs.google.com/spreadsheets/d/1aSel__vOK1u3Njsl9_SMKLlIRETY1RXo5V1vtYf_KJ4/edit?usp=sharing">My sheet is found here</a>. If you want to play around you can duplicate it and play around with it.</p>
Mon, 22 Jan 2018 14:47:04 +0100http://www.marcusoft.net/2018/01/create-a-dynamic-updated-chart-in-google-sheets.html
http://www.marcusoft.net/2018/01/create-a-dynamic-updated-chart-in-google-sheets.htmlToolsLife of a consultantViral Change and some thoughts about tools<p>The other day a co-worker (Anders - awesome guy!) pointed me to a change management tool/methodology called <a href="http://www.viralchange.com/">Viral Change</a>. I read about it and got quite hooked I have to say, but I’m not yet ready to make a report on how it works or it’s merited.</p>
<p>However, <a href="https://viralchange.files.wordpress.com/2010/03/changing-the-way-we-think-about-change-leandro-herrero.pdf">in one of the documents I read</a> they made a little remark that I found very interesting as it brushes on many of the problems that I often have when trying to “do” agile or change into agile.</p>
<p>This post is about that but I have to give a little backstory and my current understanding of Viral Change.</p>
<p><a name="more"></a></p>
<h2 id="viral-change---my-current-interpretation">Viral change - my current interpretation</h2>
<p>Viral Change is a change management methodology and way of viewing change management work. It focuses a lot of networking and peer-to-peer change. They got me right at the start by saying:</p>
<blockquote>
<p>There’s no real change until we see change in behavior</p>
</blockquote>
<p>No! Exactly. Us talking, presenting, showing nice graphs and “re-emphasizing the message many times” (all of these are things that I have done and suggested many, many times) doesn’t mean that things have change. The only real measurement of change is the change in the behaviour of the people we want to change.</p>
<p>This is by the way, very close to the <a href="http://agilemanifesto.org/">agile manifesto</a> way of putting things (“Working software is the primary measure of progress” for example.</p>
<p>Viral Change then goes on and say that the best way to influence people is through the power of the network and peer-to-peer influence. In other words: hearing stories about how the changed behavior is better for us helped us, gave us increased X - from our peers is much more powerful than to get a new way of working handed down to us.</p>
<p>Again the agile manifesto is brushing on this (“The most efficient and effective method of conveying information to and within a development team is a face-to-face conversation.” And “Individuals and interactions over processes and tools”)</p>
<p>This way of looking at effective change is plugged very much into my favorite <a href="http://heathbrothers.com/books/switch/">Change Management Book - Switch</a>. The authors talk a lot about telling the story and following the bright spots as effective ways of ensuring that change takes place.</p>
<p>Viral Change happens when you let a small group of people, with the “right” behaviors, telling/spreading these behaviors in the network. The word Viral is not by accident of course since this reminiscence the way viral diseases (or <a href="https://www.buzzfeed.com/expresident/best-cat-pictures">cat pictures</a>) happens.</p>
<p>The final part, that I want to talk about here, is how this approach (trusting the network, letting peers) changes leadership. Because you need to move towards what Viral Change calls “Backstage leadership”. Now you are not sending <strong>HOW</strong> to do things, but rather create an environment where Viral Change (networking, peer-to-peer influence, storytelling) can happen and be effective.</p>
<p>Hmmm… this <em>also</em> resonates with me and my experiences from agile and lean. Because if you want autonomous, responsible and accountable teams in your organization you, as a leader, need to ensure that an environment where such teams thrive exists.</p>
<p>I’m reminded of <a href="http://www.davidmarquet.com/">David L. Marqueet and his intent based leadership</a>. I love how he <a href="https://youtu.be/OqmdLcyES_Q?t=3m3s">phrase it in this video</a> - here are some quotes:</p>
<blockquote>
<p>If you want your people to think - give intent</p>
</blockquote>
<blockquote>
<p>What are we trying to accomplish here?</p>
</blockquote>
<blockquote>
<p>You give intent to them and they give intent back to you</p>
</blockquote>
<blockquote>
<p>Stop requesting permission and start telling your intent</p>
</blockquote>
<p>By doing these things the initiative shifts from you, the leader, to them the people in the organization where the change is supposed to happen.</p>
<p>David L. Marquet also teaches us to use the <a href="https://youtu.be/MkLhlJyfpsw?t=4m">values that we want to see more of when we tell stories</a>. That is a great way of reinforcing and promoting the values:</p>
<blockquote>
<p>John was very <strong>bold</strong> yesterday when he …</p>
</blockquote>
<blockquote>
<p>Lisa showed great <strong>initiative</strong> when she invited our customer to the office</p>
</blockquote>
<blockquote>
<p>Anna arranged a really <strong>fun</strong> session yesterday …</p>
</blockquote>
<h2 id="what-is-right-then">What is right then?</h2>
<p>The initial reason I got pointed to Viral Change was that I said that I met so many organizations that have a real reason to make change the we want to see happen. I’ve <a href="http://www.marcusoft.net/2012/10/agilechangetop51.html">blogged about this before as my #1 reason for a change to happen</a>. And it resonates well with <a href="https://www.amazon.com/Leading-Change-New-Preface-Author/dp/1422186431">Dr. Kotter’s book on Leading Change</a>.</p>
<p>This doesn’t change much, in my opinion. We still need a strong reason for why we need this change. Now. But now we are instead trusting the people that are closest to the information to come up with the <strong>HOW</strong> we should change our behavior. It might be implemented differently in different places of the organization. But that is ok too - since we are shooting for the same WHY and goal. Each part of the organization now reaches the goal in the way that is most suitable and effective for them.</p>
<h2 id="influencing-through-values">Influencing through values</h2>
<p>Now… to the point of the whole post.</p>
<p>It looks to me that Viral Change (being a newbie to the area) happens when you let the network of peer-to-peer influence each other through stories. What are they influencing? The values. The behaviors that we change are a reflection of the values that we have.</p>
<p>Instead of valuing great plans and deadline compliance we start to value delivering business values. Instead of forcing people to say no to lists of features we start to value people coming up with other ways than suggested to reach a goal. I recently asked a client:</p>
<blockquote>
<p>If a team didn’t deliver a thing on the backlog but reached the change in the target values (increase number of users, or what have you) - would that be acceptable throughout the organization?</p>
</blockquote>
<p>Well, Viral Change has an interesting take on that too. This quote about, for example, made me think about agile (replace Viral Change TM below with “agile” for example and see for yourselves) and how I often introduce it to teams and organizations:</p>
<blockquote>
<p>There are no big declarations of ‘a new programme’ or anything that looks/may look like ’another corporate initiative’6. <strong>The more visible and more formal Viral Change TM becomes, the less likely its success</strong>.</p>
</blockquote>
<p>and this</p>
<blockquote>
<p>In fact, the greatest risk to Viral Change TM is the almost <strong>inevitable tendency to formalize</strong> it more than needed; something that sometimes occurs spontaneously in the management ranks due to our learned way of doing things.</p>
</blockquote>
<p>This is how I’ve seen change initiatives happen and how organizations have adopted new ways of working. Pretty soon it’s just “How we are doing it here” or “I don’t know if this is agile really but we do …”. This is when the values are present but there’s no need to talk about what it’s called. Maybe it’s not by the book, maybe it’s not by any book - but it serves us well and we get value from it. The values and behaviors we wanted.</p>
<p>Which of course ties into the first foundational principles of <a href="https://www.manning.com/books/kanban-in-action">kanban</a>:</p>
<blockquote>
<p>Start where you are - don’t implement big changes to places and processes you don’t know will help you</p>
</blockquote>
<p>The only problem with that, if there’s a problem is that it’s very hard to package this up and sell it in a box. Which leads to strange preconceptions of what agile is and how it <em>has</em> to be done. My favourite blogger right now John Cutler tweeted this:</p>
<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="en" dir="ltr">Interesting how orgs skip self-organization, cross-functional teams, trust, and transparency and latch on to the parts about forecasts, estimates, commitments, burn-downs, and “faster”. <br /><br />It is almost...as...if...it...is...being...sold...and...that...way.<a href="https://twitter.com/hashtag/scrum?src=hash&amp;ref_src=twsrc%5Etfw">#scrum</a> <a href="https://twitter.com/hashtag/agile?src=hash&amp;ref_src=twsrc%5Etfw">#agile</a></p>&mdash; John Cutler (@johncutlefish) <a href="https://twitter.com/johncutlefish/status/946805413571416064?ref_src=twsrc%5Etfw">December 29, 2017</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<h2 id="conclusion">Conclusion</h2>
<p>Viral Change has a very nice philosophy for change management, I think. Its pretty hard to say HOW to do it, because it’s more like an idea or a couple of principles. Just like agile. Just like lean. The idea (or principles) are more important than HOW we do it. How is just implementation details?</p>
<p>There are many good examples on HOW of course, but rather than copying best practices (that worked for someone somewhere at some point in time different from yours) - tell the stories about what works for you to your peers.</p>
<p>That’s where change starts!</p>
Thu, 11 Jan 2018 12:47:47 +0100http://www.marcusoft.net/2018/01/viral-change-and-some-thoughts-about-the-tool-tm.html
http://www.marcusoft.net/2018/01/viral-change-and-some-thoughts-about-the-tool-tm.htmlAgileLeanKanbanReview of A seat at the table<p>I’ve just read a classic. Mark my words - we will mention, refer to and hear a lot about Mark Schwartz great book <a href="https://www.amazon.com/Seat-Table-Leadership-Age-Agility/dp/1942788118/ref=asap_bc?ie=UTF8">“A seat at the table”</a>.</p>
<p>It’s an amazing book - you have to read it.</p>
<p><a name="more"></a></p>
<p>This book is written in a laid-back, funny and content-packed format and contains useful information for any leader in a modern IT-organisation. I have throughout the book been screaming out loud “YES!”, “Exactly that!” or “Where were you when I was in the meeting last week?!” from the well explained and laid our arguments that Mark presents.</p>
<p>The book talks a lot about how the CIO role changes as lean and agile practices are adopted. Practices like DevOps, autonomous squads or automated testing all comes with a change in mindset and culture and this of course needs to be adjusted for in how IT leaders lead their organsiations. I particulary liked the part that made analogies with the open source culture and that of a modern, agile IT organisation.</p>
<p>What I think would be most useful for anyone that tries to change their organisation is that the book is written in a language so that other in the senior leadership (already seated at the table, as it were) easily can understand it. This is a book I can give away as an introduction. I have already recommended the book to more than 15 people, the leadership at my current client will start a book cirlce on the book next week.</p>
<p>When I read books I underline noteworthy quotes, things I want to look up again etc. If it’s very good I also fold the corner of the book, so that I can pull the book out and point to it in a single motion. I’ve attached a picture how my book look now, after reading it for the first (!) time. This should be proof enough for how much I enjoyed the book.</p>
<p><img src="/img/aSeatAtTheTable.jpg" width="100%" alt="Pages that contained stuff that I think was particulary important to remember in this book" /></p>
<p>Thank you Mark! This was a great book. Looking forward to read your other things too.</p>
Sat, 30 Dec 2017 12:34:40 +0100http://www.marcusoft.net/2017/12/review-of-a-seat-at-the-table.html
http://www.marcusoft.net/2017/12/review-of-a-seat-at-the-table.htmlAgileLeanKanbanLimiting WIP and some rules of thumb<p>Writing a book (<a href="https://t.co/rO179xXeHS">psst - there’s another one on its way</a>) has changed many things for me and opens so many doors in my career. But my favorite thing is when I get to talk to people that have read my book, learned something and is applying kanban in their everyday life. Sometimes I get some really insightful and interesting questions.</p>
<p>Massimiliano Spolverini, for example, presented me with one of those questions just the other days:</p>
<blockquote>
<p>I have been reading your book the second time and I have found it brill. Though, there is a doubt playing on my mind which I cannot sort out.</p>
<p>The 2nd rule of thumb to find a WIP limit (page 111) explains that when the WIP is set too high, then the team can see some work items not being worked by anybody, which no one is responsible for.</p>
<p>On the other side, at the bottom of page 117, when the “<em>Drop down and give me 20</em>” approach is presented, it is said that “…<em>if too many work items are idle, you can go back up to the level you had before</em>”. In other words, it says that if one sees idle work items, he’d better move back to higher WIP. Isn’t this last statement in contradiction with the 2nd rule of thumb?</p>
</blockquote>
<p>Massimiliano kindly let me answer the question on this blog and in this post I wanted to share some of my thinking about this situation. I don’t claim to hold a one-and-only-answer but rather wanted to explain and expand a bit further.</p>
<p><a name="more"></a></p>
<h2 id="background-and-up-to-speed">Background and up to speed</h2>
<p>The chapter, <a href="http://bit.ly/theKanbanBook">Kanban In Action chapter 6</a>, that Massimiliano is referring to is about limiting work in process (WIP) which is one of the basic tools for kanban practitioners.</p>
<p>In this chapter, we, me and <a href="http://joakimsunden.com">Joakim</a>, discusses some ways of finding a suitable WIP limit for your team. We start by giving two rules of thumb:</p>
<p><strong>If the WIP is too high - work will be idle</strong>. This is when you in the morning meeting will hear about work that no-one has worked on</p>
<blockquote>
<p>I’d didn’t get around to that one yesterday - I was busy with other things</p>
</blockquote>
<p>This might suggest that you should lower your WIP limit a bit to improve the flow and focus.</p>
<p>The opposite situation is when <strong>WIP limit is too low - workers will be idle</strong>. In this situation you will hear people that have no work to do:</p>
<blockquote>
<p>The thing that I was doing is done and now I cannot start new work since we are up to our WIP limit already.</p>
</blockquote>
<p>This is not a bad thing. In fact, this is a super opportunity to do one of many things that might help us and our work. Here are a few suggestions:</p>
<ul>
<li>Use this slack time to do lower priority work that will help our flow further, but we never get around to do: speed up build script, increase test-coverage etc.</li>
<li>Help someone that is already working on something on our board, to improve the flow (and most likely the quality) of that item.</li>
<li>Use this slack time to learn something that you think would be beneficial.</li>
<li>Rest! For God’s sake - take a break and get some air.</li>
</ul>
<p>The “Drop down and give me 20”-experiment that Massimiliano is referring to is a nice experimental approach to finding a suitable WIP limit that <a href="http://www.lean-kanban.eu/sessions/reinertsen/">Dr. Donald Reinertsen presented at LKCE 2012</a>. The silly name is our feeble attempt to be funny…</p>
<p><img alt="Finding a suitable WIP limit by decreasing in small steps" src="/img/dropdownandgiveme20.png" width="100%" /></p>
<p>The idea here is that we start with something that we know is way too much… <strong>but</strong> then agree to bring the WIP limit down little by little until we find a suitable one.</p>
<blockquote>
<p>until you start to experience problems</p>
</blockquote>
<p>as we wrote in the <a href="http://bit.ly/theKanbanBook">book</a>.</p>
<p>I really like this approach because it firstly put us into a learning and experimental mode. We set out to try things and see what works and what fails. Secondly, it clearly shows that there is no one WIP limit to be found. It’s contextual and depending on timing, team constitution, type of work etc etc.</p>
<p>In short - you need to <em>continuously experiment and learn</em>. The end result is not a WIP limit to rule them all - it’s an ever-improving flow.</p>
<p>However, I can also see the problem for M. Our explanation might have been a bit to shallow.</p>
<p>Let’s take a step back before I try to give some guidance. Let’s ask what WIP limits are (for).</p>
<h2 id="wip-limits-are-tools">WIP limits are tools</h2>
<p>After writing the book WIP limits have grown on me as a very powerful tool to control not only the smoothness and flow of the process but also the speed of improvements. By limiting WIP we are introducing a constraint in our process. In order to handle that constraint, we need to innovate, improve and support our process in new ways.</p>
<p>For example, consider eXtreme Programming. This methodology prescribes a very tight timebox of one week. Our WIP is limited to the amount of work that we can get <strong>Done</strong> in one week. This means that we need very good and fast collaboration within the team, we need to have high-quality work to be able to move fast, we need fast tooling around us so that we don’t waste time waiting for build scripts to run, we need to work together so that everyone can help out etc. etc.</p>
<p>All of these good things come out of us limiting WIP.</p>
<p>Another aspect of thinking about WIP limits as a tool is that we need to <strong>use</strong> the tool rather than being slaves under it. I often point out to teams that I coach that they, themselves, are setting the WIP limits. Hence they can change it - up or down.</p>
<p>I remember a story from the excellent <a href="http://bit.ly/theKanbanBook">Toyota Kata book</a> where a Toyota Sensei (Side-note: I would love to meet a Toyota Sensei. For my inner eye they are dressed like Obi-Wan, mythical beings for a nobler time… Sorry - back to the story) points to a workstation and exclaims:</p>
<blockquote>
<p>More WIP needed here!</p>
</blockquote>
<p>The people around him start to laugh at the “obvious” joke. Surely he meant <em>less</em> WIP… but no. More work in process was needed because:</p>
<blockquote>
<p>This workstation cannot yet sustain this low WIP</p>
</blockquote>
<p>Exactly that! The flow of value is what we are after. Limiting WIP is one tool to get there, but it’s just a tool. By limiting WIP we will see the improvement opportunities more clearly. We might take the opportunity to improve or not. In fact, there is another good Donald Reinertsen quote about that:</p>
<blockquote>
<p>Value trumps flow. Flow trumps waste elimination</p>
</blockquote>
<p>It’s the flow of value we are after. Not the lowest possible WIP limit. I happen to <del>know</del> believe that limiting WIP is a very cheap and fast way to get better, faster and smoother flow of value.</p>
<p>Which brings me to my explanation and reasoning about the possible contradiction in the book.</p>
<h2 id="so-what-it-is-then">So what it is then…</h2>
<p>Ok… let’s see if I can explain myself here…</p>
<p>The second rule of thumb says that if WIP is <strong>too low</strong> then you will have workers idle. And then in the experimental, bring-down-in-20%-decrements, approach tells us to “…if too many work items are idle, you can go back up to the level you had before”.</p>
<p>Well, although I have learned so much after writing the book, I would argue that both are correct, although a bit sloppy formulated maybe.</p>
<p>Because, as I eluded to above, having people idle might open up many awesome opportunities to improve … having everyone idle all the time is of course not great. That would soon lead to us being out of work. Have a couple people always ending up without work (for whatever reason) would not be good either. There’s a balance to be found - and that is where you want your WIP limit to be.</p>
<p>This is where the experimental approach leads us. Let’s say that we bring the WIP limit down to 3 items and we often experience that all 3 items are blocked by external dependencies. Sure - this is absolutely an opportunity for us to try to untangle the blockage and we should. <a href="https://www.youtube.com/watch?v=K4eScf6TMaM">Do it! Do it!</a></p>
<p>However… if this happens over and over then that might be an indication that our process cannot yet sustain this low levels of work, then we should at least try to increase the WIP limit to see if the flow of value improves. Maybe it’s just a certain kind of work type that gets stuck - let’s throw in a few more of another kind in the mix and see how flow changes.</p>
<p>When we wrote “…if too many work items are idle, you can go back up to the level you had before” it is a bit too vague. A better formulation would have been:</p>
<blockquote>
<p>Back it back up, with a few items</p>
</blockquote>
<p>Meaning that the whole experiment goes like this:</p>
<ul>
<li>Start with your current WIP. 4 for example</li>
<li>Double it. 8 for example</li>
<li>Bring it down in 20% decrements on a bi-weekly basis.</li>
<li>Once you start to see problems in your flow (from the book: “queues build up, or you see people idle between tasks”), bring the WIP limit back up a bit again. You don’t want the entire process to grind to a halt.</li>
<li>Try to improve your process to handle lower WIP and then bring the WIP down a bit more</li>
</ul>
<p>That last part also indicates that we should have some way to see if the flow is better or not. But that’s a topic for another blog post (psst - track lead time and throughput…)</p>
<h2 id="conclusion-and-summary">Conclusion and summary</h2>
<p>WIP limits are tools. There’s no right, or one-answer, for what a WIP limit should be for you and your team. It’s contextual and depending on many variables. Experiment and monitor the flow of value to see if the WIP limit you are using now is helping you. WIP limits promote better, faster and smoother flow and help you find improvement opportunities.</p>
<p>Another way to formulate this comes from the grandmaster of Kanban himself, <a href="https://www.djaa.com/">David J. Andersson</a>;</p>
<blockquote>
<p>With WIP limit you control how much pain you want to inflict on the organization</p>
</blockquote>
<p>As a thought experiment - imagine a factory that worked on building one single car. A lot of people idle, a lot of focus on that one car and every, single, tiny problem in the process would stop the flow of value completely.</p>
<p>On one hand that would be very good for finding problems, eliminating waste and improving flow. But on the other hand - that would be very very costly to have that many people waiting.</p>
<p>Massimiliano - awesome question! Thanks. I hope that I now could make our reasoning a bit clearer and show you that limit WIP is a tool to improve flow. Use the tool - don’t let the tool use you.</p>
Fri, 29 Dec 2017 21:58:40 +0100http://www.marcusoft.net/2017/12/limiting-wip-and-some-rules-of-thumbs.html
http://www.marcusoft.net/2017/12/limiting-wip-and-some-rules-of-thumbs.htmlAgileKanbanLeanLean/flow simulation experiments<p>When I do workshops on kanban/lean I <del>often</del> always include a game, since I think that adds to the experience of the principles I try to teach. One of my favourite is the Number Counting game that I, one <strong>very</strong> boring day did an animation of in PowerPoint. You can flip through it here:</p>
<iframe src="//www.slideshare.net/slideshow/embed_code/key/2mgxDilfj0lg65" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/marcusoftnet/numbers-simulation-a-demonstration-of-lean-in-action" title="Numbers simulation - less is more!" target="_blank">Numbers simulation - less is more!</a> </strong> from <strong><a href="https://www.slideshare.net/marcusoftnet" target="_blank">Marcus Hammarberg</a></strong> </div>
<p>This game very clearly illustrates the benefits of limiting work in process as the lead time for all the projects goes way down, as well as the lead time for each individual project. While quality often improves.</p>
<p>However, every time I’ve done this exercise I have to resist the urge to throw in a couple of curve balls and changes. I resist it because I think it would be quite hard work and stressful. Now I’ve tested them on myself and I wanted to share the outcomes with you.</p>
<p><a name="more"></a></p>
<h2 id="original-game---my-score">Original game - my score</h2>
<p>The game is about completing three columns with letters and numbers as fast as possible. The columns are (A-J, roman number I-X and 1-10). The trick is that you are doing them row-by-row (all at once) in the first round. This has a devastating effect on the lead time of course since you are mostly switching pens. Not only that but the most important project (A-J, as I introduce the game), is severely punished in lead time.</p>
<p>Here is my result:</p>
<p><img alt="My result of the game doing all three project at once" src="/img/orignalrun.png" width="100%" /></p>
<p>As you can see I spent 1 minute and 16 seconds completing it. And the first project took 1.12, just because I did 3 projects at the same time. Typically a second round (did do one sadly) would see numbers like 34 seconds in total and about 9-15 seconds per project.</p>
<p>I often make a big case for the facts that:</p>
<ul>
<li>The same amount of work has been done</li>
<li>By the same worker</li>
<li>Using the same pens</li>
<li>On the same board</li>
</ul>
<p>It 1/3 of the time. And the <em>magic</em> that has achieved this is the fact that we have limited work in process to 1 project at the same time. Or put differently: focus on flow of value over resource utilization.</p>
<h2 id="variation-1---outsourcing-blue-pen">Variation 1 - outsourcing blue pen</h2>
<p>One variation that I often wanted to try, especially in companies where resource efficiency is held as the most important thing is to outsource one pen. This kind of organization is very common in Sweden, at least and you can hear things like this being spoken in the corridor:</p>
<blockquote>
<p>Ah, you are working 40% on the A-J project. Awesome then I need you 20% in Roman Numbers project and then you can spread yourself evenly between 1-10 project and maintenance of A-J project. Ok?</p>
</blockquote>
<p>No! It’s stupid because you will first of all slow things down (see original run above) but secondly you will create of waiting states since now everyone is very busy.</p>
<p>Although it has not specifically to do with outsourcing, I thought that could be used to illustrate the problem. Outsourcing is, in my experience, mostly done to optimise utilization of peoples time - not to increase the flow of the value.</p>
<p>I thought that one way of illustrating/simulating this situation was to put the Blue pen on a table, just a few feet away. Now you have to go over there to get it, and then leave it there every time you need it. Imagine that this is someone you need to get from another room. In our simulation, the Blue pen is always ready to be used, and the delay is just the walking over there to get it.</p>
<p>Here’s my result in this blue-outsourced-scenario, when doing all three projects at once, row-by-row:</p>
<p><img alt="My result of the game doing all three project at once, with blue pen outsourced" src="/img/WIP3OutsourcedBlue.png" width="100%" /></p>
<p>Yes, I suffered. About 16 slower, which is lost by me getting the Blue pen. Also, note that this penalty is given to all projects, although it’s only the Blue pen that is slowing me down. This is because</p>
<ol>
<li>I’m working on 3 projects at once. Yes, this is one of those “All things need to be completed before any value is created, you can do them in any order you want. I just want to see the end result. Stop bothering me”-kind of projects. And <a href="http://www.marcusoft.net/2017/11/no-waterfall-is-not-sometimes-correct-it-is-always-wrong.html">Yes, that is always the wrong way to do projects</a>. In any kind of business, any setting. We have just not discovered better ways yet.</li>
<li>We have decided to organize so that the Blue pen is optimised in use, over the value for all projects. Again, the Blue pen in our simulation is not doing anything when I don’t need it but the delay is shown to me just having to go over there and get it. Imagine that you had someone else using the Blue pen in between and I’ll have to wait for it to be done before I can use it…</li>
</ol>
<p>But let’s try to minimise WIP and see how it turns out. Here’s my result with WIP of 1 (column-by-column) with the Blue Pen outsourced:</p>
<p><img alt="My result of the game doing all three project at once, with blue pen outsourced" src="/img/WIP1OutsourcedBlue.png" width="100%" /></p>
<p>Ooooh - shiny! That’s much better, unsurprisingly.</p>
<ul>
<li>All projects now takes 27 seconds to complete (compared to 1 minute 32 seconds before)</li>
<li>First project completed after 8 seconds (1 minute 28 seconds before)</li>
<li>Second took 11 seconds to do, with a total lead time of 18 seconds (1 minute 30 seconds)</li>
<li>The third project took 9 seconds with a total lead time of 27 seconds (1.32 before)</li>
</ul>
<p>Well, that was not too strange, since I had to get the Blue pen only once, compared to 10 times before. But there are a few interesting points of reflection here:</p>
<p>The other projects are not punished by the extra delay in me getting the pen every row. Now that penalty had to be paid only once for the entire game. Imagine that I introduce a 10-second delay each time I have to get the Blue pen. Now that would hurt us horribly in the first version (WIP = 3 projects) but not be any penalty for the first two projects in the second run. And the penalty would not be that horrible even for the Blue Pen column, even in the last run of the game.</p>
<p>Secondly, we get more opportunities to pick the most important thing to do 3 times, as compared to only once in the first round (before start, after completing A-J and after completing Roman numbers). That is called Business Agility, if I’m not mistaken. It will be huge.</p>
<h2 id="variation-2---adding-more-projects">Variation 2 - Adding more projects</h2>
<p>Another thing that I always wanted to try but never dared to do, is to interrupt half-way through and throw in a new project. This project is of course very urgent too, but they need to continue to work on all the other projects too. Everything is most important! If you ever experienced that situation.</p>
<p>In the simulation I had my friend Mattias Livré, adding a project at the half-way point. We had discussed what it was before we started, but still, it messed things up considerably for me. The project was that Mattias wanted me to write a new column 10-1 using a black pen. And continue to work on the other projects.</p>
<p>Heres my result:</p>
<p><img alt="My result of the game doing all three project at once, adding a new project half-way through" src="/img/AddedProjectAfterHalfTime.png" width="100%" /></p>
<p>Actually not too bad… But it sure messed things up for my head. By <strong>far</strong> the most challenging and stressful of the variants I tested. Also, there are some interesting things to notice about the result</p>
<p>First of all the times went up, for all projects, compared to the original run (1.12, 1.14, 1.16). Secondly, all projects got punished for me adding extra work in process in the form of this new project. Thirdly the end times of the projects show that although I got this last urgent project thrown in at the end, it actually had to wait considerably (about 45 seconds I would guess) before it was completed, just because I was doing 3 other projects simultaneously.</p>
<p>Now consider this variation with me doing only one project at the same time (column-by-column). I sadly didn’t have time to try this, but let’s play with the idea. After 1, 5 complete columns Mattias would hand me a new project. He would state that it was as urgent as the rest. But now I have one completed (after about 8 seconds). The very natural thing to do for both me and Mattias would actually be to …</p>
<p>[halting for personal reflection on suggested action here]</p>
<p>Stop and ask ourselves if we would rather finish the Roman Numbers project and then pick up the Black or the Blue project next. Or possibly just drop the Roman Number project and just head onto the Black 10-1 project straight away.</p>
<p>Point being: we naturally get a chance to choose and it’s natural because we have already finished one project already. It’s in parts already. We have already delivered some value and now (or at least soon, VI-X is left) will finish another one. In short: we have more points in time to choose.</p>
<p>When I ran all three projects at the same time I had 3 half-finished projects at this time. It is not natural nor beneficial to ask yourself if you should halt all three unfinished projects and then start a new one at that point. No value has been created. There’s no opportunity to redecide - that is done once, at the beginning of all three projects.</p>
<h2 id="summary">Summary</h2>
<p>I found these simple variations very interesting and they sure raised a lot of questions for me and Mattias. It shows, in its simplicity, on the problems of doing many (3!) things at the same time and the benefits of putting a limit on that number.</p>
<p>Doing so will help you to ask powerful questions, and to focus on flow of value.</p>
Fri, 22 Dec 2017 12:09:11 +0100http://www.marcusoft.net/2017/12/leanflow-simulation-experiments.html
http://www.marcusoft.net/2017/12/leanflow-simulation-experiments.htmlAgileLeanKanbanLife of a consultant