My experience and learnings as a Software engineer so far
Tags: career, softwareengineering
Published: 2022-10-31 07:52:59

Okay, it is little more than two years of my career and would like to take a moment, pause and write down things I learnt and would love to share with you all. Hope these bits of information might help you if you are just beginning your career and looking for some guidance.

I started off my career after my graduation in the pandemic, mid of July, 2020 which was the period where whole world was in total chaos, so was I. Reason for it being - how can I start working online? It's something I never thought of, remote jobs was so unfamiliar. How can I get to know my teammates online and ask for help? And when I got to know I would be the second developer in Hyderabad working  with my lead to learn and build the team from there ahead, a hell lot of questions were running on the mind.

But so grateful that all the negatives I thought about while my career hit off turned out to be not so negative, instead they all were beautiful learnings. I had an awesome supportive mentors during the initial days which turned out to be a blessing in disguise. Why a blessing? It's because I was just not taught on what and how we should be working but also _why_ we are actually working on a particular project/task and at what scale/impact the changes would result in.

This played a subtle but huge difference in my thought process on the tasks I picked up, the way I looked at problems. Initially, I was girl who used to rush things to finish off the task quickly and panicked when things wouldn’t fall in place. But over these 2 years understood that Software Engineering is not sprint to be completed quickly but a marathon to be ran carefully.


Things I picked up on my first job apart from the tech stack:

## Planning
Planning things properly played a crucial role. Writing down a list of things I would like to finish off for the day in the morning and keeping enough pace to at least complete 80% of it. Not always I could finish off goals I set for the day. Sometimes, a part of your day might be involved in helping your teammates or you might be in a very bad mood, end up unable to concentrate or get stuck somewhere. Having said all the above, having a list is still important. Always track things down and carry forward the leftovers.

## Communication is key
When things go south, never hesitate to ask for help. Don't get stuck with a problem for too long, you can always google and try to fix things but if even that doesn't help, reach out your teammates. They have a fountain of knowledge that they would definitely love to share. Ask in the channels so that someone on your team would jump in to help you. Having a good bond with all of your teammates is a great thing you can do for yourself. We aren't machines who can keep on work, pause for a while, talk to people maybe new people as well sometimes. There would be so many ideas triggering out of your mind.
And also always share your knowledge with them.

## Writing clean code
Also, I had a misconception that being a software engineer, my love for problem solving would be the driving factor but it is more that just solving problems like in CP. We need to identify and articulate problems, architect/design possible solutions for it and then comes to implementation. Hold on, it is not the end. I spent days addressing reviewing comments for the my PR’s initially and most of them include writing clean code apart from the functionality review.

## Debugging
Learning how to appropriately use debugging tools has had huge impact. During the first few days, I had no clue of google dev tools when working on web or placing debugger on VS code for server side code. I just used logging statements throughout the codebase and hoping that I could find clues as to the location of the problem. But once when I was told to learn more about the debugging tools, I fell in loving with solving bugs. These tools helped me interpret code a lot better as we could see the data thats flowing through.

## Summary
Therefore, planning, communication, problem solving (debugging) and writing clean code are few key attributes I think a software engineer should possess. 
Let me know the ones that I might have missed and you think are definitely required on this list or anything amiss.
Happy to discuss.