By Alex Yakyma
Value Stream is one of the key concepts of Lean|Agile development at scale. A value stream is a set of steps, starting from the definition of the idea of a new functionality all the way through to the implementation and deployment to satisfy user and business goals. Another aspect of a value stream is people – the teams that contribute to the end user value. Thus, a value stream is most often the set of steps (and a number of teams) required to develop or maintain a software solution. More often than not, value streams consist of multiple collaborating agile teams.
Let’s start by summing up the key reasons why we care at all about value streams and value stream analysis. As we know from experience, a value stream perspective allows an organization to effectively focus on:
1. Improving the process as a whole, thereby genuinely improving it.
2. Continuously improving the average cycle time.
3. Enhancing quality by building it into every process step.
4. Actively creating, sharing and evolving relevant knowledge.
These are all meaningful goals that allow an organization to considerably enhance its operational performance. Surprisingly enough, however, value streams alone don’t let you improve these at scale and here’s why.
Let’s consider an agile program that works on a specific value stream, consisting of seven agile teams. The result of their work is an end-to-end solution – a large software system for which the teams advance the functionality and nonfunctional requirements, as required by the business. What can we say about such a value stream? Just as for any value stream at scale – not much. It consists of five process steps that repeat indefinitely over feature sets:
|Figure 1. Value stream perspective|
Figure 1 doesn’t say very much, primarily because we have tried to outline process commonalities for all seven teams and those are pretty generic and therefore, not overly useful. The process is much more complex inside and requires much more subtle treatment. In fact, such a rough perspective (as seen in figure 1) can be largely harmful to the program for the following reasons:
· Applying Work-In-Process (WIP) limits on the entire program in a “wholesale” manner may unbalance the flow instead of stabilizing it
· Some teams may have their unique, context-dependent steps in the process which substantially impact their performance but are not visible as a part of the value stream.
· The specific ways in which the teams impact one another in the program usually has a dramatic impact on the overall program performance and requires special treatment.
In order to explore the internal structure of a value stream at scale, we need to take a microscopic view. What seems to be a flat surface to the naked eye may turn out to be an entire new world with its own ridges, peaks, plateaus and trenches. We will start our journey by defining the ground rules. We will be zooming in for a closer look at a value stream, but only insofar as we don’t lose the features (chunks of an end-to-end user value) from sight.
The reality of most programs suggests that the teams collaboratively create user value and that the patterns of such collaboration are context dependent (See figure 2).
|Figure 2. A value stream consisting of a number of value threads|
So, features 1 and 2 require three teams to work together, feature 3 involves four teams, and feature 4 requires two teams’ input. The teams that are connected with a same color link form up a Value Thread – a subset of a program teams that are able to deliver a specific feature or a feature set. Value threads can be as small as one team (in case of feature teams, for example) or can be as big as the entire program (often, when it consists of component teams).
Most interactions occur within the value threads. Thus, in order to be able to improve the process at scale, we redirect our focus from an overly abstract value stream to significantly more detailed value threads. We would like to see value being created in a fast, synchronous manner within each value thread, as Figure 3 suggests:
|Figure 3. Synchronous work on a feature within a value thread|
Now it is obvious that the following Lean|Agile techniques make a lot of sense primarily within a value thread:
- Applying WIP limits.
- Backlog grooming, planning, tracking progress and demonstrating the results.
- Measuring the feature cycle time and cumulative flow.
- Creating and sharing knowledge.
- Advancing in test automation, and collective code ownership
- Collectively retrospecting and improving the process.
It is unarguably better to move towards feature oriented agile teams, where a team actually is a full value thread. In reality, however, this is far from always possible or may require a huge amount of time and effort. Uncontrollably bloated technology stacks, narrow specialization, geographical distribution, and organizational impediments – these can all present serious hurdles when moving towards feature teams. However, once value threads are made visible within an organization, it may considerably increase managerial support and willingness to make changes as they start to see the real source of existing inefficiencies.
Start by asking yourself several questions. What are the smaller constructs (value threads) within my program that are responsible for end-to-end value delivery? Are the teams aware of their peer teams, with whom they have to actively collaborate? How many sprints does it take to deliver an end-to-end chunk of functionality within such a thread? Do teams collaboratively plan and track progress within the thread? Now that you know what your target object is – you can help your organization improve. It will be a tough journey, but the prize is also worth it.
In future posts, we will explore different important aspects of the value threads and offer further practical advice in terms of applications.