TLDR: Perseverance.
I have read a number of articles, streamed hours of YouTube content and have been on the receiving end of “How to be a better software engineer” throughout my 3+ years of career in tech. But one thing that I, and many other software engineers learn the hard way — some through passion, some through grit and some through chasing deadlines is the importance of “perseverance”.
Continued effort to do or achieve something despite difficulties, failure, or opposition – Merriam Webster
When will I need this?
Consider a scenario where you are developing a feature and are using a third party library. This library is old and there is not much support for it at present. The library is the only way to develop that feature so you cannot look for an alternative. The good news is that this is a pretty famous library and its highly possible that the problem you’ll face or are facing was encountered before.
And one fine day, you get stuck on a issue. The documentation of the library is not much helpful, so you do the only thing you can: Google the shit out of it!
This is the place you’ll feel the need of perseverance.
What does it actually feel like while persevering through a problem?
It feels like a never-ending search. Its frustrating. One moment you think you found the solution, the next you are back to square one. There are little moments of self-challenge wherein you compel yourself to sit on the desk till you actually resolve it! But after 4 hours and multiple tries, you are back to square one.
It also feels good as you are not giving up on a problem — on purpose. With every search you feel you are one step closer to the answer. With every failed try, you know what won’t work. This again takes you one step closer in the process of exhausting all possible solutions out there.
You’ll go in self-motivating talks. You’ll getting irritated on the smallest of things. You’ll reach out to your managers/colleagues to discuss the problem at hand. You’ll scratch the current strategy and start working from a completely different perspective.
5 things to do while you are persevering through a problem
1. Stay hydrated
Software engineering is a knowledge-work and concentrating too much for way too long on a problem numbs the brain cells. This deteriorates your chances of solving the very problem at hand. Its imperative that you stay hydrated throughout this phase. It will keep you in-touch with the reality because when you are sitting on a problem for 4 hours at once, you loose the sense of it.
2. Start from the obvious
Look at the problem from the very basics. Build the strategy from ground up. Once you rule out the obvious things, only then start googling the shit out of the problem statement. Sometimes we are so caught with the deadlines and 100 other works, calls, discussions — we loose focus and are not able to see the answer which was there right in front of ours eyes all this while. Perseverance has to have purpose. Do not make your brain and body go through this process unnecessarily.
Elon Musk made the “theory of first principles” famous in one of his speeches. The author of the New York Times Best Selling book “Atomic Habits” have beautifully written about it in one of his blog posts:First Principles: Elon Musk on the Power of Thinking for Yourself
3. Take breaks every 1 hour
Once you are in the “flow”, it is hard to keep track of time when you are in that state of mind. Its the tunnel vision. Flow state is equivalent to going super saiyan (God Mode). You can read more about it on a blog post: What is a flow state and what are its benefits?
Its important that you move after prolong hours of sitting. It will make the blood flow to other parts of the body too, apart from your brain. Change of visuals, scenery will rejuvenate your consciousness and sub-consciousness.
It has happened to me multiple times that post a 10 min walk, I am able to see the problem from a completely different perspective and land on a solution, which was right there in front of me, all this time.
4. Sleep on it
If you were unable to resolve the issue and its night time, call it a day. Do not be adamant to solve the issue (even if there is a deadline). Do not massage your ego by taking on a useless challenge of “I’ll sleep only when I solve this”. Its useless. A quick search on human attention span lands you to this fact:
Selective sustained attention, also known as focused attention, is the level of attention that produces consistent results on a task over time. Common estimates of the attention span of healthy teenagers and adults range from 5 to 6 hours; Wikipedia on Attention Span
Sleeping on the problem helps you calm down. You won’t believe it but your subconsciousness mind is way more intelligent than you can think of. It actually keeps on working on the problem while you are asleep. I don’t think you need any more convincing on why sleeping is important.
5. Reach out for help
There is no shame in reaching out for help when you “think” you have reached a dead-end. It not only helps you to practice “rubber ducking” with an actual human (the human is capable of giving feedback) but also helps to provide you a different angle/perspective to the problem/problem solving approach. Reach out for help to a mentor, your buddy, colleague, manager, online community.
Understand this, the very aim of persevering through the problem is not to “practice perseverance” and give a pat-on-your-own-back i.e. ego massaging, the mission is to SOLVE THE PROBLEM. Perseverance is a tool to accomplish that. If reaching out for help accomplishes the same thing, do that.
In conclusion…
I learnt the whole idea of perseverance and the correct way to do that the hard way. Multiple break-downs, burning out the next day, declaring victory too soon, missing deadlines, approaching the problem in the wrong way — made me write this, partially for you, but majorly as a note-to-self. Every time I’ll come across a sticky problem, I’ll come back to this and let this be my pep-talk.
For other important skills, check out my detailed blog on: How to be better at your software development job — A Guide
If you have any questions or going through the same, please feel to reach out:
Email: tyagi.aditya844747@gmail.com
Phone: +91–8447478305
Twitter: @secondbestcoder
Note: If you didn’t catch, the answer to the “One must-have skill as a software engineer” is in the poster itself. The illustration is of NASA’s Mars Rover: Perseverance.
Originally published at adityatyagi.com