I just passed my two year mark as a full-time software engineer and haven’t yet taken the opportunity write about it. I mostly want to do this as an exercise to think deeply about what I’ve learned so far, but if anyone ends up reading this who is starting out as a software engineer, I also hope it can be a useful resource. However, I want to emphasize that, like I mentioned, I only have a couple years under my belt so I would take this with a grain of salt. The points I mention here have helped me so far, but I do hope that I look back on this as I become more experienced and smile at how naive I was!

make it yours

When I started at my current company, I was pretty surprised that they gave me basically full control over the infrastructure and code. I was given SSH access to the production servers and databases, (almost) full AWS access, as well as the ability to deploy code directly to production myself (after code review and testing, of course!). It was pretty awesome, especially after previously having an internship where I basically was told that I couldn’t point stories, review code, or even glance at the production servers. Having such access as an entry level developer gave me a sense of ownership over the project; almost like I was working on a personal project of my own. Eventually, I found myself opportunistically tidying up and refactoring the code when I found it needing some love. I also enjoyed squashing bugs, because I knew it would make the code healthier and the product more robust. With my newfound feeling of control, I actively looked for parts of the development workflow that were less than ideal and built tools to streamline them. This all made me ask: wait, why is work fun? I thought it was supposed to suck? Why are they paying me to do this? If you make the work your own, it leaves you with a sense of motivation and makes getting up in the morning for work much easier, knowing that you are going to do something you enjoy.

work on developer tools

Like I mentioned before, I like trying to figure out ways to improve our team’s day to day job functions. One of the great joys in life is to automate some manual task that has been giving everyone trouble. I began by looking for tasks that took a long time, were annoying or tedious, and that my coworkers often complained about. Once I started doing this, it became much easier to point them out because I developed an intuition for it. Then I started thinking of how I could build something that would fix the problem or make it more efficient. I usually write ideas down, and either work on it in my free time (at work) or as a hackathon project. If your company doesn’t do hackathons, you should totally suggest doing one!

read code

Be the first to put eyes on your team’s PRs. This isn’t just a selfless act, it will help you learn how to code well - different styles, best practices, what not to do, and so on. Reading code is the single most helpful tool in helping me level up. Leave lots of comments on PRs, even if they are just clarifying questions. This will help everyone learn and may even help in improving your code quality. Don’t just gloss over PRs and hit the green button. As tempting as that might be, it will only lead to bad things. Bugs will get merged that will either be uncaught or will need fixing later on before a release, nobody will learn anything, and also nobody will review your PRs if you don’t review theirs! Quick turnaround of PR reviews is also a sign of a healthy development team.

experience

If you are lucky, you will get the chance to work closely with folks that have 10+ years of experience in software development, with a wealth of knowledge to share. These will most likely be your Architects, Principal Engineers, and so forth. They have seen different phases of software over the years and as a result have a unique perspective of software engineering. For example, it was much more important to worry about resources when there weren’t these fancy software tools and frameworks to handle everything for us. As a result, the more experienced engineers understand how to use the tools most effectively, rather than just throwing it at a problem and calling it a day. They also will know what to look for when there is a critical issue, which is a very important skill to have. Something I still struggle with is knowing what to do and where to look when there is a critical issue, mostly due to limited experience. However, I recommend being there anyway, even if you don’t know what the hell is going on. Usually this is where the big guns are, so there can be a lot to learn from simply watching them diagnose an issue. If you have questions about a problem, don’t be afraid to reach out to these experienced developers. Usually, they will be happy to help you and will greatly improve your code and deepen your knowledge. Having said that, beware of individuals that have many years of experience but do not possess the skills that reflect their experience. In other words, don’t just follow everything someone does because they have a big title. Believe it or not, there are senior developers that are less effective than some junior developers, but are senior solely based on years of experience. Those years need to be years well spent in order for them to matter. I look at it like I do with surfing. I have technically surfed for ~5 years, but how many times a year do I get in the water? Maybe 6, if even that. I may have been doing it for a while, but I still suck at it. Conversely, don’t underestimate yourself or someone else for lacking experience. If those years are spent consistently learning and trying to get better, they might be on the same level as those more senior than them.

mentorship

Even if you have limited experience, you can still seek out mentorship opportunities. It could even be something as simple as having more familiarity with an area of the codebase that a colleague is working in and offering your assistance. If you have been working with a particular technology that others aren’t as familiar with, volunteer to give a talk on the subject or write up a document with your findings and share it with the team. Writing documentation is a great way to help yourself and others learn, with the added benefit that you can have an impact even after you have left the company.

burnout

I would describe burnout it as working yourself to the point where you lose interest in the work, which effectively kills your motivation. Avoiding burnout is important for both your career and your personal health. Some of the ways I try to keep from burning out: taking breaks when not focused in on a problem, going for a walk (big fan of lunch walks), talking to people (or simply “reacting to shit” on Slack), and most importantly taking time off from work. Some companies (including my own) offer “unlimited” PTO, which seems awesome, but it actually can be dangerous. Since there is no set amount of days that you need to take off before the end of the year, you might forget or even feel guilty to take vacations. Everyone takes time off, just do it! If you do feel burnt out, let your manager know. They should also be invested in preventing you from burning out and a good manager will offer ways to help. Another way to alleviate feelings of burnout might be to take on some work that excites you, which will help kickstart your motivation. Your manager might give you this work, or you can take initiative and seek it out yourself. An important thing to point out that confused me at first is that if you do get “burned out” it’s not permanent. I have totally been burned out before but I just started adopting better habits and felt better. In the end, just be mindful of how you are feeling and do what you can to work sustainably and you will remain happy and driven.

conclusion

If you are to get anything out of this I would want it to be this: always strive to improve and try your best to enjoy it. Whether that be building stuff you are interested in, broadening your technical skillset, or forming meaningful relationships with your peers, just do what you can to improve and have a good time doing it! If you don’t see any avenues to achieve this in your current job, it’s probably time to look for something new. I think this is the most important goal to have, because working towards will in turn help you achieve less important goals such as promotions and raises. Being happy at work is necessary, as you will be doing it most of your life, and if you aren’t progressing, then what is it all for?