I was reading Writing Solid Code by Steve Maguire, a definitive guide for writing robust C programs. Though the book primarily talks about C programming, the general advice is applicable to any programming.
My favorite chapter from the book is Chapter 8, “The rest is attitude”. In this chapter, he narrates this story, from the book, Awaken the giant within, by Anthony Robbins.
A fellow is standing on the banks of a river. Suddenly, he sees someone caught in the raging current, bounced about on the jagged rocks, and hears him calling for help. He leaps in, pulls the drowning man to safety, gives him mouth-to-mouth resuscitation, attends to the man’s wounds, and calls for medical help. As he’s still catching his breath, he hears two more screams emanating from the river. Again, he jumps in and makes another daring rescue, this time of two young women. Before he even has a chance to think, he hears four more people calling for help. Pretty soon the man is exhausted, having rescued victim after victim, and yet the screams continue. If only he had taken the time to travel a short distance upriver, he could have discovered who was throwing all those people in the water in the first place!
The poor fellow was working his heart out. Doing everything in his power to save the drowning people. But more and more people kept drowning. The problem continued. Doesn’t this sound very familiar? Don’t we solve the problems we face and then the same problems resurface again? Like the proverbial man, we may be just attacking the effects or symptoms, rather than attacking the root cause.
But how do we figure out whether we are treating a symptom or have reached the cause? As I was looking for the solution, I came across a method called 5 why method.
A problem is like an onion. The root cause is buried in layers of symptoms. We need a way to peel away the layers. The 5 why method provides a systematic way to peel the onion, without bringing tears.
The concept of 5-why is simple:
- Identify the problem.
- Ask yourself: why did this happen? Come up with all the causes you can think of.
- For each of the causes you just identified, ask “why did this happen?” again.
- Repeat until you’ve done steps 2 and 3 at least five times. You should have identified the root cause by this stage.
- Find solutions and countermeasures to fix the root cause.
I really like this idea. I plan to use it regularly.