Imagine for a moment that your team has 10 priorities that you are hoping to get done in the next 6 months.
You decide to work on all ten of them simultaneously so that all of them are at least making some progress. During this time your team is often blocked for various reasons and so they find themselves jumping back and forth between features. At the very end of the 6 months you manage to release two of the features fully, and the remaining 8 features are around 70% done. At the end of these 6 months your team also realizes that you will need to pivot away from 3 of these features, as they are now obsolete. There is a feeling among your team that those 3 features were a waste of time, and an additional fear that the remaining, partially complete features might be scrapped or deprioritized as well. One of your team members also brings up the 5 incomplete features from the last year that were never completed, in hopes that some of those get reprioritized.
Your boss takes note that your team delivered 2 features in this 6 month period, and reminds you that customers are anxious for more features.
Now imagine that instead of starting on all of the features at the same time, you decided to focus on them one at a time. Your team makes progress on the highest priority item first. Once that is done you release that feature out to customers, you reevaluate what item is the next top priority, then get right to work on that next priority feature. When progress gets blocked, your team spends time to focus on removing or working around the blockers. Although you did not make progress on all 10 of the features, your boss takes note at the end of 6 months that you managed to deliver 5 features that customers are using. You have no additional features in progress and you learn that 3 of the planned features are now obsolete. Good thing you did not start on any of those.
Which Scenario Meets Your Needs?
If your primary goal is to keep busy and simply make progress on things, then the first scenario would sufficiently meet that requirement; however, if your primary goal is to deliver valuable features to your customers, then the second scenario is optimal. We make it a priority to sustainably deliver meaningful value to our end users, and optimizing for flow efficiency is a crucial part of our process.
Analyze Your Workflow
Prioritizing flow efficiency is all about focusing on getting bits of value, from starting work on them to having them used by customers, as quickly and with as little waste as possible. In other words, how well is your team’s workflow set up to deliver your output? Are there things that get in the way of or slow down delivery? What changes can we make to optimize the flow? These are questions we aim to answer in hopes to be more efficient at delivering what we are producing.
Measuring Flow Efficiency
Flow efficiency is calculated from two key factors as follows:
Flow Efficiency = Value adding time / Lead Time * 100
Value adding time is the amount of time you have spent to add actual value or make progress.
- This does not include the time a task is simply waiting around or is blocked and no progress is being made, which is considered a form of waste.
Lead Time is the amount of time it takes to complete a process or task from starting it, to finishing it.
Tracking this metric for each peice of value you deliver can help identify areas of improvement or at the very least be a good starting point for a discussion on what changes your team might want to try moving forward.
Single Piece Flow
With these two key factors of flow efficiency in mind, you can imagine that the more things you have going on at the same time (works in progress), the worse your flow efficiency becomes. This is where the concept of single piece flow can really help. Single piece flow is a method of focusing on a single piece of work through the entire process. Getting as close to single piece flow as possible will ensure effort is directed towards getting that value delivered as fast as possible, while minimizing the wasteful time that tasks are just sitting around waiting to be worked on.
Sometimes it can be hard to strictly follow single piece flow at the team level. For example, larger teams might conclude that it makes more sense for them to have multiple work streams going on at the same time. Sometimes despite their best efforts teams are blocked by things beyond their control, other times having 8 engineers mob program at the same time is less effective than a mob of maybe 3 or 4. Especially helpful in these scenarios is that we implement Work in progress limits (WIP limits). These limits allow teams to make progress on more than one thing at any given time while still narrowing down the amount of work in flight to a small number of items, which in turn helps to reduce waste and increases the chances of getting more things to a completed state.
To Sum It All Up
We optimize for flow efficiency so we can deliver value frequently, which in turn will provide quicker feedback that will help us gain confidence that we are providing something meaningful to our customers, all while reducing the amount of wasted time and effort in the process.
“We optimize for flow efficiency.”
“We limit our work-in-progress.”
“We eliminate waste and find ways to be more efficient.”
“We deliver value early and often, on the order of daily or weekly.”
Checkout our Engineering at Pluralsight document to see all of the statements that shape our engineering culture.