Master The Five Whys Method for Problem-Solving as a Developer 
Tags: product, career, debugging
Published: 2019-11-04 11:08:30

Programming is essentially problem-solving both on a small and a large scale. And the best way to resolve an issue is to identify the core reason for it. Considering how big a part of the work process debugging is, you need to use methods that are adequate and reliable as far as analysis goes.

What I learned, working in a [java development company] (https://dreamix.eu/technologies/partner-with-java-ee-development-company) is that the approach towards solution-building makes a great difference. The results are clearly measurable both in term of time efficiency and the quality of the end product. 

That being said, *the five whys method* is one of the most useful tools for in-depth Root Cause Analysis (RCA).

#Method Origin and Purpose
The origin of the method lays with the basis of Toyota’s scientific approach. More specifically, aiming to isolate the cause of the issue and target it precisely. By repeating the question why five times, both the nature of the problem, as well as the solution, become clear.

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/4a0suxal1rv212oq5pqa.gif)

Each next “why” [refers to the answer provided to the previous one] (https://link.springer.com/chapter/10.1007/978-981-10-0983-9_32). Seeing is believing, so here, let me show you a practical example:

##Start with Context and Problem Definition
You can apply the method to analyse any issue you encounter. You need to have the situation’s context to make the most of using the Five Whys method. In your work as the developer, or QA using the available documentation, you would have all the information you need to start asking your **whys**.

**Let me set the scene:**
I am in Paris for the first time. I have never used an electric scooter before so I rent one - a Lime. I get used to the motion for 5 to 10 minutes and go on to ride it on the bike and bus alley as I intend to use it as transportation to the hotel. I hold my phone in my left hand while riding, for the purpose of using Google Maps to avoid getting lost. 

I am at a stoplight, currently red. The light turns green and...
###Issue definition: 

_I dropped the phone on the lane on my left. It got ran over by a car. Twice. Now it is unusable._

The phone has a silicone back cover but no screen protector. The tire ran right over it and the glass shattered to tiny pieces. To determine the root cause of the problem - dropping my phone - I applied the Five Whys Method:

**Why did I drop my phone?**
>Because I pumped the brake too suddenly after the light turned green. To hold onto the handlebar, for better control, I had to drop my phone and it fell on the middle lane.

**Why did I pump the break too suddenly?**
>Because I sped up too quickly when the light turned green and had the potential to lose control of the Lime and hurt myself.

**Why did I speed up too quickly?**
>Because I pushed the starter to the end at once, instead of gradually accelerating. 

**Why did I push the starter too hard?**
>Because I was not fully familiar with the mechanism of electric scooters. I had never used one on full speed before. I was not aware that pressing the switch all the way down at once, gets the vehicle to the maximum speed immediately, rather than slowly accelerating.

**Why was I not fully familiar with the mechanism of electric scooters?** 
>Because I did not take the time to test it out with all its functionality before introducing my phone as a GPS to the equation.

##Root Cause - The Takeaway From the Five Whys Method
_I was too impatient. I did not take the time to get fully accustomed to the Lime before introducing a distraction. By adding too many new elements at once I ended up sacrificing my phone for the sake of safety._

**Alternative conclusion:**
_As Limes are targeted to be used in a combination with a mobile device and GPS, they should be equipped with phone holders to accommodate the target user's need to place their phone safely, where they can see it and use navigation._

**However, as a believer in [Extreme Ownership] (https://dev.to/danilapetrova/why-having-extreme-ownership-mindset-is-the-best-skill-for-your-it-leadership-career-4l8e), I choose to use this experience to learn.**

As a result of my analysis I have discovered a few potential upgrades to my Lime-riding mindset:
* Do not speed up too quickly on a Lime
* When trying new transportation - get used to controlling it well before adding distractions and additional challenges
* My phone goes either in my pocket or attached to my wrist in an appropriate holder so my hands remain free 

## Technical Example by Toyota
If you want to know more on this example click [here] (https://open.buffer.com/5-whys-process/):

**“Why did the robot stop?”**
>The circuit has overloaded, causing a fuse to blow

**“Why is the circuit overloaded?”**
>There was insufficient lubrication on the bearings, so they locked up.

**“Why was there insufficient lubrication on the bearings?”**
>The oil pump on the robot is not circulating sufficient oil.

**Why is the pump not circulating sufficient oil?**
>The pump intake is clogged by metal shavings.

**Why is the intake clogged with metal shavings?**
>Because there is no filter on the pump.

#Try it Out!
As you see, you can apply this method to any situation, from a travel anecdote to technical setbacks. Try it out for yourself. Remember to be specific with your answers, and keep asking **why**. Make sure to direct the question to the response on the previous one - actively zeroing-in on the true cause.

And if you want to check out more examples there are plenty out there! For the League of Legends gamers, here is a [game-specific] (https://www.reddit.com/r/summonerschool/comments/3efbzh/the_5_whys_of_problem_solving/) one. And if you want even more click [here] (https://www.reddit.com/r/summonerschool/comments/3efbzh/the_5_whys_of_problem_solving/). 

Make sure to add to the discussion by telling us what problem you applied this method for? Did you find it helpful and easy to use?