5 Lessons from 5 years of Software Development
3 min read
The 5-year mark feels like a milestone when we think about a Software Developer’s career. 5+ years of experience is a common requirement to see on a job posting.
While five years is commonly seen as the point when an engineer evolves into a senior engineer, I certainly don’t feel that way. Sure, I know more than when I started out, but I also know now just how much I don’t know.
But the last five years have taught me a lot. I decided to reflect, and do a quick retrospective of the first five years of my career. Here are my takeaways.
1. Prioritize learning
I think breadth is more important than depth early in one’s career. I made an active effort to prioritize learning new things and to be the dumbest person in the room. This has paid dividends in making me a well-rounded developer.
Similarly, a focus on being a generalist paid dividends over my career. I didn’t specialize in a single language or framework or part of the stack. I wanted to learn everything, even if it meant I had to sacrifice deeply understanding some topics. This kept me flexible over the first few years in the field and drove me to seek opportunities that allowed me to touch a little bit of everything whenever possible.
Databases, servers, frontend, ops and infra. Knowing a little bit about all of these areas will get you far early on. As I’ve gotten deeper into my career, becoming more T-shaped is the expectation. I recently read https://nested.substack.com/p/short-fat-engineers-are-undervalued, and as a short fat developer, it resonated with me.
My advice to budding developers is to take on projects that look difficult. Know that breaking things is inevitable; what matters is that you learn from them. Find positions where the learning rate is high, and make the switch when your learning flattens out.
This approach has also helped me learn new things faster. When you’ve dipped your feet in various areas, it strengthens your ability to continue picking up new things more efficiently.
2. Importance of the non-technical
Technical skills will only get you far as a Software Developer. “Soft” skills are just as important.
We learn a lot of how to balance trees, and write recursive algorithms in school, we aren’t taught much about working in a team, or writing a technical document or keeping customers’ needs in mind when building products.
While being a strong technical contributor is important, it’s just as critical to know how to work effectively in a team. To do that, you need to excel in a few non-technical areas.
Communication, prioritization, teamwork, and writing are key areas that don’t involve any coding but are all critical in succeeding as a developer.
3. The best way to get better at interviews
I was deathly afraid of interviews in university. My friends were doing leetcode hard questions in their spare time, and I couldn’t even recite DFS from memory. My most popular articles have been on the art of interviewing and how it’s not just about grinding algorithm questions.
The number one thing that helped me in interviews was becoming an interviewer and getting involved in the hiring process at the companies I worked at.
Sitting on the other side of the table gave me the insight I never had as a candidate looking for jobs. I saw what separated the great candidates from the okay ones. I also spotted common mistakes that candidates make.
This knowledge made me a much better interviewee when I started my job search. I knew the common mistakes, so I could avoid them, and I knew which points to hit to make for an impressive interview, so I imitated them.
4. Challenge the status quo
I’ve made it a point at every job to find anything that could be improved and try to improve it. This can range from optimizing your terminal to improving team processes that are inefficient. It can also take the form of improving the developer experience.
There are tons of areas at work that can be improved. It’s not always obvious, and we often notice them early on in our jobs. Over time we tend to get complacent and get used to inefficiencies. It’s important to constantly reflect, and ask ourselves if how we’re doing things now is the best way it can be done.
Sometimes it’s clear that a process isn’t working, but it’s not clear what the solution is. In these situations, it’s key to experiment and learn. It’s better to try something, fail and learn rather than leaving it as is.
5. People first
The best moments of my career have not been huge launches, or bug fixes or feature releases. It’s been celebrating all those with amazing people around me. If I enjoy and love the people around me, I will enjoy and love the work that I’m doing.
These days, when I’m looking at new projects or new job opportunities, the first thing I look for is making sure that the people are a good match for me, and that I can see myself working well into the future with them.