Ten Types of Software Engineering Waste
Lessons from the Toyota Production System for Tech Leaders
In my last article, I discussed DevOps culture—a mindset that fosters collaboration and shared responsibility among engineering and other teams to deliver high-quality software quickly and reliably.
The article included a checklist for PEM's subscribers to self-assess their software development practices. You can access these checklists (Google Sheet, FigJam board, and Notion template) here: DevOps Culture Checklist templates.
DevOps culture operates under the assumption that we engage with value streams—processes required to convert an idea into a technology-backed service that delivers value to the customer. The term "value stream" is borrowed from manufacturing and describes the sequence of processes needed to convert raw materials into a finished product. This includes designing, producing, and delivering.
Much like how the Toyota Production System transformed manufacturing value streams in the 20th century, DevOps culture and agile practices are transforming software delivery. In 1945, Toyota optimized production by arranging machines close to each other, syncing their speeds to maintain a consistent pace, and producing materials only as needed, transitioning from batch-and-queue to just-in-time manufacturing.
Today, tech organizations are making a similar shift from waterfall development to lean approaches, delivering in small iterations as frequently as possible.
Why does this matter? Just as Toyota's TPS transformed their manufacturing into a "pull system" (production responding to actual customer orders instead of pre-emptive production), we aim to do the same with software engineering—building technology in response to customer needs rather than assumptions.
The essence of "pull systems" and Toyota's TPS is the elimination of waste from the value stream. Waste is any activity or cost that is unnecessary and does not add value to the customer (as opposed to activities that directly create value or are necessary for value creation).
Here are the types of manufacturing waste defined in the Toyota Production System:
Inventory: The cost of storing materials until they are needed, which might never happen.
Extra Processing: The cost of unnecessary steps that downstream processes do not require.
Overproduction: The cost of producing more items than currently necessary.
Transportation: The cost of unnecessarily moving materials from one place to another.
Waiting: The cost of idle time awaiting completion of previous steps.
Motion (of people): The cost of unnecessary movements, such as picking up and putting down items.
Defects: The cost of rectifying quality defects.
Value: The cost of producing goods or services that do not meet customer needs.
Non-utilized Talent: The cost of unutilized employee creativity and skills.
Types of Waste in Software Engineering
Here, you can find a PDF cheat sheet summarizing this article.
IT value streams, like manufacturing, contain waste. Despite similarities, manufacturing, and software engineering differ significantly. Manufacturing produces physical goods, while software is something virtual. In manufacturing, we usually produce batches of similar things; software is usually a unique, singular thing available to countless users via infinite cloning. Software evolves much faster than manufactured products.
Below, I share my list of types of software engineering waste, which comes from the mix of several sources:
The entire article and PDF/Notion/doc templates are available only for paid subscribers. You can use the training budget (here’s a slide for your HR).
Thanks for supporting Practical Engineering Management!