Critical thinking in software development

Critical thinking is a key skill when it comes to software development. Being able to diagnose a problem and find common causality can save hours of effort and frustration. However it seems to be a skill that is often overlooked and undervalued.

Sometimes you hear the phrase “10x” developer thrown around. This is a developer that can do ten times the amount of work in a given time than an average developer. Whether or not this is true is another argument altogether, however I would suggest that critical thinking skills and not development skills would account for much in this perceived productivity gap.

Many people will start from the top, and work there way down through a problem every time. I am not saying this is a bad approach, however is is a long winded one. Lets take a look at an example.

This is solution X and consists of three components, A B and C, which themselves consist of three components that can be made up of any arrangement of I, II and III.

Component A is having a problem, and is not behaving quite right. I have seen people work from the top down. They have looked for problems in X, then methodically worked down the tree checking everything. While this approach will find you the problem, it has a time complexity of O(n) assuming sods law and the fact you will find the bit that is broken last. In a large and complex solution, this could take days!

If you apply some critical thinking, you can look for patterns. We know that B and C are working correctly. We also know that B and C only contain I and III. The problem component A contains a different component II. This then, is probably the most likely culprit and a good place to start.

This might seem obvious in such a simple example, but given a real life working context, many people seem to go into a safe routine. “I know that if I do this top down approach, I will find the answer eventually”. It is the nature of humans to try and apply rules and process to a problem to make there lives easier. However in software development every problem is different. Trying to apply the same process to every problem is ironic, as this safety net that you believe to be making your life easier is actually making it many times harder.

Square peg in a round hole.

Leave a comment

Your email address will not be published.