DevOps requires structure, visibility, and orchestration to make everything flow smoothly and continuously. The challenge: Throughout the different stages of DevOps work, the way that software development processes and cultures operate can lead to mistakes. In turn, these result in wasted time and slowed down software releases, thus negating the value of DevOps.
Given the almost "factory-level" volume and scale of software development projects today, it seems appropriate that an answer to scaling DevOps without incurring unnecessary waste comes from lean manufacturing principles. Commonly referred to as TIMWOOD, the lean methodology identifies seven varieties of waste, each associated with a team or an individual activity.
Some of these waste types are strategic, while others are more tactical. Beyond these, there can be other subsets, or types that are specific to an organization.
However, if teams can visualize the main seven waste varieties through Kanban boards or value stream maps, they will be in a strong starting place. The seven types of waste are:
- Transfer or handoff between teams. (strategic)
- Inventory — backlog of any partially done work. (strategic)
- Motion — task switching, interruptions, and distractions within a process. (tactical)
- Waiting — mostly for approval or decision making. (strategic)
- Over-Processing — re-learning forgotten knowledge. (tactical)
- Over-Production — creation of more features than needed. (strategic)
- Defects/Rework — quality issues during the process. (tactical)
DevOps time-wasters and how to address them
In most cases, tactical wastes can — and should be — solved within the feature teams. Strategic inefficiencies are more complex and require cross-team collaboration to be resolved. Here is a closer look at each of the seven waste areas and how to tackle them in practice.
1. Transfer
With transfer waste, there are too many dependencies between individuals — for instance, to either sign off a task or accept changes. To address this, DevOps teams need to break down silos as much as possible.
Teams can use cross-functional team pairing to solve this. For example, developers can pair up with testers to sign off items in runtime rather than as a step along the way. Continuous integration (CI) is another way to resolve transfer waste: building a single CI process to cover the various gating aspects should serve as a vehicle to deliver software between the various team members.
[ Are you fighting skeptics? Read also: DevOps for doubters: How to deal with 9 kinds of people who push back. ]
2. Inventory
Examples of inventory waste inlcude items that were added and never touched (code documentation being a typical one), and features that were either started on, left behind, or shelved because of higher priorities.
A good way to overcome this waste is for team leaders to agree on a clear set of highest priority features to work on, visualize them in a Kanban board, and only once those have been delivered, add new ones. This simple solution will clear the unnecessary noise from team’s brains and allow them to focus only on the critical features to develop.
3. Motion
This refers to the context switching of tasks that slow down the entire process of software development and delivery. This includes the switching of tasks or responsibilities or dealing with remote or inaccessible resources. The answer to better processes lies within the management of transfer and inventory waste, as well as the allocation of an efficient environment and tools, which will help teams collaborate and communicate better.
4. Waiting
A lot of people will recognize this area of waste: Waiting for an answer to a product-specific question from counterparts, or for environments to be ready and up to date. To avoid this, inject some slack into the schedule so that those delays are already accommodated for even before they happen.
Another good technique is to start complex tasks that are known to cause waiting waste earlier in the process. Some examples of such tasks include environment updates or implementing infrastructure as code (IaC) to support the creation of DevOps environments. Unlike traditional environment setups that includes network configuration, virtual machines setup, and more, IaC automatically generates the same required environment on-demand.