5 Things I wish I knew when I started as a software engineer

I have been a software engineer for close to 8 years and this feels like a good time to capture some of the things I have learnt along the way. I am framing this as advice to my younger self but it is highly likely that my younger self would have read this advice and ignored it anyway 🙂 In a few years time, it would be a fun exercise to revisit this list and see what things I’d want to keep in the list and what new things should be added.

Without further ado, here’s my top 5:

  1. Do something new every 6 months: Early in your career everything is new and there are learning opportunities left, right and center. All you have to do is show up every day to work 🙂 As time passes, you develop a certain level of mastery over the things that were initially new and scary. This is a good thing and an expected outcome. But over time, this mastery turns into a feeling of not being challenged and left unattended can lead to a disengaged mind. The solution that has worked really well is to change something up every 6 months — this could be team, technology, company, domain, role etc. But why 6 months? This can vary for others but usually takes me at least 3 months to learn something new and 3 months to apply what I have learnt. After that I get bored and I need to find something new and shiny 🙂
  2. Reflect regularly: My favorite meeting on a project is the project lookback. This is an opportunity for the team to sit together and use their collective brains to identify the things that went well, the things that could go better and the learnings that we should take forward. This is such a powerful exercise that forces you to think about your day-to-day actions and understand which of them were actually effective. Inspired by this, I do a personal reflection after any significant event (project, quarter, year) and this includes all parts of my life.
  3. Build soft skills intentionally: Building any skill requires deliberate practice. Intuitively, I knew this from all of my formal education which involved learning math, coding etc. But for some reason, I never thought there was much learning needed for skills like effective communication, working with people and motivating people on a team. These were skills that “senior” engineers were magically expected to have but no one ever tells you how to build them. I went years without learning this and in hindsight this limited my growth at my previous company. In my current company, by taking on new responsibilities like leading more cross-functional projects, I can see visible improvement in these “soft” skills even though there is a lot that I can still do better.
  4. Be curious: At any given point in time, there will be certain things which capture your imagination and excite you (could be a machine learning innovation, some frontend technology, a new coding language etc). But don’t let that hijack your brain and make you ignore everything else. (When I was in college, I decided I was going to be a networking engineer and I ignored everything else. Newsflash: I am not interested in that anymore) It is incredibly valuable to have a well-rounded perspective, not just as an engineer but as a human being. Some things that have worked for me — talking to someone who is working on something very different from what I am doing, going to conferences, watching talks online, reading books/articles on things I know nothing about / not immediately relevant to me. It is really interesting how the mind is able to draw connections between seemingly unrelated things when you expose it to different things. Some of the greatest innovations have come from being able to make such connections.
  5. Optimize for working with great people: My greatest periods of personal growth coincide with the times when I got to work with some really amazing people. There are a number of engineers, engineering managers, designers and product managers who have helped shape my career and these are people that I would work with again without thinking twice. (There are some for whom I’d happily switch jobs) For someone like me who cared more about technology than people when starting my career, this is a huge change in mindset and it has taken years of reinforcement about the value of people to get to this point.

There are so many other things I wish I could add to this list but prioritization is important 🙂 It maybe surprising to you that there is very little here about mastering new technologies, improving coding skills, building robust systems and all of the other good stuff that is necessary to be a good software engineer. Here’s my rationale for not including that: a lot of that is stuff that most engineers will develop along the way without needing to be very intentional about it since there are good feedback mechanisms to enforce those practices (intention does help you get better faster). So, what I have shared are more like principles that can be applied in different domains and hopefully provide some value. Good luck!

Leave a Reply