Monday, 10 March 2014

Of approach to problems

Swami Gulagulaananda said:
"Think like a child"

The problem with most techies is that we tend to seek out tech solutions for all problems. I don't blame technologists for this - I think this is a general problem. Just to explain in a clearer fashion, here is an old story I had read a long time back.

There was a soap factory that had large machines that would do everything end to end - from manufacturing soaps, to making bars of them and putting them in boxes. They would run over conveyor belts. Now it so happened that occasionally there would be one empty box that would slip into the lot and that would create problems - You can't sell an empty box. Now where was this error? And how would you exactly debug and fix this? I actually asked this question to a bunch of people and typically you would approach this like a tech issue - Probably some counter was wrong, or try to figure out and see if there is a pattern in the empty boxes - that would give you a clue. How did the company resolve this? They kept a table fan close to the conveyor belt - All the empty boxes would get blown away by the wind and the boxes with soap were too heavy to get blown away...

I am sure you would appreciate the simplicity of the solution. Surely some of you might scoff at it saying that it is not really resolving the "main issue" - But I would like to ask you - is solving the original bug really the main issue? Of course, this solution looks like a hack - But it is effectively solving the problem and at the end of the day, that's what we want. The empty soap boxes are not really a waste. It's cheaper and faster. I think that's what we should try to aim at rather than being purists of sorts.

I was thinking of this lately because of what happened at work recently. We have a bunch of barcode readers which are attached to tablets. It so happens that tablets work with one input device at a time. That means, if you have a barcode reader attached, your native keyboard gets disabled. Which is fine, you might think - the problem is, at times, some barcodes don't get scanned. So if that happens, you have to type it manually. But there's no keyboard remember? So what do you do? You detach the scanner, type in manually and reattach the scanner. But when this happens once in every few minutes, the performance drops greatly. Plus, you risk ruining your USB to micro USB adapter.

What's the solution to this problem? My approach to this problem was to create our own keyboard as a replacement. Next to the textbox, a small keyboard icon is placed. You scan normally - and in the event your barcode doesn't get read, you tap on the icon and our own keyboard appears instead of the custom keyboard. You type in and voila! You are done!

As part of this idea, I wrote a small piece of code called ngKeyboard that you can check out here.

When I told this to my boss, he said that the problem could have been resolved by making barcodes bigger. Now this is where the difference in thought comes - You see, in my approach, the problem statement of the barcode being of a particular size was frozen and I was trying to bring about a solution to fix  the issue. The barcode size could have been altered as well - but I didn't think in that direction. This is what happens to most of us. We assume many things.

In fact, my friend was trying to automate a printer setting to make something appear a certain size. He was trying to figure out how to get around browser settings. The solution finally was to adjust our own data instead. We forget the simplest solutions because we tend to apply tech all the time.

And this happens all the time - In fact, my car keeps losing air in the two tyres on the left. The right ones are about 30 (max being 32) but the left ones reach 17-18 all the time. I wondered why that happens. I thought, do I try to avoid potholes and don't let my end go over them while not caring much about the other side because it doesn't affect anyone that much? I was talking about this to my colleague and he asked me - What if someone is releasing air from the tyres? It so happens that there are some miscreants who are letting air out of tyres near my office. Data insufficiency?

The more we learn, the more we try to fit something that we see around around things that we already know. If I ask you why something happened, you will try to explain it with things that you already know. It's great that way - If you don't know something for a fact, you will still try to explain it by extrapolating, maybe... But, in a way, that limits our abilities to think in a radically different way. The other day, I was talking to my friend about how creative children are, because  they don't care about feasibility. How do you fix parking problems? Tie them to floating balloons and they will float in the air - This way of thinking will be completely disregarded by adults. Not feasible, you would say. Too expensive, you would say or anything else. The more you learn, the more experience you gain, the less willing you will be to venture out into the unknown. Our approaches begin to show heavy bias - Like tech people tend to think everything in terms of tech. I am reminded of Bohr's barometer story in this regard.

To summarise, before solving a problem, make sure you think more widely than the problem statement itself - because very often, a solution can be much simpler if you look at it from a little further behind. And don't get biased by technology or any other field - That will help you think in a much clearer way. Lastly, think like a child - You will see that your imagination will let you come up with more awesome things than you think you are capable of.


KARTHIK said...

Agreed with you. Need to rethink the approach of what we think :)

Peter Hozák said...

Is there a way to assess the "wideness" of your own thinking? I think a better lesson from all these examples would be to always ask for 2nd opinions if stakes are high enough.

Nikhil Baliga said...

I agree. Second opinions help a lot because you'll get a completely new perspective