Value stream mapping is a Lean technique for analyzing processes, identifying areas of waste and optimizing workflows.
In Lean Manufacturing, value stream mapping looks at all the steps involved in turning materials into products, including logistics, warehousing and assembly lines, and seeks to make them more efficient.
This process involves mapping the end-to-end process, identifying different types of waste, such as overproduction, wait times, motion and defects, and then creating and implementing a plan to reduce that waste as much as possible.
The Lean Software movement showed how Lean thinking and techniques – including value stream mapping – could be applied to the software development lifecycle to make it more efficient and improve what is delivered to users.
The Lean philosophy complements the principles of Agile and DevOps, which emphasize the benefits of iterative cycles with continuous feedback loops and the need to build quality in as the way to deliver value faster.
Creating a value stream map of your software development process can be a useful exercise whether you’ve already implemented a CI/CD pipeline or are just starting out.
Mapping all the steps, people and tools involved – from ideas to design, development and release – allows you to visualize the entire product lifecycle.
You can then use this map to facilitate discussions between development and operations teams, building a shared understanding of the value that each step adds, together with the concerns and motivations of everyone involved.
Once you’ve sketched out the process, you can start identifying instances of waste – activities that don’t add value for the user (either directly, in the form of desired features, or indirectly, such as by keeping the product stable).
The types of waste identified in Lean Manufacturing have been adapted for software development and include:
Like overproduction in manufacturing, creating functionality that is not used is wasteful. Working in small increments that are delivered frequently, taking a minimum viable product approach and continuously collecting – and listening to – feedback all serve to inform what you’re building and avoid time and effort being wasted on features that are not used.
Constantly switching between different tasks is wasteful because it prevents you from getting into a state of flow. Each time you’re interrupted in a task, you have to spend time getting back into the right headspace before you become productive again. Having a fully automated pipeline that does not require manual input to trigger each stage of testing helps to avoid task switching. Similarly, using alerts carefully, so that you’re only interrupted when it’s essential (such as a failure in production but not a failed unit test), helps avoid unnecessary task switching.
One of the most obvious forms of waste, delays at any stage in the workflow will ultimately slow down progress to market. Reducing handoffs between individuals and automating all that can be automated – building, testing, deploying and delivering feedback – will reduce waiting time.
Creating overly complex processes and procedures when something simpler will achieve the same results takes more time and resources to implement and maintain. Examples can range from overcomplicating deployment to staging environments to demanding risk assessments before each release. Understanding the motivation behind steps will help you work out if a simpler process will suffice.
Defects create extra work and take time to fix once found, while negatively impacting customer experience if they make it into production. Working in small increments that are tested automatically is a proven way to build quality in, helping to find issues early, and make it easier to identify the cause of a problem. When defects are found in production, having the ability to release a fix quickly minimizes the impact on users.
Known as inventory or over-stocking in a manufacturing context, partially complete work doesn’t deliver value to users while slowing down the delivery of other functionality and improvements. It is typically caused by starting the development of something before it was ready, resulting in delays. At the same time, the user needs are better understood, followed by rework to accommodate new requirements.
When work has to be handed over to another team to complete the next phase it adds a delay (as the next team may not be ready to start the work immediately) and requires knowledge to be transferred – either via meetings or written documentation. Often some knowledge is lost in the process and has to be rediscovered. All of this wastes time and effort, slowing down the process. Minimizing handoffs with cross-functional teams that have ownership of the entire lifecycle helps to reduce this type of waste.
Having identified the waste in your process it’s time to start addressing them.
In keeping with Lean, DevOps and Agile principles, it’s a good idea to implement changes incrementally, monitoring what impact changes have, continuing to collect feedback and adjusting the course as you go.
Finally, don’t let value stream mapping become a wasteful exercise in itself. While it’s possible to spend a lot of time learning the correct symbols and transferring your findings into a mapping tool to create a digital asset, you can often start with a simple whiteboard session to get an initial sense of how much you stand to gain from a value stream mapping exercise.