Advice to young engineers
Jan 9th, 2023
Throughout my career, I’ve mentored and coached dozens of software engineers. But one mistake I’ve seen repeatedly is the number one cause for career stagnation.
The recipe to get promoted is very simple: add more value. One way you can add more value is by working harder than everyone else, this only works in the short run and can have bad consequences like burn out, or physical and mental health issues. Another more sustainable way is to constantly become better at what you do.
Unfortunately, many make the mistake of relying solely on their current job responsibilities as a means of learning. While it’s true that when you start at a new company you can learn about a new domain, processes, and tools, with time you will get familiar with how the company does things and your learning rate will invariably drop.
Benjamin Franklin famously said, “An investment in knowledge always pays the best interest.”, and I agree 100%. Just as athletes train to consistently to improve their technique and skills, you should too. By the way, I’m not saying you should spend extra time outside work, no, you should be able to incorporate learning as part of your daily work routine. Both you and your employer will benefit from your growth and development.
However, just as with any investment, not all opportunities will have the same risk/reward profile. Personally, I classify each learning topic in three buckets sorted by importance:
-
Fundamentals: these are topics such as algorithms, operating systems, networking, memory management, concurrency/parallelism, and so on. These concepts are like the underlying physics of the software engineering “world” - they are relevant irrespective of the tools, programming language, libraries, and frameworks. Because these concepts evolve slowly, you can often find good books at your local library.
-
Broadening your horizons: you should actively seek topics of which you know very little about, or views that challenge yours. For instance, if you are a frontend developer learn about backend, or if you are familiar with object oriented programming learn functional programming. There is more to be gained by learning something completely new than something very similar to what you already know (e.g. if you know Python and decide to learn Ruby). You don’t need to go very deep on each concept, but get a good understanding and I guarantee you are going to start seeing old problems in new ways.
-
Buzzwords: such is the rate of change in technology that it is hard to keep up with. Most of it though, given enough time, is going to be considered a bad idea. I’m old enough I remember when cucumber came out and teams were excited because their product managers would be able to read and write tests, it never happened and what’s worse it added ton of friction to the ones that are actually reading and writing tests - the engineers. Because it is really hard to pick winners in this category, you should spend the least amount of time here and let natural selection play out.
In conclusion, be proactive and consistent about becoming a better engineer and you will have a successful career.