Commentary: How to become a senior engineer too early
How to manage your career for the short and long-term
How to become a senior engineer too early is about when your local value is much greater than your global value, and the gap widens too far or exists for too long.
Local value: how valuable you are to one company, right now.
Global value: how valuable you are to many companies, over time.
The post highlights an early career trap in which you are pretty inexperienced, but get a chance to build a real system and do a good enough job for it and you to stay around. You then do a good enough job supporting it to gain a strong reputation within your company. All is well as you expand your skills and build business knowledge, then one day you realize that your technical chops have not expanded at the same rate that your specific knowledge of one system has.
Building a software development career is a dance of managing this tension between your value to one employer and to multiple. It is easy to stay at a place that wants you, rewards you, and has strong familiarity.
Situation: High Local Value
In this trap, your local currency is exceptionally high when you are a recognized local expert because of a combination of skills, experience, and temperament. Your career is tightly coupled with one company’s fortunes. In these situations, you feel essentially fireproof but also experience a lot of pressure to perform in your narrow focus.
The company is well aware of how risky this situation is if it goes on for a long time, and this means your fireproofness can decrease as you think it is increasing. Our egos make us think that we are irreplaceable more than we are. I have been in many discussions with leaders who are worried about The Only Programmer Who Can Do The Thing, and had many smaller audience discussions about The Programmer Who Knows Where the Bodies Are Buried. Both parties act rationally in these situations, and nobody lives forever.
Even if the company never wants to decrease this risk and will keep you employed until retirement, there is a significant risk to you personally. This is like owning a large amount of one stock: you better hope it does well.
Situation: High Global Value
Local value and global value have different units of measure, however. Local value is “how much would it cost us if this person left, retired, or was hit by a bus?”. Global value is “how easy is it for this person to get a job they really like, over and over” which has more factors to it because there are more players.
Having extremely high global value can be narrow or broad:
Narrow: you are really good with Rust, and there are a lot of Rust jobs.
Broad: you are really good at designing cloud systems, and building teams, and know a lot about the financial industry, and are easy to work with, and have a good network of people that have worked with you in the past. You are competent with Rust.
If your global currency is high but narrow, then you can get a job in many places but might not have the job stability that you need, and your earnings might not be optimized. The Rust programmer job market will not always have a supply problem. The Programmer Who can Build Anything (on time and under budget and is nice to work with) will always have a supply problem.
I personally feel, and not all software engineers agree with this, that to build a good system you have to build a strong understanding of the business needs and domain. This means that you have to establish a strong local value to truly contribute at a high level. If you are good with Rust but can’t even remember what the last system you built even did, then you are a Programmer/Coder and not whatever more important title you might want to be, like Senior Software Engineer, Software Developer, Staff Engineer, etc.
Building A Good Career
The balancing act here is to increase your global value with every place you work, while having a high enough local value for long enough that they always see you working there as a strong return on investment. On paper, it is possible to build a career where you ship successful software projects and learn something new on each one. You also build a medium-sized global value horizontally. For example, you might purposely work for a few financial companies and build familiarity with this domain. You might specialize in migration projects regardless of tech stack. If you specialize, you have high local value immediately because you are acting more as an outside expert while also building this expertise to take to the next place.
The two classic moves to keep these two factors growing are:
Be a Consultant
You get exposure to many systems and learn from how they work, expanding your knowledge
You don’t build local value but come in with a very well-defined goal that shows a strong ROI (“that Rust consultant was fast”)
Work at a Startup
This advice is given all the time without obvious fine print1
A startup shows you what it is like to work at a company without a strong infrastructure, and building this early infrastructure can teach you How Things Really Work
As the startup grows you can essentially work at 1 - 5 different companies with completely different problem sets to solve
Inspiration to Move
Charity Majors, who should write a book2, has a great post discussing this problem: Questionable Advice : the Trap of the Premature Senior Her advice is simple: run. There is also encouragement in that post; I recommend reading it in full, along with anything else she writes.
It can feel scary to move when you feel secure in your current job but aren’t being challenged. It is safe and warm. But then if you work at a place that doesn’t use cloud technology at all, and it seems that all your friends are, and all the blog posts you read assume you know what an API Gateway and AWS lambda are, you can begin to feel left out, and that it will be hard to catch up. It doesn’t feel safe or warm anymore, and this is scary
The good news is that the gap could have taken years to grow but can be closed faster than you think. If you stop coding for two years, you will be able to pick it back up. Yes, if you miss multiple tectonic shifts it will be harder, but learning new technologies, techniques, and tools is a core competency that ultimately hedges against this class of problems. You were rewarded because you came into a situation and built something that worked, you can do this again and again.
But Also…
However, the industry has decided that there is a soft metric measured in wall time for whether or not you are playing this game well. The minimum is measured in years, and it is roughly two years. This is not fair, but the line must be drawn somewhere. Some hiring managers scan resumes to look for “job hoppers” with the following rough logic:
if this person has had more than 3 jobs in their entire career in a two-year span, they are not to be trusted
unless: they worked for a consulting firm during this time
unless: they have stayed somewhere for more than five years, in the second half of their careers
unless: I know them and/or used to date them
unless: they have a cool story about it in an interview that they will not get because their resume will be filtered out
If you have a period of jumping jobs in search of learning but are able to get an interview, they will then also ask about why you are leaving your current role (some HR screens do this automatically) and accept pretty much any answer other than I was an HR violation or I wasn’t learning. To some people in the interview gauntlet saying I wasn’t learning, so I left is a terrible answer3 and to others, it is the Best Answer Possible.
This is not fair, but it is the way the world works. Managers are all trying to optimize for local value being as high as possible for as long as possible, they will hire someone with lower global value for this reason.4
It is ultimately up to you to figure out this balance.
Caveats and What-Ifs and It Depends
There are very obvious It Depends with this advice:
Working on one system and fully owning it is a great learning experience, worth it especially early in your career
People have all sorts of reasons they stay at jobs, we shouldn’t worship the job hoppers who do it just to add TLA to their resumes
Job Titles mean nothing at small companies, everyone knows this so who cares if you are Czar of Computers but are basically a mid-level developer
The “early senior” described here is loyal and a hard worker, give them a break
An obsession with levels and experience can blind you to the fact that there might be interesting problems to solve anywhere you work
A Struck Nerve
About every third or fourth post this newsletter seems to hit a nerve. How to become a senior engineer too early received hundreds of thousands of views, so I received a lot of feedback from readers and new users:
This article spoke to my soul.
Haha, I feel personally attacked!
Seems like a pretty unpleasant article. Did someone kick their dog?
I know many early seniors. Most of them have a god complex too.
I think this post struck a nerve because most engineers worry about this tension all the time. We should pay attention to it, but remember that we can manage this difference and close the gap quickly as needed.
Working at a startup is a good idea if you pick one that a) is growing, b) is very early so you can move into early roles as they expand, and c) that doesn’t go out of business. If you can consistently pick startups that match this criteria, please call me to discuss an investment opportunity.
Ok, I meant another book. A book with the type of content from her excellent blog: charity.wtf.
The last thing an engineer in his 15th year of supporting the internal custom expense system wants to hear is that a new, fresh-faced candidate quit his last job after 10 months because they wouldn’t pay for an AWS Solution Architect class.
Food for thought: if there is no remote work, the hiring manager’s job is easier because the entire market exists within 20 miles - who cares about our global value if there are only a few companies within driving distance? Remote work shifts power to the worker by expanding the difference between local and global.