The waits cause all the pain
When we want to improve efficiency, we focus on speed. We try to speed things up, add more power, or push people to do things faster. This makes intuitive sense and seems like the right thing to do. In many cases, it’s the wrong way to go about it and there are better ways to make a system more efficient.
Instead of speeding things up, eliminate the places where work stops. Find the bottlenecks. Focus on reducing the time spent waiting for the next step. It turns out that speeding things up has less of an impact than removing stops. So don't worry too much about things that are working slowly and look for the waits. They cause all the pain.
This does not seem right at first glance. Even after thinking about it for a while, people refuse to believe it. How could not making things faster improve efficiency? It turns out that it is not a new idea. The entire Toyota Production System (TPS) is based on this idea.
Do you know what's worse than moving slowly? Standing still.
Think about the last time you were managing a project or an initiative. You make a phone call, but the person is not there. You leave a voice mail and wait. They call back a day later, and you schedule a meeting three days later. You wait again. At the meeting, you decide that you need to buy a certain tool to get the job done. You order it, and you wait some more. The tool arrives, but there is a long weekend coming up. You ask a technician to set the tool up, and when they do, they forget to tell you about it, and you end up waiting an extra two days, even to work is done.
The actual work takes up only a tiny portion of the total time. The rest of the time is spent waiting. If you add up the waits, they contribute significantly more to the total amount of time it takes to get something done. In many cases, the actual work takes up less than 10% of the time!
To finish the work, focus on shortening the waits. If something is important, push to get it done sooner. Answer now instead of tomorrow. Try to book a meeting later in the day rather than at the end of the week. Make agreements to have time for quick back-and-forth chats instead of scheduling a meeting.
Working faster would not improve the situation much if most of the time is spent waiting. Dialing the phone faster would not improve the total time to deliver value. Speaking faster at the meeting might shave off a few minutes, but if you are waiting 3 days for the next step, that's not much of a speedup.
The waits cause all the pain everywhere. It happens in people systems. It happens in computer systems. It happens in competitions, restaurants, and warehouses.
Projects slip because of people waiting for each other to get things done. Computer programs tend to be IO bound, waiting to read data from the disk or network, rather than limited by the speed of the processor. The story of Cliff Young, who won an ultramarathon in Australia by running for three days, slowly but without sleeping, and beating the more experienced competition by more than a day, illustrates this beautifully. He did not know he had to sleep to win, and beat everyone who slept. He ran slowly, in rubber boots, but he eliminated the waits. After that, everyone changed their strategy and also cut out the sleeping breaks.
There’s a book from the 1980's called “The Goal” that explain this really well. It’s about operational management. In particular, it focuses on physical manufacturing. The lesson applies much more broadly though, to project management and software optimization.
How do you this? Find the waits. Identify what is causing them. Make changes to the process, the program, or the system so that the waits are either shorter, or happen less often. Even relatively small improvements in reducing the wait times add up quickly.
Recently I used this mindset to optimize a legacy DB struggling under the weight of a hodgepodge of unmaintained code. Everyone was pointing fingers at slow queries and massive workloads. People were blaming each other for the slowdown. One solution was to upgrade the server. Instead of fixing the slowest queries, I focused on fixing the ones that block the most often. It worked wonderfully. The result was that the DB was able to handle the workload after all. The server stayed the same. The slow queries are still there, and people are abusing the database in various other ways. However, eliminating a small handful of things that were literally blocking everything else, the entire ERP system started working normally again.
Shifting focus from speeding things up to eliminating bottlenecks requires a change of thinking. It's anti-intuitive and people might protest. Give it a try though. You'll be pleasantly surprised by what will happen even if you reduce some of the pauses. Once you see how it works, you'll see waits and pauses everywhere. The best part is that in many cases, eliminating a wait does not require a lot of work. It's one way to proverbially 'work smarter not harder.'