Skip to main content

Theory of Constraints

The theory of constraints (TOC) is an approach for maximizing the throughput of a given system. It was proposed by Eliyahu M. Goldratts and has been applied in manufacturing as well as DevOps. Personally, I like the idea because of it's simplicity and iterative nature. 

Let's first define what we mean by a system. A system is a directed acyclic graph with some sources (nodes that do not have any incoming edges) and some sinks (nodes that do not have any outgoing edges). Work in such a system enters the system at some source node and is processed at different nodes, representing workstations, until it reaches a sink node, marking its successful completion. Below you can find a simple system with four nodes. Work enters the system at the right, is split across two different nodes and the completed in the node on the left.

The throughput of a given system is defined as the rate of work units that can pass through the system per unit of time. For example in a car manufacturing plant, the throughput would be the amount of cars processed per day. 

Any business tries to maximize the throughput of its systems, since this gives it competitive advantage. 

The theory of constraints can be seen as an iterative algorithm that in each step increases the throughput of the system, and therefore maximizing the throughput eventually. It is based on one assumption:

  1. In every system there is at least one constraint: a part that limits and therefore defines the maximal throughput of the system. 

In the system given above, the node with 100% utilization is the constraint of the system. Based on this assumption we can draw the following conclusions: 

Any optimization not made at the current constraint of the system doesn't have any effect on the throughput of the system. If we optimize before our constraint, this will lead to more work piling up at the already overloaded constraint. If we optimize after the constraint, this only leads to more idleness at successor nodes. Therefore optimization should be done at and only at the constrained node. The first step in the algorithm is therefore to identify the current constraint in the system. 

Once we are sure about the current constraint, we can in the second step make sure it is maximally exploited and has no idleness. 

In the third step, everything else needs to be subordinated to the constraint: In order to reduce the work in process of the system and stopping things from piling up in front of the constraint, the input to the system is throttled to the maximal throughput of the constraint. You could ask why it is necessary to reduce the work in process. In the book "The Phoenix Project" Gene Kim et al. give a very nice explanation of why work in process is the determining factor for making or breaking in many systems. 

In the fourth step we check, which of the work currently performed by the constraint can also be done by other nodes. We try to direct as much work as possible away from the constraint. For example if the constraint is an engineer in your company, he should focus on engineering tasks rather than meeting coordination. Try to take away that burden from the engineer and move it to the project manager instead. Additionally, we check if the work performed by the constraint can be done in a more efficient way. This could happen through guidelines, checklists or similar tools.  

After performing these four steps, the throughput of the constraint should be higher than before. Since the constraint was the limiting factor for the throughput of the whole system, these steps should have increased the maximal throughput of the whole system. If not, the optimization was likely done in the wrong place. 

To further increase the throughput, we simply start again at the first step of the algorithm. 

Practical Considerations

I like the simplicity of the algorithm, even though in practice the single steps can turn out to be quite difficult. Moreover, the algorithm can only be applied to systems in which the flow of work is explicitly known. In software develop for example the flow of work is often almost invisible: Everyone is typing on keyboards the whole time. With the help of ticketing systems and Kanban board techniques the work can be made more visible, including the handover of tasks to new workstations. In recent years, the upcoming of DevOps principles has identified and optimized many workflows in technology driven companies. I'm very curious how these trends will be further adopted by companies and which optimizations we will see.

Further reading

  1. The book "The Phoenix Project" by Gene Kim et al. 
  2. https://www.alldaydevops.com/blog/three-ways-a-principle-based-devops-framework

Comments

Popular posts from this blog

Are you ready to build the future?

The following post is based on the great book "From zero to one"  in which Peter Thiel and Blake Masters present their ideas about whats kind of entrepreneurship is needed to build a glorious future.  Optimist vs Pessimist There are basically two ways we can feel about the future: Either we are optimistic and feel the future is going to be better than the present or we are pessimistic and feel the future is going to be worse that the present. Determinate vs Indeterminate    The second question is concerned with the felt influence we have on the future. Does the future appear   determinate  meaning planable to a sufficiently high degree? Or do we think the future is indeterminate , we are "a lottery ticket", and have no influence on how our life will be tomorrow?  Based on how you feel about these two questions you will belong to one of the following groups: You are a  Determinate Optimist if you think the future is going to be great an...

Aphorisms

A collection of aphorisms and quotes that got my attention.  "An idea not coupled with action will never get any bigger than the brain cell it occupied."   - Arnold H. Glasow "The big ones stop ruling, when the many little ones stop crawling!" "Die Großen hören auf zu herrschen, wenn die Kleinen aufhören zu kriechen." (orig.)  - Friedrich Schiller

Your decisions determine your fate

We all live in different situations in this world. The situations are a mixture of external factors and the decisions and actions we took in response to them. While we have only very limited control over the external factors, we do have the power to decide how we react to them.  As Daniel Kahnemann writes in his book "Thinking fast and slow" , we have two systems in our nervous system: On the one hand the fast and archaic reflex-based systems is required for fast reactions like blinking with the eye to protect ourselves. Since this system is reflex-based, we do not have control over it. On the other hand the more powerful, but slower system allows us to reason about our responses to events. With great power comes great responsibility and therefore, the second system holds great responsibility for where where we are today and where we will be tomorrow. In this setting we could say that we are the sum of our responses to external events . Of course every person has a different ...