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.
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.
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.
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.
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.
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.
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.
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.
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 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".
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.
> 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.
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.
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.
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.
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.
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.
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.
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!
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.
> 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.)
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.).
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.
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.
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
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.
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.
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.
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.
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?
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.
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.
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.
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.
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.
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]"
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.
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.
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.