Hacker's Handbook

Book Review “The Goal - A Process of Ongoing Improvement" by Eliyahu M. Goldratt and Jeff Cox

Unleashing the Power of the Theory of Constraints on Software Development

Posted: 2023-06-02

Book Review “The Goal: A Process of Ongoing Improvement" by Eliyahu M. Goldratt and Jeff Cox

The Goal: A Process of Ongoing Improvement

A chess board.

I am constantly reading and trying to learn new things. Since I started counting, in 2014, I have read over 400 books. One of the best ones I read recently, even though it is almost as old as I am, is The Goal.

In The Goal, the authors introduce the Theory of Constraints as a management philosophy, in the form of a novel. This makes it much more engaging and easier to understand than traditional business or management books. The story of Alex Rogo and his struggling plant helps me to relate to the concepts on a personal level. I especially enjoyed the 30th-anniversary audiobook edition with several voice actors.

The book introduces the Theory of Constraints (TOC), an at the time revolutionary management philosophy, that focuses on improving overall system performance by identifying and managing the system's constraints. This concept has been widely adopted in various fields, including manufacturing, project management, and software development.

The book is written as a story about a man named Alex Rogo. Imagine you're playing a game, but you're not sure what the goal is. You'd be confused, right? That's how Alex Rogo, the main character in "The Goal", felt about his job. He was running a big factory, but things weren't going well. The factory was losing money, and if Alex couldn't fix it, everyone would lose their jobs.

One day, Alex ran into his old physics teacher, Jonah. Jonah had a different way of looking at things. He told Alex that every big system, like a factory, has one part that slows everything else down. This slow part is called a "constraint". Jonah said that instead of trying to make every part of the factory work faster, Alex should focus on making the constraint work better.

Alex thought about what Jonah said and realized that one machine in his factory was slower than the others and was holding everything up. So, he and his team changed the way they worked to make sure this machine was always busy. And guess what? It worked! The factory started making money again, and everyone's jobs were saved.

The book also uses the Socratic Method; rather than directly telling Alex the solutions, Jonah asks probing questions that lead Alex to discover the answers on his own. This method not only provides solutions to problems but also fosters learning, critical thinking, and problem-solving skills.

While the book is set in a manufacturing context, the principles it introduces are relevant to any system or process. This has made the book popular not just among manufacturing professionals, but also among professionals in fields like software development, IT operations, project management, and more.

Despite being published in the 1980s, the principles introduced in "The Goal" remain relevant today. In a world where efficiency and throughput are key to competitive advantage, the focus on managing constraints to improve overall system performance is more relevant than ever.

The book also presents a problem-solving methodology called “The five focusing steps”, also known as the process of ongoing improvement. The five steps are designed to identify and manage bottlenecks in order to improve process throughput. Here are the steps:

  1. Identify the system's constraint(s): Determine the part of the system that is slowing down the entire process. This could be a machine in a factory, a step in a process, or any other factor that limits the system's output.

  2. Decide how to exploit the system's constraint(s): Figure out how to get the most out of the constraint without increasing its capacity. This could involve reducing downtime, improving scheduling, or eliminating inefficiencies.

  3. Subordinate everything else to the above decision(s): Align the entire system to support the constraint. This could involve adjusting schedules, processes, or policies to ensure that the constraint is always working at full capacity.

  4. Elevate the system's constraint(s): If the constraint still limits the system's output after the above steps, consider ways to increase its capacity. This could involve investing in new equipment, hiring more staff, or other actions that increase the constraint's throughput.

  5. If a constraint has been broken, go back to step 1. Don't let inertia become the system's constraint: Once a constraint is resolved, another part of the system will become the new constraint. The process then repeats, leading to continuous improvement.

These steps provide a systematic approach to improving a system's output by focusing on its constraints. They can be applied to any system or process, from a manufacturing plant to a software development process.

The HappiHacking team Kayaking.

"The Goal" and the Theory of Constraints (TOC) provide valuable insights that can be applied to software development. Here are some key takeaways and their applications:

  1. Identify the Constraint: In software development, a constraint could be a particular piece of code, a development process, or even a team member. It's important to identify what is slowing down the development process. This could be done through retrospectives, performance metrics, or simply by asking team members about their challenges. In my experience, the process is often a constraint. Forcing developers to spend time estimating the time it takes to do a task, and having arbitrary sprint cycles that just break up the flow and the productivity of a team is most often a real waste of time.

Another common constraint can be the build, test, and release process. Make sure this is streamlined.

  1. Exploit the Constraint: Once the constraint is identified, find ways to make the most of it. This could involve optimizing a piece of code, improving a development process, or providing additional support to a team member. If for example the corporate rules force the team to work in sprints and do estimates, make sure that as little time as possible is spent on this,

  2. Subordinate and Synchronize: Adjust the rest of the system to support the constraint. This could involve changing the order in which tasks are done, reallocating resources, or adjusting schedules to ensure that the constraint is not being held up by other parts of the system.

  3. Elevate the Constraint: If the constraint is still a bottleneck, consider ways to increase its capacity. This could involve investing in better tools, providing additional training, or changing the process.

  4. Repeat the Process: Once a constraint is resolved, another will appear. Continuous improvement involves repeating this process to identify and address new constraints. Even though I am not a big fan of all the rituals of Scrum, I think it is a good idea to have something like a retrospective every now and then to keep improving.

In addition to these steps, "The Goal" also emphasizes the importance of viewing the system as a whole. In software development, this means looking beyond individual tasks or team members and considering how everything works together. This holistic view can help to identify systemic issues and opportunities for improvement.

Finally, "The Goal" promotes a culture of learning and adaptation. In software development, the ability to learn from mistakes and adapt to new technologies and methodologies is crucial.

The most important lesson in the ebook is that The Goal of any business is to make money. It is easy to lose focus on this and instead focus on improving processes and output, but if the output doesn’t improve the bottom line, then the whole exercise is pointless. Always make sure you are working on the most important thing to increase revenue or profit, then try to do this as efficiently as possible.

- Happi

Happi Hacking AB
Munkbrogatan 2, 5 tr
111 27 Stockholm