This March, I got promoted to a senior machine learning engineer. Stepping into this new role, I thought I was more than prepared. After all, people only get promoted to the next level after they already function like the next level. Now, I have worked as a senior engineer for half a year, and I gradually realize that while the daily technical work may appear similar for a senior engineer, being a senior engineer opens many doors and prompts me to think what I truly want for my career.
Senior engineer is the level when different career paths become available to you.
The default setting is to stay as a senior engineer. It is usually considered as a terminal level in most tech companies. This means that senior engineers are not expected to grow in scope any further. You can remain as a senior engineer until you retire, theoretically speaking. You are a very valuable technical contributor to your team, and there are usually no leadership responsibilities expected from you. You will still grow and learn, you will mentor junior engineers and share your expertise in meetings and daily work, and your compensation will still increase and keep up with your expertise and inflation. You will usually think bigger than your own project and contribute to strategic discussions because of your wide knowledge and experience on the team. Your goal is no longer a promotion or a title change. Needless to say, default is the most common.
The second option is to move up the individual contributor (IC) ladder as a staff engineer, who tends to have a broader impact (cross-team and cross-function) than a senior engineer (within a team). Unlike the promotion from junior to senior, getting to the staff engineer level is not expected. In fact, very few senior engineers get to the staff level. This could be by choice of an engineer. First, the promotion process itself from senior to staff is usually complicated, painstaking, and tedious. Some qualified senior engineers simply would not go through trouble for a title upgrade, if the total compensation is not that different. Second, being a staff engineer requires leadership skills and initiatives. You have to put yourself out there to initiate, drive, and push a project. Not everyone enjoys being in a leadership position. In order to get to the staff level, you will need more than the technical expertise that has got you to the senior level so far. It is a set of acquired skills and does not happen naturally.
The third option is to become a tech manager. In some companies, moving from a senior engineer to a manager is considered a promotion; in other companies, it is considered as a lateral career change. A manager is usually both a people manager who has regular 1on1s with their reports and a project manager who sets the strategic objectives for the team. It is obvious that being a manager is very different from being an engineer because most managers do not code. There is a whole new set of responsibilities and mindsets required to be a good manager, one of which is to help others grow. Or according to Kim Scott, the author of Radical Candor, you need to “care personally and challenge directly”. Helping and unblocking others gives you more sense of achievement than you coding out a solution by yourself. The first barrier for senior engineers to move to manager positions is that you are moving away from low-level implementation, code review, and debugging. You will still be involved in technical decisions and designs, but your most familiar tools change from Python and Java to Doc, PPT, and meetings. Some people find themselves missing the daily technical engagement after choosing the manager track, and then move back to become an engineer. Other people realize early that they enjoy high-level project discussion more than coding, and can’t wait to become a manager once they have the option to change. Some decide to spend a few years as a staff engineer first, and then move to the manager track.
Everyone is different, and there is no right path.
When I first got promoted to a senior engineer, I started to think about these 3 options seriously. Am I content staying as a senior engineer? What is it like to be a staff engineer? Will I enjoy high-level discussions with little low-level execution as a manager? I had a vague idea that I’d like to become a staff engineer. The default setting of staying as a senior engineer does not seem to require extra work, so I’d like to explore other options first. Also, becoming a manager seems a more drastic transition than moving within the IC track to become a staff engineer in terms of skills and responsibilities. If I embed senior engineer, staff engineer, and tech manager in a vector space, senior engineer/staff engineer distance is definitely closer than senior engineer/manager distance, right?
Maybe not.
To understand what staff engineers do, I asked my manager to pair me up with a staff engineer in a mentorship. He and I talked about his promotion package, his responsibilities, and what it takes for him to get to the staff level. I also joined an engineering sponsorship program in the company which offers professional training workshops and mentorship from staff engineers. I set up regular meetings with a staff engineer in the company to get more perspectives and advice on how I can prepare myself to become a staff engineer. After a panel discussion with several staff engineers, one thing becomes clear: getting to the staff level requires more than good technical skills. You need to take initiatives. In addition to working on the project your team lead or OKR tells you, you need to proactively look out for unmet needs, unfilled gaps, missing links, areas for improvement, tech debts without being told to. In short, you need to step out to step up. In order to spot these opportunities, you need to network and broaden your knowledge in cross-functional teams. This may happen either by collaborating across teams, attending company seminars and workshops, or chatting with skip levels and business managers.
All of them need to do extra work than being a good engineer. Extra work does not mean extra time, at least not at my company. From what I hear, these staff engineers, before they became staff, spent 20-50% of their regular working hours on their personal initiatives. They may block 1-2 hours each day to think, envision, propose, and work on their personal initiative. And once their initiative attracts enough attention and interest from their manager, they can spend more time working on it. They do not just stay in their assigned lanes, instead, they push boundaries and look for breakthroughs. They need to be both the technical contributor and the business spokesperson for their initiatives, influence other stakeholders without the authority and title (before they get to the staff level). This process usually involves aligning different stakeholders and interest groups, having difficult conversations, communicating and convincing in writing and in person, and feeling like a fraud from time to time (imposter syndrome).
There are different types of staff engineers, and each staff engineer has their own unique stories to tell. Some are deep in the weeds of implementation, and some no longer write code and focus on tech strategies and initiatives. A good reference is the book Staff Engineer: Leadership beyond the management track by Will Larson.
So in the vector embedding space, senior engineer/staff engineer distance is really long, if not longer than senior engineer/manager distance. I have to work hard and smart to get there.
最近也在思考这个问题,刚好在LinkedIn上看到你的post。谢谢你的经验分享!