The Goal - Notes
I recently read the graphic novel edition of The Goal - a well-regarded management novel. The story revolves around the plant manager and his team, who, with the assistance of his former professor, Jonah, embark on a transformative journey to revive the struggling plant. Through their application of the theory of constraints, they implement measures that significantly improve the plant’s profitability.
All of the insights yielded are very much applicable to Software Engineering, and optimizing for flow.
Definitions & Tidbits
Throughput: The rate at which the system generates money through sales.
Inventory: All the money that the system has invested in purchasing things which it intends to sell.
Operational Expense: All the money that the system spends in order to turn inventory into throughput.
Statistical Fluctuations: Variability from one instance to the next (think about preferring small batch work items of similar size)
Dependent Events: Events that must take place before another event can begin (e.g peer review before merging)
Bottleneck Resource: Any resource whose capacity is equal to or less than the demand placed on it.
Non-bottleneck Resource: Any resource whose capacity is greater than the demand placed on it
POOGI: Process of on-going improvement.
The maximum deviation of a preceding operation becomes the starting point of a subsequent operation.
Anything that brings us closer to our Goal is productive. Other activities are non-productive.
Theory of Constraints
Step 1: Identify the constraint(s)
The constraint is the slowest part of the system,… the part that is preventing us from meeting our goal. All systems have a constraint, and all constraints can be improved (given time and resources).
If we use our old reliable Kanban board as a visual reference, then it is the column with the most WIP.
Step 2: Decide how to exploit the system’s constraint
Working the constraint to the maximum, by squeezing the most from it/them. This also means making sure that the work is good work e.g moving quality control earlier in the process to ensure no waste within the bottleneck.
Step 3: Subordinate everything else to the above decision(s)
We should make sure that non-constraints do not operate faster than the constraint. This just feeds the bottleneck and exacerbates the problem. The example in the book was having the slowest-walking member, Herbie, lead the hike.
Step 4: Elevate the system’s constraint(s)
Adding more resources to increase the throughput. Only do this once steps 2 and 3 have been completed. The antipattern is to skip these, and simply throw more resources at the problem.
Step 5: Go back to Step 1. Do not allow inertia to cause a system’s constraint.
There is always a bottleneck. What is the slowest part of the system?