18th July will mark two years of my career as a software engineer in the tech industry. Even though I've been coding for a lot longer than that, the majority of lessons I've learnt have come from working as part of a team. In this post, I'll try to distill what I've learnt so far in my journey. As always, let's start with a disclaimer first: this is a recollection of my personal experiences and may or may not work for everyone.
If there's one thing I've learnt in my rather short career, it's that good tech leads/managers are invaluable. It's an incredibly hard skill set and there are far too many people who suck at it. If you're lucky enough to find good ones, stick with them for a while and if possible, move around with them because they're ridiculously hard to find. They make such a HUGE difference in how fast you progress and directly impact your life so much. Here's what to look for in good leader: kindness, empathy, emotional intelligence. They should be good listeners, be your advocate where possible, help you advocate for yourself and help you do what's best for your career even when it's uncomfortable.
This is controversial point and there are lots of factors at play. If you have the privilege of doing this, I'd strongly suggest not waiting it out at a toxic job working for terrible managers especially if you're early in your career. It actively stunts your growth and hampers your career. In the long run, it does more harm than good in the sense that the effects of a toxic job outlive the job itself. It takes a very long time to get over it and there's a high chance that you'll carry it with you. Bad leaders make you question your worth all the time and you end up feeling absolutely helpless and stuck — it's the classic recipe for burn out.
I realised this pretty quickly but it still bums me out how I had no idea till I started working. Most of the time, the hardest problem is figuring out what code to write and ensuring we're solving the correct problem rather than figuring out how to write it. The latter is much easier than figuring out the former. Estimation and prioritisation is also super hard. Being a software engineer isn't about sitting in a corner and writing code all day. It's an inherently collaborative process that needs a wide variety of skills, especially people skills. It naturally follows from here that being an excellent engineer isn't just about being very strong technically, even though it's definitely super important, that's just one part of the equation. Being an effective communicator, listener and team player are extremely important and valuable skills.
Don't be a dick and treat people badly. This is very simple and logical advice, I know, but I'm still amazed by how many people underestimate how far just being a decent human being will take them. If you do some shit, people will find out sooner or later. The tech industry is much smaller even though it can feel very big sometimes. Word travels faster than you can imagine. Don't underestimate the power of backchannels. If you or your companies treat folks from underrepresented groups like shit, we will find out about it one way or another. The secret underground women in tech cabal meets every couple of days to discuss the shit y'all do.
All of the good stuff happens when you push yourself to do things you're not very comfortable with or are scared of doing. For a long time, I kept waiting for the "right moment" in order to seize the opportunity and do the thing but it never came. It took me a while to realise that sometimes you've to step way out of your comfort zone even if you don't feel ready (in my case, I know I'll never feel ready) and do it anyway. Wanna start reviewing code? Jump in and review a PR even if you're not very familiar with the code being modified. Ask for help & read it until it makes sense. A little while ago, Sunil told me this and it has stuck with me ever since: write a shit ton of code, especially the bits you’re no good at, and sooner than later you’ll find yourself rubbing shoulders with experts as their peer. I like to compare it to learning to play the piano: if you keep practicing the bits you're already comfortable with, you'll never learn the ones you're not good at.
I can't stress on this enough, seriously. Nobody told me this and it sorta happened for me accidentally but it's probably the single most important thing I've done for the sake of my career. No matter what people tell you, networking does matter. Treat people with respect and kindness. So many amazing and wonderful opportunities have come my way owing just to the network I built.
As an aside for underrepresented folks: invest in surrounding yourselves with people who are your tireless cheerleaders and will believe in your and your talent even when everything is shit. This industry can be very isolating and lonely on some days and outright shit show on other and it makes ALL THE DIFFERENCE. The best thing I've done for myself in the last two years is surrounding myself with amazing, smart, ambitious and highly technical women I deeply respect, admire and aspire to be. On days the tech industry is a shit show (and it's not an uncommon occurrence at all), that's all that keeps me going. Back in college, all my role models were white dudes and I constantly wondered if someone who looked like me had done amazing things in tech. Now my role models look more like me and are constantly pushing boundaries and paving the way for the rest of us to follow through.