<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.2">Jekyll</generator><link href="https://philippe.bourgau.net/feed.xml" rel="self" type="application/atom+xml" /><link href="https://philippe.bourgau.net/" rel="alternate" type="text/html" /><updated>2026-04-25T15:12:52+00:00</updated><id>https://philippe.bourgau.net/feed.xml</id><title type="html">Philippe Bourgau’s XP Coaching Blog</title><subtitle>Let's Refactor Code and Orgs to a Sustainable Pace! This blog features stories, best practices, and guides to help all technical agile coaches, whether veteran or aspiring, to set the world of software to a sustainable pace.</subtitle><author><name>Philippe Bourgau</name></author><entry><title type="html">The Secrets Of Tech Coaching: Better Communication Skill</title><link href="https://philippe.bourgau.net/the-secrets-of-tech-coaching-better-communication-skill/" rel="alternate" type="text/html" title="The Secrets Of Tech Coaching: Better Communication Skill" /><published>2023-12-07T00:00:00+00:00</published><updated>2023-12-07T00:00:00+00:00</updated><id>https://philippe.bourgau.net/the-secrets-of-tech-coaching-better-communication-skill</id><content type="html" xml:base="https://philippe.bourgau.net/the-secrets-of-tech-coaching-better-communication-skill/"><![CDATA[<p><em>Running code katas or mobs with groups that lack teamwork is almost impossible! Here are 20 communication and collaboration techniques to coach by example.</em></p>

<p><img src="https://philippe.bourgau.net/imgs/2023-11-07-the-secrets-of-tech-coaching-better-communication-skill/human-human-stack.jpg" alt="Drawing of 2 characters trying to communicate. One speaks but the other only gets question marks. The drawing is also entitled &quot;The human / human stack. Communication for software teams &amp; systems&quot;" /></p>

<blockquote>
  <p>When team members are not used to or want to show humility within the confines of their team’s space, then they are not functioning as a team. That’s where we can and should help. Until that starts to happen, any new learning is an uphill battle.</p>
</blockquote>

<blockquote>
  <p>I spent some time two years ago with a <del>team</del> group who asked me about delays in reviewing their pull requests, and I recall the central issue lay in a lack of self-confidence, resulting in not wanting to criticize someone else’s work.</p>
</blockquote>

<blockquote>
  <p>I would love to reduce the latent stress in the mob, but just saying “There is no stress” is visibly not enough!</p>
</blockquote>

<p><strong>Even though we do “technical” coaching, collaboration skills can make or break our work!</strong> Most of us have coaching stories that support that. Situations where horrible teamwork made it impossible to pass anything to a team! Or teams with newly emerging technical skills but turning into super-performing thanks to collaboration! The impact of collaboration and teamwork is incredible!</p>

<p><strong>Bad teamwork and collaboration also block mobbing and pairing coaching sessions. How can we help teams to improve collaboration so that coaching becomes effective?</strong></p>

<blockquote>
  <p>Wouldn’t it be great if we could coach teamwork and collaboration by example? So that all the rest followed?</p>
</blockquote>

<h2 id="lets-grow-our-collaboration-skills-first">Let’s grow our collaboration skills first!</h2>

<p>Coaching by example, aka walking your talk, is a fundamental coaching technique. <strong>By improving our communication and collaboration skills, we’ll showcase good teamwork.</strong> As a result, we’ll inspire our coachees to follow suit!</p>

<p><img src="https://philippe.bourgau.net/imgs/2023-11-07-the-secrets-of-tech-coaching-better-communication-skill/collaboration-definition.jpg" alt="Photo of a dictionary page opened at words Collaborate, Collaboration, and Collaborator. The definition for Collaborator is &quot;One who assists another, especially in literary or scientific work.&quot;" /></p>

<p>Before jumping into how to do that, let’s see why it works.</p>

<h3 id="why-is-team-collaboration-essential">Why is team collaboration essential?</h3>

<blockquote>
  <p>No matter how it looks at first, it’s always a people problem. (<a href="https://wiki.c2.com/?GeraldWeinbergQuotes">Jerry Weinberg</a>)</p>
</blockquote>

<blockquote>
  <p>Demarco and Lister demonstrate that the major issues of software development are human, not technical. Their answers aren’t easy–just incredibly successful. (Back-cover of the seminal <a href="https://www.goodreads.com/en/book/show/67825">Peopleware: Productive Projects and Teams</a>)</p>
</blockquote>

<blockquote>
  <p>Junior programmer’s bookshelf: 90% APIs and programming languages; Senior programmer’s bookshelf: 80% applied psychology. (<a href="https://x.com/jbrains/status/616228270841962496?s=20">J.B. Rainsberger</a>)</p>
</blockquote>

<p>I’m not the only one saying that team collaboration is paramount to success!</p>

<p>It’s not only what people say. The <a href="https://www.nytimes.com/2016/02/28/magazine/what-google-learned-from-its-quest-to-build-the-perfect-team.html">Aristotle project at Google</a> concluded that psychological safety is the main factor in team performance. Psychological safety makes it OK to take risks and show vulnerability in front of others. Here again, human interactions come out as critical to team performance.</p>

<p><strong>It’s clueless to coach a team without dealing with teamwork!</strong></p>

<h3 id="communication-skills-are-contagious">Communication Skills Are Contagious</h3>

<p><strong>Communication and collaboration skills are contagious.</strong> Good communication is inspiring, and leading by example is a powerful coaching tool:</p>

<blockquote>
  <p>Demonstrate through your own actions, your responses, the way you conduct yourself, the sort of mindset you are trying bring out in them and their teammates. That’s all. Not rocket science, but sometimes very challenging. (Bob Allen on <a href="https://wedotdd.com/">WeDoTDD</a> slack)</p>
</blockquote>

<blockquote>
  <p>Be the change you want to see in the world (<a href="https://en.wikiquote.org/wiki/Mahatma_Gandhi#Misattributed">misattributed to Gandhi</a>)</p>
</blockquote>

<p>Some collaboration practices will help. For example, Liberating Structures, a set of facilitation techniques, <a href="https://medium.com/the-liberators/liberating-structures-unleash-and-involve-everyone-7a15ef57327">are viral by design</a>. Participating in a liberating structure is usually enough to facilitate it later!</p>

<p>Here is another example. Someone good at negotiation and conflict resolution can protect a whole team!</p>

<p>Finally, as we improve our collaboration, we will become better facilitators. As a result, we will run more effective workshops, which will have more impact on the teams we coach.</p>

<p>Your collaboration practices might spread to the CEO! (cf <a href="https://philippe.bourgau.net/how-to-avoid-the-large-scale-impact-pitfall/#local-action-global-impact">Local Action, Global Impact</a>)</p>

<h3 id="better-communication-will-make-us-happier">Better communication will make us happier!</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-11-07-the-secrets-of-tech-coaching-better-communication-skill/contagious-happiness.jpg" alt="Photo of 2 kids having fun and claiming victory in front of a computer. Good communication skills have more chance to spread contagious happiness in the workplace." /></p>

<p>Not only will investing in collaboration make you a better coach. Improving your communication and collaboration skills also makes you happier!</p>

<ul>
  <li>A <a href="https://www.thehindubusinessline.com/opinion/good-relationships-at-workplace-foster-happiness/article66711351.ece">Harvard study</a> revealed that the quality of relationships is the #1 factor for happiness! Any communication technique will improve some aspects of relationships. The communication skills we grow for work will also serve us in our personal lives. So, improving our collaboration skills for tech coaching will make us happier humans!</li>
  <li>Relationships at work are crucial to job performance and job satisfaction. Having a bully at work can make your life miserable. The opposite is also true! <a href="https://www.gallup.com/workplace/397058/increasing-importance-best-friend-work.aspx">Gallup studies</a> demonstrated that having friends at work improves performance and job satisfaction. <a href="https://hbr.org/2019/07/to-be-happier-at-work-invest-more-in-your-relationships">Other research</a> states that at work, relationships make us happier than purpose!</li>
</ul>

<p>And… As communication skills are contagious, we will also impact the lives of our coachees!</p>

<p>Always bet on communication skills! Not only for your coaching gigs but for your general well-being.</p>

<p><strong>I hope you understand how vital communication skills are. Let’s see a few “Communication skills.”</strong></p>

<h2 id="my-collaboration-skills-journey">My collaboration skills journey</h2>

<p>I was not born a good communicator… and I’m still learning! I remain shy and usually feel awkward in social situations. Yet, it feels way easier than it used to be. In particular, I manage well at work and with my close ones.</p>

<p><strong>Here is the “story” of the communication techniques that impacted my life most.</strong> It’s not an exhaustive list of everything that exists. But you might find something that spikes your curiosity!</p>

<h3 id="code-like-prose">Code Like Prose</h3>

<p>When I started as a programmer, solo coding felt safe and relaxing. There was only the logic of the program to deal with.</p>

<p>However, I had to change my mind after a few months in my first job. I understood that my career would not be the “introvert paradise” I had envisioned. <strong>Programmers need to communicate <em>a lot</em>! And the primary way programmers communicate is through code!</strong> With time, I learned that writing Code Like Prose made my colleagues and future self much happier.</p>

<p>💡The <a href="https://www.goodreads.com/book/show/44936.Refactoring?from_search=true&amp;from_srp=true&amp;qid=RXaTFn851d&amp;rank=1">Refactoring</a> and <a href="https://www.goodreads.com/en/book/show/4268826">Growing Object Oriented Software Guided By Tests</a> books were essential to my learning.</p>

<blockquote>
  <p>🤣 Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Code for readability. (<a href="https://groups.google.com/g/comp.lang.c++/c/rYCO5yn4lXw/m/oITtSkZOtoUJ?pli=1">John F. Woods</a>)</p>
</blockquote>

<h3 id="visual-management">Visual Management</h3>

<p>As I read more about TDD and refactoring, I became interested in the agile literature. I discovered how <strong>Visual Management can reduce the painful boss-subordinate relationship.</strong> Visualizing work and progress enhances team alignment, transparency, autonomy, and self-responsibility. Let’s not take Visual Management for granted! It still could be used more.</p>

<p>💡 Reading the <a href="https://www.goodreads.com/book/show/8086552-kanban?ref=nav_sb_ss_1_6">Kanban</a> book was an eye-opener on this one.</p>

<h3 id="pair-programming">Pair Programming</h3>

<p>We often look at Pair Programming through the lens of code quality and productivity. Yet, it is also an incredible workout for communication skills. <strong>My pair programming years made my listening, negotiation, and self-awareness skills soar.</strong></p>

<p>💡I wrote a lot about pairing, but my first advice to get better at it would be to start attending (or <a href="https://philippe.bourgau.net/how-to-start-a-team-coding-dojo-randori-today/">creating</a>) a coding dojo.</p>

<h3 id="facilitation">Facilitation</h3>

<p>As I became “the agile guy,” my teammates asked me to facilitate retrospectives. I learned <strong>the facilitation posture: a communication catalyst with a touch of mediation</strong>. Good facilitation will directly improve teamwork. Facilitation provides the incredible leverage of collective intelligence to tackle complex tasks.</p>

<p>💡The <a href="https://pragprog.com/titles/dlret2/agile-retrospectives-second-edition/">Agile Retrospectives: Making Good Teams Great</a> was invaluable to get me started. (Note: They are working on a second edition!)</p>

<h3 id="writing">Writing</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-11-07-the-secrets-of-tech-coaching-better-communication-skill/writing.jpg" alt="Photo of an ink bottle with a writing quill. Writing is an overlooked skill in software development, as it leads to more readable code, and more effective written collaboration." /></p>

<p>I started this blog as “Notes to my future self.” The first posts were rough drafts. I’m still no Hemingway, but my writing skills have improved a lot since then. <strong>Writing is an overlooked skill for developers.</strong> There is a motto that says “Writing is Thinking”! <strong>Writing skills yield more readable code, helpful documentation, and fewer email back-and-forths.</strong> Full-remote companies like <a href="https://www.nytimes.com/2017/09/01/jobs/corner-office-jason-fried-basecamp.html">Basecamp use writing skills as hiring criteria</a>! Also, it does not matter where you start: I used to have abyssal grades in writing at school…</p>

<p>💡To improve your writing skills, start writing a blog or taking notes. You can also study classic books like <a href="https://www.goodreads.com/book/show/33514.The_Elements_of_Style">Elements of Style</a>. Finally, apps like <a href="https://hemingwayapp.com/">Hemingway</a> and <a href="https://app.grammarly.com/">Grammarly</a> have helped me a lot to improve on my mistakes.</p>

<h3 id="living-documentation">Living Documentation</h3>

<p>Living Documentation is what you get when you combine TDD with Writing. The initial idea is to use human-readable text to write domain-oriented tests. The goal is to involve non-developers. It’s all about communication. <strong>Used well, Fit, Cucumber, or literate programming can transform collaboration with stakeholders.</strong> Who’s never wasted time building the wrong thing right?</p>

<p>💡I first learned about Living Documentation with the now-outdated <a href="https://www.goodreads.com/book/show/3855.Fit_for_Developing_Software">Fit book</a>. Since then, I have enjoyed:</p>

<ul>
  <li><a href="https://www.goodreads.com/book/show/10288718-specification-by-example">Specifications by Example</a></li>
  <li><a href="https://www.goodreads.com/book/show/32171117-writing-great-specifications">Writing Great Specifications</a></li>
  <li><a href="https://pragprog.com/titles/hwcuc2/the-cucumber-book-second-edition/">The Cucumber book</a></li>
  <li>And <a href="https://www.goodreads.com/book/show/34927405-living-documentation">Living Documentation</a>.</li>
</ul>

<h3 id="remote-pairing">Remote Pairing</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-11-07-the-secrets-of-tech-coaching-better-communication-skill/remote-pairing.jpg" alt="Visual of two characters talking through open cans linked by a string. We need some time to get used to the lower communication bandwidtch when remote pairing." /></p>

<p>We were all forced into remote work during the Covid pandemic. Yet, I had already been doing regular remote pair programming for a few years. This experience proved full of lessons. <strong>Remote work forces us to make a lot of the implicit communication explicit.</strong> The same goes for remote pairing. <strong>Remote pairing makes us aware of how we communicate and allows us to improve on our flaws.</strong></p>

<p>💡I remember enjoying the <a href="https://pragprog.com/titles/jkrp/remote-pairing/">Remote Pairing book</a>. Otherwise, I recommend learning the <a href="https://philippe.bourgau.net/best-open-source-tools-for-remote-pair-programming/">git-handover</a> mechanism to get started with remote pairing. It’s also a good idea to run daily ‘mini-retros’ with your pair to fine-tune your pairing.</p>

<h3 id="non-violent-communication">Non Violent Communication</h3>

<blockquote>
  <p>🤣 No, Non-Violent Communication is not a rehab program for bullies…</p>
</blockquote>

<p>The company I work for, Murex, has a Non-Violent Communication course in its catalog! I was lucky to attend one session a few years ago. NVC lessons can be life-changing:</p>

<ul>
  <li>The difference between facts, feelings, and needs</li>
  <li>The fact that we are all responsible for our state of mind</li>
  <li>How to give non-violent feedback</li>
</ul>

<p>Don’t expect an overnight change, though. <strong>NVC is a straightforward idea that takes years to master. Yet, the sooner you start this path, the better.</strong> The more we improve our NVC skills, the less conflict we will see around us!</p>

<p>💡If you have the chance, attend a course, an immersion retreat, or try to attend a regular practice group. If you prefer books, <a href="https://www.goodreads.com/book/show/71730.Nonviolent_Communication">Language of Life</a> is the reference. <a href="https://tidyfirst.substack.com/p/emotions-a-code-book">Kent Beck</a> also mentioned <a href="https://www.goodreads.com/en/book/show/8048177">The Language of Emotions</a>, which connects to the topic.</p>

<h3 id="event-storming-and-collaborative-design-workshops">Event Storming and Collaborative Design Workshops</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-11-07-the-secrets-of-tech-coaching-better-communication-skill/event-storming-action.jpg" alt="Photo of people during and Event Storming Workshop. We can see many people engaged in discussion in front of the &quot;Infinite design board&quot; typical to Event Storming" /></p>

<p>Team-wide collaborative design is challenging even with workshop facilitation and software design skills. I struggled with that for a few years when I stumbled on Event Storming. I was immediately hooked. <strong>Collaborative design is a way to do just enough design up-front in a few days.</strong> It also ensures everyone contributes, understands, and aligns on the direction! It has a tremendous impact on the motivation and productivity of a team.</p>

<p>💡I learned about Event Storming from <a href="https://leanpub.com/introducing_eventstorming">Alberto Brandolini’s work-in-progress book</a>. Matthieu Tournemire and I are also currently <a href="https://www.eventstormingjournal.com/1h-event-storming-book/">blogging The 1-hour Event Storming book</a>. Other standard collaborative design workshops include <a href="https://cucumber.io/blog/bdd/example-mapping-introduction/">Example Mapping</a>, <a href="https://domainstorytelling.org/">Domain Storytelling</a>, <a href="https://www.goodreads.com/en/book/show/22221112">User Story Mapping</a>, and <a href="https://leanpub.com/impact-mapping/">Impact Mapping</a>…</p>

<h3 id="visual-facilitation">Visual Facilitation</h3>

<p>We say that a drawing is worth a thousand words. It’s incredible how a few drawings make presentations more engaging. Sketching also saves a lot of time. The audience will get the idea faster. And you’ll save time scribbling rather than writing or talking. You can use sketches in your notes, presentations, workshops, and documentation. The surprise is that you don’t need to be good at drawing to do visual facilitation!</p>

<p>💡If you have the chance, attend a training on Visual Facilitation. But <strong>you can also start sketch-noting right now: you only need a pad and a pencil</strong>. I began by combining:</p>

<ul>
  <li><a href="https://lsc.cornell.edu/how-to-study/taking-notes/cornell-note-taking-system/">Cornell’s note-taking system</a></li>
  <li>With mind maps </li>
  <li>And small drawings to decorate ideas.</li>
</ul>

<h3 id="mob-programming">Mob Programming</h3>

<p>Mob Programming is extreme pairing. <strong>As a coach, mobbing has proven much more time-effective than pairing.</strong> We can exchange practices with the whole team instead of a single coachee. More than that, we can also observe and work on team dynamics! <strong>Mobbing will test many of your communication and collaboration skills: listening, facilitation, self-awareness, negotiation, collaborative design…</strong></p>

<p>💡You can practice mob programming by running team coding dojos with <a href="https://llewellynfalco.blogspot.com/2014/06/llewellyns-strong-style-pairing.html">strong style pairing</a>. After a while, coachees might suggest trying it with production code. A <a href="https://philippe.bourgau.net/how-to-help-a-team-to-find-their-preferred-mob-programming-rules/">Mob Programming code retreat</a> is also a safe and quick way to experiment with various flavors.</p>

<h3 id="public-speaking">Public Speaking</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-11-07-the-secrets-of-tech-coaching-better-communication-skill/public-speaking.jpg" alt="Close-up photo of a microphone on stage. Public speaking is a challenge for many of us. Giving talks will not only increase our personal branding, it's also a great way to grow as a person." /></p>

<p>Public speaking is about impacting an audience in a limited time. This is useful to nudge management or a team into healthier work habits. <strong>Public speaking is also an occasion to get out of our comfort zones and master stress.</strong> I know developers who have used public speaking as self-therapy against shyness. Being able to stay calm in stressful situations is a communication superpower!</p>

<p>💡Ask a local or remote meetup if you could do a short presentation. The audience is usually friendly, and the entry bar is low. Then, learn how to answer a Call For Presentations (CFP) and try your luck in more significant events. The <a href="https://www.goodreads.com/en/book/show/25946095">Present! A Techie’s Guide to Public Speaking</a> book also has good reviews, but I must warn you that I did not read it.</p>

<h3 id="verbal-aikido">Verbal Aikido</h3>

<p>A few years ago, I started attending a weekly <a href="https://www.verbalaikido.org/online-classes/">Verbal Aikido dojo</a>. The goal of Verbal Aikido is to transform conflicts into constructive conversations. <strong>Conflicts tend to shut our neocortex off and trigger our reptilian brain to freeze, fight, or flee. Regular real-world conflict practice taught me to deal with difficult situations more peacefully.</strong></p>

<p>💡To try Verbal Aikido, join the <a href="https://www.verbalaikido.org/online-classes/">online dojo every Monday</a>. I will also give intro workshops for developers at public events—for example, <a href="https://xcraft.fr/#planning">XCraft Lyon</a> and <a href="https://www.propile.xpdaysbenelux.org/programs/export/Os0fX3XBNwUkqrJCXL9C">XPDays Benelux</a> in November 2023.</p>

<h3 id="non-violent-code-reviews">Non-Violent Code Reviews</h3>

<blockquote>
  <p>(Bully) Why do you do that?
(Author) …
(Bully) No, I mean, as a job.</p>
</blockquote>

<p>I wouldn’t say I like code reviews. Whenever I can, I replace them with pairing. Yet, Matthieu Tournemire and I are writing “The 1-hour Event Storming Book” together. We don’t have overlapping writing time slots, so we resorted to text reviews. Like code reviews, it was a collaboration challenge. <strong>How can we give valuable reviews while keeping the author’s intrinsic motivation?</strong> The Non-Violent Communication <strong>pattern of observation, feeling, need, and suggestion does wonders for reviews.</strong> Guess what? It also works like a charm for code reviews!</p>

<ul>
  <li>It does not trigger conflict.</li>
  <li>It gives autonomy to the author to improve the code and learn.</li>
</ul>

<p>As a complement, Verbal Aikido techniques are great for de-escalating harsh reviews!</p>

<p>💡Try it! Next time you give a review, for example, in a coaching session, use the NVC pattern to express your point. There are <a href="https://www.sociocracyforall.org/nvc-feelings-and-needs-list/">NVC cheat sheets</a> for feelings and needs! Remember also that suggestions are only suggestions!</p>

<h3 id="liberating-structures">Liberating Structures</h3>

<p><a href="https://www.liberatingstructures.com/ls-menu/"><img src="https://philippe.bourgau.net/imgs/2023-11-07-the-secrets-of-tech-coaching-better-communication-skill/liberating-structures-menu.webp" alt="An illustration with the &quot;Menu&quot; of the original 35 liberating structures." />
</a>
<em>Liberating Structures were developed by Henri Lipmanowicz and Keith McCandless. Liberating Structures are licensed under a Creative Commons License.</em></p>

<p>I had the chance to learn <a href="https://www.liberatingstructures.com/">Liberating Structures</a> during an <a href="https://www.liberatingstructures.com/immersion-workshops/">Immersion Workshop</a>. It was a transformative experience. Liberating Structures are facilitation bricks to create inclusive and engaging experiences. It transformed <em>all</em> the collective interactions I have. <strong>Liberating Structures are the best tool I know to leverage collective intelligence.</strong> They also scale very well to large groups. <strong>They have made all my meetings and workshops shorter and more effective. Even my public conferences now rely on Liberating Structures!</strong></p>

<p>💡To get started, try to join a local user group or register for an immersion workshop. You can also check the <a href="https://philippe.bourgau.net/liberating-structures-the-slow-code-retreat-s-little-facilitation-secret/">Slow Code Retreat</a>. It has detailed instructions and can serve as a Liberating Structure Immersion Workshop.</p>

<h3 id="communication-dojos-in-progress">Communication Dojos (In progress)</h3>

<p>We are getting to my current ongoing initiatives. As I wrote above, some skills, like NVC or Verbal Aikido, take time to master. The key, though, is practice. The more we practice, the better we get at them. I am currently experimenting with communication dojos. The idea is to <strong>regularly and safely practice real collaboration or communication issues. It could be a harsh code review, a pushy salesperson, or making the case for refactoring.</strong> I hypothesize that a team could protect itself against a stressful environment!</p>

<p>💡The <a href="https://www.liberatingstructures.com/15-improv-prototyping/">Improv Prototyping liberating structure</a> is the perfect fit to run such events. Getting someone with experience in NVC or Verbal Aikido would also greatly benefit the group. I’ll keep you updated as I learn more from this practice.</p>

<h3 id="open-space-architecture-in-progress">Open Space Architecture (In Progress)</h3>

<p>Event Storming is the only collaborative design workshop I know that works with more than ten people. Unfortunately, it is not the answer to all architectural questions and challenges. Fortunately, Liberating Structures also scale very well to large groups. <strong>I am experimenting with combining liberating structures to run large collaborative architecture workshops.</strong> Such workshops should yield better results in less time. If I am right, it will scale engagement, understanding, motivation, and alignment to large audiences!</p>

<p>💡I will give a workshop on this topic at <a href="https://www.propile.xpdaysbenelux.org/programs/export/NinpI8F6iDAYkiQEw0bw">XPDays Benelux 2023</a>. I’ll keep you updated as I learn more.</p>

<h3 id="core-protocols-in-progress">Core Protocols (In Progress)</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-11-07-the-secrets-of-tech-coaching-better-communication-skill/teamwork.jpg" alt="Chalk drawing of the word &quot;teamwork&quot; with 2 characters handling a gear together. Teamwork is the cornerstone of software development, and Core Protocols were designed to foster great teamwork." /></p>

<p><a href="https://thecoreprotocols.org/">Core Protocols</a> are not new, but I never took the time to look into them. I have lately been reading and collecting feedback from real users. I’d like to see how I can combine them with other practices. In particular, I’m thinking of Liberating Structures, Verbal Aikido, and mob programming. Could Core Protocols boot a better team dynamic in a short time?</p>

<p>💡<a href="https://www.goodreads.com/en/book/show/1648693">Software For Your Head</a> is the reference book about Core Protocols, but it is said to be a challenging read. Core Protocols experts say the best way to learn is to attend a course or a “boot camp.” So my best advice would be to find a trainer!</p>

<h3 id="combine-and-compound">Combine and Compound</h3>

<p><strong>An interesting aspect of communication techniques is that we can innovate by combining them.</strong> For example:</p>

<ul>
  <li>I replaced <em>all</em> my “gathering” with Liberating Structures.</li>
  <li>Improving my writing showed everywhere, from code to emails.</li>
  <li>Inspired by Core Protocols, I designed “mobbing cards” to silently express common reactions in the mob. (Note: I might write more about that later).</li>
  <li>My team and I are also experimenting with “1-2-4-all-Design!” to ‘pause’ the mob for 1 or 2 rounds of introvert-friendly design time.</li>
</ul>

<p>Almost every day, I spot times when my communication could have been better. And I’m sure my list will continue to grow! The better our communication skills, the more we can combine them to create beautiful experiences for us and those around us. Every new technique we learn does not add to our impact; it multiplies it!</p>

<h2 id="always-bet-on-communication">Always bet on communication!</h2>

<p><strong>Team collaboration and communication can make or break technical coaching!</strong> We can coach by example and fix broken teamwork by being good collaborators. It starts with us!</p>

<p>There is an almost infinite list of communication techniques we can learn:</p>

<ul>
  <li>From deep listening and connection, with practices like Non-Violent Communication and Verbal Aikido</li>
  <li>To disruptive group collaboration with Event Storming and Liberating Structures!</li>
</ul>

<p><strong>Whatever your interest and need, there is a fun way to grow your collaboration skills!</strong> Select a topic, start learning, experiment, and share your experiences.</p>

<p>PS: I am thinking of writing a book about communication and collaboration activities for teams. The title could be “Collaboration Activities to Fix Software Problems.” It would link collaboration techniques to common software problems and provide step-by-step fixes. I’d love to know what you think of the idea.</p>]]></content><author><name>Philippe Bourgau</name></author><category term="coaching" /><category term="collaborative work" /><category term="coaching by example" /><category term="continuous improvement" /><category term="team building" /><category term="collaboration" /><category term="communication" /><summary type="html"><![CDATA[Running code katas or mobs with groups that lack teamwork is almost impossible! Coaching by example is an effective way to showcase great collaboration. Here is an overview of 20 effective communication and collaboration techniques I learned as a dev and coach.]]></summary></entry><entry><title type="html">Liberating Structures: the Slow Code Retreat’s little facilitation secret</title><link href="https://philippe.bourgau.net/liberating-structures-the-slow-code-retreat-s-little-facilitation-secret/" rel="alternate" type="text/html" title="Liberating Structures: the Slow Code Retreat’s little facilitation secret" /><published>2023-08-03T00:00:00+00:00</published><updated>2023-08-03T00:00:00+00:00</updated><id>https://philippe.bourgau.net/liberating-structures-the-slow-code-retreat-s-little-facilitation-secret</id><content type="html" xml:base="https://philippe.bourgau.net/liberating-structures-the-slow-code-retreat-s-little-facilitation-secret/"><![CDATA[<p><em>You can now run the Slow Code Retreat by following the facilitation guide. By doing so, you’ll also learn 6 Liberating Structures for your future workshops.</em></p>

<p><img src="https://philippe.bourgau.net/imgs/2023-07-22-liberating-structures-the-slow-code-retreat-s-little-facilitation-secret/snail-carrying-liberating-structures.jpg" alt="Drawing of a snail carrying the &quot;Liberating Structures&quot; box logo on his back. The Slow Code Retreat can act as a Liberating Structures immersion workshop training." /></p>

<blockquote>
  <p>After discussing with a few participants, we would like to spread this workshop. Could you come to run meetups in the area where I live?</p>
</blockquote>

<blockquote>
  <p>I liked how you made us go around the room and meet each other.</p>
</blockquote>

<blockquote>
  <p>The facilitation was excellent, better than anything I have seen before!</p>
</blockquote>

<p><a href="https://philippe.bourgau.net/a-slow-code-retreat-to-be-less-in-a-hurry/">Previously, I introduced the Slow Code Retreat</a> against their never-ending backlog of tasks.</p>

<p>I recently ran the Slow Code Retreat at <a href="https://cfp.devoxx.fr/2023/talk/CVD-6398/(Slow_(code)_retreat)">Devoxx Paris</a>, <a href="https://ncrafts.io/">Newcrafts</a>, and <a href="https://dddeurope.com/">DDD Europe</a>. Feedback has been great. Some people even wanted to run the workshop in their communities and teams! Unfortunately, the workshop may seem challenging to facilitate at first.</p>

<blockquote>
  <p>I want to facilitate the slow code retreat workshop myself. Wouldn’t it be great if I could grow my facilitation skills simultaneously?</p>
</blockquote>

<h2 id="detailed-instructions-for-facilitating-the-slow-code-retreat-workshop">Detailed Instructions for Facilitating the Slow Code Retreat Workshop</h2>

<p><a href="https://twitter.com/mathieucans">Matthieu Cans</a> was an enthusiastic participant in the workshop at Newcrafts. After the session, he asked me if he could re-run the workshop at <a href="https://www.alpescraft.fr/">Alpes Craft</a> the week after. <strong>With the slides, Matthieu ran the workshop both at Alpes Craft and at his company with his co-workers</strong>. He received similar feedback as I did. Again, some participants said they wanted to spread this wider.</p>

<blockquote>
  <p>We need to re-run this workshop in our communities, companies, and other conferences!</p>
</blockquote>

<p><a href="https://github.com/philou/Kata-Slow-Code/raw/master/slow%20(code)%20retreat.pptx"><img src="https://philippe.bourgau.net/imgs/2023-07-22-liberating-structures-the-slow-code-retreat-s-little-facilitation-secret/slow-code-retreat-workshop-slides.jpg" alt="Picture of a stack of slides for the &quot;Slow Code Retreat&quot;. This contains all the material needed to run the workshop." /></a></p>

<p><a href="https://github.com/philou/Kata-Slow-Code/raw/master/slow%20(code)%20retreat.pptx">Here is a detailed PowerPoint presentation</a> (.pptx). <strong>The presenter notes include step-by-step facilitation instructions. I licensed the slides under <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons</a></strong>. You can freely use and adapt them as long as you mention the source and keep the same license.</p>

<h2 id="spread-slow-code-and-learn-liberating-structures">Spread Slow-Code AND learn Liberating Structures</h2>

<p>I prepared the Slow Code Retreat with the <a href="https://www.liberatingstructures.com/">Liberating Structures</a> facilitation system. The workshop’s goal is to help developers achieve a sustainable pace. But as a bonus, it will also teach you how to facilitate using Liberating Structures!</p>

<h3 id="you-are-safe-your-audience-will-love-the-slow-code-retreat">You are safe: your audience will love the slow-code-retreat</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-07-22-liberating-structures-the-slow-code-retreat-s-little-facilitation-secret/thumbs-up.jpg" alt="Photo of the hands of 2 people showing their thumbs up. Overall, the participants of the Slow Code Retreat love it." /></p>

<p>The feedback from workshop participants has been consistently positive. Many expressed how the workshop has had a profound impact on their work.</p>

<blockquote>
  <p>I will take his advice and start doing the things he taught us. It will make me a happier and more calm engineer. - Participant at DDD Europe</p>
</blockquote>

<blockquote>
  <p>Big impact! How to look at development as a training system. - Participant at DDD Europe</p>
</blockquote>

<blockquote>
  <p>Thanks a lot for this workshop. It had a real impact on my way of working. - Participant at NewCrafts</p>
</blockquote>

<blockquote>
  <p>😂 I attended the Slow Code Retreat because I wanted to ‘commit’ to a more sustainable coding lifestyle! - A joke by Chat GPT</p>
</blockquote>

<p><strong>This workshop is particularly well-received by experienced developers.</strong> Juniors may not be ready to embrace that there will always be more work than time 😱 ! Consider your audience to determine if this workshop is the right fit for them.</p>

<h3 id="you-can-do-it-the-slow-code-retreat-is-reusable-by-design">You can do it: the slow-code-retreat is reusable by design.</h3>

<p><a href="https://philippe.bourgau.net/imgs/2023-07-22-liberating-structures-the-slow-code-retreat-s-little-facilitation-secret/slow-code-retreat-liberating-structure-string-cards.jpg"><img src="https://philippe.bourgau.net/imgs/2023-07-22-liberating-structures-the-slow-code-retreat-s-little-facilitation-secret/slow-code-retreat-liberating-structure-string-cards-small.jpg" alt="Photo of the Liberating Structures design cards that represent the sequence of the Slow Code Retreat." /></a>)</p>

<p><strong>The workshop is a string of Liberating Structures:</strong></p>

<ol>
  <li>Get in the mood with <a href="https://liberatingstructures.de/spiral-journal/">Spiral Journal</a> (<a href="https://liberatingstructures-de.translate.goog/spiral-journal/?_x_tr_sl=auto&amp;_x_tr_tl=english">in english</a>)</li>
  <li>Meet and share with <a href="https://www.liberatingstructures.com/2-impromptu-networking/">Impromptu Networking</a></li>
  <li>5 minutes of storytelling to explain how I came up with this idea of Slow Coding</li>
  <li>Sharing what Slow Coding is with <a href="https://liberatingstructures.de/gallery-walk/">Gallery Walk</a> (<a href="https://liberatingstructures-de.translate.goog/gallery-walk/?_x_tr_sl=auto&amp;_x_tr_tl=english">in english</a>)</li>
  <li>Experiment with different flavors of Slow Coding using <a href="https://www.liberatingstructures.com/15-improv-prototyping/">Improv Prototyping</a>
    <ul>
      <li>Live coding demonstration</li>
      <li>Setting up groups and development environments</li>
      <li>Approximately 30 minutes of slow coding</li>
      <li>Retrospective using <a href="https://www.liberatingstructures.com/1-1-2-4-all/">1-2-4-All</a></li>
      <li>You can start with an optional solo round if time allows</li>
    </ul>
  </li>
  <li>5 minutes of storytelling to explain what I have learned with Slow Coding</li>
  <li>Takeaways with <a href="https://www.liberatingstructures.com/7-15-solutions/">15% Solutions</a></li>
</ol>

<p>If you have a co-facilitator, you can even replace the two storytelling steps with a <a href="https://www.liberatingstructures.com/22-celebrity-interview/">Celebrity Interview</a>, which would be a 7th Liberating Structure.</p>

<p>Liberating Structures create high-quality and reusable workshops. For proof, other facilitators ran the Slow Code Retreat with success.</p>

<h3 id="you-will-learn-the-slow-code-retreat-is-a-liberating-structures-training">You will learn: the slow-code-retreat is a Liberating Structures training.</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-07-22-liberating-structures-the-slow-code-retreat-s-little-facilitation-secret/traffic-signs-new-skills.jpg" alt="Photo of a traffic sign written &quot;New Skills Training&quot;. Given the detailed facilitation instructions, the slow code retreat can serve as a Liberating Structure Training." /></p>

<p>We typically learn Liberating Structures through practice. <strong>The idiomatic Liberating Structures training is a 2 or 3 days <a href="https://www.liberatingstructures.com/immersion-workshops">Immersion Workshop</a>. The Slow Code Retreat can act as a mini immersion workshop.</strong></p>

<blockquote>
  <p>💡 Run the Slow Code Retreat and get a taste of the surprising power of Liberating Structures!</p>
</blockquote>

<p>I first heard of Liberating Structures at <a href="https://xpdaysbenelux.org/">XPDays Benelux</a> 4 or 5 years ago. They looked interesting, but I classified them as “yet more facilitation activities.” As a result, they always ended up at the bottom of my learning list. I understood my mistake when we looked at how to train Murexians to workshop facilitation.</p>

<blockquote>
  <p>🤣 Am I becoming a Liberating Structures fanboy?</p>
</blockquote>

<p>So, why should you learn Liberating Structures instead of other facilitation techniques? <strong>Liberating Structures are <a href="https://medium.com/the-liberators/liberating-structures-should-be-everywhere-people-interact-4c816ae512bb">a disruptive language for collaboration</a></strong>. They radically shift how people work together!</p>

<ul>
  <li>They encourage <strong>contributions from everyone</strong>.</li>
  <li>They <strong>thrive in complex</strong> and diverse environments.</li>
  <li>They have a <strong>viral</strong> aspect, and they propagate and spread by design.</li>
  <li>They can <strong>scale</strong> to accommodate groups of 100 or more.</li>
</ul>

<p>The Slow Code Retreat workshop is mostly a sequence of Liberating Structures. That is why facilitating this workshop will teach you your first Liberating Structures.</p>

<p>As written above, Liberating Structures are viral. So <strong>you are likely to see some of the participants reuse 1-2-4-all in a later meeting!</strong></p>

<h2 id="run-the-slow-code-retreat-and-incorporate-liberating-structures-in-your-workshops">Run the Slow Code Retreat and Incorporate Liberating Structures in Your Workshops</h2>

<p>Like Matthieu Cans, <strong>run the workshop, and spread slow coding while becoming a better facilitator!</strong></p>

<p>Find your audience and send an invitation! Before the session:</p>
<ol>
  <li>Check the slides’ notes for the invitation and purpose of each structure.</li>
  <li>Read the official descriptions of these Liberating Structures.</li>
  <li>Observe how they are adapted to the Slow Code Retreat.
That should give you the knack of Liberating Structures.</li>
</ol>

<p><img src="https://philippe.bourgau.net/imgs/2023-07-22-liberating-structures-the-slow-code-retreat-s-little-facilitation-secret/space-shuttle-take-off.jpg" alt="Photo of the space shuttle at take off. Liberating Structures are a real game changer in how we collaborate. Use the Slow Code Retreat as an opportunity to get started with Liberating Structures and get ready for the ride!" /></p>

<p>In your future workshops, add high return-on-investment structures such as:</p>
<ul>
  <li>1-2-4-All</li>
  <li>Impromptu Networking</li>
  <li>15% Solutions</li>
</ul>

<p><strong>These structures are excellent starting points to enhance your facilitation skills</strong>. Once you are at ease with those, pick another in the <a href="https://www.liberatingstructures.com/ls/">Liberating Structures menu</a>.</p>

<p>Finally, if you improve the slow code retreat, please <a href="https://github.com/philou/Kata-Slow-Code">contribute back through Github</a>. This way, we will get the workshop better together.</p>

<h2 id="other-posts-that-might-interest-you">Other posts that might interest you:</h2>

<ul>
  <li>Learn why you would want to run a slow code retreat: <a href="https://philippe.bourgau.net/a-slow-code-retreat-to-be-less-in-a-hurry/">A “Slow Code Retreat” to be less in a hurry</a>.</li>
  <li>Another workshop guide: <a href="https://philippe.bourgau.net/a-quality-view-workshop-to-discuss-technical-excellence/">A Quality View Workshop to Discuss Technical Excellence</a>.</li>
  <li>And another: <a href="https://philippe.bourgau.net/a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/">A complete workshop for your team to see what’s a good test strategy</a>.</li>
  <li><a href="https://philippe.bourgau.net/5-whole-team-workshops-to-increase-developers-role-in-sprint-planning/">5 Whole-Team Workshops To Increase Developers’ Role In Sprint Planning</a>.</li>
  <li>A guide to run TCR sessions code katas: <a href="https://philippe.bourgau.net/how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/">How to make TCR evolutionary design practice sessions irresistible</a>.</li>
</ul>]]></content><author><name>Philippe Bourgau</name></author><category term="coaching" /><category term="workshop" /><category term="sustainable pace" /><category term="continuous improvement" /><category term="facilitation" /><category term="liberating structures" /><summary type="html"><![CDATA[The feedback for the Slow Code Retreat is excellent. Participants even want to run it in their circles! You can now run the Slow Code Retreat by following the facilitation guide. By doing so, you'll spread slow coding while learning 6 Liberating Structures for your future workshops.]]></summary></entry><entry><title type="html">How To Fix Bad Agile By Discussing Baby Steps</title><link href="https://philippe.bourgau.net/how-to-fix-bad-agile-by-discussing-baby-steps/" rel="alternate" type="text/html" title="How To Fix Bad Agile By Discussing Baby Steps" /><published>2023-06-08T00:00:00+00:00</published><updated>2023-06-08T00:00:00+00:00</updated><id>https://philippe.bourgau.net/how-to-fix-bad-agile-by-discussing-baby-steps</id><content type="html" xml:base="https://philippe.bourgau.net/how-to-fix-bad-agile-by-discussing-baby-steps/"><![CDATA[<p><em>How to fix bad agile by starting neutral discussions about <a href="https://philippe.bourgau.net/incremental-software-development-strategies-for-large-scale-refactoring-number-2-baby-steps">baby-steps</a> programming. Baby steps are a sustainable and productive approach to writing code.</em></p>

<p><img src="https://philippe.bourgau.net/imgs/2023-06-04-how-to-fix-bad-agile-by-discussing-baby-steps/baby-steps-aha-moment.jpg" alt="Drawing showing baby footprints and a character getting their &quot;Aha! Moment&quot;. Baby-Steps programming can be the entry door to new ways of working for many developers who have been disgusted by &quot;Bad Agile&quot;." /></p>

<blockquote>
  <p>The average Scrum “installation” is not delivering what it could for the organization, and quite often making the lives of the people at the code face worse. I also believe that the practices and understanding of what was called XP can help developers with that, if only we could reach them.</p>
</blockquote>

<blockquote>
  <p>It may be true that Scrum’s customers like Scrum. I believe that by and large, Scrum’s users quite often do not.</p>
</blockquote>

<blockquote>
  <p>We may need to literally form a new “anti-Agile” community to support these ideas, abandoning the word “Agile” to the many ways it has been watered down and perverted.</p>
</blockquote>

<p><strong>As a technical Agile coach, working with a team that <a href="https://ronjeffries.com/articles/016-09ff/defense/">bad Scrum</a> or Agile practices have hurt can be challenging</strong>. These negative experiences can lead to skepticism and resistance towards anything “agile” related. As a result, gaining their trust and engaging them in XP practices becomes challenging.</p>

<blockquote>
  <p>🤣 Regardless of what the SAD MF says, there is no need for training the resources since everything is readily available on the SAD website. Management probably also forgot possible training expenses in their <a href="https://scaledagiledevops.com/success-stories/transition-to-sadmf/#yearly-strategic-very-important-budget-allocation-initiation-committee-session-ysvibaics">YSVIBAICS</a>. (Satiric <a href="https://scaledagiledevops.com/success-stories/transition-to-sadmf/">Transition to Scale Agile DevOps Maturity Model</a>. Check it out for a good laugh)</p>
</blockquote>

<p>I’ve had my share of failures when working with teams that had been imposed an Agile-Method™. They were viewing all agile stuff, me included, as:</p>

<ul>
  <li>At best: useless bureaucracy</li>
  <li>Or worst: a sneaky way to spy on them and ensure they remained busy and productive 100% of the time</li>
</ul>

<blockquote>
  <p>Wouldn’t it be great if we had ways to connect with developers without mentioning Agile or Scrum?</p>
</blockquote>

<p>What can we do?</p>

<h2 id="lets-talk-about-baby-steps">Let’s talk about Baby Steps.</h2>

<figure class="">
  <img src="https://philippe.bourgau.net/imgs/2023-06-04-how-to-fix-bad-agile-by-discussing-baby-steps/what-are-baby-steps-small.jpg" alt="Sketch note with the title 'What Are Baby Steps'. It contains four parts: names of baby steps, friend tools or techniques, the baby steps skill path, and finally, how small a step needs to be to be a 'baby'." /><figcaption>
      
By <a href="https://philippe.bourgau.net">Philippe Bourgau</a>, under <a href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>, <a href="https://philippe.bourgau.net/imgs/2023-06-04-how-to-fix-bad-agile-by-discussing-baby-steps/what-are-baby-steps.jpg">high resolution image</a>

    </figcaption></figure>

<p><strong>XP or TDD might be associated with traditional Agile and Scrum, which often leave a sour taste for the team</strong>. However, we can bridge the gap and rebuild trust by starting discussions around the <a href="https://philippe.bourgau.net/incremental-software-development-strategies-for-large-scale-refactoring-number-2-baby-steps">Baby-Steps programming</a>. <strong>By focusing on Baby Steps, you can introduce technical practices from a neutral point of view.</strong></p>

<blockquote>
  <p>🤣 90% of Scrum or Agile implementations are crap! (My adaptation of <a href="https://en.wikipedia.org/wiki/Sturgeon%27s_law">Sturgeon’s Law</a> to Agile)</p>
</blockquote>

<p>Just highlight the practical benefits of small, manageable changes to the code:</p>

<ul>
  <li>Baby steps allow developers to learn on the way, adjust, and <strong>steadily build new features</strong>.</li>
  <li>Baby steps <strong>make decisions reversible</strong>. Baby Steps save developers from being dragged by previous choices.</li>
  <li>Team members will regain a <strong>sense of control and autonomy</strong> over their work.</li>
  <li>With time, they will understand that Baby Steps also <strong>apply outside the codebase</strong>.</li>
</ul>

<p>Baby Steps are not a rigid recipe! Instead, baby Steps are about continuous learning, adaptation, and delivery at a steady pace.</p>

<figure class="">
  <img src="https://philippe.bourgau.net/imgs/2023-06-04-how-to-fix-bad-agile-by-discussing-baby-steps/baby-steps-are-easier-and-safer-small.jpg" alt="Sketch note with the title 'Baby Steps are Easier and Safer'. It explains why baby steps require less brainpower, how they improve teamwork, and how they make merges trivial." /><figcaption>
      
By <a href="https://philippe.bourgau.net">Philippe Bourgau</a>, under <a href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>, <a href="https://philippe.bourgau.net/imgs/2023-06-04-how-to-fix-bad-agile-by-discussing-baby-steps/baby-steps-are-easier-and-safer.jpg">high resolution image</a>

    </figcaption></figure>

<h2 id="my-experience-at-devoxx">My experience at Devoxx</h2>

<p>I recently had the opportunity to present a talk on <a href="https://cfp.devoxx.fr/2023/talk/CAO-7353/L'etonnante_efficacite_des_petits_pas">Baby Steps at Devoxx Paris 2023</a>. While preparing for the session, I searched for the most effective ways to pass a message through. I picked advice from <a href="https://www.goodreads.com/en/book/show/57933312">How Minds Change</a> and combined them with <a href="https://www.liberatingstructures.com/">Liberating Structures</a>. My goal was to create an interactive but also engaging session! The talk triggered a lot of exchanges and storytelling. (Note: Tell me if you want me to share more about this talk recipe in a new post). Here are some of the feedback I got:</p>

<blockquote>
  <p>Nice format that made the wide applicability of baby steps emerge</p>
</blockquote>

<blockquote>
  <p>I liked the participatory format, which was original”</p>
</blockquote>

<p>This approach could work with your team as well! It encourages active participation so that developers express their concerns, challenges, and aspirations.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/xI_iN1HNweI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>

<p>After the talk, some people asked me how to take Baby Steps within their teams. Some even shared personal blockages about Baby Steps and sought advice. The fact that people are ready to share personal stories is a clue. “Listening and storytelling” is a powerful strategy to interest teams in Baby Steps!</p>

<figure class="">
  <img src="https://philippe.bourgau.net/imgs/2023-06-04-how-to-fix-bad-agile-by-discussing-baby-steps/baby-steps-are-more-productive-small.jpg" alt="Sketch note with the title 'Baby Steps are more productive'. It mentions arguments like reduced cost of rework, transforming large changes in chains of baby steps, easier communication and collaboration." /><figcaption>
      
By <a href="https://philippe.bourgau.net">Philippe Bourgau</a>, under <a href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>, <a href="https://philippe.bourgau.net/imgs/2023-06-04-how-to-fix-bad-agile-by-discussing-baby-steps/baby-steps-are-more-productive.jpg">high resolution image</a>

    </figcaption></figure>

<h2 id="what-you-can-do">What you can do</h2>

<p>How to fix bad Agile?</p>

<p>Are you doing technical coaching with a team that bad Scrum or Agile has hurt? <strong>Try to talk and exchange about Baby Steps instead of trying to persuade them about Agile or Scrum</strong>.</p>

<p>Baby Steps are more ‘neutral’ and will make developers more open and receptive. Focus on the practical benefits of Baby Steps on continuous code improvement. In the long term, developers will transpose continuous improvement to teamwork and processes. That’s how they will finally overcome the negative connotations of traditional methodologies.</p>

<p><img src="https://philippe.bourgau.net/imgs/2023-06-04-how-to-fix-bad-agile-by-discussing-baby-steps/kitten-step.jpg" alt="Photo of a kitten taking a small step in the grass." /></p>

<p>Feel free to use my sketch notes as visual support in your discussions.</p>

<p>Let’s embrace the power of small and incremental steps! Baby Steps can empower developers to work with confidence and clarity!</p>

<h2 id="here-are-other-posts-that-might-interest-you">Here are other posts that might interest you:</h2>

<ul>
  <li><a href="https://philippe.bourgau.net/how-to-coach-a-team-that-has-been-burnt-by-bad-tdd/">How to coach a team that has been burnt by bad TDD</a></li>
  <li><a href="https://philippe.bourgau.net/how-to-handle-tdd-does-not-work-in-real-life-during-code-katas/">How to handle “TDD does not work in real life” during code katas</a></li>
  <li><a href="https://philippe.bourgau.net/a-surprising-way-how-to-teach-evolutionary-design/">A surprising way to teach evolutionary design</a></li>
  <li><a href="https://philippe.bourgau.net/how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/">How to make TCR evolutionary design practice sessions irresistible</a></li>
  <li><a href="https://philippe.bourgau.net/make-testing-legacy-code-viral-mikado-method-and-test-data-builders/">Make Testing Legacy Code Viral: Mikado Method and Test Data Builders</a></li>
  <li><a href="https://philippe.bourgau.net/incremental-software-development-strategies-for-large-scale-refactoring-number-2-baby-steps/">Incremental Software Development Strategies for Large-Scale Refactoring #2 : Baby Steps</a></li>
</ul>]]></content><author><name>Philippe Bourgau</name></author><category term="change management" /><category term="agile" /><category term="coaching" /><category term="continuous improvement" /><category term="infographic" /><category term="psychology" /><summary type="html"><![CDATA[How to fix bad agile by starting neutral discussions about baby-steps programming. Programming in Baby Steps is a sustainable and productive approach to writing code. Here are also three sketch notes that you can use to illustrate Baby Steps and trigger exchanges with teams.]]></summary></entry><entry><title type="html">A Quality View Workshop to Discuss Technical Excellence</title><link href="https://philippe.bourgau.net/a-quality-view-workshop-to-discuss-technical-excellence/" rel="alternate" type="text/html" title="A Quality View Workshop to Discuss Technical Excellence" /><published>2023-05-11T00:00:00+00:00</published><updated>2023-05-11T00:00:00+00:00</updated><id>https://philippe.bourgau.net/a-quality-view-workshop-to-discuss-technical-excellence</id><content type="html" xml:base="https://philippe.bourgau.net/a-quality-view-workshop-to-discuss-technical-excellence/"><![CDATA[<p><em>Here is a step-by-step workshop to guide a team to drawing a <a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">Quality View</a>. Use it to discuss investment in agile technical excellence with stakeholders.</em></p>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/missing-a-quality-view.jpg" alt="Drawing of a stick character having trouble seeing through his glasses. The text &quot;Missing a Quality View?&quot; is also written next to him. A Quality View workshop is a wonderful occasion for the whole team to share knowledge about the technical aspects of a codebase, and to trigger discussions about prioritization of technical work." /></p>

<blockquote>
  <p>The main problem is not agreeing that technical excellence is essential for the success of the delivery. Corporate culture is 100% focused on feature factory, delivering features at the expense of technical excellence.</p>
</blockquote>

<blockquote>
  <p>Tools have taken over the meaning. I need to chant “The card is a token for an ongoing conversation” over and over.</p>
</blockquote>

<blockquote>
  <p>The devs had no say in what stories went into the sprint.</p>
</blockquote>

<p>Developers are often stuck in their development roles. They are rarely involved in product management decisions. <strong>Non-technical people are usually not aware of the importance of technical practices.</strong></p>

<p>Without the required technical work, code degrades, and maintenance increases. Eventually, work becomes less sustainable.</p>

<p>As coaches, we see teams and developers suffering from this situation. From experience, we understand where this is coming from. Yet, <strong>we are often at a loss about how to make the business care about agile technical excellence!</strong> Without enough attention, trying too hard will make us disillusioned and rebellious!</p>

<blockquote>
  <p>Wouldn’t it be great if you had a trick to make people collaborate? So that they found solutions to deliver features with technical excellence in engineering?</p>
</blockquote>

<p>Quality Views could be this trick! Let’s see:</p>

<ol>
  <li>How I began to work with Quality Views</li>
  <li>A workshop guide to collaboratively build a Quality View</li>
  <li>What to do after the workshop</li>
</ol>

<h2 id="quality-views-as-a-trigger-for-discussions">Quality Views as a trigger for discussions</h2>

<p>The company I work at, Murex, has been and is still hiring a lot. Therefore, <strong>onboarding of new developers is a critical topic</strong>. New joiners have a lot to learn:</p>

<ul>
  <li>Technical skills</li>
  <li>The financial domain</li>
  <li>And a few inevitable obscure pieces of code.</li>
</ul>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/welcome-on-board.jpg" alt="A photo of 2 feet on a capret writing &quot;Welcome on board&quot;. We started using Quality Views at Murex to speed up onboarding." /></p>

<p>Some teams asked if my team and I could help them to onboard new team members. We had heard how <a href="https://www.infoq.com/presentations/quality-views-technical-debt/">Colin Breck used Quality Views to tackle technical debt</a>. <strong>We had the idea to use Quality Views in a workshop to get the whole team to discuss how to speed up onboarding</strong>.</p>

<blockquote>
  <p>I think the most valuable aspects of employing Quality Views are in the discussions that take place in forming the quality dimensions, evaluating the various components, and prioritizing the work. (Colin Breck - <a href="https://blog.colinbreck.com/reflections-on-using-quality-views/">Reflections on Using Quality Views</a>)</p>
</blockquote>

<p><strong>Our goal was to trigger onboarding discussions between developers and non-technical stakeholders.</strong> It should lead to knowledge-sharing or onboarding-time-reduction actions being prioritized.</p>

<p>To learn more about Quality Views, I highly recommend you to read these two posts from Colin Breck:</p>

<ul>
  <li><a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">Using Quality Views to Communicate Software Quality and Evolution</a></li>
  <li><a href="https://blog.colinbreck.com/reflections-on-using-quality-views/">Reflections on Using Quality Views</a></li>
</ul>

<p>If you prefer videos, you can also check his <a href="https://www.infoq.com/presentations/quality-views-technical-debt/">QCon talk</a>.</p>

<p>We came up with a workshop involving the whole team, including Product Owner. Here is the skeleton:</p>

<ol>
  <li>Developers collaboratively build a Quality View of their codebase.</li>
  <li>They annotate it with their capability to work in the different modules.</li>
  <li>Then, the view is decorated with the expected impact of upcoming features.</li>
  <li>With this complete Quality View, participants agree on the hotspots to work on.</li>
  <li>Finally, they come up with concrete actions to make onboarding easier.</li>
</ol>

<figure class="">
  <img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/final-quality-view.jpeg" alt="Screenshot of the final Quality View, with hotspots and all visual information. Note the addition of flames on hotspots modules." /><figcaption>
      
Here is an example of what the Quality View looked like when we ran it on the <a href="https://github.com/murex/TCR">TCR tool</a> my team at Murex is building. I’ll be using this as example throughout the blog post to illustrate the steps.

    </figcaption></figure>

<p>Different teams did the workshop. Here is the feedback we collected a few months later:</p>

<blockquote>
  <p>The graph output helps to iterate and can be used repeatedly to inform decisions. (A Product Owner)</p>
</blockquote>

<blockquote>
  <p>What I liked the most about the workshop was the interaction between all the team members (A Tech Lead)</p>
</blockquote>

<blockquote>
  <p>Following the workshop, we did some actions regarding documentation and API simplification. (A Tech Lead)</p>
</blockquote>

<p><strong>Building a Quality View as a team is an occasion to discuss crucial yet overlooked topics.</strong></p>

<p>Technical excellence in engineering falls in this class of topics! In our case, the starting point was onboarding, but people talked about:</p>

<ul>
  <li>Business risks</li>
  <li>Technical debt management</li>
  <li>Workload, stress, and sustainable pace.</li>
</ul>

<h2 id="a-whole-team-workshop-to-create-a-quality-view">A whole-team workshop to create a Quality View</h2>

<p>Tech-Leads have a pretty good knowledge of their codebase. So they could draw an accurate Quality View by themselves. Through our coach’s goggles, though, this is a missed opportunity for collaboration!</p>

<blockquote>
  <p>People and collaboration over processes and tools (Agile Manifesto)</p>
</blockquote>

<p>That’s why <strong>it’s better to build the Quality View together</strong>. Below are detailed steps to collaboratively draw a Quality View.</p>

<p>I usually run workshops in a series of 90 minutes sessions:</p>

<ul>
  <li>It’s a sustainable pace for remote.</li>
  <li>And it leaves time for people to do “homework” or data gathering between sessions.</li>
</ul>

<p>Two sessions are usually enough, but your mileage may vary.</p>

<h3 id="1-define-your-quality-characteristics">1. Define your quality characteristics</h3>

<p>First, before the workshop, define the quality characteristics you will be using. You can select them alone as a workshop designer if they are obvious. You can also have a short brainstorming and voting session if it makes more sense.</p>

<blockquote>
  <p>The categories that I developed are not prescriptive—the categories were simply the most important aspects to my team at the time. (Colin Breck - <a href="https://blog.colinbreck.com/reflections-on-using-quality-views/">Reflections on using Quality Views</a>)</p>
</blockquote>

<p>Here are the characteristics we used for a team working within a legacy monolith:</p>

<ul>
  <li>Size of module</li>
  <li>Code complexity</li>
  <li>Testing</li>
  <li>Number of bugs in the last six months</li>
  <li>The capability of team members to work in a module</li>
</ul>

<h3 id="2-homework">2. Homework</h3>

<p><strong>Before the workshop, ask people to collect data on the quality characteristics</strong>.</p>

<p>If you have read Colin Breck’s posts, you might be thinking: “Wait! That’s not what Colin said!”:</p>

<blockquote>
  <p>Objective measures are no panacea. It is not hard to envision a component with exhaustive unit-test coverage, that is difficult to evolve and deploy, and fails to meet business requirements in terms of performance, high-availability, or security. This is why quality needs to be represented more comprehensively, often with qualitative measures. (Colin Breck - <a href="https://blog.colinbreck.com/reflections-on-using-quality-views/">Reflections on using Quality Views</a>)</p>
</blockquote>

<p>Metrics are great conversation triggers. Ask different people to collect different metrics. This way, <strong>data will serve as a basis for discussion but will only weigh a little</strong>. As you’ll see later, visualization will remain very qualitative.</p>

<h3 id="3-prepare-a-formalism">3. Prepare a formalism</h3>

<p><strong>To collaboratively design a Quality View of a codebase, people need to agree on how to represent it.</strong> Of course, you can do this alone as a workshop designer, but I encourage you to get as much feedback from the team as you do.</p>

<blockquote>
  <p>This visual representation can become even richer, however, with the addition of information related to software quality and how the system is evolving. (Colin Breck - <a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">Using Quality Views to Communicate Software Quality and Evolution</a>)</p>
</blockquote>

<p>Here is what we used in our example:</p>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/quality-view-module-template.jpeg" alt="Screenshot of the template we have been using to draw modules in Quality Views" /></p>

<ul>
  <li><strong>Boxes</strong> for code modules</li>
  <li><strong>Size of the box</strong> for the size of the module</li>
  <li><strong>Color of the box</strong> for the code quality</li>
  <li><strong>Weather icons</strong> to represent the testing</li>
  <li><strong>Lines between boxes</strong> for dependencies.</li>
  <li><strong>Bug icons</strong> for bugs in a module</li>
  <li><strong>Colored avatars</strong> for the capability to work in a module</li>
  <li><strong>Alien icons</strong> to tag modules that are not owned by the team</li>
</ul>

<p>The goal is not to have a formal design document. But you must have something visual that creates shared understanding and triggers conversations.</p>

<h3 id="4-overall-view">4. Overall view</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/quality-view-with-boxes.jpeg" alt="Screenshot of my first tentative at drawing the Quality View for the TCR repo we are working on. I had not yet coded a lot in there, so it was very rough." /></p>

<blockquote>
  <p>I wanted to experiment with extending it to combine 1) our architecture diagram with 2) Tufte’s dense visual presentation of information and 3) my colleague’s stacked bar-graph approach, to show both the quality of the components and the evolution of our system. (Colin Breck - <a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">Using Quality Views to Communicate Software Quality and Evolution</a>)</p>
</blockquote>

<p>Let’s start the workshop finally! <strong>The first step is to draft the system, using only boxes for modules and lines for dependencies.</strong> So use plenty of stickies or an online whiteboard (Miro, Mural, Powerpoint online, or Google Slides…).</p>

<p>Lines don’t need to be oriented. Rough dependency visualization is good enough to have a conversation.</p>

<p>The 1-2-4-all scheme does wonders:</p>

<ul>
  <li>Everyone gets 5 minutes of solo work to roughly draft the system.</li>
  <li>10 minutes in pairs to merge their draft</li>
  <li>20 minutes in groups of four to merge further</li>
  <li>20 to 30 minutes to merge with the whole team</li>
</ul>

<p>If the group cannot agree, either redo a round or stop the session and ask for homework to clear things out.</p>

<p>Note: if you are running the workshop remotely, <a href="https://medium.com/the-liberators/my-experience-with-using-liberating-structures-online-452a756c02f0">use 1-3-all instead of 1-2-4-all.</a> It’s much easier to manage with breakout rooms.</p>

<h3 id="5-size-of-modules">5. Size of modules</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/quality-view-with-sized-boxes.jpeg" alt="Screenshot of the Quality View where everyone's draft has been merged, and the module boxes have been resized according to the size of their code" /></p>

<p>You now have an agreement on the high-level design. So, <strong>do another round of 1-2-4-all to resize the boxes according to the size of the modules</strong>. This step is faster than the previous one, so shorten the timings for the 1-2-4-all steps.</p>

<p>In remote, it’s easy to clone the model from the previous step so that everyone can have their own.</p>

<p>If co-located, pick a mid-sized module and agree on it as the standard. Then ask participants to draw modules of relative sizes on paper. They don’t need to replicate the dependencies.</p>

<p>Some participants will know the exact number of lines of code. Others will use their intuition. This will generate interesting discussions.</p>

<blockquote>
  <p>It is the qualitative aspects, involving our intuition and experience, that are more valuable than any set of quantitative metrics. (Colin Breck - <a href="https://blog.colinbreck.com/reflections-on-using-quality-views/">Reflections on using Quality Views</a>)</p>
</blockquote>

<p>Finish by updating the central model.</p>

<h3 id="6-code-quality">6. Code quality</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/quality-view-with-quality-color.jpeg" alt="Screenshot of a Quality View where the module boxes have been colored to match the quality of the code. We see here that some parts are starting to get messy." /></p>

<blockquote>
  <p>Is the code itself in good shape? Is it well factored? Is it maintainable? Is it reasonably easy to extend the application to add new functionality? (Colin Breck - <a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">Using Quality Views to Communicate Software Quality and Evolution</a>)</p>
</blockquote>

<p>Repeat the same process as above to color the modules according to the quality.</p>

<h3 id="7-testing">7. Testing</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/quality-view-with-test-weather.jpeg" alt="Quality view screenshot, now decorated with weather icons representing how well tested the modules are. We see here that almost everything is well tested: not surprisingly we have been using TDD to build the TCR tool!" /></p>

<blockquote>
  <p>Does the component have tests to support making changes without introducing regressions or undue risk? Are the tests repeatable and reliable, and can they be executed in a reasonable time-frame? (Colin Breck - <a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">Using Quality Views to Communicate Software Quality and Evolution</a>)</p>
</blockquote>

<p>Again, do the same thing for testing. Decorate the modules of the central model with weather icons to show how they are tested.</p>

<h3 id="8-capability">8. Capability</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/quality-view-with-capabilities.jpeg" alt="Screenshot of the Quality Views decorated with capability icons. We see here that there is basically one expert and one or two newbies on the codebase." /></p>

<blockquote>
  <p>Does the component carry significant business risk? This might include code that was developed by an individual that has departed the company that no one else is familiar with; code that is not in one of the primary programming languages used by the development team; (Colin Breck - <a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">Using Quality Views to Communicate Software Quality and Evolution</a>)</p>
</blockquote>

<p>In our story above, <strong>the workshop’s goal was to tackle onboarding and knowledge sharing. It’s associated with the “Bus Factor” risk</strong>. Here is an example of how you can track this risk.</p>

<p>Everyone annotates each module with their confidence to add a feature there.</p>

<p>Murex has been using <a href="https://www.kenblanchard.com/Solutions/SLII">Situational Leadership 2</a> for a long time, so we piggybacked on it. It provides four development levels of capability that are easy to self-assess:</p>

<ul>
  <li>D1: “I know nothing, but I am eager to start!”</li>
  <li>D2: “I know enough to know that I’m going to suffer when I try.”</li>
  <li>D3: “I guess I’ll manage, but I’m always a bit scared to do this…”</li>
  <li>D4: “I’ve done this many times, don’t worry, I’ll handle it.”</li>
</ul>

<p>Before session homework! Everyone was to watch this short video of Situational Leadership 2.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/pykuvuA-QFU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>

<p>We then asked participants to place a small colored box with their names on the module. We used red for D1, orange for D2, yellow for D3, and green for D4. We reorganized these icons as histograms. These histograms represent the Bus Factor risk profile of every module.</p>

<p>This was just one example of our situation. <strong>For each relevant business risk, take the time to prepare a specific activity.</strong></p>

<h3 id="9-bugs">9. Bugs</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/quality-view-with-bugs.jpeg" alt="Quality view now decorated with bug icons, showing which modules where impacted by bug fixes in the previous months." /></p>

<p>This is when the Quality View starts to receive delivery data. At the beginning of the workshop, we gave homework to track lines of code affected by bug fixes in the past six months.</p>

<p>Have the people who collected the bugs info <strong>place one 🐞 icon on a module every time it was modified in a bug fix</strong>. In the end, you should get a good idea of which modules are sources of bugs.</p>

<p>This is also an excellent occasion to take a step back and discuss this view with everyone.</p>

<h3 id="10-upcoming-features">10. Upcoming features</h3>

<blockquote>
  <p>Since becoming a <a href="https://blog.colinbreck.com/on-being-a-team-lead-welcome-to-our-team/">team lead</a>, I have been looking for ways to communicate two things regarding the software our team is responsible for. The first is the current state of the software. I want to communicate the quality of the system in terms of business risks—the reliability, scalability, and security of the system, as well as how receptive the software is to change, in order to meet future business needs. (Colin Breck - <a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">Using Quality Views to Communicate Software Quality and Evolution</a>)</p>
</blockquote>

<p><strong>This is the moment to get product stakeholders in.</strong> Before anything, please take a moment to present the Quality View and answer their questions. They will love it! It’s often the first time they can understand what “Under the Hood” is.</p>

<p>Ask them to <strong>list the upcoming features they are thinking of.</strong> Target something like 3 to 6 months, depending on the rhythm of your business.</p>

<p>Also, ask them to sort these features into three value buckets:</p>

<ul>
  <li>High value</li>
  <li>Medium value</li>
  <li>Low value</li>
</ul>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/upcoming-features.jpeg" alt="Screenshot of the slide that lists the upcoming features for the TCR tool. We estimated the value of each one with diamonds." /></p>

<p>Wait to try to map these features to the Quality View. The team will do that just after.</p>

<h3 id="11-future-impacts">11. Future impacts</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/quality-view-with-diamonds.jpeg" alt="Quality view now decorated with diamond icons, showing which modules we expect to impact in the upcoming months" /></p>

<blockquote>
  <p>I want to communicate the quality of the system in terms of business risks […] A legacy component that lacks test coverage, or developer expertise, could be extremely difficult, risky, and costly to change, whereas a well-designed, well-factored application, with good test coverage and developers familiar with the code, might be evolved reliably and efficiently. (Colin Breck - <a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">Using Quality Views to Communicate Software Quality and Evolution</a>)</p>
</blockquote>

<p>Developers will try to predict what modules will be changed soon. Ask them to <strong>list, for each feature, the affected modules.</strong> Use rounds of 1-2-4-all (see Steps 4 and 5) to aggregate predictions.</p>

<p>Finally, for each feature, add diamonds to every impacted module:</p>

<ul>
  <li>Each module involved in a high-value feature will get three diamonds (💎💎💎)</li>
  <li>Each module involved in a medium-value feature will get two diamonds (💎💎)</li>
  <li>Each module involved in a low-value feature will get one diamond (💎)</li>
</ul>

<p>Some modules might get plenty of diamonds!</p>

<h3 id="12-hotspots">12. Hotspots</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/final-quality-view.jpeg" alt="Screenshot of the final Quality View, with hotspots and all visual information. Note the addition of flames on hotspots modules." /></p>

<blockquote>
  <p>Quality views are not about features <em>versus</em> quality. They arise from the understanding that in order to deliver high-quality systems, business objectives and customer requirements must be met, or exceeded. It is fine to keep focusing on features, but if customers cannot realize those features reliably, then nothing else matters. (Colin Breck - <a href="https://blog.colinbreck.com/reflections-on-using-quality-views/">Reflections on using Quality Views</a>)</p>
</blockquote>

<p>At this point, all participants should have a 360º of the situation.</p>

<p>Unfortunately, you won’t be able to fix everything. Yet participants have all the information they need to make wise investments.</p>

<p><strong>Give each participant 3 “dots” that they can place on the module (or dependency) they want to focus on.</strong> For example, in our workshops, we use flame icons (🔥).</p>

<p>The modules with the most dots are your “Hotspots.” Hotspots are areas of the code that are at risk of slowing down delivery.</p>

<h3 id="13-discuss-and-decide-what-to-do">13. Discuss and Decide what to do</h3>

<blockquote>
  <p>The Quality View invites a holistic view of the system. When I presented a similar scenario at a quarterly-planning meeting, our Director of Product Development remarked: <em>“How come those two components are still so red!?”</em>. A constructive discussion followed, where we all came to the agreement that investing in these components would not be cost effective. We were comfortable accepting the short-term risks. (Colin Breck - <a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">Using Quality Views to Communicate Software Quality and Evolution</a>)</p>
</blockquote>

<p>The Quality View is complete, and everyone understands it. So it’s an excellent time to have the extensive all-in discussion you wanted to trigger.</p>

<p>Bring the prioritization topic forward. <strong>Stakeholders will be more conscious of technical tradeoffs now. As a result, the team should be able to build a more realistic and long-term plan.</strong> Decisions should take both features and agile technical excellence into account.</p>

<h2 id="after-the-workshop">After the workshop</h2>

<h3 id="strike-the-iron-while-its-hot">Strike the iron while it’s hot!</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/forge.jpg" alt="A photo of a blacksmith hammering hot iron on an anvil. Just after a successful workshop is the best time to continue and make big decisions fast." /></p>

<p>Feel free to run a follow-up workshop focusing on different aspects. For example:</p>

<ul>
  <li><a href="https://philippe.bourgau.net/rewrite-vs-refactor-get-insights-from-event-storming-and-ddd/">Mapping current to vision</a> To decide if you should rewrite or refactor a component.</li>
  <li>Building a <a href="https://www.eventstormingjournal.com/big%20picture/decide-to-build-or-buy-with-big-picture-event-storming/">Core Domain Chart</a> To identify a refactoring strategy for a component. Example: thorough refactoring, cosmetic refactoring, or replacing in-house code with a third party…</li>
  <li>You can invent any follow-up workshop for your specific challenges. For example, here is how we ran activities to speed up onboarding.</li>
</ul>

<h3 id="onboarding-at-murex">Onboarding at Murex</h3>

<p>Remember how this post started. We ran these workshops to speed up onboarding and increase knowledge sharing. So in our case, we ran two extra activities after the Quality View:</p>

<ul>
  <li>A <a href="https://gamestorming.com/give-and-take-matrix/">give-and-take matrix</a> to collect everyone’s needs and potential help.</li>
  <li>An activity to refine help suggestions into <a href="https://en.wikipedia.org/wiki/SMART_criteria">SMART</a> and collective actions.</li>
</ul>

<p>Teams ended up with very focused and high-impact actions like:</p>

<blockquote>
  <p>Next time Sally needs to debug module X, we will pair. I will show the key places to add breakpoints, and we will go through debugging together.</p>
</blockquote>

<p>Participants liked that these actions were concrete and laser-focused. Compare this to the typical evasive knowledge-sharing actions: “Let’s write some documentation.”</p>

<h3 id="follow-up">Follow-up</h3>

<p><img src="https://philippe.bourgau.net/imgs/2023-04-26-a-quality-view-workshop-to-discuss-technical-excellence/continue-tunnel.jpg" alt="A photo of a path enclosed in vegetation. As coaches we can build on this first workshop to make sure change happens." /></p>

<p>As coaches, your main work after the workshop is to make sure these actions are prioritized and done. Insist that the team adds them to its backlog. Don’t hesitate to <strong>gently provoke team members if you see that nothing happens</strong>.</p>

<p>Finally, <strong>nudge the team to re-run the workshop regularly</strong>. Updating a Quality View is much faster than creating it for the first time. Please don’t make it too short, though: <strong>new joiners should try to sketch a Quality View by themselves</strong>. It’s an excellent chance to discover the system one is part of.</p>

<h2 id="here-is-what-you-can-do-now">Here is what you can do now</h2>

<p><strong>Next time you work with a team that has no time for ‘back-office’ technical work, give this workshop a try!</strong> It’s bound to trigger interesting discussions with all stakeholders.</p>

<p>On top of that, drawing a Quality View collaboratively is a great way to share knowledge within the team.</p>

<h2 id="other-posts-that-might-interest-you">Other posts that might interest you</h2>

<ul>
  <li><a href="https://philippe.bourgau.net/5-whole-team-workshops-to-increase-developers-role-in-sprint-planning/">5 Whole-Team Workshops To Increase Developers’ Role In Sprint Planning</a></li>
  <li><a href="https://philippe.bourgau.net/how-to-coach-developers-to-get-a-chat-with-their-product-experts/">How to coach developers to get a chat with their product experts</a></li>
  <li><a href="https://philippe.bourgau.net/how-to-estimate-velocity-in-scrum-to-escape-the-feature-factory/">How to estimate velocity in Scrum to escape the feature factory</a></li>
  <li><a href="https://philippe.bourgau.net/leverage-scrum-to-workaround-feature-factory-sprint-planning/">Leverage Scrum to workaround feature-factory sprint planning</a></li>
  <li><a href="https://philippe.bourgau.net/a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/">A complete workshop for your team to see what’s a good test strategy</a></li>
</ul>]]></content><author><name>Philippe Bourgau</name></author><category term="agile" /><category term="quality" /><category term="continuous improvement" /><category term="workshop" /><category term="architecture" /><category term="coaching" /><category term="refactoring" /><category term="team building" /><category term="collaborative work" /><summary type="html"><![CDATA[Here is a step-by-step workshop to guide a team to drawing a Quality View. Use it to discuss investment in agile technical excellence with stakeholders, foster a culture of quality and collaboration, and empower your team to deliver high-quality software.]]></summary></entry><entry><title type="html">How to avoid the “large-scale impact” pitfall</title><link href="https://philippe.bourgau.net/how-to-avoid-the-large-scale-impact-pitfall/" rel="alternate" type="text/html" title="How to avoid the “large-scale impact” pitfall" /><published>2023-03-09T00:00:00+00:00</published><updated>2023-03-09T00:00:00+00:00</updated><id>https://philippe.bourgau.net/how-to-avoid-the-large-scale-impact-pitfall</id><content type="html" xml:base="https://philippe.bourgau.net/how-to-avoid-the-large-scale-impact-pitfall/"><![CDATA[<p><em>Applying willpower to have a “wider than team” impact on an organization is a recipe for burnout! Check the “Local Actions, Global Impact” strategy instead.</em></p>

<p><img src="https://philippe.bourgau.net/imgs/2023-02-22-how-to-avoid-the-large-scale-impact-pitfall/change-dominos.jpg" alt="Drawing of a chain of big dominos standing in the grass. The chain leads to a big building written change. There is someone who is trying to push the first domino. Our efforts can lead to large-scale agile transformation, yet like with dominos, plenty of things can get in the way, and it would be exhausting to push every individual domino!" /></p>

<blockquote>
  <p>I used to share and bring new knowledge through the organizations I have been in. But in my new job, it looks like no one cares!</p>
</blockquote>

<blockquote>
  <p>Sadly, I spend less and less time coding for the project. But I find that people respect coaches who are in the trenches with them!</p>
</blockquote>

<blockquote>
  <p>Damn, I again got caught in an abstract ‘large-scale agile transformation’ discussion… This leaves me anguished every time!</p>
</blockquote>

<p>As change agents, it’s natural to wonder how we could have a broader impact on the organization where we work. Isn’t our goal to transform how people work?</p>

<p>Unfortunately, you are among many parameters that influence an organization’s evolution. <strong>Focusing on wide-scale organizational transformation is no guarantee for results. In fact, this behavior can lead to exhaustion!</strong></p>

<blockquote>
  <p>Wouldn’t it be great if you had the formula to refill your energy for sharing with people? Whatever is the organization evolving into?</p>
</blockquote>

<p>Let’s see how to avoid the trap and still make a difference.</p>

<h2 id="local-action-global-impact">“Local Action, Global Impact”</h2>

<p>I borrowed this motto from environmental protection movements. I recently read <a href="https://www.goodreads.com/book/show/22155.Let_My_People_Go_Surfing">Let my people go surfing</a> by <a href="https://en.wikipedia.org/wiki/Yvon_Chouinard">Yvon Chouinard</a>, the founder of Patagonia. The company has been subsidizing environment-protecting activists almost since its creation. One key point they make when selecting a group to support is that it is local and does local actions. Here is why:</p>

<ul>
  <li>These people know the situation better.</li>
  <li>They have “skin in the game” to protect their homeland.</li>
  <li>They will be able to defend their cause better.</li>
  <li>Small groups waste less time and money on bureaucracy.</li>
  <li>As small wins pill up, they tilt the public opinion and the law.</li>
</ul>

<p>Let’s copy these hardcore change agents!</p>

<p><strong>Change only happens one person at a time, as they switch to a different point of view. Change happens locally, by nature!</strong> Simon Sinek supports this idea in <a href="https://www.youtube.com/watch?v=N9d0NqSztWA">How to Make a Cultural Transformation</a>. He explains that the only sure way he knows to make cultural change is to win over 15% of people. You do this by <strong>meeting them and making their lives better</strong>.</p>

<p><img src="https://philippe.bourgau.net/imgs/2023-02-22-how-to-avoid-the-large-scale-impact-pitfall/millicent-fawcett-statue.jpg" alt="Photo of a statue of Millicent Fawcett holding a banner 'Courage calls to courage everywhere'" /></p>

<p>It means <strong>spending as much time as possible working with or for teams.</strong> It also means <strong>limiting the energy we burn for “large-scale agile transformation.”</strong> It’s too easy to get caught up in this topic. I try to remember to reassess my priorities regularly. I adapt whenever I see that I am disconnecting from teams and talking about change that I cannot control!</p>

<p><strong>Not only does the “Local actions, Global change” strategy works, but it will also make your life lighter!</strong></p>

<ol>
  <li>First, you will <strong>stop worrying about the unachievable goal of “large-scale transformation.” Instead, enthusiastically work with people and consider broad change a bonus.</strong></li>
  <li>Second, you <strong>don’t have to ask for permission to bring change! Just make things better for you and the people around you.</strong></li>
</ol>

<h2 id="local-actions">Local Actions</h2>

<p>If you had not yet understood 😉: <strong>Local actions are where you should invest your time and energy!</strong></p>

<p><img src="https://philippe.bourgau.net/imgs/2023-02-22-how-to-avoid-the-large-scale-impact-pitfall/local-broomstick.jpg" alt="Photo of a small city alley, where we can see a woman sweeping in front of her house." /></p>

<h3 id="examples-of-local-actions">Examples of local actions</h3>

<p>The prominent local actions are about helping team members with their day-to-day issues. For example:</p>

<ul>
  <li>Running whole-team workshops to tackle particular topics and to break silos. Check out <a href="https://philippe.bourgau.net/5-whole-team-workshops-to-increase-developers-role-in-sprint-planning/">5 Whole-Team Workshops To Increase Developers’ Role In Sprint Planning</a>. (We have recently experimented with a workshop to build <a href="https://blog.colinbreck.com/using-quality-views-to-communicate-software-quality-and-evolution/">quality views</a>, let me know if you want me to write about it)</li>
  <li>Facilitating mob programming or coding dojo sessions around legacy code or maintainable testing challenges.</li>
</ul>

<p>Preparing for any of the above also counts as local action. Be careful to get regular feedback and remember that you should be slightly embarrassed the first time you run the session.</p>

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">You may have heard me say: If you&#39;re not embarrassed by the first version of your product, you&#39;ve launched too late<a href="https://t.co/r4JyKzzyWO">https://t.co/r4JyKzzyWO</a></p>&mdash; Reid Hoffman (@reidhoffman) <a href="https://twitter.com/reidhoffman/status/847142924240379904?ref_src=twsrc%5Etfw">March 29, 2017</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<p>Local action is not limited to teams! Sessions with managers or product managers can be local too. However, keep the focus on their behavior and not that of others!</p>

<p>Another local action is to be present and <strong>embody XP’s calm and steady rhythm! This behavior has a lot more impact than we usually think!</strong></p>

<p>You can also host ‘open sessions,’ which anyone from the organization can join! These sessions can be code katas or educational workshops. It’s an excellent way to generate awareness, connect, and provide help.</p>

<h3 id="the-direct-benefits-of-local-actions">The direct benefits of local actions</h3>

<p><strong>The main obvious benefit of local actions is that we can directly improve some people’s lives!</strong> Many developers told me how learning <strong>XP practices changed their work life</strong>. Their days had become more effective, engaging, and, most of all, calmer.</p>

<p>So, keep in mind that XP improves people’s lives. Focus on local actions. Your energy will follow! Plus, <strong>people will listen to you if you remain optimistic!</strong></p>

<p>From another perspective, every local action is a potential conference talk or workshop. Sending proposals or attending meetups is another chance to improve developers’ lives.</p>

<p>Finally, <strong>the local action strategy is perfect if you are an embedded coach or a developer!</strong> All local actions can be part of your day-to-day job. Make sure to ‘sell’ it the right way:</p>

<ul>
  <li>Organize problem-solving workshops to make your team more effective.</li>
  <li>Run mob or kata programming sessions to increase the skills of newcomers (and others).</li>
  <li>Run sessions at public conference events to help your organization with hiring.</li>
</ul>

<h2 id="global-changes">Global Changes</h2>

<p><img src="https://philippe.bourgau.net/imgs/2023-02-22-how-to-avoid-the-large-scale-impact-pitfall/anonymous-change.jpg" alt="Illustration of an Anonymous Mask holding shining and twirling shapes in their hands. It looks as if they are blowing to create change." /></p>

<p>Focusing on local actions keeps us energetic and optimistic. Moreover, <strong>local efforts maximize our long-term chances of inspiring others and triggering more change!</strong> Here are examples of broad changes that local actions can trigger.</p>

<p>I’ve said above that XP practices equip developers with a calmer and more productive work life. <strong>Less stress at work also means a happier family at home! Who knows? You may contribute to saving couples and healthier kids through technical coaching!</strong></p>

<p>You might inspire others to start local actions too! Don’t forget that any movement begins with a first follower.</p>

<!-- Courtesy of embedresponsively.com //-->

<div class="responsive-video-container">
    <iframe src="https://www.youtube-nocookie.com/embed/8p9GZfhvrys" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe>
  </div>

<p><strong>When the people you coach move to a new team or company, they will also impact those around them!</strong> Maybe they will, in turn, trigger large-scale changes later.</p>

<p>Finally, it is possible that your coaching leads to organization-scale change. It’s a long shot: a lot is outside your control, especially in large organizations. So, please don’t count on it! Yet, if the organization is supportive and you get enough “followers,” you have a chance! Be patient.</p>

<p>Again, <strong>all these are bonuses! Don’t expect them.</strong> You can expect a local impact if you stay focused on local actions and maintain your enthusiasm. Any local result already has enormous value! And <strong>wider change will happen from time to time</strong>. So celebrate your local acts, and share stories when a broader impact happens.</p>

<h2 id="make-it-a-habit">Make it a habit</h2>

<p>XP started as a local experiment in the C3 project. If the goal had been to spread to every dev team, XP would be a failure. Yet, XP has changed the face of the entire industry. Practices like unit testing and Continuous Integration have become standards. Others, like pair programming, are still spreading. So let’s stick to our local actions! Who knows what will happen?</p>

<p>Here is my final trick to remember to “Act Local.” First, print and keep a large calendar on your desk (you’ll find <a href="https://www.google.com/search?q=large+monthly+calendar">plenty online</a>). Then, <strong>every work day, just before you leave, write down three local actions you did.</strong></p>

<p><img src="https://philippe.bourgau.net/imgs/2023-02-22-how-to-avoid-the-large-scale-impact-pitfall/3-local-actions-calendar.jpg" alt="Capture of 2 calendar box where I wrote the local actions I am proud of." /></p>

<p>It’s a bit like <a href="https://const.fr/blog/agile/punished-by-kudos-a-management-3-0-bug/">Self-Kudos</a>. Don’t be falsely modest: you are only writing for yourself! Once you are done, step back, and be proud of what you did!</p>

<p>Finally, read back through all the actions you did when you need to lift your mood!</p>

<h2 id="you-might-also-love">You might also love…</h2>

<ul>
  <li><a href="https://philippe.bourgau.net/3-tips-to-drop-technical-agile-coaching-result-measures-and-relax/">3 Questions To Let-Go Technical Agile Coaching Measures</a></li>
  <li><a href="https://philippe.bourgau.net/how-to-measure-and-report-your-tech-agile-coaching-effectiveness/">How to measure (and report 😢) your tech agile coaching effectiveness?</a></li>
  <li><a href="https://philippe.bourgau.net/5-technical-agile-coaching-tips-to-fight-exhaustion-from-laggards/">5 technical agile coaching tips to fight exhaustion from laggards</a></li>
</ul>]]></content><author><name>Philippe Bourgau</name></author><category term="coaching" /><category term="sustainable pace" /><category term="change management" /><summary type="html"><![CDATA[Applying willpower to have a "wider than team" impact on an organization is a recipe for burnout! Here is how to apply the "Local Actions, Global Impact" strategy instead. Avoid large-scale agile transformations. Recognize, focus on, and celebrate local actions. Share broad change stories.]]></summary></entry><entry><title type="html">A “Slow Code Retreat” to be less in a hurry</title><link href="https://philippe.bourgau.net/a-slow-code-retreat-to-be-less-in-a-hurry/" rel="alternate" type="text/html" title="A “Slow Code Retreat” to be less in a hurry" /><published>2023-01-05T00:00:00+00:00</published><updated>2023-01-05T00:00:00+00:00</updated><id>https://philippe.bourgau.net/a-slow-code-retreat-to-be-less-in-a-hurry</id><content type="html" xml:base="https://philippe.bourgau.net/a-slow-code-retreat-to-be-less-in-a-hurry/"><![CDATA[<p><em>“Developers will always have more work than time” We can race our TODO lists or accept and slow down NOW. The “Slow Code Retreat” helps us do that!</em></p>

<p><img src="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/developers-life-race.jpg" alt="First slide of the Slow Code Retreat workshop. It shows a snail crossing the street, with the title of the workshop written." /></p>

<blockquote>
  <p>The team is good, but the organization mainly pushes them for output!</p>
</blockquote>

<blockquote>
  <p>Developers have as much difficulty changing their habits as anyone else. Besides, we’re too busy.</p>
</blockquote>

<blockquote>
  <p>This manager was in my interview and kept asking me questions like: “what if devs feel they are being slowed down?”.</p>
</blockquote>

<p>We all know this story. Learning new practices or taking on new habits takes time. And <strong>developers always have something more urgent to do</strong>.</p>

<p>Lately, my colleagues and I <em>almost</em> worked with a team struggling with onboarding. We helped define knowledge-sharing actions, trained seniors to run team mobs or katas, etc. Yet, at the moment of setting up team sessions, <strong>senior developers were too busy!</strong></p>

<h2 id="there-is-no-workaround-sustainable-pace-starts-now">There is no workaround: Sustainable pace starts NOW!</h2>

<blockquote>
  <p>In its most trivial formulation, it’s as simple as this. To go from doing A to get to doing B, we have to unlearn A and learn B. That takes time. If we don’t have time, we can’t afford to change. (<a href="[https://www.geepawhill.org/2022/10/25/slash-the-load](https://www.geepawhill.org/2022/10/25/slash-the-load)">Slash the Load</a>, Mike Hill).</p>
</blockquote>

<p>Teams only have so much control over their time! <strong>There are always urgent and valuable projects to deliver</strong>. Even productivity and sustainability improvements only add more work in the short term! Very often, management will not grant the team some time for learning.</p>

<p>Sometimes, it might look <strong>like there are no ways out</strong>!</p>

<p>At every moment, <strong>we have the choice to step back and take it easy</strong>! Nothing prevents us from <strong>injecting some ‘sustainable’ seconds into work</strong>. It’s not about what happens. <strong>It’s about our state of mind</strong> and how we live what is happening.</p>

<p>At first, it can be only a few seconds here and there during the day. With time though, we can train our minds to do this more regularly.</p>

<h2 id="how-to-slow-down-at-work-as-developers">How to slow down at work as developers?</h2>

<p>“Inject sustainable instants throughout our day of work” might sound a bit too vague… So let’s see how to do this more practically.</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/slow-code-retreat.jpg" alt="First slide of the Slow Code Retreat workshop. It shows a snail crossing the street, with the title of the workshop written." /></p>

<p>The Slow Code Retreat is a workshop I ran at <a href="https://xpdaysbenelux.nl/">XPDays Benelux</a>. The idea is to let people experience different ‘slow working’ techniques.</p>

<p><a href="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/feedback.jpg"><img src="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/feedback-small.jpg" alt="Photo of the feedback I received when I ran the slow code retreat workshop at XPDays Benelux" /></a>
<em>Here is the feedback I received at this workshop.</em></p>

<p>Here is how <strong>the workshop is structured</strong>:</p>

<ol>
  <li>Welcome</li>
  <li>Connect with the topic and other participants with these 4 questions:
    <ul>
      <li>What did you say no to to attend this session?</li>
      <li>According to you, what could slow code be?</li>
      <li>From your experience, list a few situations where slow code could have been helpful.</li>
      <li>What is the big question you bring to this session?</li>
    </ul>
  </li>
  <li>Present 6 slow code practices (see below)
    <ol>
      <li>One or two rounds of slow code practice on code katas
        <ul>
          <li>Participants pick 1 or 2 practices they want to experiment with</li>
          <li>They self-organize in solo, pairs, or mobs</li>
          <li>For 30 minutes, they go through the simplest katas like <a href="https://codingdojo.org/kata/FizzBuzz/">Fizz Buzz</a> or <a href="https://en.wikipedia.org/wiki/Pascal%27s_triangle">Pascal’s Triangle</a></li>
        </ul>
      </li>
    </ol>
  </li>
  <li>Takeaways</li>
  <li>Q&amp;A</li>
</ol>

<p>The complete workshop lasts between one and a half and 2 hours.</p>

<h2 id="6-slow-working-practices">6 slow working practices</h2>

<p><a href="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/slow-code-practices-mind-map.jpg"><img src="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/slow-code-practices-mind-map-small.jpg" alt="Drawing of a mind map with the 6 slow-code practices. The structure is the same as that of the following sections. With 2 extra links from Slow Navigating to Slow Self-Retro and Slow Code Reviews." /></a></p>

<p>Participants can try the 6 slow working practices during the workshop. I’ve split them into 3 categories: coding, communication, and mobbing.</p>

<h3 id="slow-coding">Slow Coding</h3>

<p>We can use these whenever we are programming solo, in a pair, or in a mob.</p>

<h4 id="slow-todo-list">Slow TODO List</h4>

<p><em>Take the time to focus only on the present task:</em></p>

<ul>
  <li>Keep a TODO list while you code</li>
  <li>Keep track of everything that remains to be done</li>
  <li>Check or strikethrough steps as you do them</li>
  <li>Indent sub-tasks</li>
  <li>Can use a .txt, a .markdown, a shared online doc, or a mind map</li>
  <li>Reorganize your tasks when needed</li>
  <li>If you revert steps that you cannot do yet, it becomes the Mikado Method</li>
</ul>

<h5 id="benefits">Benefits:</h5>

<ul>
  <li>This <strong>removes all the mental load involved with keeping track</strong> of the status of work</li>
  <li>The map serves as a <strong>communication tool</strong> for handovers, pairing, or mobbing</li>
  <li>Helps us to <strong>drop things</strong> that we eventually decide not to do!</li>
</ul>

<h5 id="references">References:</h5>

<ul>
  <li><a href="https://github.com/code-in-flow/mindful-programming">code-in-flow/mindful-programming (github.com)</a></li>
  <li><a href="https://philippe.bourgau.net/to-do-list-or-mind-map-for-programming/">TODO list or Mind Map for programming</a></li>
</ul>

<h4 id="slow-baby-steps">Slow Baby Steps</h4>

<p><img src="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/step-by-step-stairs.jpg" alt="Photo of stairs with &quot;Step by Step&quot; written on the first 3 steps. By itself, pushing TDD to the extreme, like when using TCR for example, is a way to go slow!" /></p>

<p><em>Take the time to practice egoless programming and baby-steps programming with <a href="https://philippe.bourgau.net/categories/#tcr">TCR</a>:</em></p>

<ul>
  <li>Start coding with TCR</li>
  <li>Whenever you get reverted
    <ul>
      <li>Notice the feelings you experience and accept that error is humane.</li>
      <li>Practice humility and Egoless Programming</li>
      <li>Try again with a smaller step</li>
    </ul>
  </li>
  <li>As the day goes by, notice how your capacity for flawless work decreases!</li>
</ul>

<h5 id="benefits-1">Benefits:</h5>

<ul>
  <li>With time you’ll <strong>learn how much you can do without mistakes</strong></li>
  <li>This <strong>teaches you to do extra small steps</strong> that cannot go wrong!</li>
  <li>This helps to understand when to <strong>call it a day and leave</strong></li>
  <li>This <strong>avoids writing low-quality code</strong> when you are too tired</li>
</ul>

<h5 id="references-1">References:</h5>

<ul>
  <li><a href="https://github.com/code-in-flow/mindful-programming">code-in-flow/mindful-programming (github.com)</a></li>
  <li><a href="https://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/">The 10 commandments of Egoless Programming</a></li>
</ul>

<h4 id="slow-self-retros">Slow Self-Retros</h4>

<p><em>Take the time to observe what happens inside us:</em></p>

<ul>
  <li>Set a timer to ring every 5 minutes</li>
  <li>Every time it rings, take a short pause and fill out this log individually:</li>
</ul>

<table>
  <thead>
    <tr>
      <th>ROTI</th>
      <th>Did</th>
      <th>Learnt</th>
      <th>Puzzles</th>
      <th>Feelings</th>
      <th>Need</th>
      <th>Decision</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>…</td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<ul>
  <li>Use cheat sheets for <a href="https://www.reddit.com/r/writing/comments/5fqbpt/emotional_cheat_sheet_updated_from_emotional/">feelings</a> and <a href="https://www.habitsforwellbeing.com/basic-human-needs-are-your-needs-being-met/">needs</a> references.</li>
</ul>

<h5 id="benefits-2">Benefits:</h5>

<ul>
  <li>Helps us to <strong>spot our non-constructive reactions</strong> to events like:
    <ul>
      <li>“I don’t know how to do that!”</li>
      <li>“Damn, I was sure this test would pass! I’ve got no idea why it’s failing!”</li>
      <li>“How stupid I am!”</li>
      <li>“I don’t understand anything about this code!”</li>
    </ul>
  </li>
  <li>Develops our <strong>knowledge of inner feelings and needs</strong>.</li>
  <li>Provides plenty of <strong>data for continuous improvement</strong> and retrospectives of all kinds.</li>
</ul>

<h5 id="references-2">References:</h5>

<ul>
  <li><a href="https://github.com/code-in-flow/mindful-programming">code-in-flow/mindful-programming (github.com)</a></li>
</ul>

<h3 id="slow-communication">Slow Communication</h3>

<p>For the sake of organization, I put only Slow Code Reviews in the category of slow communication. Yet, <a href="https://philippe.bourgau.net/a-slow-code-retreat-to-be-less-in-a-hurry/#slow-navigating">Slow Navigating</a> could also go in this section.</p>

<h4 id="slow-code-reviews">Slow Code Reviews</h4>

<p><em>Take the time to offer non-violent feedback to your colleagues:</em></p>

<ul>
  <li>When writing reviews</li>
  <li>When voicing feedback in the mob</li>
  <li>Follow the <a href="https://en.wikipedia.org/wiki/Nonviolent_Communication">Non-Violent Communication</a> pattern:
    <ul>
      <li>List the facts</li>
      <li>Share your feelings</li>
      <li>Share what needs you have</li>
      <li>Suggest a new way of doing things that meets everyone’s needs</li>
    </ul>
  </li>
</ul>

<h5 id="benefits-3">Benefits:</h5>

<ul>
  <li>It <strong>prevents conflicts</strong> from building up for the wrong reasons</li>
  <li>It <strong>improves teamwork, psychological safety, but also the efficiency of reviews</strong></li>
  <li>It leaves the door open for <strong>more creative solutions</strong></li>
  <li>It builds our feelings and needs fluency and <strong>self-awareness</strong></li>
  <li>It is a way to start <strong>learning Non-Violent Communication</strong></li>
</ul>

<h5 id="references-3">References:</h5>

<ul>
  <li><a href="https://www.mediawiki.org/wiki/Nonviolent_Code_Review">Nonviolent Code Review</a></li>
  <li><a href="https://www.oneworldcoders.com/blog/five-strategies-for-removing-violence-from-code-reviews">Five Strategies For removing Violence From Code Reviews</a></li>
  <li><a href="https://dev.to/dkassen/nonviolent-communication-in-code-reviews-3jh2">Non-Violent Communication In Code Reviews: Receiving Comments</a></li>
  <li><a href="https://www.michaelagreiler.com/resolving-conflict-nonviolent-communication/">Resolving Code Review Conflict In A Hippie-Dippie Way</a></li>
</ul>

<h3 id="slow-mobbing">Slow Mobbing</h3>

<p>Finally, here are two practices specifically suited to <a href="https://philippe.bourgau.net/categories/#mob-programming">mobbing</a> or <a href="https://philippe.bourgau.net/categories/#pair-programming">pair programming</a>.</p>

<h4 id="slow-driving">Slow Driving</h4>

<p><img src="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/slow-road.jpg" alt="Photo of a road with a road sign written &quot;Slow Down&quot;. Slow Driving in the Mob is a very easy and free way to inject some slow in your day." /></p>

<p><em>Take the time to be aware of your feelings and thoughts when driving:</em></p>

<ul>
  <li>Accept, or even better, relax into being navigated!</li>
  <li>Stay focused on typing and do what you are asked to do</li>
  <li>Focus on the touch of the keyboard and what displays on the screen</li>
  <li>Don’t judge what you are asked to do</li>
  <li>Breath while compiling or running tests</li>
</ul>

<h5 id="benefits-4">Benefits:</h5>

<ul>
  <li>This driving ‘pause’ makes the <strong>mobbing more sustainable</strong></li>
  <li>It helps to take a step back:</li>
  <li>Let your <strong>creative mind work in the background</strong></li>
  <li>Come back to <strong>navigation with a new perspective</strong></li>
</ul>

<h5 id="references-4">References:</h5>

<ul>
  <li>
    <table>
      <tbody>
        <tr>
          <td>[Mindfulness For Programmers. 3 simple exercises to be more present…</td>
          <td>by Julia Di Russo</td>
          <td>Towards Data Science](https://towardsdatascience.com/mindfulness-for-programmers-da6f92147b8f)</td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>

<h4 id="slow-navigating">Slow Navigating</h4>

<p><em>Take the time to practice egoless programming while navigating in the mob:</em></p>

<ul>
  <li>When other mobsters seem to be struggling with something you’ve figured out:
    <ul>
      <li>Observe any criticism or judgment that you may feel.</li>
      <li>Instead, try to be patient and compassionate.</li>
    </ul>
  </li>
  <li>When you struggle to understand or solve something:
    <ul>
      <li>Observe any self-criticism or self-judgment that you may notice</li>
      <li>Instead, try to accept these feelings and let them go.</li>
    </ul>
  </li>
  <li>When other mobsters come up with different solutions than you:
      - Strive towards egoless programming and humility by welcoming their solution </li>
</ul>

<p>Here is a variant:</p>

<ul>
  <li>Take a step back in the mob:
    <ul>
      <li>Strive to remain a neutral observer of the mob</li>
      <li>Keep a log of what is happening and the mood of the mob. (a bit like Slow Self-Retro)</li>
    </ul>
  </li>
</ul>

<h5 id="benefits-5">Benefits:</h5>

<ul>
  <li>A compassionate behavior builds psychological safety, <strong>improving decision-making and team performance</strong>.</li>
  <li>A “mob log” can be handy for <strong>continuous improvement</strong> and retrospectives.</li>
</ul>

<h5 id="references-5">References:</h5>

<ul>
  <li><a href="https://builtin.com/software-engineering-perspectives/kent-beck-geeks-gusto-globalization">Extreme Programming Creator Kent Beck: Tech Has a Compassion Deficit</a></li>
  <li><a href="https://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/">The 10 commandments of Egoless Programming</a></li>
</ul>

<h2 id="try-the-workshop">Try the workshop!</h2>

<p>Here are <a href="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/slow-code-retreat-workshop.pdf">the slides for the workshop</a> I gave at XPDays Benelux.</p>

<p><a href="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/slow-code-retreat-workshop.pdf"><img src="https://philippe.bourgau.net/imgs/2022-12-27-a-slow-code-retreat-to-be-less-in-a-hurry/slow-code-retreat-workshop-slides.jpg" alt="Picture of a stack of slides for the &quot;Slow Code Retreat&quot;. This contains all the material needed to run the workshop." /></a></p>

<p>My first recommendation is to try the workshop yourself. My first try at “slow self-retro” was mind-blowing. I was dumb-struck to see the <strong>emotional roller coaster a simple kata would get me through!</strong> If you have close peers to try it with, slow mobbing will teach you even more!</p>

<p>Also, next time you face a team with no time for coaching, don’t try to force it into their calendar. Has the team got <strong>“down time” in its calendar</strong>: Scrum slack-time, SAFe Innovation &amp; planning? (Or August in France 😉?) Suggest volunteers try this 2 hours workshop during this downtime:</p>

<ul>
  <li><strong>“Slow Driving” and “Slow TODO List” make work more sustainable <em>and</em> productive from day 1!</strong></li>
  <li>The other techniques need more time to install (that might be a topic for a follow-up post)</li>
  <li>All practices will get them to <strong>explore an ignored facet of software development</strong></li>
</ul>

<p>Whatever you try, I would love to read your feedback!</p>

<hr />
<p>Here are other articles that might interest you:</p>

<ul>
  <li>Technical coaching can be exhausting at times. Here are “<a href="https://philippe.bourgau.net/3-tips-to-drop-technical-agile-coaching-result-measures-and-relax/">3 Questions To Let-Go Technical Agile Coaching Measures</a>” and “<a href="https://philippe.bourgau.net/5-technical-agile-coaching-tips-to-fight-exhaustion-from-laggards/">5 technical agile coaching tips to fight exhaustion from laggards</a>.”</li>
  <li>Here is another post containing other experimental technical coaching practices: “<a href="https://philippe.bourgau.net/how-the-pandemic-made-us-discover-better-ways-of-coaching/">How the pandemic made us discover better ways of coaching</a>.”</li>
  <li>100% pairing can be difficult for some people. Here is “<a href="https://philippe.bourgau.net/how-to-use-mob-programming-at-the-rescue-of-pair-programming-burnout/">How to use Mob Programming at the rescue of Pair Programming burnout</a>.”</li>
  <li>Slow TODO List is a direct use of the “<a href="https://philippe.bourgau.net/to-do-list-or-mind-map-for-programming/">TODO list or Mind Map for programming</a>,” the only difference being a shift of intent from productivity to calm.</li>
  <li>“<a href="https://philippe.bourgau.net/how-to-help-a-team-to-find-their-preferred-mob-programming-rules/">How to help a team to find their preferred mob programming rules?</a>” presents how to use a mobbing code retreat to experiment with new rules for mobbing. This could be the perfect occasion to try slow mobbing!</li>
</ul>]]></content><author><name>Philippe Bourgau</name></author><category term="coaching" /><category term="programming" /><category term="tdd" /><category term="pair programming" /><category term="tcr" /><category term="personal productivity" /><category term="coding dojo" /><category term="mob programming" /><category term="sustainable pace" /><category term="continuous improvement" /><summary type="html"><![CDATA["Developers will always have more work than time" We can race our TODO lists or accept and slow down NOW. The "Slow Code Retreat" lets us experience 6 Slow-Code practices in 2 hours: Slow TODO List, Slow Baby Steps, Slow Self Retro, Slow Code Reviews, Slow Driving, and Slow Navigating.]]></summary></entry><entry><title type="html">A complete workshop for your team to see what’s a good test strategy</title><link href="https://philippe.bourgau.net/a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/" rel="alternate" type="text/html" title="A complete workshop for your team to see what’s a good test strategy" /><published>2022-09-29T00:00:00+00:00</published><updated>2022-09-29T00:00:00+00:00</updated><id>https://philippe.bourgau.net/a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy</id><content type="html" xml:base="https://philippe.bourgau.net/a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/"><![CDATA[<p><em><strong>Teams often disagree about what is a good test strategy!</strong> So here is an all-in workshop to capture practices, define testing terms and agree on improvements.</em></p>

<p><img src="https://philippe.bourgau.net/imgs/2022-09-24-a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/different-test-vocabulary.jpg" alt="Drawing of 2 characters trying to talk together. One is talking about a plane, while the other is imagining a bike with a windshield and wings. Agreeing on the names of the different kinds of software tests is the first step for better team test strategy." /></p>

<p>One of the first teams I worked with as a full-time coach struggled with testing. Let’s call this team Phoenix. It was relying almost only on slow end-to-end tests. The team had just welcomed a few members to make it cross-disciplinary. In addition, the team aimed to speed up the testing feedback loop. So, developers were xUnit-testing while quality engineers were speeding up systems tests.</p>

<p>Around 2 years later, the situation had improved a lot. Developers were getting more confidence in their tests, and end-to-end tests were faster. Yet, the team was still relying on those slow tests. There was yet no coordinated effort towards an improved test strategy. As a result, <strong>the team had to overcome a new threshold to further improve their testing</strong>.</p>

<p><strong>I also noticed that the team used its own DIY vocabulary for the different kinds of software tests:</strong></p>
<ul>
  <li>“TPKs” for end-to-end tests</li>
  <li>“offline tests” for any type of developers tests</li>
</ul>

<blockquote>
  <p>One thing I’m still unclear on is what you mean by “Integration Testing: and whether it’s similar enough in meaning to what the rest of the folks mean by “integration testing”</p>
</blockquote>

<blockquote>
  <p>I’ve learned to define testing terms before having testing conversations. At one large-sized company, engineers had different definitions for each testing term. E.g., one Pearson’s “integration” test was another person’s “integrated” test.</p>
</blockquote>

<blockquote>
  <p>I agree that “integration Test” has a lot of meanings.</p>
</blockquote>

<p><strong>Blurry testing terms are a common symptom of not thinking about “What is a good test strategy for our team?”</strong> A lack of testing strategy leads to many problems, like:</p>
<ul>
  <li>Holes in the test harness, which lead to bugs and rework</li>
  <li>A slow testing feedback loop, relying on old habits, like end-to-end integrated tests</li>
  <li>Increased test maintenance burden because different kinds of test overlap coverage.</li>
</ul>

<p>With time, these “testing problems” increase the risk of abandoning testing altogether!</p>

<blockquote>
  <p>Wouldn’t it be great if engineers regularly aligned on testing terms?</p>
</blockquote>

<h2 id="lets-teach-a-dedicated-workshop-to-the-teams">Let’s teach a dedicated workshop to the teams!</h2>

<p>Phoenix tackled testing issues with an all-in workshop to discuss the testing strategy. During the workshop, all team members were able to:</p>

<ul>
  <li>Learn industry’s testing best practices and compare their own practices</li>
  <li>Agree and capture testing terms</li>
  <li>Agree about who, how, and when they should test the different aspects of their system</li>
  <li>As a whole team, define and plan an improvement to their testing strategy</li>
</ul>

<p>Here is what they said about the workshop:</p>

<blockquote>
  <p>This workshop made me think about many things, thanks to the different questions.</p>
</blockquote>

<blockquote>
  <p>Thanks to this workshop, I enriched my testing vocabulary with new words, such as subcutaneous tests.</p>
</blockquote>

<blockquote>
  <p>It’s like a game; we had fun but also came up with new solutions.</p>
</blockquote>

<blockquote>
  <p>I liked the fact that the whole team participated in the workshop.</p>
</blockquote>

<p>More specifically, QA engineers and developers saw that some parts of the code were tested twice. It was clear that to reduce the testing feedback loop, they had to collaborate more. They had to start replacing end-to-end tests with developer tests. At the end of the workshop, they decided to write a first decoupled acceptance test.</p>

<p>A few months after the workshop, the team was now regularly removing end-to-end tests. As a result, developers could enjoy a faster testing feedback loop.</p>

<p><strong>🎁 With better testing comes more sustainable and calmer work!</strong></p>

<h2 id="the-workshop-agenda">The Workshop Agenda</h2>

<p>You might be wondering what was inside this workshop? Here is a summary of the steps that the Phoenix team went through. The workshop is a succession of 7 steps. All in all, it takes between 5 to 7 hours. Therefore, running this workshop as a series of 1-hour sessions is best.</p>

<h3 id="step-1-learn-what-industry-agile-trailblazers-do">Step 1: Learn what industry agile trailblazers do</h3>

<p>Before the session, we sent homework to the team members. We shared links like:</p>

<ul>
  <li><a href="https://www.youtube.com/watch?v=uwH83PjR98g">DevLin2017 - Aslak Hellesøy - Testable Architectures - YouTube</a></li>
  <li><a href="https://reflectoring.io/7-reasons-for-consumer-driven-contracts/#:~:text=Consumer-Driven%20Contract%20tests%20%28CDC%20tests%29%20are%20a%20specialization,we%20will%20come%20to%20later%20in%20this%20article.">7 Reasons to Choose Consumer-Driven Contract Tests Over End-to-End Tests (reflectoring.io)</a></li>
</ul>

<p>The homework was to search the web and these references for different kinds of software tests.</p>

<p><strong>During the workshop, we asked each team member to present a kind of test.</strong> To illustrate this, they had to:</p>

<ul>
  <li>Present a definition to the rest of the team</li>
  <li>And place it on this duration X maintenance X coverage quadrant.</li>
</ul>

<p><img src="https://philippe.bourgau.net/imgs/2022-09-24-a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/test-quadrant.png" alt="Screenshot of the team's understanding of the different kinds of tests we can hear from the industry" /></p>

<p>The idea is to learn how the different kinds of tests compare.</p>

<h3 id="step-2-draw-the-ideal-pyramid">Step 2: Draw the ideal pyramid</h3>

<p>With this new knowledge, team members could build an ‘ideal’ test pyramid.</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-09-24-a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/ideal-test-pyramid.png" alt="Screenshot of an ideal test pyramid according to industry references." /></p>

<p>It’s funny that this ideal pyramid does not look too pyramidal. Martin Fowler said we should <a href="https://martinfowler.com/articles/2021-test-shapes.html">not bother so much about the shape</a> anyway! There is no good-or-bad result. This step is yet another way for the team to apprehend different kinds of software tests.</p>

<h3 id="step-3-draw-your-pyramid">Step 3: Draw your pyramid</h3>

<p><strong>After digging through their test metrics, the team could draw its own test pyramid.</strong> We sent the team more homework for this activity. We asked team members to come up with metrics:</p>

<ul>
  <li>What are your different kinds of tests?</li>
  <li>What is the total execution time of each of these kinds of tests?</li>
  <li>How many assertions does each of these kinds of tests check?</li>
</ul>

<p><img src="https://philippe.bourgau.net/imgs/2022-09-24-a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/real-test-pyramid.png" alt="Screenshot of how the team saw its own test pyramid." /></p>

<p>This big rectangle in the middle represents end-to-end tests. It was clear to all the team members that they relied heavily on those!</p>

<h3 id="step-4-compare-and-discuss">Step 4: Compare and discuss</h3>

<p>Participants had 2 pyramids and a better understanding of the test vocabulary. To continue, they could now map their tests to the industry’s standards.</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-09-24-a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/test-pyramids-mapping.png" alt="Screenshot of how the team mapped its own test pyramid to their ideal." /></p>

<p>As you can see, they had to get creative! There is no one-to-one mapping between their tests and the kinds of tests we can find in the industry. This mapping showed how end-to-end tests verified too many aspects of the system.</p>

<p>The team members could now imagine what a good test strategy would be for them. Here are examples of what I heard during the workshop:</p>

<blockquote>
  <p>We are missing decoupled acceptance tests!</p>
</blockquote>

<blockquote>
  <p>We won’t be able to remove end-to-end tests until we ensure coverage differently!</p>
</blockquote>

<h3 id="step-5-fill-a-test-strategy-canvas">Step 5: Fill a test Strategy Canvas</h3>

<p><strong>The Test Strategy canvas is a one-page template that summarizes how a team tests its software.</strong></p>

<p><strong>One of the goals of this workshop is to agree on names for the different kinds of software tests.</strong> That’s done in this step. The Phoenix team members also agreed to a unique test strategy thanks to this activity. This canvas clarifies precisely:</p>

<ul>
  <li>The purpose of testing in the team</li>
  <li>What is inside or outside the team’s responsibility</li>
  <li>The different kinds of tests: name, constraints, technologies, who runs and maintains them…</li>
</ul>

<p>Having a whole team converge to a single canvas can look daunting! However, mixing the <a href="https://www.liberatingstructures.com/1-1-2-4-all/">1-2-4-all</a> and asynchronous sessions is an effective way to do it.</p>

<p>Here is what the Phoenix canvas looked like:</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-09-24-a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/test-strategy-canvas.jpg" alt="Screenshot of the test strategy canvas that the team filled to represent their current way of testing" /></p>

<p>The grid you see in the middle of the canvas describes every different kind of test. As an example, here is the line for Unit Tests:</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-09-24-a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/unit-test-in-canvas.png" alt="Zoom on the 'unit tests' kind of tests from the team's test startegy canvas" /></p>

<p>This canvas can also serve as a living convention. Fortunately, updating the workshop board should not be too long. <strong>Re-running the workshop is also a good onboarding activity for new joiners.</strong></p>

<h3 id="step-6-solution-focus-to-get-1-step-closer">Step 6: Solution focus to get 1 step closer</h3>

<p>At this point, all participants agreed on the current situation. They also knew the industry’s best practices. The next step was to go through a <a href="http://bilal.eltayara.net/blog/2016/06/18/a-simple-way-to-run-a-solution-focused-retrospective/">Solution-Focus activity</a> to draft an improvement.</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-09-24-a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/solution-focus.png" alt="Screenshot of the solution focus activity, that helped the team to see where it stands regarding state of the art testing and to envision going just-1-step-closer" /></p>

<p><strong>This activity constrains the size of improvements to something small and manageable.</strong> This lets the PO and the rest of the team find a compromise that:</p>

<ul>
  <li>Delivers value early.</li>
  <li>Without blocking feature delivery.</li>
  <li>While still going in the right direction.</li>
</ul>

<h3 id="step-7-draft-an-improvement-as-a-team">Step 7: Draft an improvement as a team!</h3>

<p>The solution focus activity ends with participants brainstorming the “10% improvement”. Here is Phoenix’s improvement draft:</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-09-24-a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/improvement-idea.png" alt="Screenshot of an improvement that the team agreed at the end of the workshop" />
<em>Final testing improvement the team agreed on.</em></p>

<p><strong>A key benefit of coming up with this improvement with the whole team is that it is already prioritized!</strong> During the workshop, the PO had all the time to build empathy with everyone. He understood how this improvement would make the team more efficient.</p>

<p><em><strong>💡 A nice side effect is that putting tests in place often involves paying back technical debt!</strong></em></p>

<p>This workshop was also a way to break silos and give non-developers a look inside the system.</p>

<p>To summarize, such technical whole-team workshops can show a different way:</p>

<p><em><strong>💡 The way of communication, collaboration, and collective decision-making</strong></em></p>

<h2 id="is-your-test-strategy-clear">Is your test strategy clear?</h2>

<p><img src="https://philippe.bourgau.net/imgs/2022-09-24-a-complete-workshop-for-your-team-to-see-what-s-a-good-test-strategy/one-way-street.jpg" alt="2 panels going in opposite directions written &quot;One Way&quot; and &quot;Another Way&quot;. Miscomprehension about names of the different kinds of software tests is the main symptom of a need for clarity about the testing strategy." /></p>

<p>Did you notice any miscommunication around testing between team members?</p>

<ul>
  <li><strong>Do they disagree about testing terms, how to test, or how to improve testing?</strong></li>
  <li><strong>Do the different profiles in the team disagree about the priority to give to testing?</strong></li>
</ul>

<p>If any of these is true, run this Test Strategy Workshop! Find someone interested in facilitating the workshop and help them the first time. They should be able to re-run it later for an update. Running this workshop now and again will result in continuous improvement in testing.</p>

<p>What about you? I’d love to read about other coaching techniques to handle testing disagreements! Finally, if you try this workshop, please comment on how it went or what could improve it.</p>

<hr />
<p>If you liked this post, you might also be interested in:</p>
<ul>
  <li><a href="https://philippe.bourgau.net/how-to-make-a-team-facilitate-agile-architecture-workshops/">How to make a team facilitate agile architecture workshops</a></li>
  <li><a href="https://philippe.bourgau.net/how-to-help-a-team-to-find-their-preferred-mob-programming-rules/">How to help a team to find their preferred mob programming rules?</a></li>
  <li><a href="https://philippe.bourgau.net/5-whole-team-workshops-to-increase-developers-role-in-sprint-planning/">5 Whole-Team Workshops To Increase Developers’ Role In Sprint Planning</a></li>
  <li><a href="https://philippe.bourgau.net/3-good-and-bad-ways-to-write-team-coding-standards-and-conventions/">3 Good and Bad Ways to Write Team Coding Standards and Conventions</a></li>
  <li><a href="https://philippe.bourgau.net/how-we-started-exploratory-testing/">How We Started Exploratory Testing</a></li>
</ul>]]></content><author><name>Philippe Bourgau</name></author><category term="testing" /><category term="coaching" /><category term="team building" /><category term="collaborative work" /><category term="improvement kata" /><summary type="html"><![CDATA[Software teams often disagree about what is a good test strategy! So here is a whole-team workshop to agree on names for the different kinds of software tests and capture current practices. After filling a test strategy canvas, the workshop ends by defining and planning testing improvements.]]></summary></entry><entry><title type="html">How to make TCR evolutionary design practice sessions irresistible</title><link href="https://philippe.bourgau.net/how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/" rel="alternate" type="text/html" title="How to make TCR evolutionary design practice sessions irresistible" /><published>2022-08-18T00:00:00+00:00</published><updated>2022-08-18T00:00:00+00:00</updated><id>https://philippe.bourgau.net/how-to-make-tcr-evolutionary-design-practice-sessions-irresistible</id><content type="html" xml:base="https://philippe.bourgau.net/how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/"><![CDATA[<p><em>Getting participants in a TCR code kata exercise seems complicated! Yet, given what TCR is, these sessions can radiate genuine fun and direct applicability!</em></p>

<p><img src="https://philippe.bourgau.net/imgs/2022-08-07-how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/tcr-donkey.jpg" alt="Drawing of a tabletop game box titled 'TCR' and featuring donkey kicking and throwing away everything he was carrying. TCR can feel like the programmer's version of this old 'Buckaroo' game where we wanted to load the donkey as much as possible until it kicked everything around." /></p>

<p>A few weeks ago, I wrote that <a href="https://philippe.bourgau.net/a-surprising-way-how-to-teach-evolutionary-design/">TCR code kata exercises are great for teaching evolutionary design</a>.</p>

<p><strong>Have you suggested TCR sessions to the teams you are coaching? Great! Unfortunately, “Selling” TCR is not easy.</strong> Here is what you might notice:</p>

<blockquote>
  <p>The big pushback to continuous design is of course from devs who insist that they need an end-all solution now, and that it has to be completely implemented now even if the design represents a speculative need.</p>
</blockquote>

<blockquote>
  <p>The harder sell is with people who have been taught that changing the design is “rework waste.”</p>
</blockquote>

<blockquote>
  <p>They used their code review process as a hazing ritual, forcing new programmers to prove they could write everything perfectly the first time.</p>
</blockquote>

<p>I’ve also written about <a href="https://philippe.bourgau.net/how-to-handle-tdd-does-not-work-in-real-life-during-code-katas/">“TDD does not work in real life!” complaints</a>. It becomes even worse as we push TDD to the TCR extreme! <strong>TCR code kata exercises don’t appeal to developers who believe in “perfect code first.”</strong></p>

<blockquote>
  <p>What if you had a trick to hook developers on TCR evolutionary design practice sessions?</p>
</blockquote>

<p>Lately, my colleague Ahmad started to run kata sessions with a group of newcomers at Murex. One of the first sessions was to practice TDD and TCR with the Mars Rover kata. The group set out for an ambitious test and started to write a lot of code. Despite one mobster complaining about the long step, they pushed on for more than 15 minutes. Eventually, they were confident that their code was working! They saved… TCR ran… and reverted everything!</p>

<p>From then on, the dynamic of the group changed. It went from ego-hero to collaboration against the new TCR opponent. During the end-of-session retro, everyone saw that baby steps were safer and calmer. They also understood that TCR was a great teacher.</p>

<p>To our own surprise, my team and I have discovered that <strong>katas with TCR sell better than those with TDD!</strong></p>

<ol>
  <li>Before, <a href="#present-sessions-like-fun-drills">Present sessions like fun drills</a></li>
  <li>Make sure to <a href="#run-a-genuine-deliberate-practice-session">Run a genuine deliberate practice session</a></li>
  <li><a href="#finish-the-session-with-a-compelling-retrospective">Finish the session with an effective retro</a> to transpose practice to real work</li>
</ol>

<h2 id="present-sessions-like-fun-drills">Present sessions like fun drills!</h2>

<p><img src="https://philippe.bourgau.net/imgs/2022-08-07-how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/fun-workout.jpg" alt="Photo of a girl practicing handstand on the beach. TCR is like weights that you add to your TDD drills, but, with even more fun!" /></p>

<p>How you introduce the sessions greatly impacts the participants’ engagement.</p>

<h3 id="leverage-your-pedagogy-expert-posture"><strong>Leverage your pedagogy-expert posture</strong></h3>

<p><strong>TCR sounds like a ‘drill’</strong>. The word ‘<a href="https://en.wikipedia.org/wiki/Agility_drill">drill</a>’ has an ‘improvement’ connotation and people understand that:</p>

<ul>
  <li><strong>Drills are different from real-life work.</strong></li>
  <li><strong>Yet, drills positively impact real-life work.</strong></li>
</ul>

<p>Using such vocabulary also puts you in the position of a pedagogy expert. (Side Note: I am no pedagogy expert, but as a tech coach, I know more than most developers I work with. In the country of the blind, the one-eyed man is king!) As a result, people are more likely to trust you about the learning value of our exercises.</p>

<h3 id="highlight-the-fun">Highlight the fun!</h3>

<p>One of the main observations we made about TCR katas is that they are fun! They have a poker-like twist, as we ‘bet’ our code on green tests. We felt this ourselves, observed it in group dynamics, and heard it through feedback.</p>

<p>💡 TDD code katas can be fun, but TCR code kata exercises are even more fun!</p>

<h2 id="run-a-genuine-deliberate-practice-session">Run a genuine deliberate practice session</h2>

<h3 id="keep-them-in-the-practice-mindset">Keep them in the practice mindset.</h3>

<p>Always repeat that this is practice. At first, participants might be unable to use TCR or TDD in their day-to-day work. Remind them that a code kata is a unique occasion to practice by the book in a safe context.</p>

<blockquote>
  <p>I stopped and reminded them that they were here to learn how to build things incrementally, that they should continue to work through the exercises with that in mind (<a href="https://twitter.com/jlangr">Jeff langr</a> on <a href="https://groups.io/g/extremeprogramming/topic/75090300?p=,,,40,0,0,0">extremeprogramming@groups.io</a>)</p>
</blockquote>

<p>This should help them to stay engaged at times when they are doubting.</p>

<p>But TCR has yet another advantage. It’s weird and very different from how most developers write code. At first, <strong>it’s almost impossible for participants to envision using it in their day-to-day work. As a result, they tend to take TCR code katas as pure exercises.</strong> In the end, it’s easier for participants to stay in a constructive practice mindset!</p>

<h3 id="wait-for-reverts">Wait for reverts!</h3>

<p><img src="https://philippe.bourgau.net/imgs/2022-08-07-how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/time-to-say-goodbye.jpg" alt="Photo of a signboard written &quot;Time to say goodbye&quot;. When TCR kicks in and reverts your code, the best thing to do is to let it go, and move on." /></p>

<p><strong>At the risk of sounding sadistic, TCR gives its critical lesson when it reverts our code!</strong> If we were running a traditional TDD session, we would have to remind the participants to take small steps.</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Traditional TDD Code Kata</span>
<span class="k">while</span><span class="p">(</span><span class="kp">true</span><span class="p">)</span>
<span class="err">   </span><span class="n">coach</span><span class="p">.</span><span class="nf">say</span><span class="p">(</span><span class="s2">"Remember not to write too much code before running the tests!"</span><span class="p">)</span>
<span class="err">   </span><span class="nb">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">.</span><span class="nf">minute</span><span class="p">)</span>
<span class="k">end</span>
</code></pre></div></div>

<p>💡 With TCR, the best practice is to let participants take long steps!</p>

<p>Most of these extra-long steps end up with TCR reverting the code. <strong>Participants might want to ‘cheat’</strong> to recover the code at this point! (For example, you can get it back with a Ctrl+Z in many IDEs). This is the moment to put on your “sports coach” cap:</p>

<blockquote>
  <p>Hey! This is cheating 😉! This is the crucial moment of TCR. You just learned that this code does not quite work, and TCR is telling you that you need to go slower.</p>
</blockquote>

<p>This can be a difficult lesson for some participants. Others in the group will be happy to start from a blank page again, though. Usually, everybody gets over it after a few minutes.</p>

<h3 id="lean-on-tcr">Lean on TCR</h3>

<p>As illustrated above, we don’t need to talk much during a TCR code kata exercise. Instead, participants can learn by themselves through the TCR script.</p>

<p><strong>Developers, used to picky compilers, will get far less annoyed by the machine than by a human coach.</strong> As a result, it will be easier for them to take a step back and reconsider their opinion.</p>

<p>Also, they will learn what is meaningful to them at this moment. It’s different from us trying to guess what is worth remembering!</p>

<p>To summarize, TCR sessions are more intense and effective and need less coach intervention!</p>

<h2 id="finish-the-session-with-a-compelling-retrospective">Finish the session with a compelling retrospective</h2>

<p>We always end kata sessions with a quick retrospective. It’s essential to take 5 or 10 minutes for participants to discuss what they did and learned. It’s also the best moment to make the decision to change how they want to work. TCR has some critical lessons to bring to these quick retrospectives.</p>

<h3 id="stop-biting-more-than-you-can-chew">Stop biting more than you can chew!</h3>

<p><img src="https://philippe.bourgau.net/imgs/2022-08-07-how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/dog-chewing.jpg" alt="Photo of a dog chewing a stick that is too long for it. One great thing about TCR is that it teaches us what is the size of a change we can do without mistake." /></p>

<p><strong>TCR is a cruel teacher: whenever we try to make a change that outgrows our abilities, TCR reverts it.</strong></p>

<p>After a few hours, one will get a gut instinct about how much they can change in one step without making mistakes!</p>

<blockquote>
  <p>The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague. (<a href="https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html">Edsger W. Dijkstra</a>)</p>
</blockquote>

<p>As Dijkstra said, this is a fundamental lesson that is always applicable. We can apply this knowledge to whatever we are working on:</p>

<ul>
  <li>a code kata or a commercial product</li>
  <li>a greenfield or a legacy codebase</li>
  <li>a professional app or a Sunday pet-project</li>
</ul>

<p>We’ll have learned this for the rest of our lives! (Note: use TCR regularly to keep the lesson up to date!)</p>

<p>As a coach, we can use the retro to ask powerful questions about this topic:</p>

<blockquote>
  <ul>
    <li>What did you notice about the changes that passed?</li>
    <li>What about the changes that TCR reverted?</li>
    <li>How can you transpose this to your day-to-day work?</li>
  </ul>
</blockquote>

<p>We have added a new feature in our <a href="https://github.com/murex/TCR">TCR tool</a> to help participants answer these questions. It’s a pure didactic feature that adds <code class="language-plaintext highlighter-rouge">fail</code> and <code class="language-plaintext highlighter-rouge">revert</code> commits. Then, through the Git log, participants can retrospect the failed changes. To try it, run the TCR tool with <code class="language-plaintext highlighter-rouge">tcr --commit-failures</code>. It does not change anything to the TCR flow, except that you’ll get extra commits to retrospect.</p>

<p>For example, you can inspect the failing changes with <code class="language-plaintext highlighter-rouge">git log --oneline --full-diff -p .</code></p>

<div class="language-diff highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">4e9bbf5 ❌ TCR - tests failing
</span><span class="gh">diff --git a/java/src/main/java/com/murex/BowlingGame.java b/java/src/main/java/com/murex/BowlingGame.java
index d49fe79..df25c72 100644
</span><span class="gd">--- a/java/src/main/java/com/murex/BowlingGame.java
</span><span class="gi">+++ b/java/src/main/java/com/murex/BowlingGame.java
</span><span class="p">@@ -30,15 +30,20 @@</span> class BowlingGame {
     static int score(int... rolls) {
         int score = 0;
 
<span class="gd">-        if (rolls[0] == TOTAL_PINS)
-            return 28;
-        if (rolls[2] == TOTAL_PINS) {
-            return 20;
-        }
</span><span class="gi">+//        if (rolls[0] == TOTAL_PINS)
+//            return 28;
+//        if (rolls[2] == TOTAL_PINS) {
+//            return 20;
+//        }
</span> 
         int iRoll = 0;
         for (int iFrame = 0; iFrame &lt; NB_FRAMES; iFrame++) {
<span class="gd">-            if (isASpare(rolls, iRoll)) {
</span><span class="gi">+            if(rolls[iRoll] == TOTAL_PINS) {
+                score += TOTAL_PINS;
+                score += rolls[iRoll] + rolls[iRoll + 1];
+                iRoll++;
+            }
+            else if (isASpare(rolls, iRoll)) {
</span>                 score += rolls[iRoll] + rolls[iRoll + 1];
                 score += rolls[iRoll + 2];
                 iRoll += 2;
</code></pre></div></div>

<p>You can also get a birds eye view of your commit history through your online Git interface:</p>

<p><a href="https://philippe.bourgau.net/imgs/2022-08-07-how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/bowling-tcr-log-full.jpg"><img src="https://philippe.bourgau.net/imgs/2022-08-07-how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/bowling-tcr-log-small.jpg" alt="Screenshot of the TCR log with failing commit activated. We can see different kinds of commit, with test stats in each commit message. TCR failure commits are great to learn how large a change we are able to do without mistake!" /></a>.</p>

<h3 id="suggest-tcr-when-refactoring-production-code">Suggest TCR when refactoring production code</h3>

<p>You can also use the retro to nudge participants into using TCR for their day-to-day work. With fast feedback tests, <a href="https://medium.com/@tdeniffel/brutal-refactoring-31b5cc4d4512">refactoring production code with TCR</a> is pretty straightforward. For example, you can say something like:</p>

<blockquote>
  <p>If you happen to be refactoring a piece of code that has fast tests, give TCR a try! It makes refactoring calm and practical.</p>
</blockquote>

<h2 id="lets-summarize">Let’s summarize</h2>

<p><img src="https://philippe.bourgau.net/imgs/2022-08-07-how-to-make-tcr-evolutionary-design-practice-sessions-irresistible/plant-sun.jpg" alt="Photo of a small plant that is just piercing the soil, in the sun. Starting to practice TCR is like an investment that will grow and make developers' lives calmer and more effective." /></p>

<p>Here is my advice to get people engaged in TCR practice sessions:</p>

<ul>
  <li>don’t mention TCR</li>
  <li>set a “fun and collaborative drills” atmosphere</li>
  <li>let people be reverted</li>
  <li>run impactful session retrospectives</li>
</ul>

<p>As I wrote above, <strong>TCR learnings are surprisingly production-ready!</strong> Coachees will feel the benefits pretty fast! After that, they’ll start to look forward to more practice. And as they go through sessions, participants will find TCR increasingly more attractive.</p>

<p>At Murex, we have been building a TCR tool for code kata exercises. You can find it at <a href="https://github.com/murex/TCR">https://github.com/murex/TCR</a>. You can also find a sample kata repo at <a href="https://github.com/murex/Kata-BowlingGame">https://github.com/murex/Kata-BowlingGame</a>.</p>

<p>What about you? I’d love to read your feedback about getting people engaged in TCR practice sessions! Or maybe you have been using TCR on a day-to-day basis? If you get to try these tips, I’d love to hear how it went!</p>

<hr />

<p>Here are other posts that you might find interesting:</p>

<ul>
  <li><a href="https://philippe.bourgau.net/a-surprising-way-how-to-teach-evolutionary-design/">A surprising way to teach evolutionary design</a></li>
  <li><a href="https://philippe.bourgau.net/how-to-handle-tdd-does-not-work-in-real-life-during-code-katas/">How to handle “TDD does not work in real life!” during code katas</a></li>
  <li><a href="https://philippe.bourgau.net/how-the-pandemic-made-us-discover-better-ways-of-coaching/">How the pandemic made us discover better ways of coaching</a></li>
  <li><a href="https://philippe.bourgau.net/how-to-coach-a-team-that-has-been-burnt-by-bad-tdd/">How to coach a team that has been burnt by bad TDD</a></li>
  <li><a href="https://philippe.bourgau.net/how-the-samman-method-helps-to-sell-technical-coaching-internally/">How the Samman Method helps to sell technical coaching internally?</a></li>
  <li><a href="https://philippe.bourgau.net/7-tricks-to-influence-a-team-resisting-to-change/">7 tricks to influence a team resisting to change its technical habits</a></li>
</ul>]]></content><author><name>Philippe Bourgau</name></author><category term="coaching" /><category term="tcr" /><category term="coding dojo" /><category term="change management" /><summary type="html"><![CDATA[Getting participants in a TCR code kata exercise seems complicated! Here are tips for your TCR session. How to tease it before? How to maximize fun and learning during the session? And how to make sure participants leave it knowing how to apply what they learned?]]></summary></entry><entry><title type="html">A Surprising Way How To Teach Evolutionary Design</title><link href="https://philippe.bourgau.net/a-surprising-way-how-to-teach-evolutionary-design/" rel="alternate" type="text/html" title="A Surprising Way How To Teach Evolutionary Design" /><published>2022-07-07T00:00:00+00:00</published><updated>2022-07-07T00:00:00+00:00</updated><id>https://philippe.bourgau.net/a-surprising-way-how-to-teach-evolutionary-design</id><content type="html" xml:base="https://philippe.bourgau.net/a-surprising-way-how-to-teach-evolutionary-design/"><![CDATA[<p><em>Evolutionary Design might be the most valuable yet impenetrable XP practice. Use TCR to practice baby-steps coding, the cornerstone of Evolutionary Design.</em></p>

<p><img src="https://philippe.bourgau.net/imgs/2022-07-05-a-surprising-way-how-to-teach-evolutionary-design/tcr-gardening.jpg" alt="Drawing of a hand watering some plants that are taller and taller. Letters TCR are written on the watering can. Evolutionary Design is a bit like gardening, as we try to make the plants grow the best they can. TCR code katas help us practice baby steps, that let re-orient the design as we move forward." /></p>

<blockquote>
  <p>Evolutionary Design is my very favorite XP practice, but also the one that took me the longest to accept. It’s also the hardest to teach.</p>
</blockquote>

<blockquote>
  <p>More than just software development skills, it [Note: evolutionary design] also takes humility, patience, restraint, discipline, and confidence.</p>
</blockquote>

<blockquote>
  <p>People don’t learn new habits overnight. Three days barely scratches the surface, so sitting with them as they work through real stuff, and showing how things play out, is critical. It can be months before better habits stick.</p>
</blockquote>

<p><strong>Performing Evolutionary Design makes the lives of developers better!</strong> With it, a team can re-orient its software design according to the latest challenges. This makes progress steadier, more predictable, and the pace more sustainable!</p>

<p>For <a href="https://blogs.oracle.com/javamagazine/post/interview-with-kent-beck">Kent Beck,</a> master programmers split large code changes into small steps. <a href="https://codingdojo.org/practices/BabySteps/">Baby steps</a> are the building blocks of continuous software design evolution. <strong>Baby-steps programming is the fundamental skill for evolutionary design.</strong></p>

<p>Unfortunately, teaching baby steps is not easy. Participants tend to stick to wide steps. Even in a TDD coaching session and even as we remind them!</p>

<blockquote>
  <p>Wouldn’t you love to run baby-steps training sessions and teach evolutionary design faster?</p>
</blockquote>

<p>It turns out that using <a href="https://medium.com/@kentbeck_7670/test-commit-revert-870bbd756864">TCR</a> (<code class="language-plaintext highlighter-rouge">test &amp;&amp; commit || revert</code>) in practice sessions does that!</p>

<h2 id="how-we-started-to-run-tcr-practice-sessions">How we started to run TCR practice sessions</h2>

<p><a href="https://medium.com/@tdeniffel/tcr-variants-test-commit-revert-bf6bd84b17d3">Thomas Deniffel’s post about TCR Variants</a> made a massive impression on me. I tried TCR with 1 or 2 katas and then suggested to my coach colleagues to experiment too. Everyone liked how it ‘forced’ us to stick to baby steps.</p>

<p>Here is what our TCR flow looks like:</p>

<ul>
  <li>It watches the file system for changes to the code</li>
  <li>As soon as it detects some changes, it builds and runs the tests
    <ul>
      <li>If the tests fail, it reverts</li>
      <li>If the tests pass, it commits</li>
    </ul>
  </li>
  <li>It repeats</li>
</ul>

<p><strong>If we are too bold or ambitious (or pretentious) with a code change, the tests fail, and the change gets reverted.</strong> One quickly learns that the easiest way to go through an exercise with TCR is to stick to baby steps.</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-07-05-a-surprising-way-how-to-teach-evolutionary-design/children-shoes.jpg" alt="Photo of used and small children shoes. Using TCR has taught us again to code in baby steps." /></p>

<p><strong>Having participants stick to baby steps during a code kata has always been an issue.</strong> So we agreed to experiment with TCR in a few training sessions.</p>

<p>This was a success! The feedback after our test sessions was excellent! As a result, TCR has become the default for every session we run.</p>

<h2 id="what-do-participants-say">What do participants say?</h2>

<p>As I said, up to now, feedback has been great. Here are some examples of what people said at the end of a session.</p>

<h3 id="its-fun">It’s fun!</h3>

<blockquote>
  <p>It’s almost a ‘gamified’ way to go through code katas!</p>
</blockquote>

<blockquote>
  <p>There’s a poker flavor of ‘betting’ on your change.</p>
</blockquote>

<h3 id="it-stretches-coding-muscles">It stretches coding muscles.</h3>

<blockquote>
  <p>It’s TDD on steroids!</p>
</blockquote>

<blockquote>
  <p>I learned how to do more rigorous katas.</p>
</blockquote>

<blockquote>
  <p>I pushed baby steps to 11!</p>
</blockquote>

<figure class="">
  <img src="https://philippe.bourgau.net/imgs/2022-07-05-a-surprising-way-how-to-teach-evolutionary-design/spinal-tap-up-to-eleven.jpg" alt="Screenshot from the Spinal Tap movie where we see volume knobs turned with an '11' scale. Adding TCR to code katas will make us do even more baby-steps than with TDD." /><figcaption>
      
Screenshot from <a href="https://en.wikipedia.org/wiki/This_Is_Spinal_Tap">Spinal Tap movie</a>, photo from <a href="https://en.wikipedia.org/wiki/Up_to_eleven">Wikipedia</a>

    </figcaption></figure>

<blockquote>
  <p>At first, I was skeptical about the Revert thing. But once I realized it’s meant as a practice tool; I started to appreciate its ruthlessness 😀</p>
</blockquote>

<h3 id="it-yields-more-profound-lessons">It yields more profound lessons.</h3>

<blockquote>
  <p>We were lost in endless refactoring, and the tool taught us a lesson: to let go!</p>
</blockquote>

<blockquote>
  <p>It’s good for the focus because you must stick to what you are doing now. And it’s good for the ego because it’s a script, not a human, that tells you to use smaller steps!</p>
</blockquote>

<blockquote>
  <p>It creates a real feeling of progression!</p>
</blockquote>

<blockquote>
  <p>I learned to focus more on each step rather than wanting to solve the problem.</p>
</blockquote>

<h3 id="tcr-is-like-a-workout-machine">TCR is like a workout machine!</h3>

<p><strong>TCR is a bit like a workout machine for TDD practice sessions.</strong> It makes the sessions more challenging and interesting. As a result, it’s a learning accelerator.</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-07-05-a-surprising-way-how-to-teach-evolutionary-design/workout-machine.jpg" alt="Photo of a woman during a workout on a machine. Adding TCR to code kata sessions is like adding weights, it makes session more intense, but also speeds up the development of baby-steps muscles." /></p>

<h2 id="what-exactly-changes-with-tcr">What exactly changes with TCR?</h2>

<h3 id="a-classic-tdd-practice-session">A classic TDD practice session</h3>

<p><strong>TDD-rookies tend not to run the tests often enough and spend too much time out of green-state.</strong> Here is the situation I have often observed:</p>

<ol>
  <li>Participants write a test.</li>
  <li>They write way more code than needed to pass the test.</li>
  <li>They manage to pass the test with a lot of thinking.</li>
  <li>Unfortunately, they broke other tests in the process.</li>
  <li>Eventually, they take 15 minutes or more to debug everything back to green.</li>
</ol>

<p>As coaches, we have to point out every time they start on such a difficult path, but:</p>

<ul>
  <li><strong>It’s exhausting to be the killjoy all the time.</strong></li>
  <li><strong>We cannot keep an eye on everyone at the same time.</strong> As a result, many participants struggle with long steps.</li>
</ul>

<h3 id="tcr-as-a-coach-bot">TCR as a coach bot!</h3>

<p>Things are different in a TCR practice session:</p>

<ul>
  <li>Are participants making an ambitious giant step that fails? =&gt; The code is reverted.</li>
  <li>Did they break other tests while passing the new one? =&gt; The code is reverted.</li>
</ul>

<p><strong>TCR keeps the code in a green state. It “forces” participants to stick to baby steps.</strong> It does that without us having to remind people all the time. It does that without us having to be there!</p>

<p>As a bonus, <strong>we can have more people in a single session!</strong></p>

<h3 id="from-tcr-to-evolutionary-design">From TCR to evolutionary design</h3>

<p><img src="https://philippe.bourgau.net/imgs/2022-07-05-a-surprising-way-how-to-teach-evolutionary-design/new-branch.jpg" alt="Photo of a small branch sprouting from a tree. Evolutionary design is a lot like gardening or plant tending." /></p>

<p><a href="https://blog.thecodewhisperer.com/permalink/breaking-through-your-refactoring-rut">J.B. Rainsberger explains</a> that practicing micro-steps teaches how to ‘chunk’ them into larger ones. <strong>With TCR, participants experience going through a programming task with baby steps.</strong> <strong>They can even check the git-log to see the detailed steps they used.</strong> This is how they learn evolutionary design.</p>

<h2 id="see-for-yourself">See for yourself!</h2>

<p>The simplest way to give TCR a try is to run <code class="language-plaintext highlighter-rouge">"test" &amp;&amp; "commit" || "revert"</code> instead of just <code class="language-plaintext highlighter-rouge">test</code>.</p>

<p>If you are using git, you can commit with <code class="language-plaintext highlighter-rouge">git commit -am "TCR"</code> and revert with <code class="language-plaintext highlighter-rouge">git restore .</code>. The test command depends on the language and toolchain you are using. Pick your favorite kata and give it a go! If you lack inspiration, go with the classic <a href="https://codingdojo.org/kata/Bowling/">Bowling Game</a>. <strong>I have seen TDD veterans get reverted on this kata and learn from TCR.</strong> There’s definitely something for everyone here. I’m sure you will have fun too!</p>

<h2 id="batteries-included">Batteries included!</h2>

<p>At work, <strong>we have been working on a more advanced TCR tool. You can find it at <a href="https://github.com/murex/TCR">https://github.com/murex/TCR</a>.</strong> You can also find a sample kata repo at <a href="https://github.com/murex/Kata-BowlingGame">https://github.com/murex/Kata-BowlingGame</a>.</p>

<p>Compared to terminal commands, it also:</p>

<ul>
  <li>watches the file system, and runs TCR as soon it spots some file changes</li>
  <li>pushes and pulls through an online repo to enable remote mobbing with git-handover</li>
  <li>provides a mob timer to switch the driver role during the session</li>
  <li>can commit reverts for participants to retrospect on what got reverted</li>
  <li>finally, it’s also gentler than strict TCR because it does not revert the tests</li>
</ul>

<p>The tool currently supports git, Java, C#, C++, and Go, but it’s open to contributions!</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-07-05-a-surprising-way-how-to-teach-evolutionary-design/battery.jpg" alt="Photo of a battery. The TCR tool makes it very easy to get started with TCR katas." /></p>

<p><strong>Give TCR a try and share your experience!</strong> I’d also love to read about your tips for teaching evolutionary design.</p>

<hr />

<p>Here are other posts that you might find interesting:</p>

<ul>
  <li><a href="https://philippe.bourgau.net/how-to-deliver-a-remote-training-with-code-katas-and-randori-in-pairs/">How to deliver a remote training with code-katas and randori in pairs</a></li>
  <li><a href="https://philippe.bourgau.net/incremental-software-development-strategies-for-large-scale-refactoring-number-2-baby-steps/">Incremental Software Development Strategies for Large Scale Refactoring #2: Baby Steps</a></li>
  <li><a href="https://philippe.bourgau.net/a-coding-dojo-exercises-plan-towards-refactoring-legacy-code/">A coding dojo exercises plan toward refactoring legacy code</a></li>
  <li><a href="https://philippe.bourgau.net/why-you-should-start-a-team-coding-dojo-randori-right-now/">Why you should start a team coding dojo Randori right now</a></li>
  <li><a href="https://philippe.bourgau.net/how-to-start-a-team-coding-dojo-randori-today/">How to start a team coding dojo Randori today</a></li>
</ul>]]></content><author><name>Philippe Bourgau</name></author><category term="tcr" /><category term="coding dojo" /><category term="coaching" /><category term="tdd" /><category term="learning" /><category term="architecture" /><summary type="html"><![CDATA[One of the most valuable yet impenetrable XP practice is Evolutionary Design. At its root is baby-steps programming, which lets us constantly re-design and evolve our codebase through small and safe changes. Let's see how TCR training session will teach baby-steps programming!]]></summary></entry><entry><title type="html">How to make a team facilitate agile architecture workshops</title><link href="https://philippe.bourgau.net/how-to-make-a-team-facilitate-agile-architecture-workshops/" rel="alternate" type="text/html" title="How to make a team facilitate agile architecture workshops" /><published>2022-06-09T00:00:00+00:00</published><updated>2022-06-09T00:00:00+00:00</updated><id>https://philippe.bourgau.net/how-to-make-a-team-facilitate-agile-architecture-workshops</id><content type="html" xml:base="https://philippe.bourgau.net/how-to-make-a-team-facilitate-agile-architecture-workshops/"><![CDATA[<p><em>In <a href="https://marcotroisi.substack.com/p/3-wonderful-workshops-that-will-make">The Serverless Mindset, I blogged</a> about Event Storming and Example Mapping for agile architecture. How do you coach teams to adopt these workshops?</em></p>

<p><img src="https://philippe.bourgau.net/imgs/2022-06-03-how-to-make-a-team-facilitate-agile-architecture-workshops/Facilitation-Keys.jpg" alt="A drawing of 2 hands the one above handing over a key with a label &quot;Facilitation&quot; to the one below. Part of the technical agile coaching job is to grow enough facilitation skills teams so that they can run crucial technical workshops like Event Storming autonomously." /></p>

<blockquote>
  <h2 id="3-wonderful-workshops-that-will-make-your-serverless-architecture-agile">3 wonderful workshops that will make your serverless architecture agile</h2>

  <p><em>Successfully building a serverless system as a team is far from easy. So, here are 3 DDD workshops for everyone to do collective and incremental architecture.</em></p>

  <blockquote>
    <p>It’s actually harder to do serverless development with two engineers than it is with one engineer. And [the problem] scales up <em>~ <a href="https://thenewstack.io/serverless-for-teams/">Nathan Taggart</a></em></p>
  </blockquote>

  <p>(From <a href="https://marcotroisi.substack.com/p/3-wonderful-workshops-that-will-make">3 Wonderful Workshops That Will Make Your Serverless Architecture Agile</a>)</p>
</blockquote>

<p>A few weeks ago, I wrote a guest post for <a href="https://twitter.com/marcotroisi">Marco Troisi</a> on his blog, <a href="https://marcotroisi.substack.com/">The Serverless Mindset</a>. It presents 3 workshops: <a href="https://philippe.bourgau.net/misadventures-with-big-design-up-front/">Big-Picture Event-Storming</a>, <a href="https://philippe.bourgau.net/why-should-we-use-design-level-event-storming-for-ddd/">Design-Level Event-Storming</a>, and <a href="https://philippe.bourgau.net/categories/#example-mapping">Example Mapping</a>. It explains how these workshops avoid command-and-control or chaotic architecture in serverless teams. In fact, they <strong>unlock a middle way that is calmer, more collaborative, and more effective! It’s agile architecture!</strong></p>

<blockquote>
  <p>As much as management wanted to benefit from Agile, they didn’t want to give up control. They could not give up micromanaging. It was more important for them to be in control than it was for the company to be successful. (Someone on <a href="https://groups.io/g/extremeprogramming">extremeprogramming@groups.io</a>)</p>
</blockquote>

<blockquote>
  <p>I stopped believing in team self-organization long ago. […] There are amazing individuals who can do it, and I worked with them. Those usually make up 5-10% of the team. (Someone on <a href="https://groups.io/g/extremeprogramming">extremeprogramming@groups.io</a>)</p>
</blockquote>

<blockquote>
  <p>I needed to go out on medical leave for a while, and when I came back, every single practice I had introduced got rolled back, with expected results. (Someone on <a href="https://groups.io/g/extremeprogramming">extremeprogramming@groups.io</a>)</p>
</blockquote>

<p>Guess what? These challenges and workshops are not restricted to serverless contexts. So most teams will find agile architecture helpful.</p>

<p>As coaches, our job is not to facilitate these workshops (despite what we are often asked 😕). <strong>Our job is to make these workshops a habit in the teams!</strong> So how do we coach teams to run these workshops regularly by themselves?</p>

<blockquote>
  <p>Wouldn’t it be great if you knew how to coach teams to do transparent and collective architecture?</p>
</blockquote>

<h2 id="how-to-teach-event-storming">How to teach Event Storming</h2>

<blockquote>
  <h2 id="big-picture-event-storming">Big-Picture Event Storming</h2>

  <p>Big-Picture Event Storming is a whole-team workshop whose purpose is to visualize everything! It’s about sticking all the domain events of the system on a giant design board. It’s Domain-Driven Design in practice! It transfers tremendous knowledge between the domain experts and the developers.</p>

  <p><img src="https://philippe.bourgau.net/imgs/2022-06-03-how-to-make-a-team-facilitate-agile-architecture-workshops/event-storming.jpg" alt="Participants working at an Event Storming board" /></p>

  <h3 id="an-architecture-accelerator">An architecture accelerator</h3>

  <p>Event Storming can achieve over a few days what would take months with traditional architecture. The idea is not to get a perfect up-front architecture. Instead, it’s to design just enough for everyone to pull in the same direction.</p>

  <p>(From <a href="https://marcotroisi.substack.com/p/3-wonderful-workshops-that-will-make">3 Wonderful Workshops That Will Make Your Serverless Architecture Agile</a>)</p>
</blockquote>

<p>I can think of <strong>3 learning steps to be able to teach Event Storming to a team</strong>:</p>

<ol>
  <li><strong>Facilitating</strong> Event Storming yourself</li>
  <li><strong>Injecting</strong> Event Storming into your team as a team member</li>
  <li>Finally, <strong>installing</strong> Event Storming into the organizations that you are coaching</li>
</ol>

<p>I already wrote about <a href="https://philippe.bourgau.net/how-to-prepare-a-ddd-big-picture-event-storming-workshop/">how to facilitate Event Storming</a> workshops. I also wrote about <a href="https://philippe.bourgau.net/organization-refactoring-event-storming-and-ddd-injection-part-1/">how to inject Event Storming</a> into your organization.</p>

<p>The third step is particularly tricky because the workshop often lasts for a few days. As a result, people will be afraid to take on the facilitation!</p>

<p>Let’s see how to hand over the facilitation to the team.</p>

<h3 id="start-with-immersion">Start with Immersion</h3>

<p><img src="https://philippe.bourgau.net/imgs/2022-06-03-how-to-make-a-team-facilitate-agile-architecture-workshops/training-new-skills.jpg" alt="A road sign written &quot;New Skills Training&quot;. Training a team to Event Storming is like training any new skill. Generate awareness, and accompany motivated people until they are ready!" /></p>

<p>It’s useless to expect someone else to help with the facilitation during the first Event-Storming. People usually see it as an ‘extraordinary’ event that is not worth learning.</p>

<p>Don’t bother and facilitate the workshop yourself! <strong>As often as you can, remind them that they should regularly re-run this workshop themselves.</strong></p>

<p>Use this first taste of Event Storming to spot people who “get it.” Then, after the workshop, try to involve these people in facilitation and agile architecture.</p>

<h3 id="repeat-shorter-event-storming-workshops">Repeat Shorter Event Storming Workshops</h3>

<p><strong>Take the habit of suggesting short Event Storming workshops:</strong></p>

<ul>
  <li><a href="http://thepaulrayner.com/eventstorming-team-flow/">Flow Event Storming</a> for retrospectives</li>
  <li>Or <a href="https://philippe.bourgau.net/why-should-we-use-design-level-event-storming-for-ddd/">Design-Level Event Storming</a> to dive into the design of a core part of the code.</li>
</ul>

<p>These smaller-scale workshops don’t need to involve everyone.</p>

<p>As soon as the team agrees to run another workshop, find someone to help you with facilitation. <strong>Take 2 hours with your apprentice facilitators to rehearse a simple scenario.</strong></p>

<p>Continue suggesting regular Event Storming. The next time you run the workshop, handover facilitation completely. Be present as a backup, though. When that works well, you have successfully made Event Storming a habit in the team.</p>

<h2 id="example-mapping">Example Mapping</h2>

<blockquote>
  <h2 id="example-mapping-1">Example Mapping</h2>

  <p>The promise of serverless is that the cloud provider will take care of all the plumbing for you. This means that your lambdas should contain almost only domain-oriented code. <a href="https://cucumber.io/blog/bdd/example-mapping-introduction/">Example Mapping</a> is a neat activity to clarify the Lambda’s business rules.</p>

  <p>Example Mapping only takes 20 minutes, so you can run it very often. For example:</p>

  <ul>
    <li>When starting a new user story.</li>
    <li>Or after a Design-Level Event-Storming, to clarify what happens inside an aggregate.</li>
  </ul>

  <p>Example Mapping is a structured conversation between Developers and Domain experts. Other specific profiles (e.g. quality engineer) can also join if need be.</p>

  <p>(From <a href="https://marcotroisi.substack.com/p/3-wonderful-workshops-that-will-make">3 Wonderful Workshops That Will Make Your Serverless Architecture Agile</a>)</p>
</blockquote>

<p>Here’s a detailed <a href="https://philippe.bourgau.net/how-to-coach-developers-to-get-a-chat-with-their-product-experts/">guide about how to inject Example-Mapping</a> into a team. The practice is simple, so people should be able to adopt it quickly.</p>

<p><img src="https://philippe.bourgau.net/imgs/2022-06-03-how-to-make-a-team-facilitate-agile-architecture-workshops/example-mapping-cards.jpg" alt="Example of the typical cards, colors, and layout that we use in Example Mapping" />
<em>Picture from <a href="https://cucumber.io/blog/bdd/example-mapping-introduction/">Cucumber blog</a></em></p>

<p>Some teams will find Example Mapping is overkill for their context. So don’t hesitate to simplify it to accommodate the team’s constraints. For example, replace Gherkin with literate programming tests.</p>

<h2 id="make-these-workshops-a-habit">Make these workshops a habit!</h2>

<blockquote>
  <h2 id="dont-wait">Don’t wait!</h2>

  <p>Are you involved with building a serverless system? Whether you are just starting or already deep in, you should run a Big-Picture Event Storming! It’s a starting point that will lead you to Design-Level Event Storming and Example Mapping. These workshops will result in:</p>

  <ul>
    <li>Alignment between everyone.</li>
    <li>Just-enough architecture to keep your system healthy and to avoid centralized decision-making.</li>
  </ul>

  <p>(From <a href="https://marcotroisi.substack.com/p/3-wonderful-workshops-that-will-make">3 Wonderful Workshops That Will Make Your Serverless Architecture Agile</a>)</p>
</blockquote>

<p><img src="https://philippe.bourgau.net/imgs/2022-06-03-how-to-make-a-team-facilitate-agile-architecture-workshops/plunge.jpg" alt="Photo of a man plunging in the sea. The first step to coaching Event Storming, Example Mapping, or any collective agile architecture workshop is to immerse the team in a first experience!" /></p>

<p>Is a team you are coaching leaning towards command-and-control or chaotic architecture? Suggest Event Storming or Example Mapping to do more agile architecture! <strong>Remember the 3 steps to make these workshops a team habit:</strong></p>

<ol>
  <li><strong>Start with immersion</strong></li>
  <li><strong>Spot early adopters and potential facilitators</strong></li>
  <li><strong>Involve them more and more in regular sessions</strong></li>
</ol>

<p>What do you think? What are your tips for handing over the facilitation to coachees? I’d love to read from you in the comments.</p>

<hr />
<p>Other articles that might interest you:</p>

<ul>
  <li><a href="https://philippe.bourgau.net/organization-refactoring-event-storming-and-ddd-injection-part-1/">Organization Refactoring: Event Storming and DDD injection</a></li>
  <li><a href="https://philippe.bourgau.net/how-to-coach-developers-to-get-a-chat-with-their-product-experts/"># How to coach developers to get a chat with their product experts</a></li>
  <li>A detailed facilitation guide about Big Picture Event Storming that start with <a href="https://philippe.bourgau.net/misadventures-with-big-design-up-front/">Misadventures with Big Design Up Front</a></li>
  <li><a href="https://philippe.bourgau.net/why-should-we-use-design-level-event-storming-for-ddd/">Why should we use Design Level Event Storming for DDD?</a> A detailed facilitation guide about Design-Level Event Storming</li>
  <li>Preview of <a href="https://www.eventstormingjournal.com/1h-event-storming-book/">The 1-hour Event Storming book</a> <a href="https://www.linkedin.com/in/matthieu-tournemire/">Matthieu Tournemire</a> and I are currently writing</li>
  <li>If you are interested in more workshops, here are <a href="https://philippe.bourgau.net/5-whole-team-workshops-to-increase-developers-role-in-sprint-planning/">5 Whole-Team Workshops To Increase Developers’ Role In Sprint Planning</a></li>
  <li>If you are starting on a serverless team, read <a href="https://philippe.bourgau.net/3-things-you-need-to-master-to-get-your-team-ready-to-work-with-serverless/">3 Things You Need to Master to Get Your Team Ready to Work With Serverless</a></li>
</ul>]]></content><author><name>Philippe Bourgau</name></author><category term="event storming" /><category term="example mapping" /><category term="architecture" /><category term="serverless" /><category term="ddd" /><category term="learning" /><summary type="html"><![CDATA[In The Serverless Mindset, I blogged about Event Storming and Example Mapping for agile architecture. Here is a review post highlighting the most important sections, and explains how to coach a team to make these workshops a habit.]]></summary></entry></feed>