Hacker News new | past | comments | ask | show | jobs | submit login
The Staff Engineer's Path – Book Review (smyachenkov.com)
385 points by _sJiff on May 17, 2023 | hide | past | favorite | 241 comments



Where do all the hardcore engineering jobs live? I've been bothered by the fact that most advanced engineering roles like "staff" actually mean "manager who does system design as well"

Where are the docker/redis/next.js/linux kernel/qt/roller-coaster tycoon creators? Where are the people creating amazing software and do they get a special "advanced developer" title?

I guess, I'm curious if there are actual roles in companies for people who love their craft and create software others can't. Most companies seem to be consumers instead of creators and only offer Jr.-to-Sr. level roles around making a CRUD API micro-service collection.


Where are the docker/redis/next.js/linux kernel/qt/roller-coaster tycoon creators?

Something I learned relatively late in my career was that really impressive work is the result of iterations in tiny steps. When you see something that makes you go "WOW! I could never do that!" you're seeing the final result of a long journey, and you probably could have taken each small step with a bit of effort.

There's no need for a special title for people who make amazing things. They're not that different to the rest of us. The main thing they have going for them is an environment that lets them shine - time to research and explore, less pressure to do things that aren't moving them towards the end result we see, and fewer externalities that make them lose focus.

I'm not suggesting just anyone could make Linux or Roller Coaster Tycoon, but I am definitely of the opinion that given then right circumstances most people could produce something that other people believe is at that sort of level of complexity.

May we all find those jobs one day.


The thing that separates those guys from everyone else is simple.

Its stamina.

No there isn't some higher level of understanding or deep perception. Every one of the all time great programmers had 1 exact thing in common with no exceptions. Stamina. You will not find a single outlier.

They did their craft every day, for many hours, year after year.

So sure, any of us could have taken the individual small steps. But when you look at a whole body of work, you'll see they're cranking through these "small steps" like the Juggernaut running through walls for decades


Stamina isn't the word I would go for. It would be commitment. For those that have loads of stamina, it's the commitment to continuous creative encounters that leads to the perceived magic.

From "Courage to Create" by Rollo May: "It is said that the novelist Thomas Wolfe, who was one of the highly creative figures of the American scene, that he was a "genius without talent." But he was so creative because he threw himself so completely in the material and the challenge of saying it-he was great because of the intensity of his encounter"

Apologies going philosophical, its the only way to debate such an answer-science has no real answers for this title we call "staff engineer"


“Nothing in this world can take the place of persistence. Talent will not; nothing is more common than unsuccessful people with talent. Genius will not; unrewarded genius is almost a proverb. Education will not; the world is full of educated derelicts. Persistence and determination alone are omnipotent. The slogan "press on" has solved and always will solve the problems of the human race” - Calvin Coolidge


> The separation of talent and skill is one of the greatest misunderstood concepts for people who are trying to excel, who have dreams, who want to do things. Talent you have naturally. Skill is only developed by hours and hours and hours of beating on your craft.

- Will Smith

My take is that talent is a potential, without practice it is left unrealised and never turns into skill, nor success.

Then people look at success and say "well person P has natural talent, I don't, so I can't do that", which is very sad, because ultimately it's mostly about a shit ton of work, and dedication, and commitment, and persistence.


And with Coolidge's great persistence, he helped build the foundation for the Great Depression.

It is possible to "press on" in the wrong direction.


Yes. Determination is essential for success but does not guarantee success.

Kind of like how virtually all great cooking requires salt, but use of salt goes not guarantee a great dish.


After a good time of reflection, questioning mentors etc… Maybe it’s better to press on (in the wrong direction) and learn from it than do nothing and contemplate what we could do or achieve or debate for hours/weeks/months to know if it’s the right decision.


Sure, but we're talking about "persistence" and dedication on the scale of "I built a complex piece of software"


Commitment from the individual, and commitment from your organisation!

I work in a relatively 'flat hierarchy' so there are few organisational structures and proceedings that keep projects on track. It's only me that keeps the marble on the track, there are no organisational tracks. Once I lose interest or stamina the marble is gone.

Other organisations with regular check-ins, project tracking etc. have a system that at least keeps the marble in place.


Maybe, maybe not. At the end of the day it takes people interested and motivated to head in the right direction.


it's not even commitment. it's discipline. many of us know what we should be doing, and how to do each of these small steps. most of us (including me) don't have the daily discipline to pull it off.


How about grit?


Almost each of such guys didn’t have to respond to Jira tickets and answer to shit asked by PMs and TPMs on a daily basis while standing in a circle and showcase/demo “progress” weekly, be part of a trillion meetings in a day, while also preparing documents for things you provably never understood the why of, and in general justify your existence there in a quantifiable way to every TDH in the team and the company.

So when you’re looking for that role after you think you’ve got that stamina/perseverance/commitment, do remember that maybe you still have to find that right place to work at.


Tall, dark and handsome?


probably "Tom, Dick and Harry" in this context, meaning everyone


This is the answer. There's certainly ridiculous talent (especially with ideas), but in my experience it always comes down to stamina stretched through time. Cool things get built by people that stick it out, and recruit others to do the same. And also know _exactly_ when to exit to pursue something new (but that's a different subject).


Interesting, is the ability to know when to exit a prerequisite? I would think there's a distribution between those you spoke of and some that just picked one thing and went forever.


Well what I mean is there's an ability to see precisely when just enough is done -- no more, no less -- before one can hand things over and exit with sanity and / or dignity. It goes hand in hand. Many work very hard and quit before _the_ critical thing is done, which in a sense forfeits all prior work; others continue working and working and burn out. The best understand something about timing, almost in an intuitive sense. I've seen it again and again, and it's impressive.


I beg to differ. I have high endurance but since a few years I make minuscule steps and plateau way below my expectations. Meanwhile some people are gliding with their hands in their pockets and will only need 7 days to exceed their initial goal.


Understanding theory helps a lot. It's a hard limit on what your capable of making.


Perhaps the word you're looking for is perseverance?


Maybe tenacity instead of stamina?


When I worked at mega corps, I'd see a "new" tech emerged that was always very similar to a software that our company had developed to solve similar issues. I remember terraform getting released and seeing that it was just an inferior version of the Cloud Formation Template generator someone at my company had invented years prior.

I've seen this happen so many times and every time, I'm surprised that more businesses don't spin off cool internal projects like this into startups. Hashicorp's market cap is roughly 10% of the market cap of the megacorp I used to work for. And right now, my team is working on an internal project to fill the gaps left by various authentication providers we use. But instead of spinning this off into it's own business, they are just kind of waiting around for someone else to develop a better product so they can buy it instead.

It was explained to me that investors generally don't like spinning off internal projects because it can be a distraction, but it does feel like investors are leaving a billion+ dollars on the table. Especially given the absurd P/E multiples software startups enjoy.

To circle this comment back, I think a lot of staff engineers are working on the next generation of cool technology right now. But they might be working at boring old companies, like a massive retailer, and eventually that internal project will get replaced by one built by the engineer who decides to venture on their own and replicate what they were building as a stand-alone product.


There is a simple reason why megacorps don't spin off projects: they would need someone with vision to search for these projects and with high authority to proceed on the spin off. They don't have this kind of people, for the obvious reason that it is not their main concern. Executives in any megacorp are 100% busy making the core business a success, and investing time in small projects that may come to nothing is just a distraction. This may just explain why big corporations are just a waste of time and resources, in the long term.


Not just that they don't have those people. They also don't have the money. Because most companies are operating with someone else's money. It belongs to the shareholders or the investors or the bank. And they have been entrusted with that money in order to conduct a very particular business venture.

If they go off using that money to spin up side-hustles selling engineering tools, they're taking risks with someone else's money to do something they weren't told to do.


> They don't have this kind of people

Because the people with vision and conviction would be running their own startups


My experience at mega corps has been the opposite: instead of a widespread, open source, robust implementation we had to suffer with a home grown, poorly supported, buggy, inferior product because it had the sponsorship of a politically important executive.

Truly dispiriting to be unable to use JSON or Protobuf, because some executive director claims his “standard” is better when it is demonstrably not so. In the end it breeds a culture of mediocrity — management has made it clear that engineering excellence is not a priority. So support the business use case, but do whatever …


I could have a really cool time-travelling database to sell you, but I can't because I signed away my right to invent. So, if you really want to

> built by the engineer who decides to venture on their own and replicate what they were building as a stand-alone product.

We need to change our contracts.


I think this is the key: employment contracts/ip policies should be designed to encourage spinning off internal projects (that are ‘distractions’ front he core product) as separate business units or as open source projects.


FWIW, the founder of HashiCorp created Vangrant when they are in college.

Why did Terraform end up being the dominant product? Product-market fit. That’s not just engineering, but bringing to market a product at the time when people need and understand it. This includes marketing and educating. Also, Terraform has an ecosystem of prebuilt providers. NPM as a package manager is not as well designed as other systems, but it’s arguably been the most successful. While the internal prop tech you mentioned may be more advanced, it’s not obvious you had the right product people with vision to build out that ecosystem. Most managers and product people at large companies aren’t tech savvy beyond buzzwords


> Something I learned relatively late in my career was that really impressive work is the result of iterations in tiny steps.

I agree 100%

> I am definitely of the opinion that given then right circumstances most people could produce something that other people believe is at that sort of level of complexity.

This is the "if my grandma had four wheels, she would be a truck" argument and in my experience it is not accurate. A quote from Ratatouille puts it very eloquently: "A great chef could be anyone, but anyone could not be a great chef"

> They're not that different to the rest of us

I beg to differ. Again, with the caveat of "in my experience", they are very different. Maybe not in ways that would make a great Forbes article, like having superhuman IQ, but for example "having grit" or simply "ability to obsess over the right things" is a key ingredient that most people don't have enough of.


> Something I learned relatively late in my career was that really impressive work is the result of iterations in tiny steps.

I think you are right. Really impressive work is generally the result of a longer journey than you realize. The time and effort put into it is probably underestimated. But my mind immediately tries to think of exceptions (which totally prove the rule). I'm curious if others would agree with this one: Sometimes there are just really great ideas.

Minecraft comes to mind. And I don't mean today's Minecraft. I mean the alpha and beta versions which were wildly popular and essentially just an engine and sandbox world with a tiny fraction of the features today's game has. People have recreated that core game many times with fairly trivial code, which is why I attribute this more to "great idea" than long iterative process that most people cant replicate. And a totally anecdotally and subjective reason (although I've heard others express it too). I found the game immediately nostalgic. It was new but it felt old - like it had existed in some form before but had just now taken shape. That to me seems like a great idea.

Ironically, I find myself questioning if I underestimated how long Notch took to create it. A cursory search says a week for the initial version, but this timeline shows more like 1 to 1.5 years from nothing to alpha: https://minecraft-timeline.github.io/ Even still, the fact that the core game can be recreated without too much effort does suggest that that it was more about being a good idea than being difficult to implement. I don't look at Minecraft and think "wow I could never do this." Instead I look at it and think, "Wow. That was a really great idea."

Although I suppose you could says that great ideas are an iterative process too. But at that point you have to decouple "really impressive stuff" from "I could never do this".


> like it had existed in some form before

I mean, it had. It was called Infiniminer. Admittedly it had only really existed for about a month before, but it was obvious that that first person voxel modification mechanic was a format that could support some really cool games. It got Notch thinking, for sure.

When Notch posted his first tech test video (archive version: https://www.youtube.com/watch?v=UMpv5kZ9-rE), he wrote:

> This is a very early test of an Infiniminer clone I'm working on. It will have more resource management and materials, if I ever get around to finishing it.

Ironically, he never did get around to finishing it.


> Even still, the fact that the core game can be recreated without too much effort does suggest that that it was more about being a good idea than being difficult to implement

As someone that's "recreated the core game" a few different times using a few different techniques (Unity, then Unreal, then OpenGL twice) this just isn't true. Minecraft is very deceptive in the fact that it looks simple, but recreating the core of Minecraft alpha is incredibly time consuming and difficult. Most of the clones you see don't truly recreate the core either, they'll add very simple biome generation, chunking, and some player movement and lighting.

The core of Minecraft alpha consisted of: mobs, "smart" blocks (fences that join to other fences, interactable blocks, animatable blocks etc), water, lava, physics, pathfinding AI, inventory management, crafting system, Redstone (this is actually pretty huge because it's not trivial figuring out how to properly update chunks), multiplayer networking (also not trivial by a long shot), survival mode, biomes and the nether.

Just building the base game with all of that will take around a year of full time dev work, which it did take Notch around that much time. Additionally, making all of these systems good and fast is a whole 'nother story. There are so many optimizations that can be made that add a lot of extra dev time to the mix.

So, sure, creating a cool blocky chunk renderer where you can add and break blocks can be done in like a week. But Minecraft alpha is not a simple endeavor, and I don't think it would have taken off the way it did if Notch just left out all the actual game mechanics.

> I don't look at Minecraft and think "wow I could never do this." Instead I look at it and think, "Wow. That was a really great idea."

And again, I know what you mean by this because I thought the same thing, but this couldn't be further from the truth! It's funny how I wildly misjudge the amount of effort that making a thing takes until I try to make that thing.

And we also have to remember that before you can even begin to create Minecraft you need all the prerequisite knowledge of how the graphics pipeline works and how rendering in general works. But anyways, I just wanted to interject some personal experience here and mention that a lot of the "simple details" cough multiplayer are actually pretty tough to pull off :D


> People have recreated that core game many times with fairly trivial code

Yes, because they have something to reference. It was like Notch took a level editor and made it into the game itself. That isn't an easy thing to figure out and takes time.

> Sometimes there are just really great ideas.

Ideas are easy and usually it's really stupid ideas that turn out to be great ideas. Who would think that an FPS level editor would be a good idea? Or a text box that anyone can edit on a profile page would be popular (facebook)?

There are not great ideas, just ideas that are executed well.


>> People have recreated that core game many times with fairly trivial code

> Yes, because they have something to reference.

But you couldn't reimplement podman in a few hundred lines of code.

> Ideas are easy

Not all ideas have the same quality. Should be self evident. Nevertheless you should be able to see that I understand ideas are cheap in some sense - that's what the comment about decoupling "this was an iterative process" from "I could never do this." You can transfer an idea effortlessly - it's more about implementing it. But if its it trival to implement clearly more of the brilliance was on the idea side of things.


> But you couldn't reimplement podman in a few hundred lines of code.

You don't even need a few hundred: https://github.com/p8952/bocker

And then there's 'dokku' which IIRC, started as a bash version of Heroku.

> Not all ideas have the same quality.

They really do. I've heard all kinds of things in my career, but almost none I would want to dedicate a portion of my life building. Not because they are bad ideas or won't work, but because of the person with the idea or it just didn't interest me. Those people went on to be moderately successful (like hundreds of millions worth) but I'm glad I wasn't on that ride.


That would prove my point though. If it actually is that easy to implement then podman is more in the “good idea” than complicated implementation category as well.


It is an idea, and podman wasn't the first (by far) to come up with something. They just had good timing and marketing. That is what is truly important: execution of the idea.


> Notch took a level editor and made it into the game itself. That isn't an easy thing to figure out and takes time.

He built an infiniminer clone for himself when it was discontinued. It certainly grew into more than that, but that's where it started.


That's an unfair characterization. You are low-balling the creativity, discipline and bureaucracy management ability these individuals bring to the table. The right circumstances are only part of the acquisition. Aptidude and attitude are the other parts.


I can’t relate to this, as it seems to imply you just don’t believe that really talented people exist and that these people can accomplish things other simply can’t. Doesn’t jive with my experience.


Linux is a good example - Linus literally iterated on it as he was learning stuff in University, with the help of one of his classmate/friend. And IIRC, the very start of it was just printing a stream of characters or numbers which represented the output of parallel/asynchronous task handling. They just kept adding one feature after another, until they felt that it was "done" - but of course kept on building.


I used to be awe inspired by the jvm code base and other “major” pieces of software. Then one day I realized that these code bases were the product of literally 10s of thousands of people years.

It’s not something anyone could do, but often it’s the product of what many can do.


> people who make amazing things. They're not that different to the rest of us.

Clearly that can’t be true. “Amazing” by definition cannot be done by the average person.


Software engineering.

Most engineering is this way. Somebody needs to build a thing that isn't too different from other things on a budget and a timeline. Your typical civil engineer isn't designing a new burj khalifa. Most software engineering is about organizing a group of people to build a thing for a customer that isn't too different from other things, on time and on budget. There just simply aren't as many jobs working on wild stuff nobody has ever done before.

RollerCoaster Tycoon is, in my opinion, a great example of something that isn't really engineering. One person did it and the decision to write it all in assembly is almost anti-engineering. It is an impressive feat, but not really comparable.


So are we saying that software engineering can be at odds with your ability to write code? I'm not sure most people would say they are quite the dichotomy you present here.

While I agree it's often a team-sport, being able to create amazing things yourself (i.e. Git, Redis, RollerCoaster Tycoon, Rust and other single-person projects) that others struggle to replicate or contribute too shouldn't mean you're a bad software engineer.


Not quite. I am saying that there is a meaningful difference between the process of working with other people over time and with resource constraints and writing software alone without time or resource constraints. Being skilled at writing programs doesn't harm one's ability to make decisions according to engineering principles.

I actually don't know for certain that writing Rollercoaster Tycoon in assembly was the not only possible way of doing it. But in popular consciousness it is usually discussed as a wildly difficult thing rather than the most efficient solution to a problem. That's anti-engineering.

There isn't really a good set of words to break down categorization. But I do think that the skills involved in the large majority of software engineering roles are pretty much entirely separate from the skills involved in writing some exceptionally difficult program.


If we use a house building/construction analogy, in this comment chain we're saying software engineering is inclusive of house design/architecture down to wall construction, plumbing, electrical, etc. Following that analogy then I think when Xeoncross is asking about "hardcore engineering" that really would equate to new engineering products for the house building industry - like some new tech like solar roofing shingles (instead of raised solar panels).

There aren't a lot of companies that are doing that in software. For example, there are a lot of SaaS businesses doing things that might have interesting engineering problems to solve but those engineering problems usually don't result in creating new products for software engineers to use. Rails is a good example of a byproduct from a SaaS business, React is a byproduct of whatever Meta does.


Engineering, vs. craftsmanship.

They are vastly different disciplines. Especially engineering on a large team.


I used to be an engineer in a traditional engineering field in heavy industry, now my job title is "Software Engineer". I still consider myself an engineer, and what I do with my team to be engineering.

Creating amazing things yourself that others struggle to replicate or contribute to is more in the realm of craftsmanship, in my opinion, and not engineering.

I can appreciate both good engineering and good craftsmanship. And I also often find myself doing (and enjoying) what I would consider crafting and not engineering - the lines can be blurry and as programmers we often end up doing both (sometimes at the same time!). Nothing wrong with it. But it is something that is distinct from engineering, in my opinion.


> So are we saying that software engineering can be at odds with your ability to write code?

This is absolutely the case and my main struggle as a SE. In my opinion this is all arbitrary and companies could easily structure themselves to allow engineers to focus on what they do best, instead of adding a ton of overhead with tasks that someone else that is not trained as an engineer could do. The response seems to always be the same and boils down to "you need to add business value and that includes all these other easy but time consuming tasks".

I seriously doubt that is the only way, but I haven't build a large software company so ultimately it is hard for me to say, however I suspect that if an engineer's time is maximized to practice engineering, it would bring a lot more business value in the long run.


I’m assuming Rust here refers to the game and not the programming language?


Graydon Hoare created Rust as a personal project while working at Mozilla Research in 2006 - https://en.wikipedia.org/wiki/Rust_(programming_language)

Not many devs create the core of what is arguably the best programming language available today as a personal project. However, it's true that what it has become today is now the work of many.


A good deal of programming languages started out this way. A few that come to mind: C, C++, and Python. Javascript.


Big tech companies have entire departments dedicated to this sort of engineering, usually developer platform/experience/productivity, or other similar infra/platform orgs. I'm an author of an open source framework who got scouted to work at one (and I'm currently a staff eng).

IME, yes there's comparatively far more CRUD roles than platform roles. But bluntly speaking as someone who's been on both sides of the fence, platform roles are not for everyone. For these roles, there is a expectation of quality by very technical stakeholders and this creates some pressures and incentives that don't necessarily exist in orgs that cater to non-technical faceless stakeholders.

In practice, a big challenge is to avoid being someone who is "not hardcore enough" (i.e. incapable of implementing large scale reusability due to lack of ability, tendency to cave to timeline or other pressures, or distaste for "office politics") but also avoid being "too hardcore" and being constantly in the weeds chasing some cool clever idea that might not align w/ overall picture.

One thing that is often overlooked in open source projects with sizable communities is the amount of cat herding you need to do. People have all sorts of ideas for "features and improvements" and sometimes your job as a BDFL may be to say "no" to your most ardent supporters. This also happens a lot for staff level platform work.


> sometimes your job as a BDFL may be to say "no" to your most ardent supporters. This also happens a lot for staff level platform work.

You hit the nail on the head. You've heard of a "yesman" (i recognize the sexism in that phrase, but it is the colloquial term), people that simply say yes to everything. I always joke that I am a "no-man". My job is literally to say "no" to probably 12-15 people a day. I say "yes" maybe once a week. It is actually exhausting and frustrating to be in this position.

I can't talk too much about what I do, but I am a staff level platform engineer and run a platform that no one has heard of, and no one has used directly, but it affects most people reading this. Because of how important the security and infrastructure is, my job is to field requests all day long, say "no" to almost all of them, and accept 1-3 things a month that our team actually works on.

Saying "no" so often and being "the bad guy" that no one wants to give ideas to is frustrating and difficult. It is the hardest part of the job, far more than the technical component. I actually discuss it with my therapist nearly weekly, it takes that significant of a toll on me. I enjoy the core of the work, but these externalities of the job wear me thin and I often fantasize of going back to the time when I just showed up in a daily standup, took a ticket, and went away to work on it. Essentially what I am saying is "the grass is always greener", remember that.


Why are your people asking so many bad questions?

Good questions are "how can we X?" And good answers are "here's how: Y"

Then the asker decides if they are willing and able to Y.


Most of these kinds of questions have to do with feasibility, where the question asker doesn't have all the context needed to:

1) Decide: is this worth it for the business? NOW?

2) Delegate: ok, we've decided it's worth it NOW. Who is best equipped to execute?

So, that's not a "bad question."

Most of the time, saying "no" also comes with helping the requester de-scope to meet the crux of their obligations, save face on any commitments they won't be able to meet.

Saying "yes" means figuring out what the work will displace.

A significant part of my job as a staff infrastructure engineer was carrying this kind context between planning rituals with various time horizons, ranging from weekly to quarterly to annually.

Occasionally I would drop down into execution mode myself to knock out something particularly gnarly, or set up some pins for someone else to knock down (e.g. promo season).


Because most questions are not bad questions. In isolation, if you have good teammates, ideas and questions are good. It’s just that you have to say “No” in the broader context, because you always have a limited budget of time and money


If the constraint is time and money, maybe that could be the answer instead of a hard no? Like, “the project you’re currently on is making X dollars per day and the new idea has to at least match that.” You might start getting more interesting proposals if you train your people to pitch them properly.


You just explained exactly what's wrong with big tech companies.

Application/product developers are seen as less capable and they put their best developers in infrastructure/platform/sdk/libraries.

This is all completely backwards. The application is what generates revenue and what needs the most attention to ensure the tech is a good fit. The needs of the application should be what drives the infrastructure to support it, but instead those companies have infrastructure people call the shots and heavily constrain how all applications should be built.

Thankfully there are sectors where application developers have full freedom on their tech stack in order to satisfy their business requirements and infrastructure is just people maintaining a collection of tooling and services that others can opt in to use or not.


It’s always odd to me people ask this, because you see it all the time if you work on big infra. It just goes to show my experience at mostly infrastructure at big tech is just not normal.

Anywhere there are extremely large or technical company will have stellar ICs. All the FAANG have them (not everyone working there is one, but they are around and you find a lot of them on e.g massive distributed data systems). Not only do you run into stellar staff engineers at these places, but if you work on critical infra at say Google, you run into a couple 50x engineers that defy classification. Any company that produces a world-class database, distributed system, etc. will have very good, very expensive staff engineers, who really are ICs and not managers.


> I've been bothered by the fact that most advanced engineering roles like "staff" actually mean "manager who does system design as well"

The definition I have generally seen for "staff engineer" is an engineering leadership position without direct reports - I see "manager" as generally meaning "has direct reports".

I think this is important: leadership and management are not the same things!


Can you explain better the difference? I am trying to figure this out myself for a while...


I'm a software engineering manager.

I'm responsible for the wellbeing of my direct reports. I need to ensure they can grow their careers. I need to know when they're stressed or burnt out or bored. I need to manage projects and be a shit umbrella.

While I am technically strong, I have architects and technical fellows who are WAY stronger than me. I work closely with them to ensure we're adopting the latest best practices and tools. They do much of the system design. They also mentor newer employees, but they don't have direct responsibility for those employee's careers. And they don't have direct responsibility for the success or failure of any given project.


Typically the direct reporting relationship is about managing someone’s career and not necessarily their work. The leadership described here is more about the work to be done rather than the person’s fulfillment and suitability with that work. This separation is more pronounced with large (1000+) engineering organizations. Often people don’t experience this difference because it doesn’t exist at the smaller scales.

Engineering management is more on the management of people and engineer leadership is more on the management of products/projects/systems.


When you say "about managing someone's career" I can't help but feel you actually mean "someone's job". No manager is paid to care about an employee's career that I have ever seen or heard of.


Ehh, I am employed at a company where, despite things being very tense at the moment, I've felt very comfortable expressing to my manager my intent to transfer out of the team I'm currently on and into a different position, as I'm not happy with things as they are.

My manager, skip, and director have all been extremely supportive of this throughout the process, despite it taking a somewhat lengthy period of time and putting me (a senior-almost staff eng on the team) in a position where it's very difficult for me to commit to a significant ownership of big strategic things (which is my job) since I might transfer out at any moment.

Similarly, a few years back, I expressed intent to transfer away from my team to my manager. He basically said "stick around an extra quarter since you're on the cusp of promotion and it'll be easier this way" (and he was correct, my promotion would have been delayed if I transferred first), and I did and got promoted, and ended up staying longer, for various reasons.

Additionally, my managers have all been receptive to my goals in terms of career growth: do I want to lean into management (no!) or into deep technical expertise? Do I want to go for additional promotions, or am I happy to stay in the role I'm in and continue doing the same kind of work?

All of this, to me, reads more like career management than job management.


A different position at the same company? That's a job.


> No manager is paid to care about an employee's career that I have ever seen or heard of.

This is an incredibly common part of the role(s), so my guess is that you have been unlucky in this.

For what it's worth, all the strong managers I've ever know or worked with pay attention this this, and vast majority of companies (again in my experience) made it an explicit part of their role.

I'd go so far as to say as a people manager (as opposed to a project manager, say) you cannot do a great job without considering things like career progression, because if you don't, you don't understand your team well enough to be really effective.


> This is an incredibly common part of the role(s), so my guess is that you have been unlucky in this.

I could be very unlucky, sure, but I've worked at my fair share of places and it's always been the same. Management is there to keep the cats herded and HR is there to make sure nobody fucks with the money. All that matters is that I do my job and that the employer can use the manager to push more work on me under the guise of setting myself up for a promotion or raise that will never, ever come - it never has.

> all the strong managers I've ever know or worked with pay attention this this, and vast majority of companies (again in my experience) made it an explicit part of their role.

All enhancing an employee's career does is ensure that they have leverage to negotiate higher salaries or leaving the company. No company wants this.

> I'd go so far as to say as a people manager (as opposed to a project manager, say) you cannot do a great job without considering things like career progression, because if you don't, you don't understand your team well enough to be really effective.

Sure, you know where strengths and weaknesses are but that doesn't mean you devote company resources to making the employee better suited for leaving the company. You can do things like growth but you're going to come around and put penalties and fees to prevent the employee from leaving voluntarily.

I have never seen any manager or business treat an employee's career as anything but an inconvenience at best nor have I heard of any of my coworkers or friends or family having experienced anything like this. I can only assume that it doesn't exist or that it is so rare that it may as well not exist.


> All enhancing an employee's career does is ensure that they have leverage to negotiate higher salaries or leaving the company. No company wants this.

Explicitly, no. Growing talent inside is far less risky than hiring from the outside. Sometimes that means someone will leave, yes - but if the relationship is good they will do it at the right time when they are ready, not when they are miserable. This is win win. Long term net positives here are hard to understate.

> I can only assume that it doesn't exist or that it is so rare that it may as well not exist.

Well I can equally attest your assumption is false. But this is probably just a demonstration that path dependence is a real thing.

All I can say is you have a very negative view of the whole situation, which doesn't match my experience at all, or that of many people I know.


Every org has different cultures and leadership culture within it.

A power culture has zero trust and is high blame. Bureaucratic is process oriented. Generative experiments, tests, learns from failure.

The organization you have never experienced is generative. And coupled with transformational leadership it’s a pleasant environment to work in as either a manager or IC. These orgs do exist and are not rare either.


To my mind, management is about having direct reports and doing a lot of work around things relating to that responsibility: quarterly reviews, compensation and promotion discussions, assigning work and suchlike.

Leadership is about leading: helping the company make strategic decisions about what problems to solve and how to solve them, mentoring and inspiring and educating others, generally up-leveling the wider organization but without the direct responsibility of managing individuals.


The best distinction I have heard is that you lead people, and you manage things.

People whose job title is manager might have to lead people too, but they're being held accountable for managing a thing. A project, a product, a budget, a release, a software system. Managing means 'making sure the thing happens'.

What a staff+ engineer is held accountable for is engineering. What gets built and how. That a technical solution meets its requirements and constraints.

In order to do that they might also need to lead people. But they don't have to manage anything.


A Staff Engineer doesn't really have to care about for example people that have a rough patch, or about notorious assholes ruining the team's morale. That's mostly a people's manager problem.

On the other hand people's sense of who they should really listen to always skews to their manager (the person that can fire and/or promote them, or at least has the most say in the process).


If I can modify that slightly: The staff engineer isn't accountable for people that have a rough patch or who are assholes (and the manager is). I've found as a staff engineer that I definitely have to care, adapt to the rough patch, and campaign/do politics to get the assholes out, but I'm not accountable for it.

(I originally wrote this with "responsible" in place of "accountable" but that was fuzzier; surely as a staff engineer I'm responsible for more than my direct contributions even if I'm not directly accountable for them.)


Yeah I agree, accountable is a much better word.


In this context (and the usage is not always consistent) it's probably easiest to think about leadership as an activity and (people) management as a role. If you are not formally responsible for some aspect of other peoples jobs and career you are not "managing them" but you may be leading them (e.g. as a senior engineer, or mentor, or in terms of a project design, etc.).


Leadership: you can tell them what to do.

Management: you can change their pay grade.


Manager gets evaluate by the performance of their reports.

Engineer gets evaluated by the products they contribute to that launch.


My single tip is: look for Product companies, not Service/Project companies.

This means looking for companies who build and maintain a product, SaaS or not, which they offer to customers, and avoid all sorts of consulting, offshoring, nearshoring, whatevershoring third-parties.

Project/Service companies draw little value from engineer familiarity with the systems they work on. Contracts and projects come and go, and everyone needs to learn new systems, processes, and technologies all the time. Experienced people end up as Project managers because that's the only path to career growth.

Product companies, on the other hand, suffer a lot from engineering turn-over, since they have this one complex system they need to babysit forever, and ever time someone leaves, the accumulated knowledge built on that person leaves with them (likely to a competitor who really benefits from that knowledge as well).


As someone who has worked at a "Project/Service" company for way too long, I wholeheartedly agree. It's a horrible way to build software and will drain your soul. Good software is both much more expensive and much more valuable than most people realize, and one contract or client is never enough to give it the attention it deserves. Your clients will wonder why your $200k custom software doesn't work like Excel / PowerBI / some other product with tens or hundreds of millions of dollars of investment. It will wear on you that you simply can't give your software the love it deserves solely on the tab of one single client.


The idea is that staff+ engineers can drive high-complexity work, right. There are arguably two types of that work:

1. Work where no individual component is complex, but there are a ton of moving parts and interlocking dependencies and interacting systems and so forth. A staff+ engineer is needed to drive this, but that job is less about writing the hard code and more about teasing out and resolving the hard interactions, so that kind of system design 'n' people role.

2. Work where there is a self-contained component that is very complex. A staff+ engineer is great to drive this, and may do so by writing the code themselves and reviewing other people's code as a developer.

In practice, many more companies have complex distributed systems than complex contained systems, but certainly both kinds exist.


staff and principal engineerings are still leaders who spend an awful lot of their time coaching and mentoring, they probably just don't have direct people management responsibilities. There are very few situations that will give you an advanced IC title for doing stuff that "no one else can do" because of one word: leverage. It's not economic (in all but the rarest, most specialize cases) for me to say "I want 10x developers who are snowflakes" vs. "I want my senior engineers to increase their sphere of influence and make every developer fractionally better". It's very hard for a senior developer to increase their skills 10% YoY, but actually pretty easy for them to help 20+ developers get 1% better. Staff and Principal developers go deep on the leadership aspects (I shudder to say architecture, but it is the "good" parts of this) and very, very wide on their application & influence. As a result the opportunities for deep engineering work are more like mining than farming.

I manage 2 core teams, one a "platform" team made up of all senior => principal engineers, and they spend a lot of their time shepparding other less experienced teams while trying to answer very tough, vague questions like "what bottlenecks do we predict at 10x scale? What can we opportunistically do today?". No one gets huge, dedicated time blocks to code without some degree of accountability and expectation.


Most companies, in my experience, don't actually know how to make use of Staff+ engineers. I spent years at a medium sized public "tech" company just trying to help the company change engineering enough to make use of these folks, and we go to a place where we could... mostly.

FANG and FANG-model (anyone copying FANG engineering/product model) companies do it well and have the bulk of success cases. Look for engineering-lead companies first, product lead companies second.

A key question when interviewing is "how is the roadmap established?" You want answers where senior leadership establishes goals (strategic or metric), product provides their understanding of opportunities, and engineering decides what to actually do. Even then, there will be the common failure model of EMs doing the roadmapping, not senior (staff+) ICs, but you can tease apart how that works, as it is always going to be a mix.


> Most companies, in my experience, don't actually know how to make use of Staff+ engineers.

Absolutely spot on. Making use of Staff+ engineers requires giving them a hard problem that would catapult your company forward if it were solved, and a ton of autonomy in how they go about it. Give them dedicated time to prepare presentations on what they're doing and what they've learned recently. Give them dedicated time to mentor other staff members. Give them a routine, but not a schedule. Stop asking them for so many fucking estimates. Give them access to support staff. And then get your fucking hands off them and let them veritably radiate value to your company.

All of this is, of course, antithetical to whichever imposter-syndrome micro-managing MBA vice president happens to have landed in the chair that gives them authority over these people in their never-ending game of Management Musical Chairs. No fucking way are they going to let some grunt just work on a hard problem without constantly getting in their way, nagging them about pointless deadlines and bullshit estimates, and showing visual progress via good-looking DOM elements so they can take credit for it and get Business Points before their 2-year tenure in that chair is up and they move to Head of Brand Awareness or wherever. No: doing so would reveal that their entire position is literally pointless. Can't have that.


> Most companies seem to be consumers instead of creators and only offer Jr.-to-Sr. level roles around making a CRUD API micro-service collection.

That's because this is what 90% of companies need. Even at big tech or any nationally-known tech brand, I'd bet at least half the work in maintenance, support, incremental improvement, and integrations.


Sure: nobody wants the car, they just want faster horses.

> Even at big tech or any nationally-known tech brand, I'd bet at least half the work in maintenance, support, incremental improvement, and integrations.

That's because they are extremely inefficient. Most people build software badly, most companies expect software to be bad, and they hire a bunch of bullshit jobs to do inefficient things to support that bad software badly. The gap between what software could be vs. what it is is so overwhelmingly massive that it's crushing my soul. These people do stupid CRUD API micro-service bullshit because they're blissfully ignorant of how tremendously amazing their software could be if they fired 90% of their boot-camp dev ops and replaced them with a handful of 10x staff-level developers.


> These people do stupid CRUD API micro-service bullshit because they're blissfully ignorant of how tremendously amazing their software could be if they fired 90% of their boot-camp dev ops and replaced them with a handful of 10x staff-level developers

I wish this was true, I really do. But a few staff developers cannot physically handle the volume of work required to replace that many developers.

Staff developers are good at solving complex problems that many other developers combined could not solve. They are not good at writing 10x more LOC than other developers.


Obviously, it depends on the work (why would we try to have a discussion like this without setting parameters?). But in general, I think the places that need 10x the code are outnumbered by the ones that would be better with 1/10th the code they have, written by fewer people. It doesn't happen, but that's better explained by organizational reasons.


I think it's the complete opposite. There are very few businesses that can exist without having to solve an enormous amount of edge cases. Most of the time that's the whole reason the business is valuable!

Also, this shouldn't be framed as 10x more code but 10x faster velocity. That is what I meant by "[staff developers] are not good at writing 10x more LOC than other developers". Staff devs cannot move 10x faster than average devs on every problem.

Most work is undifferentiated. Staff developers don't add much value over another dev for basic work (Code quality has high diminishing returns) and they might only be 2-3x as fast, if that.

It's possible that many businesses could be sustained as they currently are today with 1/10th of the code and/or 1/10th of the people, but in a growing company that's impossible.


Well, yes, I mean, how can we really have this conversation and throw numbers around without defining even what countries and industries we are talking about?

But, maybe it's true that most code covers edge cases; then in my opinion, staff developers should be building tools for the rest of the company to use, and if they are powerful enough, you might be better off by having fewer people employed as programmers and more people writing programs. Obviously a lot has to go right for this sort of thing to happen.


Like I said, I think most companies don't fit your model so feel free to throw out some industries.

I think service/API companies like Netflix are the most suited to your approach, but even with Netflix leaning into that style of company hard they still have thousands of engineers. There is most definitely some amount of irreducible work for a problem/domain/other.

> Obviously a lot has to go right for this sort of thing to happen

It feels like a very naive approach. When I'm building stuff, the edge cases often require a lot of digging into the surrounding context and working with other teams.

I don't think you can solve this by abstracting it away, because it's still working at the same level of abstraction just in a different part of the codebase.

There is also the fact that every abstraction is leaky...


We should be building tools that empower people to solve their own problems, whether that's no-code or low-code tools, or platforms, or scripting languages. We underinvest in internal tool-building for all sorts of non-technical reasons, and the result is people interacting all day at work with terrible software.


> But a few staff developers cannot physically handle the volume of work required to replace that many developers.

You're assuming "volume of work" is a constant. I'm saying: 90% of "volume of work" is something that a handful of good developers would make the compiler do instead of humans. It's actually more than 90% over time, because there's a fundamental difference in the "capability growth curve" -- this curve is super-linear with good developers and sub-linear with poor developers, so the ratio between them grows greater over time.

> They are not good at writing 10x more LOC than other developers.

Right, it's quite the opposite: they will write 10x less code than the other developers.


> I'm saying: 90% of "volume of work" is something that a handful of good developers would make the compiler do instead of humans

I don't understand what you're saying here. I cannot hand off feature work, rollout planning, context gathering and investigation, etc to the compiler.

> Right, it's quite the opposite: they will write 10x less code than the other developers

At a growing company, that is not helpful... You will not be able to move fast enough.

> It's actually more than 90% over time, because there's a fundamental difference in the "capability growth curve" -- this curve is super-linear with good developers and sub-linear with poor developers, so the ratio between them grows greater over time

This is only true when you are working on complex problems. If I have a lot of tasks like "change the colour of this button" having a few staff developers vs a lot of average developers is far worse.

At almost every single company, there are far more mundane and relatively simple problems than complex problems. Most companies would not get more value from having way less super senior devs. There are just not enough complex problems for them to solve.


Disagree. While I always felt that I want to achieve more than these regular old CRUD apps, no “10xer” would implement them faster/better - because “these systems are building the rails in front of the train”, and it is not even an engineering problem most of the time. I have worked at banks and the amount of back-and-forth between what the bank wants and what the devs need to know is insane, not well specified, always changing, etc..

Hell, it is often the case that requirements change up the whole program logic based on which country it is being used from. It has a much different complexity than a JIT compiler, but it is a super-human, not-really-compressible complexity nonetheless.


> While I always felt that I want to achieve more than these regular old CRUD apps, no “10xer” would implement them faster/better

A "regular old CRUD app" doesn't exist. Poor development teams end up translating all requirements into "regular old CRUD apps" because that's easier. Humans are excellent at replacing hard problems with easy ones, regardless of whether solving the easy one is anywhere near as useful.

And yes, they absolutely would implement them faster. Most "regular old CRUD apps" are rife with SELECT N+1 and other simple and crippling performance issues.

> “these systems are building the rails in front of the train”, and it is not even an engineering problem most of the time.

You're assuming we're stuck with trains and rails. In the physical world, we are: if I invent a different kind of train that doesn't need rails, or a completely different way to transport freight, then I've solved about 1% of the problem -- we still need to build out all the infrastructure around it, change all our systems to use it, etc.

If I invent a different kind of process for handling data flow in an application, I've solved somewhere between 40% and 100% of the problem, depending on how 'private' it is, etc. "Building" the thing takes the compiler a few seconds. We might still need to adjust downstream dependencies, but if they're also written well, that should be extremely easy.

> it is a super-human, not-really-compressible complexity

While this definitely exists, my claim is that the intrinsic, Kolmogorov complexity of the problems most existing software solves is somewhere between 10% and 1% of the actual complexity of that software.

Sometimes upstream processes will need to change (usually becoming much simpler). This is usually the sticking point. if the upstream process is the U.S. Code of Federal Regulations, then this isn't likely (without lots of lobbying money to simplify it, which the FAANGs of the world should actually consider a tool in their toolbox, but most of us can't), and we can call the "intrinsic complexity" high.

But more often than not, that complexity is actually coming from the whims of some previous moron vice president who now works somewhere else, and they're conflicting with the whims of the current moron vice president. My whole point here is that the staff-level developers need the authority to tell those people to shove off and implement it in a way that actually makes sense. Yes, I'm aware that will never happen because of the deep toxic dysfunction endemic in modern corporations -- this is my point.


I wrote somewhere about there being two kinds of complexities (not the very important essential/accidental, but a different categorization).

I called them vertical and horizontal, not sure if they have some better name, but the vertical one would correspond to “hard” problems, like some complex lock-free parallel algorithm that had to be made in exactly that way to not have race conditions. Or some of mathematics.

The other dimension would be the essential part of business logic, where the business logic has grown in a haphazard, organic way - but since other services depend on it, it has to work as is, from bug to bug almost. This is more like a biological system — cells have plenty of redundant, vaguely similar pathways handling the same thing, it is chaotic, but if you were to simulate the whole thing, you couldn’t go around it, you would have to implement the whole complexity. For a more human example, history might be such subject. These things are complex in the same way compressing a random noise file is.

A software can have both kinds os complexity, they are different axes — and I argue that CRUD apps are usually of the second kind, most of the former kind of complexity are handled by external services/libraries (e.g. they might enter two addresses to a third party system to get two coordinates, and put it to another service to plan a trip between the two — the app only handles the communication). But these can get arbitrarily complex, and the specification is the program itself. That’s why we continue to run Fortran/Cobol software at certain banking firms.


You're right, they'd pay probably 25% more in payroll, get a lot less done in terms of features businesses need (compared to neat tech stuff we devs want to build), and the business would eventually go bankrupt.


> Where are the docker/redis/next.js/linux kernel/qt/roller-coaster tycoon creators

Well, we know stories behind each of these:

- linux kernel: comp sci Msc student - redis: written by a startup founder (in TCL[1]) - next.js: written by a founder of Vercel (as "Zeit") - rollercoaster tycoon: written by one dude in scottland

None of these people are Staff Engineers, in the sense of this book. You may find a few traveling between big tech companies but mostly as a prestige recruiting / consulting role. Or Torvalds, whose finances I don't really understand -- multiple sources say he gets a million dollar salary from the linux foundation?

You might also argue that the people who put more value on their skills as "hardcore engineer" end up in small firms and startups where equity comp can end up paying them what they're worth if the skills pan out. There was a "why is Google behind openAI even though they published the transformers paper" post recently that hinted that all the authors have left google for greener pastures, which supports this thesis.

[1] https://gist.github.com/antirez/6ca04dd191bdb82aad9fb241013e...


These are all much more similar to the work of inventors than engineers.

Except Rollercoaster Tycoon, which is more like the work of an artist.

Like, coming up with Linux is a lot like Guglielmo Marconi putting together a working radio transmitter/receiver in his parents' attic.

These things can overlap. Art Fry, inventor of the Post-it note, was in a kind of 'principal engineer' equivalent role at 3M when he came up with it (he was the senior scientist in a lab team).


Yes. All the FAANGs have such roles. Sure, most PEs are "applied" engineering or management right-hands, but the same companies have PEs up to VP/Distinguished Engineers deep in technology... React came from Facebook, Google employees James Gosling (Java), Jim Roskind (QUIC) is formerly Google currently Amazon... at all these companies, there's a ton of deep technology the public hasn't even heard of.


How do you find those teams and that work... or is it a matter of those companies finding you because of your open source work? For example, Google hiring Robert Griesemer, Rob Pike, and Ken Thompson to create Go?


I'd say it's a bit of both. You can build yourself up and find such work in companies which have it. Not switching employers very frequently helps, because building credibility takes time.

After you've built up credibility in some interesting tech, other companies would find you based on your work.

This is just my observation, so take it with a grain of salt


You either need to find something adjacent to what you already do, or you need to build trust where you work and jump on any opportunities that come up. You can get noticed for work by giving conferences talks or being active on the right mailing lists or getting to know the right people.

In my career I built trust internally and so got interesting work. I talked about that work and so got approached about other jobs, and I’ve been able to move when I’ve wanted to because I’ve kept in contact with some former colleagues.

I would however like to stress that the most important point of this is doing the aork, and doing it well. If you don’t do that then everything else is pointless.


You're seeing a variant of Price's Law ( https://en.wikipedia.org/wiki/Derek_J._de_Solla_Price)

Big tech sucks a lot, and I mean a lot, of the oxygen out the market for these roles.

If you take the total population of engineers, then how many engineers are needed to build TCP/IP stacks, new app network protocols (i.e. QUIC), databases, web frameworks?

The unfortunate truth is that getting deep experience is rare.

Risk aversion is a core culprit; would you trust a tech not supported by a large community? This creates a tremendous market pressure on a handful of players.

This is one of the reasons that I had to work at big tech to get the experience and skills that I wanted. For example, when I was at AWS, I read every COE (cause of error) report for the big services. This helped me tremendously both as an IC and leader.

Now, I hate that I had to bend the knee to big tech...


One area to find great engineers (and interesting jobs) is at database, infrastructure and devtools companies. Places like Cockroach, PlanetScale, Docker, JetBrains, CodeWeavers, Fastly, etc. And the databases, infrastructure or tooling teams within Meta, Microsoft, etc.


I'm at a point in my career when I need to decide if I want to work for European branch of American Big Tech or try a 20 people database startup (got offers from both).

I've got 2 yoe in high performance c++, working on data processing engines. I'm really tempted to go to the startup... But big tech pays more. And I feel like I could actually learn how to use tools properly before I come back to writing them. Any opinions?


Based on your experience looks like startup is a good match. The argument about learning the tools first doesn't sound that convincing to me , it is mostly you justifying the high salary. Also database is not a tool per se and even if it is you will mostly understand how to query it , which is just like learning SQL and I don't think it will help you in writing a database


‘Big Tech’ will always be there in some form down the road. If you have the risk tolerance and early career flexibility, take the path less traveled.


Go for the startup. You will have more opportunity to shine. With 2 yoe, you will get held back at Big Tech. Even if you know your stuff, the yoe will always be held over your head. At a 20 person startup, you will shine and be given more opportunity. This will bolster your resume and maybe even divert your career in a new and exciting way.

Big tech isn't going anywhere. If you are getting offers from big tech now, you will later as well. I always tell people to start at smaller companies. They are way better when you are young because you will face a wider array of problems, which builds better experience. Big Tech is great when you are older. It is generally more focused, higher paying, better benefits, but can often be less rewarding.


If you have never worked for a reputable big tech company, I'd do a brief stint for signaling, networking, and mentorship purposes. Then go to a rising startup.


Database startups really struggle because they compete with free and most database users need very little from their database. Enterprise customers do have advanced needs occasionally, but often it’s just about hoarding data or tracking users, neither of which does anything for society. Database startups are unusually hard because the real customers don’t want to pay and very few founders are able to get the hard tech right and are also willing to do the schleppy work of scaling up an enterprise sales team/process.


That's a really personal decision but if you want to send more details I'm happy to give a more thoughtful response. My email is in my bio.


Out of curiosity, do they have junior engineers too? I would love to work on docker or jetbrains for example.


Believe it or not these are all real companies that hire a variety of skill levels and even hire designers, frontend devs, support people, sales, marketing and so on. :) I mean not necessarily all of those companies are hiring all of those positions at every level this minute.

But my point is that, you can almost always find some way into an interesting company such that you may be able to eventually pivot to (or at least periodically work with) a team you're interested in.


Both Docker and Jetbrains are working on software projects just like the rest of us. There is still boring shit work to do that no one else wants to do, so they need junior devs to shovel it off to. So yes, they have juniors, mid-levels, and everything up to staff and beyond. They are no different than any other company.

The difference is probably that it is harder to get those jobs because everyone wants to work for the flashy exciting companies. I was considered for a job at Docker a long time ago (when I was an early-midlevel) and the recruiter told me that over 1,200 people applied in 5 days. For entry-level/intern positions I assume it is similar or even worse.


In my experience these people are usually in the types of environments that most engineers hate to work in. Environments completely void of the creature comforts we're used to for solving the task at hand because they are working in a new domain that likely needs new abstractions. Tools and libraries such as testing, build, automation, data structures, concurrency, fundamental primitives etc. that are suitable and at the right level of abstraction for the task at hand.

Really bad engineers see these environments and complain without doing anything about it, ultimately leaving the project. Slightly better engineers complain about the tools and blaze ahead anyway leaving a mess in their wake. The great ones I've been so lucky to work with pave the way on those fronts at the same time as solving the problem at hand and make it easier for their successors. It's quite beautiful when you see it.


I work in an EE dominated industry where staff and principal titles are only handed out to 30+ year veterans who know their domains better than anyone else in the world. These are people who specialized in one thing their entire career (mmWave RF amplifiers for instance). These companies are every where big software is at, and then some. They don't pay great, they are not "cool" to work at. Gov is often the biggest customer. Doing something novel in these fields will require a PhD, a decade of corporate R&D experience, and significant corporate backing.


Everything about this is why people rightly go into software instead.


The only time I've seen anyone really do half of what this books describes as a "Staff Engineer" was at a small(ish) hardware company, PowerVR, where the OpenGLES driver team was 5-6 people, the team lead was a developer and architect who also did a bit of management, rather than the other way round. Then there was a manager on top of them in turn for multiple teams, but they weren't involved in the technicals at all, not even in the loosest "architecture design" ways, they purely did the people management.

In a larger company now, still working on GPU drivers (AMD, but not the "main" platform), there's a couple of people who might do a bit of this, but feels more like you get specific domain experts rather than anyone designated by the company. The team is notably larger than at PowerVR, and there is a "Manager" who is more involved in doing things like placating customers and prioritizing work and issues, but again completely uninvolved in the actual development.

In none of these examples does the job title have any relation to the differences in their work, both used completely different stacks of terms and difficult to compare cross-company.

But I guess it's all "Hardcore Engineering", and even the newest members of the team are expected to design systems themselves. Hell, straight out of university at PowerVR I was designing and implementing my own stuff, and significant systems not just following an already concrete architecture. But it was a small enough team everyone was involved in feedback, and I did feedback to them in turn. So I guess GPU drivers are still greaybeard "Hardcore Engineering"?

This may be helped by driver development often being pretty well defined, you have a spec (which you may have been involved with designing, but very much a large collaboration), you have hardware architects and another team trying to figure out the next generation might look (are they the "true" architects here?).


There aren't too many hardcore engineering jobs. They are being done in startups where hard problems are being solved, and even there the average startup is just a website which is acting as a broker in a two-sided marketplace, or some variant thereof.

If you step back and think about it, it makes sense. The majority of companies are one-trick ponies, maybe following up with a few additional products. Incremental development is the path of least risk once product-to-market fit in a large market with high growth is achieved. As public companies (and late-stage startups or private companies) are incentivized to reduce risk, the majority of the people will be doing incremental work. The growth of the pseudo-technical managerial class in the form of Product Managers, Project Managers, and umpteen levels of mid-level managers further encourages the relative lack of 'hardcore engineering'.


Why do so many people in the tech industry have so little respect for their peers who work elsewhere in the industry?

The idea that large companies aren't solving hard problems, that that's only being done at startups, and that large companies are 'one trick ponies' is just incredibly myopic. Have you worked at a large publicly traded tech company?

Sure, in any business a bunch of the systems will be trivial. In larger businesses - especially ones that have grown through acquisition - there's also some scaling-law complexity that means they have to also do a bunch of annoyingly trivial work gluing together lots of duplicative and redundant trivial systems. When you look in from the outside of a large business that mess can definitely obscure the fact that at the heart that stuff is all in support of, usually, several significant and impressive engineering achievements, which support and drive that business forward. And they're probably performing operations that, from the outside, you would hear the name of and think 'well, that doesn't sound very difficult'.

I'm going to give a non-software example, that I think might show a little bit of an analogy for how 'engineering' at big companies can be at the same time operating at a complexity you wouldn't imagine, and yet be accomplishing something you might think from the outside is totally trivial.

Jump to this timestamp in the recent Smarter Everyday video about Kodak's film manufacturing line: https://youtu.be/mrJP82ZZiag?t=1742

See that workshop? Those precision engineered toolheads they call 'hearts' are the punch+die sets that they use to cut sprocket-holes in film. Everything there is bespoke, custom-made, and meets constraints you would never have thought of. It's engineered.

Software engineering in large companies is like that. If you don't think that banks contain software systems as complex and carefully engineered as those hearts? Or that manufacturing control software isn't in the same league? Or that the inventory management systems that drive a large retail business aren't on that level? You just have no idea what engineering is.


My point stands, particularly w.r.t. individual software engineers. Do you think any of the companies you mentioned had one, or even two/three engineers build the complicated marvels you are talking about? Do you think they would incur the risk of that as public companies? I am willing to bet the answer is 'no', particularly in this day and age.

The point of the original question isn't whether products as a whole are complex and hard, it's whether an individual engineer will get to do fairly large, complex systems.


On their own? No. Of course not.


This is the hidden side of staff engineer. The bit books don't get written about for the same reason "how I got rich" books leave out the people who worked hard but got less.

Somewhere someone has to have the time to build out the tools, then dig the foundations and lay the scaffolding and the supporting walls. None of which looks like the artists impression and none of which has a web interface you can show.

So Staff engineer is like architect. Holding the nervous customers hand while they spend a fortune to have a large hole in the ground.

You cannot build a bridge by stacking bricks in front of the customers feet one at a time in a nice iterative process. You cannot always "see" progress at the user level.

to me the signature of really good software is when one marginal change delivers outstanding value and the engineers just say "was that it".


What you are talking about are engineering investments. Generally you have to make the case for those. Management will generally not want to make those, because they are costly, and require long term maintenance. You have to prove that it will be good for business somehow. No one gives this to you, you fight for it, or build it without asking


> Where are the docker/redis/next.js/linux kernel/qt/roller-coaster tycoon creators?

They create their own thing from scratch, and turn it into a job.

The first 5 from that list were open source creations that became big because they met a need at the time and lots of people adopted them. Which is one route into creating your own thing.

I've seen senior engineers who have leveraged lots of domain knowledge to build a prototype of something super useful internally within a company that then grows in adoption and size as people recognise it's value. Projects then start to organically cluster around the core that was built solo.


I have two Staff+ level positions open on my team. The expectation for them is to be able to work in a cloud-native (AWS/K8s/Terraform/etc), distributed systems (Kafka/SNS/SQS/Kinesis) that is mission critical because it touches people's money (fintech). And new client code gets written in modern stacks (Swift/SwiftUI, Kotlin/Compose, Typescript/React/Next.js).

If I were still an IC rather than a talking head on Zoom all-day, my role would map to somewhere between Senior Staff and Principal. I would write microservices from scratch, deploy to the cloud, operate them, and then write all of the clients (iOS/Android/Web) myself. I've been doing this for ~20 years so I have the ability to quickly pick up new languages, frameworks, platforms, technologies, etc.

The current Senior Staff/Principal engineers do projects like decomposing that old miscellaneous database from the original monolithic codebase and implement it across all domains with correct boundaries. Build libraries that all engineers on the team use. Ship V1 of that new product that is very strategically important to the company.

(Send me an email if you are a Staff+ engineer that is looking for something new!)


The list you named is a bit strange, I wouldn't put something like docker anywhere near the others, their innovation isn't really on the technical side.

If I had to take a guess, a lot of these places are close to hardware.

Working with hardware has the additional bonus of often mandating high performance. Any task becomes a lot more exciting when you have microsecond deadlines for controlling an industrial laser.


At big companies there are high level IC roles, supposedly "mirroring" the manager levels, for people who are the "creators" and effect change in tech on a large scale without people management. For example I remember at Facebook I attended a "class" on keyboard shortcuts, taught by one of the creators of a *nix utility (I forget which)


At staff and principle level, the job becomes mentoring and working with other senior people under you. There might be a business need/problem, and you have the vision to address it. You gather the requirements, do feasibility studies, evaluate the technologies, nail down the architecture, design the components, and work closely with other senior engineers on the prototype/design/implementation. You might code up the prototype and proof of concept during the exploratory phase. You might code up couple components you believe you're the expert in doing it.

At the end of the day, you're the voice and the advocate to ensure your end-to-end vision is implemented.


It's up for debate, but I would define "staff" as "here is a vaguely understood problem we believe has to be solved; find out what it is, whether it actually is a thing, why it happened, whether it is worth the time to solve, and finally guide others to solve it for us." It can get manager-like, but the lack of direct person oversight is distinct enough IMHO.

The creators of the software you mentioned are rarely in a role defined as such. If you really want to go the hard-core coding path, the startup scene is the best place to look.


> I would define "staff" as "here is a vaguely understood problem we believe has to be solved; find out what it is, whether it actually is a thing, why it happened, whether it is worth the time to solve, and finally guide others to solve it for us."

I would define that as "software engineering". What else are any of us doing all day? The compiler's job?


It's the scale of it.

"Here is a vaguely understood problem, that might take 2 hours to solve."

"Here is a vaguely understood problem, that might take 2 years to solve."

Though if you're used to the latter timescale, you might not consider the former as all that "vaguely" understood.


They exist, and they aren't that rare. My org currently has a noticeable percentage of staff+ ICs, not managing, and I'm actively encouraging folks to think careful if they really want management. I am far from the only manager doing that.

But yes, jobs are very rare. Staff+ ICs tend to like to stay where they work (because great achievements take time), there's only a limited number of roles, and a lot of this is word-of-mouth in a given field.

I'd look either at FAANG - they're large enough to always need staff+ folk - or startups once they have round A. They live or die by having really experienced and productive staff+ folks, and they're large enough that they can offer staff+ interesting challenges.

Why not pre-founding? At that point, any good staff engineer I know is driven enough that they'd be better off just starting their own. In a small startup, the founder is either technical and interested in solving the hard questions, or non-technical and you'll have essentially a CTO role, but without founder credit.

It's not a hard-and-fast rule, there are exceptions to everything - but that's where I'd focus my search if I were to search for that kind of role.


One thing I often see, I guess similar to game industry, the "cooler" the job the crappier the salary. E.g. automotive or avionics software gets written in Italy or Spain, paying (annual) 38K Euros to senior devs. Roller-coaster control software company in Argentina paying even less. I also often see such engineers moving into CRUD/PHP/JS for a much better pay.


> Where do all the hardcore engineering jobs live

There is NO such thing as hardcore engineer job position that doesn't involve a lot of management. All the good engineers that get jobs are the ones who do management work as well as coding. If you cannot do this, the industry will just close its doors for you.


> There is NO such thing as hardcore engineer job position that doesn't involve a lot of management

So bizar. I've been in a few companies with senior "hardcore" engineers heads down in code, without management responsibilities.

> If you cannot do this, the industry will just close its doors for you.

Wait what?

A good engineering company will strive for a mix of seniority within teams of ICs. Some of these seniors may become "staff", which usually means, can talk tech stuff to the brass.


It only changes the kind of management responsibilities you're talking about. Yes, some positions will have zero employee management, however you'll be responsible for product management. There is no product in a big company that can be created with zero collaboration, so you'll be responsible for managing collaboration with other groups, determining features and getting ok from management, making sure that others are doing their work, etc. It is management nonetheless, sometimes with lots of meetings, just with a different goal.


Most companies are not "good" engineering companies. They are at best mediocre.


In my opinion this is a big reason software is so brittle, needs to be constantly patched and updated, and overall innovation in software moves very slowly. Having engineers do management work is undermining how hard engineering is -OR- underestimating how powerful software is.

In other words, the Idea is that engineers adds more value to a company if they also do all these management tasks, which implies that engineering is not enough and is not as valuable on its own - something I would contend because as we can see software is capable of amazing things like AI that will soon automate all these management tasks anyway. If companies invested in their engineers doing only engineering, then people could maximize their skills, and reach those new levels of productivity thanks to advanced software. Instead the industry limits engineers, and insists on them hitting a technical ceiling, effectively pushing them in a non-technical direction in favor of hiring younger engineers to do the "grunt work". Software engineering is only grunt work when you don't understand its true potential, and its endless complexity that takes a lifetime to master.


I see it in a completely different lens. Engineering is hard. Good engineering more so. What's even harder is to manage those projects well without having the technical skill to understand it. Whenever I find a technically challenging & innovative project, there's always a technical lead/manager that makes it all possible.


Of course, but that means (at least it should mean IMHO) that an engineer made a career switch into management, and those skills carry over and are valuable. I think when a company pushes their engineers to do more and more non-technical tasks, no matter how small, it basically says they don't value engineering and see software problems as a problem of allocating people and resources instead of investing in better engineers and giving them control to innovate.

I'm not saying managers are not necessary. It just seems like there is a pyramid structure, and managers are at the top. If you want to be on top of the pyramid you must evolve into a manager and let others do the engineering. I'm willing to grant this is ok in non-software companies, but in software companies it's bizarre and I'm even thinking software engineers should be unionizing and getting some representation.


Those jobs (where you create the next Redis) almost don’t exist. Instead you create something, toiling for years for no pay, and if it catches on you are set for life.

But HFT jobs might be interesting if you want to do hardcore engineering. I imagine there are a lot of interesting ML jobs.


There are a few "hardcore" staff/prinicpal engineers at my company (a well known tech unicorn). They are basically OGs who were a big part of the company's early success. Really smart and saavy guys who are left alone to focus on executing on big stuff.

The reality for other staff engineers here is exactly opposite though - you're not allowed to just be "executing" and your day consists of being stuck in meetings, doc writing, and management-lite. Honestly it's so bureaucratic and so far removed from the actual tech I really got turned off from that career path as I got more visibility into it.

For smaller companies it's probably much more fulfilling though.


Dogma in the tech industry is that the ceiling on individual contributions is close to the median. That the leverage is all in coordinating larger groups of engineers. Belief in, affection for, or aspiration to be the lone-wolf super-genius coder who does something transformative in his own editor is a negative signal, associated with "brilliant jerk" and "not a team player" archetypes. Tech companies are generally set up to socialize it out of younger engineers and to have an immune system to reject any more senior engineers who endorse it.


And the stronger this rejection, the stronger the pressure on anyone who represents a counterexample to the dogma to leave.


Strong coders are usually pressed into technical leadership roles where they don’t have much time to code. It’s true that if you shirk your non-coding duties you’ll get managed out.


I am an engineer that got shoved into this role shortly after graduating with an MSc by being the most knowledgeable person for this project.

I am by no means a rockstar in any particular field of software engineering, but I have worked on a very wide gamut of projects. This enabled me to dissect the task into the constituent parts in an attempt to reduce uncertainty and complexity.

Fwiw, I have no life, severe executive dysfunction that doesn’t allow me to stop thinking about what I am working on, and an abundance of curiosity.


You could read the main linux kernel git log and see who the top contributors are.

If you prefer system level programming there are jobs out there and plenty of work to do. I dunno if this counts as, "hardcore engineering." To me, engineering, involves many other skills other than writing code: being able to specify systems clearly and, as the occasion demands, formally is a part of engineering; communicating with others; Knowing which trade offs to make depending on a situation, etc.


>Where are the roller-coaster tycoon creators?

Hello!

I'm making a roller-coaster tycoon inspired game, in the form of a city builder. I ended up creating my own path finding algorithm that 10x's the performance of A*. I felt this would be useful since pathfinding is one of the major slowdowns of simulation games.

https://twitter.com/YesboxStudios/status/1647224184597102592


I've worked at a big telco and now FAANG and I can tell you there is so much non CRUD work it's crazy. There are very very hard technical problems to solve in FAANG.


Depending on the company, this could also be a senior architect, technical fellow, or something similar. Or just an engineering manager or tech lead. It's hard to know from the outside exactly what each role really means.

My employer has Technical Fellow at the top of the architect job family. It's equivalent to a director or senior director in seniority, but remains an individual contributor. These are the people creating (or more accurately, enabling the creation of) the really amazing software here.

But, given the business we're in, the software they build is never going to enter the common lexicon like Uber or Google or whatever.

And I'm a little confused by your "most companies are consumers" comment. Sure, in a literal sense, most software projects are built using tools written by somebody else. If you want to be building those tools, you need to get a job at someplace that builds tools (which usually means proving yourself an expert in a particular niche/tool/whatever). But, there's plenty of software between "simple CRUD" and "creators the next [impactful tool or infrastructure]"


Doug Crockford was "Distinguished Fellow Engineer" or some title like that at Paypal.


We're all out here chilling in the midwest working at lifestyle businesses.


smaller companies, and new teams in larger orgs. if you work on an existing system there's less 'interesting' work and more iterative improvement. larger orgs can produce hardcore stuff, it's just usually too large to attribute all of the 'interesting' stuff to one person. a microservice is just a library with infrastructure, not that much different from writing a small part of a 'hardcore' project. also you can start your own project and do something amazing


> Where are the docker/redis/next.js/linux kernel/qt/roller-coaster tycoon creators?

Unless they're very fortunate, they're wishing they could do the groundbreaking stuff that's in their bones, whilst they get ordered to ignore it, to other stuff that's higher immediate priority.

So they do the needful while tinkering as they can find time to.

> Where are the people creating amazing software and do they get a special "advanced developer" title?

No, they get no special title. They just get ignored, unless they get lucky and find a manager that supports them.


The exact idea of the Stuff Engineer is that they are not managers. They are leaders though, it is a different matter.


Research.

End of the day, everyone at Bell Labs was a researcher with a PhD.

Engineering, bringing research to people, trends to CRUD over time.


I know people like this, I work on major public cloud products. Sometimes they are “staff” or other high level-titled.

But you have to recognize some of the projects you’ve listed are mostly notable because they are very well documented and have a lot of OSS (besides RTC) mindshare; there are just as technically challenging and valuable projects that are less well known because they are proprietary sold software.


Have you read the book in question? The whole point of it is that it is not a manager position.


Yeah I'm wondering the same. I have always been looking forward to doing something fundamental and those people are the ones I look up to.


I'm a Staff Engineer, but I hardly do anything that this book describes. Maybe it's my company, but we have so many Staff Engineers that if we all were to do this stuff, nobody would have time to do the actual work and there would be too many people trying to lead.

Perhaps the levels are diluted and my title doesn't match my actual role at my company, but it feels like this is an industry-wide phenomenon.


Titles are very much diluted.

I've seen companies hire college sophomores who have never heard of the concept of a database and make them Sr Engineers on a analytics teams. I've seen Sr Engineers hired with one year of relevant experience.

At this point, "Sr Engineer" is just the new "Jr Engineer". There's nothing wrong with this, but indeed, Staff Engineer tends to mean 8+ years of experience.


It's because we still have no standards as a profession. Whatever bullshit trends in silicon valley, suddenly everyone follows it, petrified that they might get left behind or are missing some important new thing.

I remember when Systems Administrator was a noble and important profession full of smart, talented people. But a lot of people misunderstood it and made fun of it, so it became an unattractive title, and instead of changing the role, they just made up new titles. Now they're cool and in-demand, and still nobody understands what they do.


Title inflation isn't specific to tech. Look at the banking industry, pretty much everyone is a VP or SVP of something.


Or sales. The startup I used to work at, absolutely everyone in sales had some kind of Director or higher title regardless of seniority or role. I guess the theory being you're more likely to take a call from the Senior Executive Director of Business Development (never mind that said Senior Executive Director is 23 years old and has zero decision making authority). I always wondered if people actually fell for this crap.


It's prolific because banking clients want to work with someone in a position of authority.


This is the way.

("Sr. Prompt Engineer", "Visual Strategist", "Director of Front of House") People want to have some leverage to get things they want done, done. Sys Admin -> DevOps (Cloud) Engineer. Things change. Adapt or die.

If you read IBM's coding standards from 1980 and compared them to Google's from 2000s and then to Today's AI journey, you would have complaints about each. Processes form from people. Change comes from people.


Funnily enough, the author of this book started out as a systems admin.


Thats because nobody can get hired as an entry level or junior engineer

If you arent internalizing the senior title immediately then you will get nowhere

If you’re not forming an LLC and putting yourself as an junior employee of that shell company with some verifiable information or project, then I dont know how to help you


Staff engineer is the new senior engineer.


Unpopular opinion: With quickly growing organizations and therefore more inexperienced people managers, promoting someone to staff engineer is an easy way out of responsibility.

How often have I heard "you’re at a point in your career now where a people manager will only hinder you" to justify not being capable of supporting me.


I’ve seen the opposite problem far more often. Less experienced managers who are perfectly fine at managing junior engineers attempting to manage senior engineers in the same way.

It’s refreshing when a company realizes that staff engineers with 15+ years of experience don’t need daily management.


Curious your thoughts on who a Staff should report to. I've been at a handful of places where there were Staff Engineers (some of them even deserved it!) and it always seemed like the promotion from Senior to Staff came with a change in reporting structure, where now instead of reporting to a Manager you're reporting to a Director or a VP, even the CTO in smaller orgs.

I think this is a good indication of increased authority/responsibility, but also an easy way to shirk management responsibilities as you said. How much 1:1 management is a VP or CTO going to be doing with a Staff Engineer? Do you really want a VP with all the political nonsense that comes with that type of position to have their own pet engineer they can bother about things?


As a staff in practice, but not in title, here's how it works for me: My manager and I are at the same level. We work as peers. They handle the people stuff of the team, I handle the technical stuff of the team. They help with routing people/HR/management questions, I help with routing technical questions.

If you think "Gosh, that person (on another team) sure was rude", that's a question for my manager.

If you think "Gosh, I sure have no idea why that API (from another team) sucks", that's a question for me.

In terms of reporting to my manager it feels more like having a corner-man in the boxing ring than a boss. I fight the fight, they say "Hey you're dropping that right hand on your left hook, stop that or you'll get rekt. Here's some ice". And they spend more time thinking about and navigating politics-like issues in the org than I do, which means I can lean on their expertise when "org stuff" is needed.

I probably have similar or more years of experience than my current EM. The person we both report to, happens to be a true greybeard.


You're describing being a Senior Engineer. Staff (according to this book) goes beyond that.


This tracks with what I've read in your newsletter :)


I'd argue that if you're a staff engineer, you need to be adept at navigating the "political nonsense." A director/VP should be able to think of you as at least as senior and capable of handling ambiguity and being self-directed as any manager.


Staff engineers that report to directors or whatever the equivalent 2nd or third mgmt level is are most effective in my experience.

An important part of the job is to “borrow” your boss’s authority and for that to work they need to have some. I’ve seen staff engineers be ineffective because of their boss’s position many times.

Reporting to someone higher than director you start getting too disconnected from on the ground stuff (architecture astronaut syndrome) and lower the ground is all you can see.


That's been my suspicion for a while now.

The last 3 companies I've worked for had no juniors and mid-levels, but only seniors and a handful or staff engineers. What staff engineers did on a day-to-day basis was hardly different from what the senior engineers do, besides having more responsibilities and maybe more say over things like architecture. Depending on the company, a staff engineer could be managing or not managing at all. In general, I don't think these title really mean a whole lot, that is unless one is intent on managing specifically.


Can confirm. Didn’t want to be staff and don’t think I’m at that level, but it was the only way they could give me the raise I was demanding within the rules of the silly HR system they’d built.


I disagree but only because I thought this way and it hurt my performance.


Yes, but if you stay where you are and don’t push the managers you work with to take execution responsibility you will damage your career.


I've always viewed the levels sort of like this, obviously very dependent on company:

Juniors need hand-holding at every step. They may be new grads who don't even know how to behave in a professional environment or very inexperienced folks 1-2 years out of school taking a role in a completely different language they're unfamiliar with. You're talking to them anywhere from 5+ times a day to every other day as they transition up. They may have lots of meetings, especially during onboarding, but they're mostly listening. Their day-to-day is almost entirely "how" with very little "why."

Mids need hand-holding for the bigger picture stuff. You still need to give a general shape to their work but you can expect them to look up the docs for your validation library if they don't know how to do something, and you can expect to format and structure their code and PRs the right way every time (the junior will likely ping you on Slack asking how to write a custom validation function at least once). But it's unlikely you're going to need to talk to them daily. Hopefully they have large blocks of uninterrupted time to work as these are the folks churning out lots of tickets. They can also start thinking more about "why" than "how."

Seniors shouldn't really need hand holding for much of anything. Give them a feature or an entire product and they should be able to figure out approximately how to do it and what resources it will take. More meetings than mids but still need uninterrupted time. IME my productivity starts to really dip if I don't have at least two half-day blocks in a week. I'm in a new-ish job (first year still but 14 years in industry) so have been lucky so far but have been starting to block off chunks if I see my schedule filling. Seniors are probably running several of the meetings they're in, and maybe directing work for juniors and mids. I've been in companies where the line between Senior and Engineering Manager is very blurry as well with new EMs still spending 1/4-1/2 their time writing and reviewing code. And in most companies this is the "terminal" or "professional" level where you're not expected to move beyond here. Lots of folks will hit senior and be there for 15, 20, 25 years until they retire.

Staff is where the amount of code you write starts to drop off, meetings start to ramp up (you're no longer able to block off half your day), and in my opinion the biggest difference, you don't get assigned anything to work on. You're expected to have intimate knowledge of your business domain, your technical domain, and the challenges in both, and formulate plans to use technology to ease problems in both. I also feel like this is the first level where most companies don't need them, including a lot that have them. We have about 85 software engineers where I am, and two of them are Staff, which seems like about the right amount percentage-wise. There's only so much big work to go around and while there might be a lot of people capable of doing it, you don't want 10% of your engineers to be Staff and fight over the 0.5-1% of Staff work that's available. This is also the level I see it much more important what you're doing outside of work. Not as far as side projects, but going to conferences, speaking, user groups, having content available that works as advertising for your and your company, etc.

And then of course Principal where 99% of companies don't have or need them, where you're basically a VP or Director but on the Individual Contributor track rather than management. These are going to be so company-specific it's not even worth talking about them except in the context of a particular company. You're probably at Google or Microsoft or similar at this point.


I think there's another past staff/senior where you get to tell all of the other groups to leave you alone, and you're back to being dirty and building cool things. This is where you're most valuable and where they want you. But, you need the confidence that you've got it handled and you're trusted to communicate as needed.


Yes this is the Guido/Rasmus level we should all aspire to!


I don’t know what kind of jobs you do, but there is no way on Earth that a senior architecht VP whatever will even start to grasp an “organically” grown monstrosity most places have mustered into being. Like, no matter how experienced someone is, the concept behind the whole thing is ill-specified, overly complex and not actionable upfront. It’s 1-2 months minimum that they can do useful work in my experience, and it has nothing to do with technological knowledge, simply the business knowledge is so vast.


What’s your ratio of staff engineers to all engineers?

I always think of staff as engineers working across multiple teams, so there should be ratio of 1:15 to maybe 1:30 (or in another terms, staff engineers should represent 3-7% of all engineers). If the ratio is smaller, like 1:5 or 1:8 then staff engineers are really just senior engineers


It might depend on the organization of course but I hear what you mean here. It does seem somewhat of a phenomenon..


My favorite version of Staff Engineer is "Person whose prospects for career advancement are limited by their seniority, who is consequentially incentivized to care about doing the right thing".

Least favorite version is the one who doesn't realize this, and makes a muddle of an already working system to demonstrate their impact.


I've been on both sides of the latter case.

I think we should encourage "muddling" to the extent that it actually improves systems. However, usually such engineers underrate how difficult it is to actually improve said systems while maintaining legacy feature parity.

That is, the answer is not to discourage muddling, but to have higher standards for project management.


> Your company might have a written definition of what good engineering means - written values, and engineering principles. But the clearest indicator of what the company values is what gets people promoted.

This is really the takeaway you should have. Be observant of what is actually rewarded. Companies are made of people. Unless you're in some ultra bureaucratic government position that is 100% impossible to get around - the guidelines are not really that important.

Instead, it's all about your relationship with your management chain. If your management chain likes you (the reason why doesn't matter) then that's all that really is important to your progress in your career. You can be more impactful than any employee, add to the bottom line of any business meaningfully, and still get fired because your management chain doesn't like you. And vice versa - seen folks do nothing to add to the bottom line or make any impact and yet - promos come their way.

Getting to staff and beyond is entirely about politics. It has little to do with your actual work. I'd highly recommend finding an organization that aligns to you. If you feel like an outsider in your company - switch companies until you find one where you feel accepted. If this is not possible (and it often enough isn't possible) - then ask if it's worth it and start wearing a costume and play whatever part you think will get you further. (Even with this attitude - it might still not be possible to advance. We live in a unjust world.)


Brilliant advice. I don’t like it because it involves doing things I don’t like. But all the most effective advice is like that.


This cult of staff engineers really need to go away.

People read it and all of them like to act like a staff engineer when in fact there are only available slots for a fraction of the engineers.

Now nobody wants to fix bugs and improve product quality. Why? Because those tasks are not staff-level work.

The reward system and the definition doesn't work.


I strongly disagree. “Staff engineer” as a construct should be understood as an alternative to the previous dominant paradigm, which held that manager track is the only progression track beyond some point (usually Senior or a “Senior II” level).

This toxic concept was pretty commonplace through 2010, particularly outside Silicon Valley.

Any system can be done wrong. But this system is, I believe, objectively better than the one preceding it, as having a dedicated IC track gives a way of growing your engineers who aren’t interested or talented in management.

What you are complaining about sounds like an instance of poor management or poor team composition, not anything to do with the concept of Staff Engineer; if people are not doing their job then they are not being performance managed properly. Showing you can act at the level above is great but you still need to nail your core responsibilities too.


Alternatively, I've worked with Staff Engineers who are still fixing bugs, and also building (maybe staff-level?) tooling and project improvements. The most significant issue is the lack of standardization of expectations. "Staff" doesn't mean anything in a vacuum because it doesn't mean the same thing between any two companies.

Personally, I love doing senior stuff. I don't know if I even want to be staff at any point, maybe I'll want a different challenge someday, but I still get a lot of enjoyment out of churning out high-quality code and shaping things at multiple levels. But if I stay where I am, I'll eventually be promoted to staff with minor shifts in the work I do.


> Staff Engineers who are still fixing bugs, and also building (maybe staff-level?) tooling and project improvements

Because they already have the title of staff, and now their success is the team's success, so they are okay with doing boring work.

However, this will not get them to senior staff.

If you are not a staff and want to be promoted, this isn't the way to go.


While you're not wrong I want to point out that you generally don't get the opportunities to practice staff-like skills until you've proven you can do the 'boring' work too. The system does incentivize performative leadership, but only for a relatively short amount of time in your career, so I don't think this is a huge deal.


Perhaps in some cases, but the ones I worked with pre- and post-promotion didn't really change what they were doing over that period. What I'm saying is that titles are fluid, not fixed, in meaning. They can be inflated or deflated according to an org's mood.


Those can be some of the most fun problems. Fixing deeply rooted reliability or scalability problems in the business's core product without disrupting users? That's absolutely a path to recognition and rewards.


From personal experience: no it is not. This mentality leads to nothing but frustration and burnout as upper management sends you to tackle your "staff"-project.

Titles are all based on organizational politics and the macroeconomics at the moment. Were you hired during the 2021-2022 hiring spree where companies would give anything to keep engineers from getting poached? You probably were hired at Staff. If not, then what were you doing? Lol these folks were the first ones laid off.

Personally, I received my highest raises in 2021 and 2022. Multiple salary (and equity) bumps; a title bump. Life was fucking good.

Nowadays, you can just be glad not to get laid off. Instead of the promotion they promised, you get a slap in the face and some chump change.

I know I sound jaded but the fact that there are MULTIPLE books on "Staff"-level engineering (all un-ironically written by managers and executives rather than ICs) is completely laughable.

/rant


Read this; helped me get to staff. Some takeaways:

- If your management chain isn't supporting you into a staff promo, it's because they don't value the work you're currently doing.

- A staff engineer isn't a highly-productive senior engineer. Stop optimizing for the things that got you promoted to senior.


Everyone in this comment thread seems to have a different definition of staff engineer. And that is kind of the problem with this term. It's almost devoid of any meaning now, like the ubiquitous VP title at a bank.

This book should probably be titled "Being a staff engineer at big tech - how to navigate the performance process to get promoted as an IC". From my brief skim, that seems to be what it's about.


I've been reading the book and I agree with you regarding the book being very specific to a type of company culture. I still find some of its ideas useful, not because I didn't think about them before, but sometimes it helps to organize your thoughts when someone else is talking about them out loud. Not a life changing book but useful still.


I certainly like that companies are introducing yet another step in the IC ladder. Before it was like: junior1 -> junior2 -> senior1 -> senior2 -> manager. And the money you get by being junior2/junior2/senior1 is not that much. Nowadays I see companies doing: ... -> senior1 -> senior2 -> staff1 -> staff2 -> manager. So, in the past I have quit a job at level staff1 (decent money), just to go to another company where they label me as senior 2 (more money, but this is not the topic of discussion here). So now, I have yet another opportunity to make more money by being promoted to staff1 (and then staff2) basically doing the same thing I have been doing all these recent years.


I would stay away from any company that treats Staff as a natural progression on the road the management. You just have 4 senior levels at that point, which is fine if that's what you need/want, but it shows a genuine misunderstanding of the IC path.

I'm a big fan of the 1 and 2 levels for mid+ as it gives a little more granularity, and the opportunity to increase pay a bit more and still have reasonable pay bands. But at the last senior level you really need to start focusing on whether you want to be in the IC track or the management track. You can certainly switch (I have) but they're very different and "ok you performed well as a Staff 2, we'll promote you to EM1 now" is a red flag in my opinion.


I'm staff and I don't consider Manager a vertical step at all. It's a horizontal. Completely different type of job and I really doubt they make much more if more at all money than me. I would never go manager.


I'm a manager now and it was a lateral move from development, no salary increase. So yeah, sometimes managers earn around the same as the top people they manage.

Heck, I wouldn't mind earning less than some of the most brilliant ones. In fact I think I do earn less than someone that reports to me.


At meta and google they certainly don’t make more, the L6 manager and engineer bands are the same. Same for l7. At director level the bands are so wide it may not be the same between ic and managers even if it is in theory.


This is honestly a great resource! Funnily enough I've been using it internally at my company to both:

- Facilitate conversations and a workshop with other Managers around what our expectations generally should be for Staff+ Engineer levels

- Drive a deeper conversation with each of the Engineers I'm responsible for, to help them explore more of the "untold" parts of the IC role, what that could look like, and how they could work towards it

Freeform diving into it with people has been quite beneficial for many that don't have much of a clear idea of what it means to go beyond senior, and how to navigate the ambiguity that it can bring with it.

I've found that each person took away their own specific things from the book which was quite fun to see :)


My archetypal staff engineer is Wernher von Braun, father of Saturn V. The quality he demonstrated:

  - Breaking ground. He turned a seemingly impossible idea into reality. 
  - Getting substantial breakthrough in each iteration. 
  - In the trench. He was the designer of multiple rockets, and he was the person who solved tough engineering problems and pushed the boundary of rocket science. 
  - Leadership. He knew what he had to know deeply and what he could delegate, and he unblocked his teams whenever needed. 
In contrast, the Staff Engineers I see in many companies are technical product managers, skilled coordinators, excellent box drawers, and masters of jargons. They do everything but engineering. You can probably identify them easily as their resumes are full of phrases like "uber technical leader" or "coordinated across 100 teams". Their careers depend on how lucky they are to find an effective team to execute. Mind you, this sounds like my blame, but it's really not. If anything, it's my lament. Those engineers were deeply technical before they got promoted. It's just that sooner or later, the leadership needed someone who could communicate up and down and around. The staff engineers would need to show up in more and more meetings, "align" more and more teams, conduct more and 1-on-1s to build relationships, draw more and more boxes to appease the "stakeholders". Sooner or later they are busy in meetings all day, they are no longer in the trench, and they get comfortable with throwing terms like BERT and Raft and what not without knowing the underpinning theory or implementation in a coherent way. Of course, there's nothing wrong with such roles and they will continue doing well in their positions. It's just that I'm not sure such job would give me much satisfaction.


> Put non-meetings on the calendar

I'd love to do that. But once you throw in real meetings, no meetings days, PTOs, time zones it becomes difficult to schedule a work meeting because now there's no overlapping block of time when you need to meet. Now all meetings get pushed out even more and the calendar time required for certain tasks increases.


The best time to put such "non-meetings" on your calendar is when you switch teams. You're new and the meeting vultures haven't noticed the new piece of meat yet.

I switched teams a year ago and quickly blocked off 2-3 hour slots every day as "focused work time". It's been a godsend for my sanity.

Edit: typo


This is a feature, not a bug. Most meetings could have just been an e-mail or a slack thread. They don't want to spend 20 minutes writing an e-mail, so instead they spend an hour in a meeting where they find out they still need to spend 20 minutes thinking about something and writing it up. People need to learn to work without meetings. Open Source projects get work done with virtually no meetings at all.


Everything in moderation I suppose. I've experimented with marking large blocks (2-4hrs) as tentative for IC work a couple days/week recurring and it does help avoid the Swiss cheese of 30m meetings spread across the entire day.

Lately for a 1-3 day horizon I've been adding everything I'm working on as blocked. That definitely helps me visualize my priorities for the next couple days and whether I have room to fit more meetings or tasks. The main downside is I'm used to a more free-flowing schedule where I pick a task based on how I'm feeling.


Allow read access to your calendar for teammates and instruct them to override your "Thinking time" slots in situations where the matter is urgent.


There's several issues with this:

* I work with too many people to reasonably instruct them of this preference and expect them to follow it.

* The definition of urgent is highly subjective. What's urgent to one person isn't to someone else.

* Some will be more aggressive and book over it, while others will be more passive/shy like junior engineers. You're now further rewarding aggressive behavior over passive behavior.

But more importantly non-urgent meetings are still important. If everyone does this then the minimum turn around time for engineering tasks needing help/consensus between 3 engineers goes up from a few hours to a few days. You compensate this by juggling more tasks.

I think in practice the downstream problems are much worse than the original problem you're solving. I prefer to just decline any meetings that aren't a good use of my time.


That's what I do, and it works very well.


These are some of the things I wish were taught in school (maybe grad school, maybe in software engg disciplines). Including things like "how to write a great design doc", etc.


Can anyone compare this book to Staff Engineer: Leadership beyond the management track by Will Larson?


One resource I always wanted to have was how does one figure out the responsibilities for a new role that one is interviewing for and is advertised as mid level:

1. Writing, reading, reviewing software most of the time.

2. Some amount of planning on medium sized projects(2 engineers) you are handed over. You can thus iterate on new small(ish) features pretty easily.

Like assuming a team of ~5 engineers, how does one go about quizzing the interviewer about different aspects of the role based on prior experience?


Curious, do we know how successful this author is? Normally who the author is does not matter to the quality of a book, but in this case, I assume we'd want to read about a top engineer's perspective on becoming a great engineer.


""Know why the problem you’re working on is strategically important, and if it’s not, do something else.""

Yeah. Just tell your boss

"" I refuse to work on the assignment you gave me. Give this assignment to someone who has not read this book I will only work on strategically important assignments. because that will help me get promoted and noticed faster. ""


Many staff engineers are simply people good at hiding their weaknesses and have no more expertise than an average senior engineer. Same as many architects.


Any related books for Senior Staff and Principal engineers?


I'm in the middle of listening to this book and they talk about "Staff+" roles some inside of it. The books describes the blurry lines in there, but it does talk about that next level in general.


These roles likely comprise less than 5% of all engineers at big tech companies so I would be pretty surprised if such a book exists.


So pretend to work?


I can't wait for this cult-of-the-staff-engineer hype-cycle to die. We need better managers, not the new rockstar 10x IC.


Staff engineers aren't "rockstar 10x IC."


It's certainly how they market themselves. Look how great we are, we're leaders, we're mentors, we're leaders, we think bigger, we make a bigger impact, blah blah blah.

And it's a crock of shit. It's not up to an IC to decide strategy, make executive decisions, or lead a team, unless Lead or Manager is in their title. Thinking big, prioritizing, choosing what to work on, etc, is something every engineer should learn to do, as part of a team. And that team should be led or driven by an individual whose job it is to, hierarchically, be in charge/responsible, and all that entails.

At the highest possible level, a staff engineer can be the "idea person" who looks at everything and can make proposals or lay some groundwork. But the "glue" of connecting a team to the rest of the organization needs to come from management and leadership, because they're the ones who can reach out to everyone without overstepping, and take the flack when it comes.

Here's another example: https://staffeng.com/guides/staff-archetypes/ This dude is claiming that these four separate roles and skillsets are just types of Staff Engineer. This is such ridiculous bullshit I don't think this person has actually done time in large engineering orgs. The tech lead doesn't even have to be very good, they just need to herd cats and be a tie breaker. The architect is an architect, a speciality distinct from the rest of software/systems engineering that doesn't even require coding. A "solver" is known in other circles as a "fixer", which is another word for someone who doesn't take shit and gets a job done, which doesn't require much other than willpower and attention. And a "right hand" literally is just shitty organization/management taking advantage of someone who gets things done yet has no political power.

In any case, all these resources talking about Staff Engineering are bullshit hype-cycle for a very simple reason: if you're a Staff Engineer, you know all this shit already. If you're not one, reading these books won't make you one. It's like thinking you can become a great woodworker by reading a book on woodworking. It's all just career voyeurism, or aspiration porn, written up to sound authoritative, but is actually completely made up, because it's actually just normal work that somebody wanted to sound more important.


I certainly agree that reading these books won't make you have the skills needed to be a Staff engineer but I think the rest of your point seems highly biased by your individual personal experience.

Btw, Will Larson was at Etsy in a very senior role for a while, so he definitely knows how engineering orgs work.

The reason I see for these books existing is because engineering orgs have evolved and grown to a scale where a new role came up: of an individual contributor that exercises cross team influence. This only makes sense in massive (1k+ engineers), highly organisationally flexible companies. It doesn't make sense in small ones and it doesn't make sense in inflexible ones. Those sorts of companies have not existed for too long.

BTW Will Larson's book is a synthesis based on the collection of anecdotes from people actually employed with such titles across companies, so you can read it and see if those things make sense.


This is all thats required of staff engineers? Heck, at the big consulting firms, senior associate engineers had to do all this to get promoted to manager.

[context: senior associates were 1 step from the bottom rung]


This is a collection of highlights from a book, so I don’t think it’s “all that is required of staff engineers.”




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: