This fall, I had an opportunity to hear J.B. Rainsberger give an interesting, entertaining and educational talk – Introduction to Agile via Theory of Constraints.  (The same talk was given at Agile Tour Toronto, but my notes are based on an earlier talk at a client site.)

If we think about our software group as the system under study (photo – top left), then the primary measure of productivity is running tested features. (i.e. in production). The key question is how can we maximize our throughput while holding steady or minimizing inventory and operating expense. The theory of constraints is largely about the hunt for the bottleneck in the system. In J.B.’s opinion, learning is the biggest bottleneck. (I usually say communication is the bottleneck but this seems roughly equivalent).

Rainsberger TOC

How do we subordinate learning as a bottleneck? Some practices (photo – right) that help are working in pairs, sitting together, using estimates as budgets.

I can’t remember where this fit in, but J.B. had a great example of managing scope that he referred to as dimensional planning (photo – bottom right).  It involved looking at different versions of a car that could be delivered: Lada, Toyota, Lexus. The point is to do a quality job with whatever you do, but you may not do all the features to get a top of the line solution.

A big part of the talk was about using queuing theory to explain TDD, BDD (photo – left). J.B. has a write-up that covers part of the talk on his website. It is a nice explanation although it does stretch a bit thin from my understanding of queuing theory.

BTW, one of the best parts of the talk is watching J.B. at work with his tablet laptop which he uses like a gigantic whiteboard.  It’s a way more dynamic than slideware.