Analytical skills matter in coding !
This is not the maximum depth, keep going. Go deeper.
Analytical skills will put you above the rest in the team. To be honest, I have seen good coders but fixing existing bugs and being thorough in analysis is an art. I am not taking anything away from hard core coders. This is just something I wanted to write about and see if people feel the same! So let me know if you relate to the thoughts I have penned here.
Building analytical skills requires patience. Well what doesn’t ?
I recall a good memory from one of the production bugs .
We had 2 onsite leads. I was working on the bug as a developer and the leads where having a conversation on email with entire offshore team in the email chain.
I wrote an email after I was done with my analysis, that what one of the leads is saying in the email chain is not correct. I then went on to give practical examples with data, sql query and code flow to prove my point. (Always put forward multiple practical scenarios while writing such emails)
My lead from offshore directly called me up and told I should not have written that email without discussion with the team in offshore. But I was just so confident with my analysis that I didn’t think twice or the repercussions of my statement had I been wrong. I consider my analytical skill as an asset which keeps me confident and is going to help me in this field for many more years. Building this analytical skill has taken some real effort and long long years.
I remember there was a time where my role in the team was to just fix production bugs. We were working on microservices architecture and we had 4–6 repositories to be worked upon. These repositories where already 70–80% developed and live on production. So somebody had to do the dirty work of going through the repositories, creating documentation, and then giving KT to the other team members. The repositories were on AngularJS, Java, Clojure, Rust and Python. I consider my abilities in Java and JavaScript to be good enough, so I have never had challenges in working in different programming languages or framework.
Anyways, 2 days after I wrote that confident email to onsite, I got an appreciation email from the Product Head mentioning that ‘he wants everybody in the team to be this thorough with their work’. That was the email. My product head is not a man who says Good Job, or Well Done but this email from him was really satisfying for me! This confidence also helped me get a promotion that year. I am not sure if the email I wrote played a role!
How I built my analytical skills ?
- Once I sat and started going through the code, I didn’t take a break until I completely understood that functionality. Start small and then take strides once you start getting comfortable. Concentration matters.
- Technical understanding is important. I read technical articles like crazy. I think I read 50–60 random articles for 4–6months everyday online apart from my normal office hours.
- I believe documentation is the key to learning any language or framework. The reason I believe that has to do with the writing complexity of the documentation. If you read article/blogs around the same topic by developers like us, you would find it easier to understand because there’s less usage of buzz words, there’s multiple examples. Official docs has to be short, and crisp, so I always try to understand the official docs by taking help from online content.
- I gave repository walkthrough to other developers. There have been times when I have been puzzled and amazed by the questions asked during these walkthrough sessions. Reason? — Different thought patterns, different perspective!
- I make notes of important information on paper. Many a times I also create flowchart of the code flow. Helps understand the repositories better.
- Debugging the code like literally debugging it using editors like Intellij/Eclispe.
- Going beyond what is asked from you. Implementing features, solving bugs is one thing. But understanding the entire code flow around that business use case will actually help shape your analytical skills
- Use loggers. Use loggers for every if else, for every catch statements, and inside all method calls. Loggers help and play a key role while debugging.
- If a repository is new to me, I make sure to check all validations, and see the kind of data we have in DB. It helps me while debugging, and solving those edge cases efficiently.
- Talk to functional guys and product lead for every requirement. Make a list of requirements, the scope, and testing criteria for your ticket/story.
- Write unit test case for every corner case. While writing these test cases think twice about the values for the variables. Knowing all types and values for a variable makes this easy.
- Scan thorough random repositories online which have good ratings on GitHub.
- Do not always use your editor’s debugger .This takes away your thinking abilities and thought formation patterns. Use your head and think about all possible outcomes and build your logic and thoughts around it yourself.
One can never understand the complete system. Think about it. Do you completely understand your architecture/system? Do you know everything about the product ? If yes, can you without going through the code, answer all the queries ? I am a firm believer of the statement that ‘You never fully understand the system’.
A word of advice by John Mayer:
This is not the maximum depth, keep going. Go deeper.
Let me know your views around this on comments section.
Happy learning. Cheers :)