© Focal Start/Shutterstock.com

Key Points

  • The Theory of Constraints is a great fit for optimizing software delivery throughput.
  • Bottlenecks can be readily identified with visual tools, analytics, and even by talking to your development team.
  • Following the Five Focusing Steps behind the ToC will help your organization to identify and optimize bottlenecks in a cycle of continuous improvement.

Leveraging the Theory of Constraints for software development is easier than you think.

While we often think of ToC as an approach geared toward physical goods, like manufacturing, it is widely applicable to disparate industries like software.

The principles behind the approach focus on increasing throughput, and that is an area where software development can benefit from some serious attention.

Developing any piece of software can be a complex task, often plagued with bottlenecks, wasted time, and a slew of other issues.

So, with that in mind, let’s look at how you can take the 5 Focusing Steps at the heart of ToC and apply them to your workflow.

Identify the Constraint

Before you start doing anything, you’ll have to identify the constraint in your workflow. In software development, this might not be readily evident. You don’t have physical machines in need of servicing or factory floors where you can observe bottlenecks developing. Instead, you’ll be looking at the pooled resources, toolchains, and areas where work piles up as you struggle to meet deadlines for your clients.

Common Software Constraints

There are a few key areas that prove to be common constraints when looking at software development. Often, it can rely on a single individual, like a senior developer, who is the only person with the relevant expertise to review or test code. This can grind productivity to a halt, as a single person is responsible for the workload of an entire team.

Other common areas where bottlenecks can arise might be something like your code review process, complex approval pipelines, and even inefficient testing procedures. For some companies, you might be contending with legacy codebases older than most of the team members. Antiquated technology can make work take forever to simply get into the pipeline. You might also be dealing with development environments that do little to emphasize speed, taking ages to set the right conditions.

Finally, one common area of bottlenecks is simply a lack of clear communication. Miscommunication or a lack of transparency between developers and stakeholders can result in seemingly simple tasks taking forever to get moving.

How to Identify It

So, how do you identify the bottlenecks or constraints in your workflow? Visual tools are a fantastic way of getting an idea of the flow of your software development, from beginning to end. Making use of tools like Kanban or Value Stream Mapping can readily identify areas where bottlenecks are forming.

If you’re more into analytics, this is the time to take a look at your overall metrics. Cycle time and throughput can be massive indicators of an area of weakness, with the longest cycle time or lowest throughput highlighting an area of concern.

Finally, don’t hesitate to talk to your team. Front-line developers are going to have a far better understanding of areas of concern than someone in management. Anecdotal evidence might not be backed up with hard numbers, but it can paint a more complete picture than just the metrics you’re gathering.

Exploit the Constraint

Once you’ve identified your top constraint, it’s time to maximize its output. Ideally, the area of concern should never be left idle, with throughput being constant. Time is of the essence, and wasted time adds no value to your activities. So, let’s take a closer look at some practical strategies you can leverage.

Practical Strategies

Constraints should be kept isolated from interruptions. For individuals, this can mean minimizing distractions, like unnecessary meetings or context switching for different tasks. You want to streamline the experience to see if available resources can be readily leveraged to optimize your bottleneck to its ideal state.

Constraints should only receive high-quality, high-value work. If you’re relying on the expertise of an individual, that means you aren’t asking for code review on a completely extraneous feature. Work should be clearly defined, within scope, and free of errors. Additionally, you’ll want to make sure that any additional dependencies are accounted for, allowing the individual to get to work as needed.

The hand-off process is also a key factor here, and should be changed to allow for smoother overall operations. For slow code reviews, this might mean that you’re enforcing strict testing standards to reduce the back-and-forth needed for minor issues. If the code isn’t up to spec, it simply gets declined.

Subordinate Everything Else to the Constraint

Our next step is centered around the concept that the entire system is shifted to support the bottleneck. The pace of work is dictated by the constraint, not faster. The one thing you want to take away from this is to avoid focusing solely on quick fixes and temporary optimizations.

As to why, if you’ve got an upstream team that is producing code at a rate your bottleneck can’t support, you’re simply creating a longer queue. This leads to delays, increases lead time, and acts as a detriment to your systems on the whole.

Subordinating your entire workflow to the constraint prevents overwork, reduces waste, and increases overall efficiency.

Practical Applications

The best means of handling this with your limited resources is the establishment of a Drum-Buffer-Rope System.

The Drum, or constraint, sets the pace for the entire system.

The Buffer, or work queue, provides a constant stream of work at the constraint’s pace.

Finally, The Rope signifies that the constraint is ready for a new task, preventing the work queue from overwhelming the constraint.

Elevate the Constraint

After you’ve exhausted your available resources, it’s time to look at investing in the constraint. Targeted improvements are going to be key here, and can help to increase the capacity or workload your constraint can handle.

Tools and Strategies

One of the best things you can do at this stage is to limit the number of Work in Progress items you’ve got running. Agile and Kanban both have this as a best practice for good reasons. You don’t want work piling up as it waits for the next hand-off. This can bring your entire software development pipeline to a grinding halt.

Other areas you might want to focus on are automation. If manual processes are simply too slow, automation can help to speed up the constraint. While not a complete replacement for the likes of human testing, you can save that for a later juncture during the QA process.

If the constraint is a person, then this is a prime opportunity to allow them to mentor and train a new team member. It might take more time in the long run, but you’re getting two skilled individuals, essentially doubling your throughput.

Repeat the Process

Agile management team. Vector business team meeting and scrum task board. People are planning work process. Illustration project meeting, business team scrum board

Once a constraint has been elevated, it is no longer the weak link in your workflow. From here, you’ll start from scratch, repeating the same steps we’ve outlined to elevate other bottlenecks in your system. This sets up a cycle of continuous improvement and guarantees that your throughput isn’t suffering from bottlenecks.

Using the Theory of Constraints for software development isn’t about optimizing each process at the same time. Instead, you’re looking at single critical areas that have the most impact, and optimizing them to their best performing state.

Other Useful Tools and Concepts

Ready for a little more? You might want to take a closer look at how Value Stream Mapping is being changed to align with modern industries. Businesses are evolving every day, and vital tools like VSM are keeping pace to meet the challenges and demands of any modern company.

Speaking of the future, you might want to take a closer look at how BPR and automation are playing a vital role in the design of business processes. It isn’t enough to simply account for the likes of continuous improvement. An organization might only benefit from the use of a clean slate and the addition of technology to cut out the busy work.

Conclusion

The Theory of Constraints is a fantastic means of getting a handle on your software development workflow. Following the Five Focusing Steps isn’t simply about temporary fixes, but lasting changes that will benefit your organization over the long haul.

About the Author