Managers ask me to level up engineers (and teams), and occasionally engineers ask me directly how to level up. I presume the reason is my record of output: they (manager or engineers) want to level up their career by doing the same.
The natural first question is how? How do you accomplish that much output? But how is not the right question because the answer is the same for all professions: do it really well and better than most. The right question is what?
The best people in every profession do more. The best teachers spend extra time planning lessons and helping students. The best athletes train more and study their failures. The best doctors keep learning even after all those years in med school and residency. And the best software engineers do the majority of the work listed below.
Not everyone will agree, and not everything is required. And there are always outliers: high-level, highly paid engineers who didn’t—and still don’t—do any of the following. But all the best software engineers I know and have learned about do most of the following in addition to being amazing programmers.
Write and publish
Write and publish something—anything. For most, it’s a personal blog because anyone can blog. For a few, it’s a professionally published book. Other options are popular online web sites, academic papers and journals, and self publishing.
Contribute to open source
Contribute regularly to a major open source project. Even better: create an open source project that becomes widely used for many years. Either way, you also need to contribute to other smaller open source projects, too.
Present at conferences
Present at a major conference at least once every few years. By “major” I don’t mean AWS re:Invent (although that would be great), I mean something like Percona Live in the MySQL industry. Many (if not most) people have some fear or anxiety about public speaking, so don’t let that stop you.
Become a subject matter expert
You must become a subject matter expert (SME) in at least one technology and one programming language. For me, for example, that’s obviously MySQL and Go. Being an SME is often required for having talks accepted at conferences, and it will be required if you want to professionally publish a book.
Have broad technical knowledge
In addition to being an SME, you need to have broad technical knowledge of almost everything underlying computers and the internet. Here’s a random, incomplete list:
- Computer hardware and how it works: BIOS, buses, RAM, storage, NICs, and more
- Networking and how it works: routers, switches, OSI layers, and more
- Internet protocols: IP, TCP, UDP, ICMP, SMTP, DNS, TLS, and more
- Programming concepts: data structures, algorithms, heaps and stacks, and more
- Database concepts: relational theory, SQL, B-tree, LSM, data models, and more
- Common technologies: Linux, Docker, Terraform, cloud, blockchain, and more
Yes it’s a lot, but many professions require broad domain knowledge in order to level up and be successful. Tech is the weird outlier wherein engineers can have high-paying careers with very limited domain knowledge. Or, software engineers can graduate with a bachelor’s in computer science without knowing how TCP/IP works.
Read widely and constantly
For most, the previous two (becoming an SME and having broach technical knowledge) requires ongoing reading of many subjects. There’s no way around it: there’s a lot to learn, and YouTube hasn’t eclipsed literature yet in terms of learning.
Strive for excellence in everything
Software engineering is the only profession where a pile of garbage—terrible code—can compile, run, and make the business money. Add to that that many engineers are paid quite well for such garbage, and it raises the question: why strive for excellence when “good enough” gets the job done and pays really well?
But if you’re reading this, I presume you set a much higher standard for yourself. So here’s the secret: every detail matters. Therefore, strive for excellence in everything: your code, your writing, your presentations (at work and conferences), helping others, helping your company—everything.
Note the verb “strive”: excellence is difficult to achieve, but the best always strive for it.
Complete a bachelor’s degree
Go to an accredited four-year university and get any bachelor’s degree. In the last few years, not requiring a college degree has become the norm in tech, but to surpass the norm you must ignore it. If you really want to level up, get a master’s degree, too. In case no one ever told you: undergraduate studies and graduate studies are different. Graduate studies are much more difficult, but here’s another secret: everyone I know with a graduate degree enjoyed their graduate studies more than their undergraduate studies.
Work harder and smarter
To level up, you must be ambitious. That means working harder and smarter than everyone else. (As noted at the top of this page, there are outliers, but ignore them.) It’s like a video game: you only level up when you put in the work to solve the level or beat the boss-monster. Also like a video game: the levels become more difficult.
Focus on adding value
Last but not least—in fact, it’s the most important: focus on adding value to other people and your company. It might seem like leveling up is a personal matter: how do I level up my career? But here’s the third and final secret: success follows value.
The world is imperfect and there are annoying exceptions (teachers are paid pittance compared to the tremendous value they add), but if you examine successful people, you’ll find that they add value to others.
The difference between being great and being successful is the difference between a bright light and a laser. To level up and be increasingly successful, you must focus your greatness into work that adds value to others.