In ‘Agile’ circles there are certain topics that come up frequently, such as Kanban and Scrum, so much so that we often forget that Agile is a mindset rather than a small subset of methodologies.
As the saying goes there are a great many ways to skin a cat, but limiting ourselves to only a few may constrain us from opportunities to improve. The Theory of Constraints is one of these overlooked options.
The Theory of Constraints (TOC) is often assumed to only apply to industry and manufacturing, which is very sad. TOC is in my opinion the very example of an Agile mindset applied to industry and the techniques can be applied very effectively to Agile Software Delivery.
Some common applications of TOC
- Ongoing Improvements
- Improve flow
- Incremental delivery
- Smaller batches of work
- Reduced Work in Progress
- Focus on maximizing customer value
- Reduce firefighting
- Reduce inventory of undelivered ‘finished’ work
- Reduce speculative work
- Reduce reaction time – ability to pivot sooner
- Identify potential productivity improvements
- Expose underutilized capacity
- Identify skills shortages
- Identify blocker clusters
- Identifying new markets or new ways to engage with your market
- Using cost of delay principles to prioritize work
TOC starts and ends with system level thinking, your organization as a whole, not just your team, the whole market, not just your current customers or your current market. TOC requires you to look up and around rather than just looking down.
The Theory of constraints uses the term ‘theory’ in the scientific sense, it is a well defined set of practices that have proven to be very successful when applied appropriately.
The guiding principle is that improvements to anywhere that isn’t your bottleneck is worthless. Think of adding a third row of seats to a car that only ever has one passenger. and that improvements to your bottleneck improve your entire system as a whole so should not be measured in isolation.
This can often feel confusing and counter intuitive, it can sometimes result in decisions that increase local costs and even reduce local efficiencies. Say shipping by air may seem far more costly per item, but results in an increase in sales that far out strip the increase in costs. Shipping got less efficient and costs went up, profit per unit went down. All seemingly unwise decisions when considered in isolation. But the result was that sales went up and so profits increased faster than sales.
And that is the heart of the problem, most organizations create silos and fail to consider the impact of opportunity cost on the organization as a whole. This mindset leaves the shipping department seeking to reduce costs without considering the impact on sales.
In IT this may be seen as saving money by sharing an expert between two teams which means their utilization is high (they are perceived as efficient) but they are not fulfilling their purpose in a timely way to their teams which actually costs the company far more in opportunity cost. Sadly opportunity cost does not show on a balance sheet and so cannot be seen unless you look for it, and understand the significance of it’s impact.
Having dedicated resources with built in slack often causes traditional managers and PMs to have kittens, they cannot bear the thought of costly resources being underutilised, they only focus on cost, not on the value that people bring and that thinking could be crippling your organisation.
Contrary to popular belief your company’s goal is not to keep all workers busy all the time, it is to be the most profitable it can be now and in the future. That means effective use of people and not maximum use of people. The two are not the same and until that is understood your company’s profits will suffer.
In agile we suggest dedicated teams and to minimize multi-tasking, limit WiP and so on, this often leads to under utilized resources(people) but far more value to the customer and generally more profits.
Another key principle is the impact of statistical variation on dependent events. That is a bit of a mouthful but basically it means that in any given time period, output from a person or a machine varies, neither people nor machines are consistent, we have good days and bad days, some tasks take longer than others, we encounter problems and so on.
The results is that variation in output of one item in a chain impacts on the next and so on, and the longer the chain the more stages are impacted and the more variation disrupts the flow.
This is hard to explain without a demonstration and few people get it until they see it for themselves. Goldratt explained it really well with a game in the book The Goal, but sufficie to say balance is a fallacy.
Balancing the items in a chain (people, processes or machines) does not solve the problem, TOC explores techniques for managing flow to mitigate these problems.
Agile teams apply many of the flow management techniques TOC advocates – training T-shaped people, reducing hand-offs, buffering work, smaller stories, more paths through the system, continuous delivery. These are all techniques that come directly from the Theory of Constraints and have been adopted by Agile development teams.
You would be surprised at how many good ‘Agile’ ideas have come from the Theory of Constraints and yet we continue to consider it to be for industry rather than software. Think how much more we could be missing by not applying the thinking processes.
I’ll try to cover some of the aspects of the Theory of Constraints in future articles with some ideas of how they can be applied to software development.
2 thoughts on “Applying the Theory of Constraints to Agile Software Delivery”
Our company tried (and failed) to implement TOC for project management. A lot of reasons “why” but a key was probably the lack of buy-in from some of the influential middle-managers. I’d be interested to hear your thoughts on that topic?
I can’t comment on your company, and lack of support from management is often a death blow to any process. But I find TOC alone to be a very useful support mechanism for Agile frameworks, but in projects I wouldn’t use it alone. Goldratt has also proposed a system for projects – “Critical Chain” which I think is awesome for projects with known outcomes and known actions. But again not really right for software, the destination in software is normally our biggest unknown so wee need feedback on direction ASAP.