During my last 4 years, I have solved a lot of hard difficult technical problems.
These problems have existed in myraid layers of the system and spanned from UI, Performance, DB to Network apart from Configurational and Environmental problems.
The challenge has been to find out where the problem is and then how to solve it in the most elegant and efficient way.
While solving these hard problem it has been a learning and growing process for me.
Here are some thoughts on how I do it, I am trying to document how I approach problems which may be of help to you.
Here are some comments – I get as a compliment from my peers and management when I solve these problems.
“Sumit is go-to guy for hard technical problems”
“There is not too big of a challenge for Sumit. Over a year passed working on the same product, and whenever development was faced by hard situations, I have witnessed Sumit take the initiative over and over to resolve the issues with clever and simple solutions in a timely manner”
Apart from Passion, Motivation and Perseverance I think there are other factors that have helped me
Sometimes a lot of these problems have kept me thinking more than days / weeks.
1. Keeping a clear mind, believe in yourself – remember the quote
“No problem can stand the assault of sustained thinking.” – Voltaire
2. Talk about the problem – to your mother, wife, and of course peers. The more you talk the more it reveals how much you know of the problem. Like it is said – that you learn best when you teach – it is the same concept. When we talk and explain the problem to others you end up provoking some state of your brain that triggers other questions and helps you to get closer to the answers.
3. Ask more and more questions to the problem poser – “A wise man’s question contains half the answer.” – Solomon Ibn Gabirol
The more questions you ask – the better picture you get about the problem. The more you know about the problem – the better conceptual clarity you get and helps you in figuring out the solution space and solution path.
4. Find out where the problem could be. All of us work with complex systems and the problem could be hiding in any layer of the system. Theorize multiple places where the problem could be. List them out – try to see how exhaustive list you can make.
5. Investigate each points as outlined in the list of possible places – carefully and eliminate options one by one. This reduces the solution space and helps you slowly to converge to the solution.
Never eliminate a solution just by guessing – have hard facts and experiments to prove – why you eliminated it. If you eliminated it very easily may be then you had not chosen the option correctly in the previous step.
6. Listen to what others say about the problem. Listening always helps – you never know when someone’s words / phrases help trigger something in your brain that can push you towards the solution.
7. Keep away from the computers – do not stare at the computer always – I have noticed – when I am in the middle of solving these difficult problems – I am most at ease and calm and poised.
This helps to trigger thoughts in the brain which probably will not – if you are stressed, too fast or are nervous. Look out of the window – look into open spaces, look into greenery. I was offered an Office when I was promoted to an Architect role – but I declined. I have seen my thinking gets messed up when I am in closed spaces. In my cube – I have a lot further to look out and also conversations from other developers helps me learn tits bit of information.
I would rather say – if the weather is good – best to take a walk now and then and think about the problem in a different posture / different environment / surroundings.
8. Take shower – I shower once or twice a day, but when I am confronted with these hard problems I shower more than 2 times a day. When I am in a shower, I have noticed I get more ideas, thoughts and I am away from other noise and distractions and can concentrate on the problem.
9. Use the right tools to monitor data and gather and organize the data carefully so that it is handy
10. When you need help – always ask for people to chip in. Like for Networking related issues – I am not an expert – and whenever I needed – I called IT department’s help to unblock me / educate me
11. Dream about the problem – try to think about the problem at the end of the day – lying on the bed staring at the night sky. This helps the brain to clear all cobwebs and think in a focussed way on the problem
12. If you think that you have zerod in on the solution space OR know where the problem could be – Write small prototype and confirm your thoughts.
Above all – keep yourself sharp, keep yourself updated – if possible try to read as much as you can.
To keep myself sharp I do couple of things almost everyday – solve 1 puzzle every 1-2 days.
I never use GPS – when I need to go to a new place – I look up Google maps and clearly picture the path in my mind and go.
Yoga and exercise are part of my weekly routine. I do different exercises on the weekends to keep the variety.
I Play Badminton / Swim a mile at least once a week.
I have not watched TV for the last 4-5 years, if I have to watch news I go to the internet and watch it.
If I have to watch a movie I go to netflix and get it.
As an added relaxation – I recently bought an astronomical binocular and on good nights – I watch stars and nebulaes and get lost in space.
I am a gadget less person – I feel the more I rely on gadgets – the more my mind becomes useless.
What I am essentially saying is – learn to relax well – if possible all the time after a hard day of work but more so when you are in the middle of solving complicated hard problems.
I am not saying not to have gadgets – but – just saying do not become a savant of gadgets – it ruins your thinking clarity.
There was a time when I could remember Car Plate Numbers and associate them with my friends Phone numbers and their name all in my head. Now I am getting old may be that is fading slowly but I still keep trying.
For example – I work as a part time BI developer at Jaspersoft ( remotely located for me ). Some customer of them had a bug on a Data issue and how an MDX Query was not using an Aggregate ( summarized ) table to get better performance for the query. JAspersoft put me on this problem to figure out the root cause.
Initially I had a slow run with the bug – I got used to their data and schema and also the MDX Query. I ran a lot of SQL Queries bny hand to understand the nature of their data and of the original MDX Query. Over 2 days I thought and thought and played around a bit from time to time with their data to get my head wrapped around the issue but a clear logical answer evaded me – as to why the OLAP Engine was not using an Aggregate table.
Then after 2 days of thinking – next day – I decided to get up late from bed ( unlike other days when I am out of the bed by 4.30 am ).
That day (10th Oct, 2010) – which is Fall / Autumn time in Boston, New England – I went out with my family to Old Sturbridge Village
osv.org – and spent the whole day there out in the sun, in nature with my family and enjoying the place – but at the back of my mind – always thinking of the problem and what the next steps would be.
I came back from there in the evening – sat down with my laptop after a shower – wrote some more queries and the answer came to my mind immediately – I got excited and knew why the OLAP Engine was not using the Aggregated table and it was doing it correctly.
I was really happy after that.
The best part after solving the problem is – it gives you so much exhilaration and jubilation that everything you had done to solve the problem become all the more important.
Hope you find this useful.