<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Dietrich Moerman</title>
    <description>The latest articles on Forem by Dietrich Moerman (@dietrich).</description>
    <link>https://forem.com/dietrich</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F263968%2Fbe292b67-3de9-47da-926c-19d712ea1a3c.jpg</url>
      <title>Forem: Dietrich Moerman</title>
      <link>https://forem.com/dietrich</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/dietrich"/>
    <language>en</language>
    <item>
      <title>Effective Metrics for Development Teams</title>
      <dc:creator>Dietrich Moerman</dc:creator>
      <pubDate>Mon, 23 May 2022 19:19:59 +0000</pubDate>
      <link>https://forem.com/dietrich/effective-metrics-for-development-teams-1fo</link>
      <guid>https://forem.com/dietrich/effective-metrics-for-development-teams-1fo</guid>
      <description>&lt;p&gt;Today, collecting data produced by the software we use daily is pretty straightforward. Reporting is getting increasingly simpler as well. What often goes up the wrong alley is knowing which data to collect and how data and reports are interpreted and used.&lt;/p&gt;

&lt;p&gt;This article outlines the pitfalls with commonly used software development metrics and what we may use as a more impactful alternative.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vanity metrics: misleading numbers
&lt;/h2&gt;

&lt;p&gt;In software development, you probably saw these metrics pass by at least a few times:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Number of story points per sprint (”velocity”)&lt;/li&gt;
&lt;li&gt;Average amount of git commits per day&lt;/li&gt;
&lt;li&gt;Number of pull requests or reviews per week&lt;/li&gt;
&lt;li&gt;Percentage of code (test) coverage and its trend&lt;/li&gt;
&lt;li&gt;Number of resolved tickets or bug reports per month&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are “traditional”, output-based metrics, easily deducible from the tools and software development teams use daily: Jira, Trello, or their choice of issue tracker, GitHub or GitLab, and language-specific code coverage tools such as PHPUnit, pytest-coverage or &lt;code&gt;go test&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;All of these metrics can be interesting in their regard, given they are used in the correct context and with the proper interpretation. Unfortunately, teams or managers, often due to pressure and lack of time, can be tempted to use these (and only these) metrics to draw the wrong conclusions about the performance of individuals or teams or how they compare to others.&lt;/p&gt;

&lt;h3&gt;
  
  
  The issues with measuring output
&lt;/h3&gt;

&lt;p&gt;With data and output based metrics used to measure and track people’s performance, I believe there are at least two significant issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When aware of these metrics, people can influence them to make themselves look good.&lt;/li&gt;
&lt;li&gt;You never have enough measurable data to shed a complete, trustworthy view.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The effect of people “gaming the system” is also called &lt;a href="https://en.wikipedia.org/wiki/Goodhart%27s_law" rel="noopener noreferrer"&gt;Goodhart's law&lt;/a&gt;, coined by British economist Charles Goodhart in 1975. It is defined as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Any observed statistical regularity will tend to collapse once pressure is placed upon it for control purposes. [&lt;a href="https://books.google.com/books?id=OMe6UQxu1KcC&amp;amp;pg=PA111" rel="noopener noreferrer"&gt;source&lt;/a&gt;]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In essence, people can (un)consciously influence the outcomes of the metrics in ways that don’t have the intended effect.&lt;/p&gt;

&lt;p&gt;For example, an easy way to increase the percentage of code coverage is to add tests that perform little to no assertions. Code coverage may go up, but you gain next to nothing as the application’s behaviour or results are unchecked. If your goal as a manager was to increase quality and avoid regressions, you are in for a treat.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“But what if we combine many metrics to get a complete overview that cannot be gamed?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;While sounding tempting, not all aspects of software development are measurable with quantifiable data or metrics. Even more so when working with teams, software development is a complex socio-technical system in large part based on human interactions.&lt;/p&gt;

&lt;p&gt;Traditional output-based metrics, incorrectly equating “quantity of work” to value, also fail to encapsulate &lt;em&gt;actual&lt;/em&gt; business value, impact, and client happiness. Hence, they are unfit for reporting back to investors, clients and other stakeholders.&lt;/p&gt;

&lt;p&gt;Then there is the ethical aspect of whether you should &lt;em&gt;at all&lt;/em&gt; measure and track individual people’s output. I believe tracking (and rewarding) people individually brings more bad things: decreased cooperation, declining psychological safety, more gossiping and politics, and higher risks of burn-out.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, what &lt;em&gt;does&lt;/em&gt; work, then?
&lt;/h2&gt;

&lt;p&gt;A possible alternative is twofold. First and foremost, measure and optimise the development workflow rather than people or teams’ output. Then, start assessing the team’s business impact.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow effectiveness and resilience
&lt;/h3&gt;

&lt;p&gt;The efficiency and effectiveness of our development workflow are huge enablers to making an actual business impact. That’s why I always focus on this one &lt;strong&gt;first&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The easier a team can experiment, adapt to changes, fix issues and resolve incidents, the better they can focus on building cooperation and team spirit and creating that value and impact, positively affecting team stress levels and happiness.&lt;/p&gt;

&lt;p&gt;In the Lean sense of Kaizen and continuous improvement, let’s look for some core metrics that we can use to assess our engineering workflows. Luckily for us, Google, in their DORA research, already defined a few base metrics called the &lt;a href="https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance" rel="noopener noreferrer"&gt;Four Keys&lt;/a&gt; that modern DevOps teams can use:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deployment Frequency&lt;/strong&gt;: how frequently do we release to production successfully?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lead Time for Changes&lt;/strong&gt;: what is the lead time for changes to hit production?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change Failure Rate&lt;/strong&gt;: what percentage of production deployments cause a failure?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time to Restore Service&lt;/strong&gt;: how long does it take to recover from such failure?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notice how these metrics do not measure individual output nor incentivise teams to get more of the same (bar number of deployments). Instead, they give us an idea of waiting times and bottlenecks when building and deploying solutions, how often broken builds are delivered, and the rate of and how quick we handle regressions after a production deployment.&lt;/p&gt;

&lt;p&gt;To collect this data, you may go with &lt;a href="https://github.com/GoogleCloudPlatform/fourkeys" rel="noopener noreferrer"&gt;Google’s proper software tool&lt;/a&gt; or start collecting them MVP wise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployment Frequency: check your CI/CD tools to see if you can read or export the number of deploys. If not, you may start by manually posting a message in a Slack/Teams/… channel after you deploy and track the number of these messages. I’ve found this also helps with “leading by example” to perform deploys if your team does these manually multiple times a day. Don’t forget to measure production deployments only (internal or testing environments don’t count) and subtract failed ones.&lt;/li&gt;
&lt;li&gt;Lead Time for Changes: the median time between the production deployment date and the dates of the (git) commits therein. If your CI/CD tools do not provide this out of the box or through a plug-in or script, this is considerably harder to keep track of manually. As an alternative, you may measure the cycle and lead times of stories instead (see Intermezzo below).&lt;/li&gt;
&lt;li&gt;Change Failure Rate: tracking the occurrence of production deployments or feature releases (i.e. enabling a feature toggle) that require remediation through reverts, fail-forward fixes, etc.; what percentage of releases fail? Here I recommend logging incidents in an issue tracker or purpose-built tool such as Opsgenie.&lt;/li&gt;
&lt;li&gt;Time to Restore Service: closely related to the previous, how long does it take to restore the application to a fully working state? Aside from issues triggered by deployments, consider other incidents such as degraded performance, service downtimes, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Having collected these numbers, you can &lt;a href="https://storage.googleapis.com/gweb-cloudblog-publish/images/Calculating_the_metrics.max-2800x2800.jpg" rel="noopener noreferrer"&gt;compare your team's performance&lt;/a&gt; to Google standards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intermezzo: Lean’s cycle and lead time
&lt;/h3&gt;

&lt;p&gt;You might have heard about lead time in a different context: Lean. These terms are so valuable that they, too, deserve to be mentioned here.&lt;/p&gt;

&lt;p&gt;In short, we can define &lt;strong&gt;lead time&lt;/strong&gt; as the total time it takes for a (customer) request to pass through the entire processes and value stream up until it is released (to the customer). While DORA metrics measure commit lead times, measuring total production lead time gives a more broad indication of the performance of our product &amp;amp; engineering team’s processes.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;cycle time&lt;/strong&gt; of a change, on the other hand, can be measured by comparing the release (to the customer) of the change with the moment the development team started working on it.&lt;/p&gt;

&lt;p&gt;What constitutes a “request” or “change” is up for interpretation. Most likely, it will translate to a user story or change request that you add to your sprint backlog or Kanban board. Measuring cycle time becomes pretty easy, given the end state of the board equals “released to the user”, and the tool at hand allows to visualise or export the time differences between states.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assessing business impact
&lt;/h3&gt;

&lt;p&gt;As mentioned before, assessing and communicating on business impact is much more valuable to company leaders, investors and other stakeholders than technical/operational metrics but also more challenging to measure than the latter.&lt;/p&gt;

&lt;p&gt;Working towards &lt;strong&gt;outcomes&lt;/strong&gt; (over fixed output), evaluate with the team whether they meet their goals and if they align with the company’s strategic goals and mission. How you may determine or measure this value and impact dramatically depends on the company, kind of client, and more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Communicate with your clients or users! Are they happy with the product? Do their business needs and expectations get met? Is their feedback asked and taken into account?&lt;/li&gt;
&lt;li&gt;Does the team define an outcome-oriented product roadmap? If so, evaluate whether the team met the initiatives or goals.&lt;/li&gt;
&lt;li&gt;Does the company define company-wide, outcome-oriented objectives and key results (OKR)? If so, this may also help with making that assessment. (Do beware that implementing OKRs comes with its pitfalls.)&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a team is struggling, overwhelmed, or otherwise fails to make the desired impact, the first step is to talk to and (as a manager) coach them into resolving any issues.&lt;/p&gt;

&lt;p&gt;You guessed it. Having open conversations — within a safe environment — is more valuable than (just) measuring with data and comparing teams or individuals. And by all means, continue to focus on their happiness and well-being as a whole. Happy employees lead to increased productivity, which leads to more satisfied clients and contributes to a more durable way of scaling the company.&lt;/p&gt;

&lt;h3&gt;
  
  
  Development teams are no silos
&lt;/h3&gt;

&lt;p&gt;Designing, developing, and releasing software applications is a complex undertaking. To succeed in this, we cannot afford to treat a team of engineers — or any team — as a silo. Doing so severely limits the quality and effectiveness of the solutions built and might even set up a development team for failure from the start.&lt;/p&gt;

&lt;p&gt;This implies that — even with the improved approach to metrics and value assessment — the interplay with and influence of other teams can severely impact the success of a development team.&lt;/p&gt;

&lt;p&gt;To start with, UX and UI analysts and experts, designers, QA engineers and testers, product managers, system engineers, and product and data analysts all contribute to the success of a solution. &lt;a href="https://bjien.be/articles/two-person-agile-project-and-what-it-teaches-us/#speed-is-the-absence-of-waste" rel="noopener noreferrer"&gt;They should be internal to the team&lt;/a&gt; as much as possible.&lt;/p&gt;

&lt;p&gt;Additionally, the other departments or teams of the company also have a significant impact, even if only for their influence on company culture: sales and marketing, customer success, finance, etc. And, of course, not to forget the quality and impact of the mission, vision, and strategies set out by the leadership team.&lt;/p&gt;

&lt;p&gt;When setting up any initiative for improvement, even within a single team, take the entire system into account. Is there a deeper root cause? Do we require a more considerable culture shift? Or is this a purely operational issue that a team can fix themselves?&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://thinkinglabs.io/articles/2022/03/19/the-fallacy-of-the-100-code-coverage.html" rel="noopener noreferrer"&gt;The Fallacy of the 100% Code Coverage&lt;/a&gt;, an article where Thierry de Pauw describes how the test coverage metric can be misused.&lt;/li&gt;
&lt;li&gt;Google Cloud’s &lt;a href="https://cloud.google.com/devops/" rel="noopener noreferrer"&gt;DevOps Research and Assessment (DORA)&lt;/a&gt; brings reports on the state of DevOps and is the origin of the “four keys” metrics.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/GoogleCloudPlatform/fourkeys" rel="noopener noreferrer"&gt;GoogleCloudPlatform/fourkeys&lt;/a&gt; is a software tool built by Google to generate insights from data based on the four core metrics mentioned above.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.lean.org/lexicon-terms/cycle-time/" rel="noopener noreferrer"&gt;Definitions of cycle and lead time&lt;/a&gt; as provided by Lean Enterprise Institute.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://bjien.be/articles/two-person-agile-project-and-what-it-teaches-us/" rel="noopener noreferrer"&gt;A Two-Person Agile Project (and what it teaches us)&lt;/a&gt; explains the core elements of an effective product or project development team.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>leadership</category>
      <category>agile</category>
      <category>lean</category>
    </item>
    <item>
      <title>A Two-Person Agile Project (and what it teaches us)</title>
      <dc:creator>Dietrich Moerman</dc:creator>
      <pubDate>Thu, 24 Jun 2021 15:57:08 +0000</pubDate>
      <link>https://forem.com/dietrich/a-two-person-agile-project-and-what-it-teaches-us-47p4</link>
      <guid>https://forem.com/dietrich/a-two-person-agile-project-and-what-it-teaches-us-47p4</guid>
      <description>&lt;p&gt;Reading about "being agile", "agility", or one of the famous agile frameworks, we often think of growing startups, scaleups and corporations seeking to adopt more efficient ways of working, building their products better and quicker, and making their clients happier.&lt;/p&gt;

&lt;p&gt;We might easily forget how agile small companies and software projects with only a couple of people involved can be, and how these can teach us a lot about the &lt;strong&gt;essence of agility&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let me briefly introduce you to a past project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two-person agile project
&lt;/h2&gt;

&lt;p&gt;Several years ago, I was involved in building a new software product - a tailor-made web-based platform solving a number of our client's business problems.  While I will spare you the details of the client, the product and its functionality, I want to focus on some approaches we took back then.&lt;/p&gt;

&lt;p&gt;First of all (you guessed it): our team was small, &lt;em&gt;very&lt;/em&gt; small: there was the &lt;strong&gt;client&lt;/strong&gt;, and there was &lt;strong&gt;me&lt;/strong&gt;.  That means I was doing pretty much all of the (technical) work: setting up the infrastructure, building the system's back-end, implementing the front-end, caring about security, and deploying and releasing functionality to the end-user.  Nowadays, we would call this full-stack development, and this scenario resembles typical freelance projects.&lt;/p&gt;

&lt;p&gt;I was lucky to have a single spokesperson on the client's side, and we were working relatively close together.  We didn't spend time planning months ahead but instead discussed in a (bi)weekly meeting what to focus on next as a direct result of the most recently delivered features.&lt;/p&gt;

&lt;p&gt;We were both &lt;strong&gt;happy&lt;/strong&gt;: the client saw the product evolve, supporting business cases they had discovered along the way and refining existing features that were just not there yet.  While myself, I was able to stay focused primarily on developing and didn't lose time with things that didn't matter.&lt;/p&gt;

&lt;p&gt;This story will not sound very groundbreaking to some, while for others, it may be reminiscent of simpler times or your 90s hobby or school software project.  No corporate silliness, only happiness!&lt;/p&gt;

&lt;h2&gt;
  
  
  Identifying the success factors
&lt;/h2&gt;

&lt;p&gt;Frankly, I needed a few years to truly understand and appreciate the elements that made this project so rewarding.  It only started to dawn on me after learning more about the core values of agility (beyond your typical Scrum, Kanban, etc.) through later jobs, workshops and interactions with mentors and peers.&lt;/p&gt;

&lt;p&gt;Of course, it wasn't &lt;em&gt;the&lt;/em&gt; perfect software project -- does that even exist? Yet, the necessary factors to make this a success with a happy client were in place.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Uncomplicated team structure
&lt;/h3&gt;

&lt;p&gt;It doesn't come any simpler than that: I was the sole developer working on this project, and I did all the talking with the client.&lt;/p&gt;

&lt;p&gt;By eliminating more complex managerial structures, hierarchies or third parties to align with, we also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mitigated waiting time&lt;/strong&gt; as much as possible;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;avoided handoffs&lt;/strong&gt; between business analysts and the team or even between a product manager and the developer(s);&lt;/li&gt;
&lt;li&gt;and (perhaps most importantly) allowed me to be &lt;strong&gt;self-managing&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Close and frequent collaboration
&lt;/h3&gt;

&lt;p&gt;Through our (bi)weekly meetings, we presented, tested and talked about what was finished and delivered since the previous session and what was in progress, and we identified what we can or should focus on next.&lt;/p&gt;

&lt;p&gt;In this process, &lt;strong&gt;receiving and processing feedback&lt;/strong&gt; was at the core of our approach. We didn't hold back to give honest feedback, think through budgetary or technical implications, and build mutual &lt;strong&gt;trust&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Don't stick to &lt;em&gt;The Plan™&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Infamous for many large organisations and corporations, elaborate plans, analyses, and specifications are defined months upfront and carefully tracked in their progress.  Ah, ye olde waterfall approach to project management.&lt;/p&gt;

&lt;p&gt;Throwing this overboard is a staple of agility. &lt;strong&gt;Embracing change.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By incrementally letting the product evolve, the following steps became obvious during each meeting, and so were the basic functionalities to implement.  This approach made us &lt;strong&gt;avoid overhead work&lt;/strong&gt; and allowed the client to experiment with the next evolution of the platform by the end of the next iteration.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Maintain a consistent flow
&lt;/h3&gt;

&lt;p&gt;Working alone and &lt;strong&gt;mono-focusing&lt;/strong&gt; on a single change made it pretty easy to get into the zone.  I didn't need to split development work among colleagues, wait for their tasks to finish, review pull requests or solve merge conflicts to wrap up user stories.&lt;/p&gt;

&lt;p&gt;Without the need to sidetrack all too often and lose time over said activities, there was a relatively fast but most importantly &lt;strong&gt;consistent flow&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Prioritize bugs
&lt;/h3&gt;

&lt;p&gt;Mono-focusing made us prioritise bugs more efficiently and get them fixed "first thing in the morning".&lt;/p&gt;

&lt;p&gt;This approach contributed to a certain &lt;strong&gt;level of quality&lt;/strong&gt; that we wanted to maintain.  There is less to no value in delivering broken functionality or leaving subpar, confusing or unused features in place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Applying to typical teams
&lt;/h2&gt;

&lt;p&gt;You may think this approach is both naive and unfitting for building products in larger teams or organisations.  Surely, in the &lt;em&gt;real&lt;/em&gt; world of complex SaaS products, it can't be this simple, right?&lt;/p&gt;

&lt;p&gt;And you're (partially) right!  Most products cannot and should not be built by a two-person team having a single developer.  Aside from the bad &lt;a href="https://en.wikipedia.org/wiki/Bus_factor" rel="noopener noreferrer"&gt;bus factor&lt;/a&gt;, complex business domain(s) or combinations of technologies used are better carried by T-shaped teams of around five people (&lt;a href="https://en.wiktionary.org/wiki/your_mileage_may_vary" rel="noopener noreferrer"&gt;YMMV&lt;/a&gt;).  Eventually, applying concepts of &lt;a href="https://teamtopologies.com/key-concepts" rel="noopener noreferrer"&gt;team topologies&lt;/a&gt; may help to tackle more considerable complexities.&lt;/p&gt;

&lt;p&gt;Still, the success factors mentioned above &lt;em&gt;can&lt;/em&gt; be projected onto larger teams, contributing to the success of more complex projects and software companies.&lt;/p&gt;

&lt;p&gt;Let's dive into some aspects of &lt;strong&gt;lean software development&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  "Speed is the absence of waste"
&lt;/h3&gt;

&lt;p&gt;This quote is from Mary and Tom Poppendieck's book &lt;a href="https://www.goodreads.com/book/show/349417" rel="noopener noreferrer"&gt;Implementing Lean Software Development: From Concept to Cash&lt;/a&gt;, a primer on applying lean principles in building software products.&lt;/p&gt;

&lt;p&gt;I particularly like this quote because it stresses that high speed or velocity is achieved not by pushing the team to work harder and faster (often with disastrous long term effects) but rather by &lt;strong&gt;getting rid of wasteful work&lt;/strong&gt; ("Muda") as much as possible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kanbanize.com/lean-management/value-waste/7-wastes-of-lean" rel="noopener noreferrer"&gt;Wasteful work&lt;/a&gt;, work that does not add value for the customer, has many forms and definitions, and I'd like to expand on a few of them that we have touched in our story:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Creating elaborate plans and specifications (user stories, documents) too far in advance is part of a waste called &lt;strong&gt;Partially Done Work&lt;/strong&gt; and a threat for the &lt;strong&gt;Extra Features&lt;/strong&gt; waste that Poppendieck identified in their book.  These wastes are sometimes (originally) referred to as "inventory" and "overproduction".&lt;br&gt;&lt;br&gt;
Making analyses and writing out specifications should -- if at all -- be done &lt;strong&gt;as late as possible&lt;/strong&gt;.  Otherwise, there is a potential risk of ending up with obsolete plans due to new insights, changes in the market or newly identified pains by the client, and risking building low impact functionality (= Extra Features; also a form of &lt;a href="https://en.wikipedia.org/wiki/Feature_creep" rel="noopener noreferrer"&gt;feature creep&lt;/a&gt;).&lt;br&gt;&lt;br&gt;
It is no exception for stakeholders to request and hold on to early defined plans and roadmaps only to end up missing the boat either on &lt;em&gt;what&lt;/em&gt; is needed and &lt;em&gt;how long&lt;/em&gt; it would take to achieve the desired goal or outcome.  Even though this behaviour is understandable from a psychological point of view, seeking to control risks through waterfall project management instead of evolutionary product design and development does pose a threat to the success of the product or project.&lt;br&gt;&lt;br&gt;
Instead, continuously poll for &lt;strong&gt;the next most important step&lt;/strong&gt; to take using market research, product analytics and data, test or beta users, team insights, or simply by conversing with your client after delivering your latest iterations and work in &lt;strong&gt;small steps&lt;/strong&gt;.  Of course, you may still define a long term strategy and goals (with deadlines if you must); ensure they focus on &lt;strong&gt;outcomes rather than outputs&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Our dramatically simple team structure avoided some other forms of waste: &lt;strong&gt;Handoffs&lt;/strong&gt; and &lt;strong&gt;Delays&lt;/strong&gt; (also called "waiting").&lt;br&gt;&lt;br&gt;
Our mini team was &lt;strong&gt;self-managing&lt;/strong&gt;: in coordination with the client, I defined the pace, wrote user stories and defined technical approaches without relying or waiting on people outside the team.&lt;br&gt;&lt;br&gt;
With bigger teams, you want &lt;em&gt;just that&lt;/em&gt;: as a company owner, CTO, VP/Head or manager, build up mutual &lt;strong&gt;trust&lt;/strong&gt;, provide a psychologically &lt;strong&gt;safe environment&lt;/strong&gt; where it is okay to speak up, and allow the team to work autonomously.  Ensure teams comprise of all the skills they need to fulfil their goals: &lt;strong&gt;T-shaped people&lt;/strong&gt; having at least some notion of a wide range of skills with more profound knowledge on a few specialist skills.&lt;br&gt;&lt;br&gt;
Attempt not to limit this mindset to traditional development skills; introduce UX and UI expertise, design, QA and testing, product management, operations, product and data analytics, and any other skills required &lt;em&gt;within&lt;/em&gt; the same team as much as possible.&lt;br&gt;&lt;br&gt;
As the names of the wastes give away, this helps minimise handoffs of tasks to people outside the team, focusing on &lt;strong&gt;working together as often as possible&lt;/strong&gt; and avoiding delays in execution.  In the next section, I will dive a little deeper into these matters and show how we can prevent handoffs &lt;em&gt;inside&lt;/em&gt; the team.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And last but not least, focusing on solving known bugs &lt;em&gt;first&lt;/em&gt; helps to mitigate the obviously named &lt;strong&gt;Defects&lt;/strong&gt; waste.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Minimising these wastes as good as we can, we &lt;strong&gt;limit excess costs&lt;/strong&gt; on activities that do not add value for the customer, keep team morale high, and improve the overall return on investment (ROI) of development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pair and Ensemble programming
&lt;/h3&gt;

&lt;p&gt;I remember what I thought when I first heard about pair programming many years ago: "How is sitting with two at one computer going to make the work go better or faster? Just leave me alone and I will do fine." Some years later, I had to admit I was wrong.&lt;/p&gt;

&lt;p&gt;Many -- if not most -- software development teams are managed to maximise resource utilisation.  Concretely, this means individual contributors are expected to be busy and productive as much as possible.  When everyone is productive, a lot of work is getting done, so a lot of value (and money) is generated.  Right?&lt;/p&gt;

&lt;p&gt;Unfortunately, the practice of keeping everyone busy all the time kills flow because it keeps our previously mentioned handoffs and delays in place, and it does not spread knowledge across the team that well either.&lt;/p&gt;

&lt;p&gt;Think about how frequently typical teams are indulged in planning and dividing work, waiting for absent or busy people, regaining focus after task switching, etc.  In other words, trying to deliver more work units in the same timespan yields the opposite effect.&lt;/p&gt;

&lt;p&gt;Ensemble programming (also known as "mob programming") is a valuable practice to &lt;strong&gt;increase flow&lt;/strong&gt; by &lt;strong&gt;avoiding context switching&lt;/strong&gt; and &lt;strong&gt;minimising handoffs and delays&lt;/strong&gt; while &lt;strong&gt;facilitating knowledge sharing&lt;/strong&gt; among team members.&lt;/p&gt;

&lt;p&gt;Popularised by many agilists and podcasts, the essence of ensembling is an entire team working together in a so-called mob or ensemble, doing a single task (remember mono-focusing?), taking turns in being the "driver" (which is the person typing), while the rest of the team navigates, brainstorms and contributes.&lt;/p&gt;

&lt;p&gt;Running ensembles, the T-shaped team focuses on &lt;strong&gt;one-piece flow&lt;/strong&gt;, just as I did in the story's agile project.  As a result, their &lt;strong&gt;cycle time&lt;/strong&gt;, a metric for the time required for an item to move from "in progress" to "done", &lt;strong&gt;decreases&lt;/strong&gt; drastically.&lt;/p&gt;

&lt;p&gt;Doing this with a team ensures that whenever someone takes a break, moves to a private meeting, has a sick day off, etc., the remainder of the group retains focus and keeps the flow going.  This format is hence also an ideal setting for &lt;strong&gt;onboarding new people&lt;/strong&gt;; they can join the ensemble, ask questions and make minor contributions at any time right from the start.&lt;/p&gt;

&lt;h4&gt;
  
  
  Pull requests vs flow
&lt;/h4&gt;

&lt;p&gt;A perfect example of an accepted practice killing flow that ensemble programming fixes is the cycle of code reviews.&lt;/p&gt;

&lt;p&gt;Many of us have been there.  As an individual contributor, you wrap up your task, create a pull or merge request and eventually request reviews from your mentors or team members.  Then the waiting game begins.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Said reviewers are busy with other tasks, helping others, sitting in meetings, or (worse 😉) having a day off.&lt;/li&gt;
&lt;li&gt;Luckily, soon enough, your code change is being reviewed, &lt;em&gt;but&lt;/em&gt; you're not getting approvals yet! Questions pop up, potential problems arise, and missing tests unveil themselves.&lt;/li&gt;
&lt;li&gt;Time to get those fixed! At least, as soon as you wrap up or abandon the task you started in the meanwhile.&lt;/li&gt;
&lt;li&gt;When you've finished processing feedback, it's time to push those changes (hopefully without a lot of conflicts against your base branch) and let the cycle begin anew until everyone is satisfied and you're allowed to merge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sounds great, doesn't it?  This unproductive cycle kills people's sense of accomplishment, focus, and in the end, the throughput of the team.  Over time, people might put less effort into code reviews because they want to get &lt;em&gt;their&lt;/em&gt; work done as quick as possible, with adverse effects on quality.  In other words, this team is suffering from the &lt;strong&gt;handoffs and delays&lt;/strong&gt; wastes within the group.&lt;/p&gt;

&lt;p&gt;The good news is that this entire cycle of gathering ideas and technical approaches, writing tests and code, and approving and deploying the changes is part of the &lt;strong&gt;normal flow during ensemble programming&lt;/strong&gt;.  As a result, delays and waiting are reduced to the minimum, and development speed increases, especially when we already avoid many other wasteful activities.&lt;/p&gt;

&lt;p&gt;All in all, having this steady flow of creating value in a supportive and &lt;em&gt;lean&lt;/em&gt; environment, people become happier and more motivated.&lt;/p&gt;

&lt;h4&gt;
  
  
  Getting started with pair programming
&lt;/h4&gt;

&lt;p&gt;Now, logging into work the following day and inviting your entire team in an ensemble &lt;em&gt;is&lt;/em&gt; likely going to feel off, scary, unproductive or a combination of those.  Ensemble programming is a practice that takes persistence, rehearsal and guidance, especially since it is radically different from how most people are used to perform their day to day job.&lt;/p&gt;

&lt;p&gt;My advice would be to start with pair programming first, limiting the "mob" to two people, and allow people to get accommodated to working together more frequently.  Many of the benefits will already be there: less waiting and focus switching, and more knowledge sharing.&lt;/p&gt;

&lt;p&gt;Don't stop here, though!  There are likely still handoffs and delays between pairs and individuals, and hence wasteful activities are still present!&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In this article, we took a quick dive into applying the success factors of a simple, agile team to larger teams.  As a result, we can learn and improve how larger teams work through concepts of lean software development while not forgetting &lt;a href="https://modernagile.org/" rel="noopener noreferrer"&gt;fundamental agile values&lt;/a&gt; such as those of psychological safety, experimentation, and continuously delivering value.&lt;/p&gt;

&lt;p&gt;When attempting to optimise the happiness and flow of a development team, ponder whether your team is spending too much time with wasteful activities, trying to make up for it individually in between meetings and distractions. Teach people to spot and alleviate waste in a continuous improvement cycle and help them make the company and the clients more successful.&lt;/p&gt;

&lt;p&gt;And don't forget to think about that old project you did back in the 90s and what made &lt;em&gt;that&lt;/em&gt; project awesome. Perhaps you may apply some practices from it as well!&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;If you want to read more about lean, I recommend Poppendieck's book linked above, as well as the (free) book &lt;a href="https://paulakers.net/books/2-second-lean" rel="noopener noreferrer"&gt;2 Second Lean&lt;/a&gt; by Paul Akers (thanks Ashley and Joshua of &lt;a href="https://www.industriallogic.com/" rel="noopener noreferrer"&gt;Industrial Logic&lt;/a&gt; for the recommendation!).&lt;/p&gt;

&lt;p&gt;For more information on ensemble programming, check out the &lt;a href="https://www.youtube.com/channel/UCgt1lVMrdwlZKBaerxxp2iQ" rel="noopener noreferrer"&gt;Mob Mentality Show&lt;/a&gt;, offering videos with common patterns, insights, tips, etc.&lt;/p&gt;

&lt;p&gt;Elisabeth Hocke (&lt;a href="https://twitter.com/lisihocke" rel="noopener noreferrer"&gt;@lisihocke&lt;/a&gt;) also compiled an extensive &lt;a href="https://www.lisihocke.com/p/collaboration.html#ensemble" rel="noopener noreferrer"&gt;list of resources on Working as an Ensemble&lt;/a&gt; and created &lt;a href="https://www.slideshare.net/lisihocke/a-story-of-ensemble-programming-testing-and-everything-german-testing-day-2021" rel="noopener noreferrer"&gt;a talk&lt;/a&gt; on the practice.&lt;/p&gt;

</description>
      <category>agile</category>
      <category>lean</category>
      <category>saas</category>
      <category>teams</category>
    </item>
  </channel>
</rss>
