Thursday, July 10, 2008

The Goal

I finished reading The Goal by Eliyahu (Eli) Goldratt. This is classic business novel about the Theory of Constraints (TOC), often cited in Lean and Agile literature. Written as a novel, it's an enjoyable read, and a must-read, I would say, for anyone who is serious about improving the way his business operates.

I always like to distill a good book down to it's bare essentials, so hear goes.

The goal is to make money. There are 3 fundamental measurements that express the goal, listed in order of importance.
  1. Throughput: the rate at which the system generates money through sales.
  2. Inventory: all the money the system has invested in purchasing things it intends to sell.
  3. Operational expense: all the money the system spends turning inventory into throughput
The aim is to maximize throughput while minimizing inventory and operational expense.
Note that in software, inventory is any software or feature that is unfinished or not yet delivered to customers.

Stated differently:
  1. Throughput is money coming in
  2. Inventory is money stuck inside the system, or investments that potentially could be sold
  3. Operating expense is money going out (to make throughput); any investment that can't be sold
Note: Agile software development reduces inventory by building software in small batches (iterations) that are quickly delivered to customers.

There are 2 types of resources:
  1. bottlenecks (a.k.a. constraints): capacity <= demand
  2. non-bottlenecks: capacity > demand
Balance the flow of product through the system, not capacity, with market demand. Make the flow through the bottleneck equal to market demand. A system needs to have excess capacity to handle the fluctuations in demand and variations in output from each resource in the system.

Activation vs. utilization of a resource:
  • utilizing a resource is using it in a way that moves the system toward the goal
  • activating a resource is using it whether or not there is any benefit from it's output.
Two rules of bottlenecks and non-bottlenecks:
  1. The level to which you can utilize a non-bottleneck resource (without increasing inventory) is determined not by the capacity of that resource but by some other constraint in the system.
  2. Activating a resource is not the same as utilizing it; activating a non-bottleneck to its full capacity is counter-productive with respect to the goal.
The implication: you must not seek to optimize every resource in the system. A system of local optimums in not an optimal system; often it is a very inefficient system. Optimize the whole system; not localized subsystems. [Lean principle: see the whole.]

The process for accomplishing the goal:
  1. identify the system's constraints (bottlenecks)
  2. decide how to exploit the constraints; maximize their utilization
  3. subordinate everything else to the above decision. Operate all other components to maximize utilization of the constraint.
  4. elevate the system's constraints; add resources or otherwise increase capacity of constraint resources
  5. if in the above steps a constraint has been broken, go back to step 1. Do not allow inertia to cause a system's constraint. Whenever a constraint is broken, immediately re-examine conditions included the changes made in steps 2-4; they may now be problematic.
Effective management seeks answers to these 3 questions:
  1. What should be changed
  2. What should it be changed to
  3. How to cause the change - without creating new problems, and with enthusiastic support