How inverting problems can help you become a better software engineer

“It is remarkable how much long-term advantage people like us have gotten by trying to be consistently not stupid, instead of trying to be very intelligent.” Charlie Munger
Not being an idiot is more effective than being a genius in most situations #HoskWisdom

The default approach is to find solutions to problems but instead of solutions to problems, invert the problem and stop doing things which make it worse.

Sometimes the best way to solve a problem is to avoid it and don’t waste time and effort on working on the wrong thing or heading in the wrong direction.

Developers

When software engineers start their career they suck, they have little knowledge, few skills, zero experience but lots of enthusiasm. Every task is hard because they don’t know how to do it, they don’t have the skills or experience.  Junior developers make mistakes and need help from their senior colleges.

Goal

Improve skills, knowledge and experience

Inverted Goal

Stop making mistakes (and slowing improvement)

The goal of a software engineer is to get better, by doing

  • Learn new skills
  • Gain knowledge
  • Write code
  • Make mistakes and learn
  • Watch videos

What if we invert the goal, instead of focusing on being good, the junior developer focuses on avoiding mistakes and getting worse.

  • Code analyser to catch bad code
  • Learn from mistakes and make sure you don’t repeat them
  • Get code reviews to catch badly written code

Avoiding mistakes allows new software engineer to pick up momentum and replace bad behaviors with good behaviours.  Doing stupid things slows your momentum because you need to undo the wrong action before you can move on to doing the right thing (warning, you don’t always know what the right thing is).

Avoid being stupid and doing stupid things instead of focusing on doing clever things.  Experience developers make fewer mistakes because they have learnt to avoid them, this results in steady progress which scrum masters and project managers love.

Improve by not making mistakes

Don’t  limit you stuff to just improving but focus on avoiding mistakes #HoskWisdom

The British cycling team lead by Dave Brailsford use this method to improve with marginal gains by looking for lots of small improvements.

How 1% Performance Improvements Led to Olympic Gold

Goal

Help the riders recuperate and get a good nights sleep

Inverted Goal

Stop the riders from having poor nights sleep

They wanted to improve the sleep of the riders when they sleep in hotels in unfamiliar surroundings and different beds.  To improve the sleep of the riders they inverted the problem by looking at what was making the sleep of the riders worse.  To improve the sleep the Sky team brought the riders own pillows to each hotel.  This improved the sleep by not making it worse.

Code

Inversion is used in code analyzers to improve the quality of code and teach developers to write better code.

Goal

The goal of code analyzers is to help developers create quality code

Inverted Goal

Stop developers from writing poor quality code

Code analyzer has rules, containing examples of bad code.  Developer runs the code analyzer it finds examples of bad code and raises a warning.  The developer fixes the problem, swapping poor quality code for better code.

Writing good code is avoiding writing bad code, swap bad habits for good habits and beat the suck.

We can use the approach to projects and the method to speeding up the project is avoiding slowing it down and targeting the bottle necks and processes which take a long time.

Making a project faster is avoiding slowing it down #HoskCodeWisdom

Bug fixing

We use inverted thinking many times as a developer and bug fixing is a good example.

Goal

The goal bug fixing is to find the problem and fix it

Inverted Goal

Confirm what works and narrow the causes of the bug

When bug fixing, forget what you think is causing the bug and prove what works to narrow the search for the problem.  Inverting the problem helps you rule out the working functionality.

Football

The goal of football is to win matches but for the teams in the lower half of the premier league they should invert this and make the goal to not lose matches.

Scoring goals is difficult and goal scorers, creative players cost more money and the lower teams cannot afford top strikers on their budgets.  If they focused their recruitment and training in not conceding goals, not making mistakes and trying to convert set pieces they have a higher chance of success.

Experienced managers such as Sam Allardyce, Tony Pulis successfully use this tactic by focusing on not losing.  Don’t lose the match and hope to win.  The opposition will make a mistake, your player will score an amazing goal or you convert a set piece.

If you don’t let a goal in, you can’t lose the match.

This article highlights the  difference between professional tennis players

Professionals win points where as amateurs lose them

Summary

Inverting problems helps you view a problems from different perspectives so you create incremental improvements.  Inverting the problem is a thinking tool to create innovative solutions and different solutions.Time spent thinking about a problem is time well spent.

Analyse the problem, invert the problem, come up with lots of solutions before picking the best one.  Make your plan and focus on execution. You can save time but avoiding mistakes or executing the wrong plan.

Following the wrong plan is heading off in the wrong direction to your destination.

I will end with this quote from Charlie Munger

 

Invert, always invert: Turn a situation or problem upside down. Look at it backward. What happens if all our plans go wrong? Where don’t we want to go, and how do you get there? Instead of looking for success, make a list of how to fail instead – through sloth, envy, resentment, self-pity, entitlement, all the mental habits of self-defeat. Avoid these qualities and you will succeed. Tell me where I’m going to die, that is, so I don’t go there. – Charlie Munger

Further reading

Advertisements

One thought on “How inverting problems can help you become a better software engineer

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.