For the HN crowd, it's probably worthwhile to split "STEM" into "high-end engineering" and "normal engineering". The former is suffering from a labor shortage which is why FAANGs and similar companies are willing to pay $300k-600k for engineers with 5-10 years of experience. But for normal SWEs and other engineering fields, there is a glut of talent (https://danluu.com/bimodal-compensation/) so it can be harder to find an engineering job that pays enough to justify the college tuition. This article is about the latter group.
However, there is still a significant shortage of talented engineers in non-SWE roles. We've outsourced engineering jobs such as semiconductor manufacturing and other tech production to other countries which makes it hard for junior engineers to find jobs and learn enough to become highly talented engineers. And that requires heavy investment by the government in our engineering ecosystem so that junior engineers can find good jobs and learn more. Tim Cook explained this well in the context of iPhone screws: https://www.nytimes.com/2019/01/28/technology/iphones-apple-...
> “In the U.S., you could have a meeting of tooling engineers and I’m not sure we could fill the room,” he said. “In China, you could fill multiple football fields.”
> The former is suffering from a labor shortage which is why FAANGs and similar companies are willing to pay $300k-600k for engineers with 5-10 years of experience.
The reason FAANGs/etc are willing to pay $300k-600k for "high-end" mid-level engineers is because they stand to recoup many times than per employee. Nothing to do with shortage of high end mid-level talent.
Facebook, Google, etc are some of the most profitable companies in the world ( outside of finance of course ).
If there is a glut of "low-level" engineers it's impossible for there to be a shortage of high-end mid-level engineers as those mid-level come from the low-end engineers.
Besides, the tech industry historically prefers to hire young people and push out older ones.
So if there is a lack of "high-end" mid level employees, they aren't doing a good job of developing their younger "low-end" employees.
Or it's all just bullshit used by the tech industry to offshore more jobs, import more employees and create downward wage pressure on "high-end" mid level salaries. Just like with every supposed "shortage" of "talent" we've ever had.
> $300k-600k for "high-end" mid-level engineers is because they stand to recoup many times than per employee.
Why would a company pay more than they need to? I would pay 4x the price for grapes if required. I don't as I would prefer to spend less on grapes.
> it's impossible for there to be a shortage of high-end mid-level engineers as those mid-level come from the low-end engineers.
Unless there is something that prevents from from becoming mid-level engineers. Like companies that don't hire junior level engineers at all and have mid-level be the entry level.
> Why would a company pay more than they need to? I would pay 4x the price for grapes if required. I don't as I would prefer to spend less on grapes.
I think it's because they could still use more engineers to do what they want to do, and they believe that great talent is way, way better than good talent. They want pretty much everyone to think "working at FAANG is the best financial option for me" and to apply, so they get their pick of the talent pool.
There is the prestige factor. And of course pressure from the employees. If you are making $600K per employee and it's public, they'll demand more.
> I would pay 4x the price for grapes if required. I don't as I would prefer to spend less on grapes.
But you do. That's the point. If you make $600K and another person makes $100K, you are far more likely to buy grapes whenever you want/need rather than waiting for the grapes to be on sale.
> Unless there is something that prevents from from becoming mid-level engineers. Like companies that don't hire junior level engineers at all and have mid-level be the entry level.
But the tech industry favor junior/younger employees. Ageism is a thing in the tech industry.
Remember BlackBerry? Local comp, prevailing wages, "competitive offer" from the "local market". Good relationships with local colleges. No stocks.
A competitor (Apple) paying much more got pretty much all the kids from the schools around Blackberry to apply there first and then go to BlackBerry if they didn't qualify.
Blackberry didn't get acquired. It just got crushed.
But the company was right, it didn't need to pay more to attract local "talent".
They recoup many times $500k per every employee, not just mid-level engineers, but only the engineers are able to command that much because there's more demand than supply.
HR, marketing, sales, etc. - while still paid well - are not compensated at the same level as engineers, especially when comparing by years of experience on the job.
> If there is a glut of "low-level" engineers it's impossible for there to be a shortage of high-end mid-level engineers as those mid-level come from the low-end engineers.
I was going to point out several reasons why this statement is false, but you went ahead and falsified it later in your own comment.
> So if there is a lack of "high-end" mid level employees, they aren't doing a good job of developing their younger "low-end" employees.
Seems like by "impossible" you mean "avoidable if you allocate enough time and resources".
> If there is a glut of "low-level" engineers it's impossible for there to be a shortage of high-end mid-level engineers as those mid-level come from the low-end engineers.
That is a faulty assumption that cannot be true if in conflict with a bias. For example what is your data driven definition for a high-end versus low-end engineer? The answer to that question is almost certainly subjective.
In my experience employers optimize for hiring and onboarding first. Everything else is a secondary consideration that impacts tools, delivery, quality, and so forth. Employers could optimize for faster delivery and higher quality code, but that would mean fewer frameworks and abstraction layers which harms speed of hiring and speed of project onboarding.
From a purely numbers perspective that is absurd. Hiring and onboarding are one time problems per employee and are prioritized over concerns which cost the company significantly for the life of that employment. It isn’t about numbers. This isn’t about numbers explains the high pay rates for developers.
It’s about having employed developers already available.
exactly. facebook generate among the highest profit margins of any company. Multi-illion dollar ad budgets by fortune 500 companies, plus tons of small business adverstiing, is jsut pure profit for instagram and facebook. Mobile ads are very expensive, too. More expensive than desktop.
I tend to agree here. There must be top performers in pool B willing to invest time and effort to move to pool A given how lucrative it is.
Anyone working on high-end engineering, could you please give some color here? Is it very hard or impossible to make a move from let's say a web developer to a high end engineering role?
What are the some examples of those roles?
If the jump is doable, there should be some training available for anyone wanting to make that investment. Are there any?
DevOps / GitOps. Good lord, DevOps / GitOps. Do the things nobody wants to do:
* Build out systems from scratch
* Maintain those systems (using the most arduous-but-verifiable methods)
* Maintain security of those systems
* Scale those systems
It means dealing with the nuances that app developers don't love. The jobs that used to be relegated to the "IT Guys" in the organization running the datacenter. With infrastructure-as-code, K8s, etc. it's not unlikely (in fact arguably the best idea) to maintain the "deploy" logic alongside your app as much as the app code itself.
Most app developers don't like doing this. It means tweaking, tinkering, testing, re-testing, re-re-testing and edge cases that break main usage cases. It means checking your app works in Internet Explorer as much as it does in Chrome and that every layer of your SSL configurations are right. It means pouring through five generations of AWS documents that may or may not be valid any longer (I'm looking at you, Launch Configurations!).
But it also means ease. It means your app developers can get their code to production safely, securely and capable of scaling effortlessly. It means your business team doesn't have to "wait" because something needs to be deployed in the middle of the night because your work has built in health checks, canaries, etc. that prevent a shitty deployment.
A friend once said "DevOps means automate all-the-things" and I agree but it's just the start of that role (and the exact reason that role can get paid the way it does). A truly great DevOp will have a near-infinite level of understanding of "how" the systems work from top to bottom but ALSO they are willing to step into anyone ELSE's code in the organization to learn and help optimize it for the steps outlined above.
Cloud certs help but honestly I think most folks I've seen doing it are just people that got fed up with a broken deployment one too many times and took it upon themselves to find an alternative.
It's nice compared to many other industries because the interview process is pretty open and well-discussed and it's more rare to be blocked entirely just because you don't have the right names on your resume.
One part is pure numbers game: apply everywhere that pays well until you get some interviews. This may take a while.
The other part is practice: can you figure out the sort of questions that those companies ask? If not, can you do so if you practice enough?
Personally, I did the jump in two steps. This was ten years ago, but I've seen people do similar more recently. First I found a company with interesting work but still not a lot of prestige (after getting rejected, mostly silently, by dozens of others on LinkedIn). This gave me a lot of hands-on experience with the non-pure-algorithmic sorts of questions that I'd be asked in future interviews (like "what happens when you visit google.com" or say, around how internet networking and web service stacks work). This didn't increase my pay, though - but it was a place with a more conversational interview style plus a smaller pool of candidates, so my desire to learn came through and counted for more.
Second, I continued applying and bugging recruiters (thought not quite as frequently, since I was busier at work now!) until I got some interviews at higher paying places. Failed a couple, succeeded at one, got a 60% raise. It got easier from there since recruiters use company history as a big heuristic.
do you think your productivity or output or skill level increased 60% alongside the 60% raise or do you think your skill level increase / change in 'worth' was less?
Or in other words once you got in, did things get way more difficult / stressful?
My skill set and abilities increased the most rapidly in the job before the 60% raise. It then increased further in that job, but because it was a bigger, more established company, it took longer to get exposed to different things, and because my skill set was already larger, fewer of those things were as brand new.
Stress level was about the same as a result: on one hand, I had more to lose - my other jobs hadn't paid nearly as well. On the other hand, I found I had a broad enough base of skills to be useful immediately plus was becoming more confident in my ability to learn things.
I graduated from a very respectable but not elite university, with a respectable but not noteworthy GPA and internship. (I do feel I took to algorithms and data structures somewhat better than most of my classmates, which helped with interviewing years later.)
I worked some jobs in "low engineering" as described here, for several years. I got into this new Android thing, and published some relatively successful apps on the side, before convincing my employer to let me build their Android app, which was also reasonably successful. (I also broke into some light algorithmy stuff to improve ad serving/ad sales for that employer, though it was entirely trivial compared to what "elite" shops were doing.)
I believe that skill was the key to getting contacted by a Google sourcer - there just wasn't much of an external talent pool for it at the time. I failed one interview after insufficient prep, a delayed flight, and very short sleep. They called me again a year later and I prepped some, got in early, and went in fresh.
I imagine ML is maybe the closest thing to an analogous "door-opener skill" over the last few years, but I'm not confident about that. Research roles may really emphasize the sterling academic credentials, and for applied ML roles, Kaggles don't give experience crafting a data set and productionizing a model.
It's really not impossible. The main difference is in LC practice and system design experience. The latter of which is likely covered by any reasonably scaled startup.
The barrier to the former is practice and knowledge of fundamental algorithms. There are a lot of algorithms that come up in practice, and it can be intimidating to learn the first time.
As the parent mentioned part of the problem is that engineering productivity as measured by dollars/engineer is proportional to the profitability of the firm more so than the skills of the engineer. High end engineering firms are highly profitable and select the best engineers. There are diminishing returns to hiring more engineers so companies prefer to hire the number they need at the maximum competency they can pay for.
IIRC 2 decades ago engineering was more evenly distributed in salary expectations as there weren't as many mega cap companies, and the ones that did exist had the philosophy that they should hire more engineers rather than better engineers.
This was codified by Charles Simonyi in his dissertation on Metaprogramming, which he implemented at Microsoft.
The idea was there would be one software architect called the Metaprogrammer who would write the design and specification for the program. All the other programmers would implement this specification in as straightforward a way as possible without making any design decisions. If a design decision comes up, they refer it to the Metaprogrammer. This way you can hire large numbers of cheap low-level programmers, leveraging the skills and experience of a few experts. The idea was ultimately that the mundane code should be auto-generated.
It took Microsoft a long time to recover, if it ever really did.
We want software engineers who understand compilers and query optimizers and systems.
This requires good theoretical foundations with solid engineering skills.
It is extremely hard to get these. Most CS majors don’t know much CS - top grads from top US schools undergrads are clueless usually.
That’s why you get projects like Hadoop- a large scale systems project written in Java instead of systems languages - because the engineers are poor quality in top companies as well.
I don't know that your example is a fair one. I'm not a huge fan of java, but I have run it in anger (and specifically abused the crap out of hadoop).
I do not think that being written in C++ would have solved any of the problems we had with it. The biggest issue was the thread replication problem on writes (each write is replicated 3x, and each operation is done synchronously with a thread. Lots of parallel writes will mean tens of thousands of threads). Async was known and possible at the time, and I think even fixed upstream.
Java doesn't share machines well (at the time it never returned memory to the operating system, this is fixed now), but your hadoop machines shouldn't be shared. If you want to run a monolithic server, java will do just fine. The garbage collector will work fine unless you do dumb things (which I've also done!)
Money isn't everything though. I've passed up many higher-paying cookie-cutter jobs for lower-paying but more-fulfilling and interesting problem-solving jobs.
Of course, web development can be interesting and problem-solving for some, depending on the job and the person. I just mean to say that money isn't the only criteria that some use to evaluate jobs.
What is the work you are doing that requires this sort of fundamental knowledge? Just curious, as it seems like most of the business (read: monetary) value is in working much higher in the stack, leveraging the bedrock software already out there. Is there present moving and shaking happening at that level?
It's because schools teach to the market. How many schools teach COBOL? There are still companies that want to hire COBOL resources, but most schools aren't going to teaching because the market is too small. It's the same for query optimizers and compilers, only even more pronounced by their very nature - these are things that a very small number of people create because you want a standard or consistent experience with this level of tool. It's like my cryptography course - I'll never use it because the best practice is to use the industry standards.
Another reason you don't find many people with this experience is that there aren't many jobs for it. Going back to my cryptography class example, if I don't have the need to use the info after taking the class, then I'm not going to remember it.
That said, there should be plenty of candidates who are willing and capable to learn this stuff if companies would actually train people.
What defines a high performance engineer? If we are talking about 10x engineers, then I would argue that level of performance isn't likely to be reachable by most people and teaching plays less of a role.
I mean, I would love to be a 10x dev, but I don't think any amount of training will make that happen. I'm just a shitty mid-level and have to live with that.
All my experience is with the job market in Seattle. A decade ago I took a job at 80k (via craigslist), against competing offers around 95k, because it involved NLP and Hadoop. A year later I got a 40% raise to a Series E startup that ultimately flamed out, working on ML-adjacent big data stuff. I slowly bumped along until, with an average job tenure of ~2 years, until in the past four years I went from ~160k to slightly over 300k. Technologies have been Hadoop/Spark/Kubernetes ecosystems. First two job hops were via LinkedIn, next two were personal referrals.
The two books I think had the most impact were Mining Massive Datasets by Ullman et al, and Data-Intensive Text Processing by Lin & Dyer, but neither is very cutting-edge now.
I've never worked at a FAANG, but I've had a ~40% interview success rate with them.
My advice would be:
- If you're early in your career or want to switch subspecialties for higher potential remuneration, be willing to take a slight pay cut or work for a slightly shady/low-prestige company for the right experience.
- Actively maintain a detailed profile on LinkedIn. It's a shitty site/company, but that's where the recruiters are. Another tip I've used to get interviews is to do a search for recruiters at a company of interest, and just visit all their profiles. They'll get the notification, and if your profile has the right keyword bait, they'll reach out. Probably more effective than cold submitting a resume through their website.
- Be really lucky. There seems to be a huge amount of variability in terms of how well interview questions match your experience/competencies, as well as being lucky in picking sub-specialties in technologies that end up booming. Also I'd say my personal productivity across all my jobs had probably a 3x variation, so be lucky in that wherever you end up working happens to match your personal strengths and weaknesses. Productivity (and promotions/experience to showcase in interviews) is not just a function of the developer, it's a function of the developer plus the working environment.
A final comment I'll make is that I have a STEM BS, but it's not in CS. Instead I gave myself a virtual CS degree by working through textbooks over 3-4 years, covering the entire course curriculum of a CS undergrad. I'm probably lucky in being temperamentally suited to completing that sort of project.
It is certainly not impossible. Every "high-end" engineer started out as a junior at some point in their career/life. And I don't think it requires working at a FAANG either.
I don't think there is a clear, unambiguous process but the gist of it is that to get there you need to continually take on larger and more complex tasks. In particular try and find your way onto greenfield projects where you can meaningfully contribute to system design (or at least observe "high-end" engineers engaging with these tasks so you can see how the process looks from "the inside"). If you can't find those opportunities in your day job, either try and find a new day job or try working on OSS projects.
> It is certainly not impossible. Every "high-end" engineer started out as a junior at some point in their career/life. And I don't think it requires working at a FAANG either.
There's a significant group of people who follow a path like: "get an internship at a company with a known brand, then get more and better-known full time interviews as a result, then get one of those well-known jobs and as a result get EVEN MORE interest from recruiters" which must be nice.
If you aren't at one of the schools those companies hire interns from, it's definitely a lot harder, but still far from impossible.
For sure, it's a lot easier for people who did undergrad at Standord/MIT/CM to get the internship (and the FTE role). But we shouldn't confuse "Stanford CS grads are overrepresented in high-end engineering roles" with "most high-end engineering roles are done by Stanford CS grads". Most people doing this kind of work went to a college you never heard of and maybe didn't even study CS.
Oh, I think the pool is a lot larger than that. I've seen pretty good industry hiring representation at a bunch of first-and-second-tier non-Ivies, includes UCSD, Washington, Waterloo, Purdue, Chicago, UTexas, UCLA, and a lot of others. (And similarly, the company base is a lot broader than just FAANG.)
I bet there's a set of 20 or so schools, though, that make up a disproportionate amount of those high-paying jobs, though certainly the long tail is very long.
> I tend to agree here. There must be top performers in pool B willing to invest time and effort to move to pool A given how lucrative it is.
One thing to remember is that pay might be bi or multi-modal but that doesn't mean the work is actually likewise shared out by "performance". There are lots of reasons other than merit why people might end up in a lower or higher paying position. You'll also find people going up or down between these positions over their careers. A normal one from my experience is people taking big paycuts to work in Europe.
I posted something similar to you. I think the jump is not doable because it requires massive investment in a lottery ticket. Not only are FANG interviews leetcode level hard, I have heard friends at such orgs talk about the anti-loop. Even if you got to the point of solving most leetcode problems, the anti-loop can reject you. I know plenty of brilliant engineers not getting paid the value they create, because they have kids or work a tough job or volunteer or whatever, that makes it so they will never get a FANG offer.
If the set of people who are interviewing you by luck happen to prefer interview questions that match your strengths, you get the job; if they instead happen by luck to prefer interview questions that match your weaknesses, you don't get the job. The latter is an anti-loop.
It's a yegge-coined term for getting a set of ~five interviewers who won't pass anyone. That is for any candidate who passes interviewer X's idea of a good candidate, you won't pass Y.
I don't think you see it much anymore, but I wouldn't be surprised if it does still happen from time to time.
I think there's a possibility for a SW-developer, but I wonder whether that's even possible for other branches. If you don't have the required background (sufficiently advanced university degree) then you just don't have the knowledge. I can imagine that if you really work on high-tech engineering, you need a solid background of physics, engineering, math etc. You can't just learn that on the job, or better, expect people to learn it on the job.
>> However, there is still a significant shortage of talented engineers in non-SWE roles.
Not sure I agree. Seems more there is a shortage of housing in SWE-heavy metro regions. I have so many friends from college who graduated with computer science degrees and ended up in non-engineering roles -- because of a total mis-match between SWE pay and housing costs, especially in the Bay Area where the jobs used to be.
Now, before anyone cites FAANG L6+ salaries, note you dont get into those after graduation, and not everyone gets into those roles. Also note, for the majority of non-public SWE roles with "high" total comp, you cant pay rent with total comp stock/equity, you pay rent with cash comp.
Also, before anyone cites the cost of a studio apartment in California, note not everyone is single and not everyone wants to stuff a family into a studio apartment.
All this may well change with WFH and remote-work, which will open up talent pools across the US and the world.
Sure you can, you just sell it as it vests. Which is the commonly-recommended thing to do.
At a public company RSUs are so liquid they are damn near as good as cash. Once you're on the vesting treadmill they're hitting every quarter, or even every month. That's not much different from a paycheck.
Yeah there's market risk that dictates the actual value, but when you're getting your salary again as RSUs it's still a boatload of cash regardless of market performance. Cash that you can pay for things with. Like rent.
> Sure you can, you just sell it as it vests. Which is the commonly-recommended thing to do.
Sure. Anyone want to purchase my vested Series A company RSUs?
Lets be fair -- FAANG isnt complaining about lack of talent -- mostly smaller pre-IPO or early stage firms are complaining, which is why my original comment noted "non-public companies". Your view is correct only for public companies and a handful of private companies which have an active market to liquidate stock and options.
SWE roles with "high" total comp, you cant pay rent with total comp stock/equity, you pay rent with cash comp.
Also, before anyone cites the cost of a studio apartment in California, note not everyone is single and not everyone wants to stuff a family into a studio apartment.
If you make $210k/year, after taxes you are still taking home $135k/year. In Silicon Valley, the median rent for a one-bedroom apartment is $2,300 a month. So you are still left with $107k. Not bad. Add $1,500/month for other misc. expenses such as food and health insurance and internet access and phone plan and car payment for a crappy car (no need to splurge). Still have $89k. This is not even counting stock compensation or sign-on bonuses or other perks. Of course, if you add children to the equation, expenses rise dramatically, but this can be offset to some degree by having a double income family.
$210k is the lowish end of FAANG. Most people are not expecting to have kids until later in life . You can also borrow from equity. The notion that stocks is not cash is wrong. If you are fully vested and deep in the money, it is effectively cash.
>> The notion that stocks is not cash is wrong. If you are fully vested and deep in the money, it is effectively cash.
OK -- I call the bluff. Anyone want to purchase my fully vested, in the money stock from my Series A company? Please contact me offline, contact info in profile. I'll post later how many cents-on-the-dollar people quote for the stock. This alone is worth a whole HN post, and should be an interesting experiment.
>>Also note, for the majority of non-public SWE roles with "high" total comp, you cant pay rent with total comp stock/equity, you pay rent with cash comp.
He's responding to a discussion about private stock. Also, public companies arent the ones complaining about lack of talent as much as private ones trying to pay people in private stock mismatching market rents.
> have so many friends from college who graduated with computer science degrees and ended up in non-engineering roles -- because of a total mis-match between SWE pay and housing costs, especially in the Bay Area where the jobs used to be.
Wall Street. Management Consulting. Commercial Real Estate. The job doesnt have to pay a lot, but the pay needs to cover housing for the region where the job is located.
Another problem is that just because a person graduates with a degree in X, doesn't mean they are any use at X. I know a bunch of CS degreed people who got out of virtually every coding course in university.
Unsurprisingly, they don't work as software engineers at the moment.
They are technically part of the group of potential employees for technical work, but they are arguably worse than someone who skimmed Python for Dummies.
> Another problem is that just because a person graduates with a degree in X, doesn’t mean they are any use at X
Perhaps true, but this:
> I know a bunch of CS degreed people who got out of virtually every coding course in university.
is arguably a different problem, because CS isn’t Software Engineering, though the right focus within CS study can be a good preparation for work in software engineering.
> They are technically part of the group of potential employees for technical work,
If they aren’t working as software engineers and aren’t seeking jobs as software engineers, are they really?
ABET accreditation (not as important in CS as engineering, but still very common) requires a CS program to teach software development and strong programming skills.
Training for professional roles (like engineering) is essentially vocational training. There is an industry need that drives the curriculum requirements.
If one succeeds in a CS program, then "programming" should be straightforward. I have a CS degree. We never learned any computer languages in college; you were expected to 'pick up' them well-enough to succeed in the course. (These languages were APL, Maclisp, and PL/I). A CS degree can be a proxy for 'this person proved they can learn computer-related stuff'.
You raise an interesting point. I think most non-FANG engineers would say that that the leetcode culture is getting out of hand, and the FANG's quest for the 10x engineer leads to both (a) rocket high salaries+competition from the people who can pass leetcode, and (b) passing on lots of smart engineers who could not or did not want to run the interviewing gauntlet. What is the economic sense to not lowering the bar rather than constantly attempting to raise it?
There are a lot of new grad and junior developers who can follow instructions. There are surprisingly few who can solve problems that they haven't seen before and are able to pattern match against.
The issue isn't lowering the bar. For a new grad/junior the bar is often lowered to the point of "can you do FizzBuzz in the language we use?" (and there are a lot who can't do that).
Rather, the issue is the "we need to solve problem XYZ" and have the developer figure out how to solve it.
For example, I just finished debugging a problem of an application that would run fine in the IDE, but fail when run on the command line when packaged into a jar. It turned out that the cause was that you can't open up a File inside a .jar (but you can open up an InputStream).
It got passed to me when the developer failed to get it working and gave up on the problem. The happy path failed.
That isn't a "lower the bar" thing - the developer who wrote it can write reasonably complex code. It's a lack of problem solving of the unknown problems.
This sort of problem isn't something that is easily tested by adjusting the bar. Its a "we're graduating people who don't have problem solving skills and are finding that those skills are rare."
Great example. Leetcode absolutely does not test for this. Frankly, no FANG interview question I have ever personally seen tests for this. This sort of deep experience comes out when you actually talk to a candidate about their technical work, what was a really subtle bug you tracked down, etc.
Its really hard to test for that as part of an interview question. FANG is able to resolve that by hiring lots of people that pass a sufficiently high bar and then figuring it out as they go... and even when the people don't have the appropriate problem solving skills, there's likely still work for them to do.
Smaller shops that don't have the luxury of hiring many developers may find that only 5-10% of their devs have the necessary problem solving skills... and that's a hard pill to swallow.
Those skills can be cultivated. Some get there through shear grit, but it takes time. But this is where jumping from one job to another gets problematic - it takes time. If someone is switching jobs each year its harder to know if they've gotten to the point where they can solve problems.
I made the point in another comment that one of the reasons other industries kind of suck is because of the heavy gate-keeping. You want to be an investment banker? There is no path but to have gone to an Ivy League school. Stuff like this is a tragedy. Industries that are cordoned off in this way are extremely selfish.
I understand the need for the elite to be brain surgeons, but for a vast majority of professions, the filtering for elite is not conducive to a healthy village.
Leetcode is fine, but the trend I’m hearing is that it is getting more and more absurd and somewhat becoming our version of the same gate-keeping that makes finance, law, politics, etc bad.
I’m hopeful overall since you can’t bullshit good software. Over time, the less elite can make better products and make the gatekeeping look stupid when it’s all said and done.
That's very dependent on whether the definition of “good” can be yanked around by what the rest of the industry does, for example by ease of compatibility with other software APIs or by UI and behavior models that are familiar to lower friction for people who have already used something popular.
> You want to be an investment banker? There is no path but to have gone to an Ivy League school
This is mostly, but not completely true. There are other paths. I was recruited by a large bank to come interview for an IB position from a recruiter that specifically looks for talent outside of the Ivy's. What made me stand out from my peers was the fact that I served 7 years in a Special Operations military unit, had a perfect GPA, and multiple high recognition internships all while a dual major.
I turned down the offer as I had friends that went that route and either burned out or simply hated their jobs and I didn't want that, but the point is that there are other paths into IB then going to an Ivy.
> I understand the need for the elite to be brain surgeons, but for a vast majority of professions, the filtering for elite is not conducive to a healthy village.
Filtering for surgeons really is:
- Who can afford a completely unrelated undergrad before even applying to med school
- Who can afford to fly and meet with hospitals for residency spots
- Who can be the most sleep deprived during residency (completely useless)
> Leetcode is fine, but the trend I’m hearing is that it is getting more and more absurd and somewhat becoming our version of the same gate-keeping that makes finance, law, politics, etc bad.
Really, it's possible to bypass leetcoding by just taking a good algorithm and data structure class.
There’s coordination costs that scale super-linearly with people and many of the FAANGs have such high leverage from a slightly higher output of a software engineer that the costs aren’t a barrier for them.
In other words, if they don’t have to lower their standards for financial reasons, they just don’t.
> For the HN crowd, it’s probably worthwhile to split “STEM” into “high-end engineering” and “normal engineering”.
Isn’t that just splitting the “E” in STEM? STEM ⊃ Engineering
(EDIT: since you are really talking about SWE and not “classical” engineering, maybe its more splitting the “T” than the “E”; still, leaving out a lot of STEM.)
There is certainly a perceived difference between tech workers at, what I would categorize into T1/T2/T3 companies.
T1 companies invest in their reputation, tend to have long and capricious interviews, and pay obscenely.
T2 companies cannot afford to play that game against T1 companies and so try specifically to hire on different merits - they have a flexible vacation policy, they look for people passed over by the T1 interviews, etc. They are hiring looking for bang-for-buck.
T3 companies generally don't have either the technical expertise or bureaucratic structure to properly hire tech workers. They are nearly rolling dice.
There are many more T1 companies than FAANG, and interestingly, the company does not even have to be big or successful. It requires fat stacks of cash, but this could come from VC.
Devs with a few years experience at T1 companies are "marked"; interviews at other companies are easier, and you're paid better than coworkers if you go to work at a T2 company.
There's another level of people who are the sort with a reputation that means the leetcode-hazing employers wouldn't dare force them through the usual gauntlet (as they'd refuse), but that's a vanishingly small set of folks. And anyway, I think a lot of them (but not all!) end up doing more "soft" work than banging out code, by the time they're in that phase of their career.
Not the OP but I agree with their comment. I think the distinction is mostly around experience. Specifically, experience designing large systems (understanding tradeoffs, resource requirements, etc.) based on product/business requirements. If I can come to you and say "I need a system to manage documents" and you can take it from their (eliciting more details from non/semi-technical collaborators along the way) then you are probably a high-end SWE.
No, you're describing the system architect anti-pattern.
People who see their job as designing large systems will, over time, lose contact with coding. After that they will lose a critical feedback loop that informs their architectures, and you'll get architectures that work on paper but not in reality.
Back when I was at Google they made it clear that it is important that interviewers identify such people in the interview process, and not hire them if their willingness and ability to code were not up to snuff. It was OK if they had a string of architect jobs.
What is actually needed is the ability to be down in the weeds, working at a low-level, while keeping an eye on high level concerns and an awareness of how what you're working on will evolve over time. So yes, you design the large system, but have to be a major part of building the prototype. Then make sure that, as more developers are brought in, they learn the tribal knowledge needed to both maintain coding standards and the high level design.
I agree completely, apologies if I was unclear. My point was only that you shouldn't be ONLY doing "task work" (eg implement this interface that someone has already defined for you). You need to understand how to design the system as well as do in-the-weeds implementation work.
Right. And need to have the good ability to notice a problem while doing the coding work, which causes you to back up to the higher level and solve it at the right level.
If you want to "apply", then have a friend who works at a FAANG, and they'll connect you.
Otherwise, you don't apply, you just have a resume online that looks like that of someone who would have that experience, and FAANG recruiters will already be reaching out and shepherd you through the process till you get to an interview.
But while the recruiter sets a relatively low bar for what you should look like, the interview will then set a relatively high bar for what you should look like (and probably overly specific bar). So you need to make sure you have the ability to pass such interviews with flying colors, which itself requires a different skillset/training (maybe 50% overlap with your day-to-day skills).
Again, remember during this whole process, what is most important is "do i look like someone who has these skills", which is slightly different from "i am someone who has these skills" or "i am someone who could develop these skills if needed". The latter only matters once you start at your new job.
A high-end SWE is one who is willing to endure a hiring process spanning months full of pointless trivia with the final prize being a slim chance at getting a job. A normal SWE is one who finds a job at a business that wants to actually hire people, not play games.
>> The former is suffering from a labor shortage which is why FAANGs and similar companies are willing to pay $300k-600k for engineers with 5-10 years of experience
They want the golden childs. They want 5-10 years experience but still balk at anyone aged over 40. You have to have an "upper level degree" but then again they don't want someone who spent too long in school. You need a breath of multi-disciplinary experience but also know absolutely everything needed to "hit the ground running" in their very narrow field. And of course they must be a good "culture fit". At anyone one moment there are perhaps ten such people on the planet.
I have met some of these people. They do exist. They are essentially walking professional resumes. They look great on the corporate website but rarely accomplish much practical work before they are off to live on a different website at an even higher salary.
What you're describing are the people making $1M+, you basically need to have had amazing luck of being in the right place at the right time and being involved in projects that turned out to be massively successful and grew quickly. That's how you get those Director or Sr Staff/Principal titles at FAANG.
To make $250k+, honestly you just need to be able to ace a random assortment of Leetcode level Hard problems under pressure. Which is actually a very tangible and unbiased skill. To get in the door of that interview in the first place, now that can be a challenge without the right kind of experience. But it's not impossible to gather that right kind of experience, without an Ivy League education or advanced degree, by gaining experience on the job for several years at a lower tier tech company or startup.
And then for some lucky few, a $200-$300k mid-level engineer salary can grow into a $1M+ salary without any promotions, e.g. every mid-level and above engineer who joined Snapchat two years ago. That's the real holy grail.
I think this was true 5-10 years ago but having worked at FANGISH companies for over a decade I am starting see older devs come into the company, and also diversity in ethnicity and background which is great. I know my current company which has about as difficult an interview as google doesn't really care about your degree, if you can pass the interview and are not a total a*hole you are hired.
This is not a surprise. same reasons why the armed forces, west point, and police academies seek younger people: there are many benefits, some of those being:
more malleable
faster learning (studies show working memory falls with age)
Talk to anyone military who has to deal with young cadets/recruits. They all come with baggage. They all have family commitments. I've know of helicopter parents phoning, even appearing at military bases. Beyond the near-normal prescriptions, young people now have health "preferences" to accommodate. Their definition of "flexible hours" is totally one-sided. Tell them to work through a long weekend and they might cry. As for learning, I have read those studies. It may be true but I also see a trend of young people who cannot read and write properly: university graduates who have trouble reading more than a dozen pages without drifting. Any drill sergeant at West Point would rather train a platoon of 40yos than yet anther crop of phone-addicted teenagers.
Anyone have realistic or actual job postings that pay 300-600k vs. something off of levels.fi? I've been in this field for 15 years and have had some good gigs on my resume, not currently looking around but this pay rate is way outside what seems to be the norm.
Unless you're some kind of expert in "big data" / Tensorflow / PyTorch / statistical wizard that is the current hotness, it seems a bit crazy to be making this kind of money for high end cloud / IT work. Or maybe I'm just really underpaid.
I just recently hit the 140k mark after 8 years of experience as a data scientist, and I already feel bafflingly overpaid for what I actually accomplish. I suppose things are different at FAANG companies, but not even my coworkers working out of more expensive locations get paid anywhere near $300k.
That said, the contracting company I work for is getting paid around $330k annualized for me, so maybe when the option to hire me comes up in a few months all I need to do is ask ... aw, who'm I kidding. I don't know what I'd do with $300k a year. Put away half of it and retire early, I guess.
My girlfriend works a lot harder than I do for $45k. There but for the grace of God go I.
I'm sure you already know this, but most consultants take home 30-60% of their bill-out rate (depending on their experience, supervision/regulatory requirements, and overhead expenses).
Business development is almost more important than actually doing the work, and overhead/ancillary costs are higher than many expect.
I'm a guy with an undergrad degree, no graduate degrees, and no formal training in big data nor ML (just good old fashioned systems programming) and I'm in/above that range.
The key is to know how to negotiate - and also realizing that half of the negotiation is done before you get to the table. Nobody is going to volunteer paying a SWE $600K, but they can be compelled to do so if you know how.
Happy to share knowledge here - I'm firmly of the opinion that you should be paid the absolute maximum of what your employer will bear. They aren't leaving money on the table in their deals, so neither should you.
Seems like about 5 years ago things took off, but if you stick to small job pool areas you will probably see jobs near the same rate as they were back then. I took a SV-based job to get leveraged up, now work remote for same rate, which is like 50% more than I was making 1.5 years ago. Friend of mine just went to another company full remote, I think he 2x'd his total previous income from a job he'd worked at for years (and it was a company that could afford to pay him way more than they did, but advancing without changing jobs is hard).
I think basically any tech company that you've heard of will be willing to pay close to 300k for experience, although remember half of that will generally be stock, and the higher the compensation, the higher percentage will be stock-based.
If you have more than 5 years experience and make less than 200k/year, I suggest you start interviewing.
It seems like a lot of these pay sources use total compensation as their metric, although I'm not 100% certain of that.
If that's the case, though, things start to get real fuzzy talking about salary. If you're at a startup with X stock options, you can start talking about total compensation when the company IPOs. Also, if you work for FAANG, you get RSUs which don't vest until some time, but do count towards total compensation before then.
Take a lot of those numbers in that context and they make more sense.
> Also, if you work for FAANG, you get RSUs which don't vest until some time, but do count towards total compensation before then.
I think the most common vesting cliff is 1 year, which isn't really that long so it's reasonable to count towards total compensation.
It gets fuzzier if the vesting schedule is backloaded (amazon is notorious for this: something like 5% vesting after the first year, and then high turnover as the kicker), but from my understanding you'll often see signing bonuses to make up for this.
Most places I've seen use a 4 year vesting schedule, andd 50% of the RSU's vest in the last two years. So you get maybe 10-15% of your RSU's year one, 20% more the next year, then the rest in the last two years. This forces people to stick with the company likely longer than they would normally would.
Your experience is a complete outlier. The only company that really does that is Amazon. All others in FAANG are 25% per year, paid either monthly or quarterly. Most have even removed the 1 year cliff, meaning you might be vesting stock 30 days in.
I have just over 6 years in the industry and in my current job, my initial total comp was $500+k start. That was 190k salary, 60k signing, $300k stock with a 4-year vesting schedule, 25/25/25/25. My actual take home per year is constantly growing and is well in excess of $300k every year I've been with the company.
So if I understand your point, I agree that the total comp numbers are a bit weird considering how the compensation is structured and a lot of refresh grants do not ever equal your initial grant, but the ability to bring home over $300k, $400k, $500k is not that difficult if you work at Amazon, Microsoft, Google, Facebook, Netflix, etc.
The key to this is to change companies every so often and in doing so, seek higher positions (promote in transition). These 2 things combined easily push your salary up.
That said, I'm at a point in my compensation that I don't really care about extra money (it's nice, don't get me wrong, but outside of spending some additional money on my hobby's, it mostly will just get saved) and this is really empowering because now I am looking for positions that I feel will be rewarding in terms of the project instead of just looking to grow my compensation further.
> I've been in this field for 15 years and have had some good gigs on my resume, not currently looking around but this pay rate is way outside what seems to be the norm.
To be clear, I'm not talking about the norm, I'm talking specifically about FAANG (including bonuses and RSUs, not base pay rate). Also you have to work at the headquarters or maybe NYC to make these comps.
I worked at AWS years ago and we weren't getting paid anywhere near this, total compensation included. AWS is pretty known for being for being "thrifty", but you only got a relatively small amount of RSU's (back even before they were worth thousands of dollars like they are now), and you had to wait most of the 4 years for them to vest, since it was heavily weighted to the back-end of that time period, to entice you to stay with the company.
Agreed on the backloaded RSU schedule, but my understanding is that the signing bonus is supposed to help cover for that.
In any case, I know one person who accepted an offer with an AWS team recently making roughly what levels.fyi suggests (and not a 'golden child' either, someone coming in to learn a new skillset). My understanding is that Amazon is absolutely desperate for engineers right now.
You’re not underpaid but you could make more by switching companies. Some companies simply pay more than others for the same role, level, and responsibilities because they’re engineering driven or better funded or more successful or operate at greater scale/profitability.
Any hot tech startup or FANG company or newish enterprise SaaS (Snowflake) or previous unicorn (AirBnB, Lyft) can pay those numbers total compensation for a SWE with 4+ years experience. Apply to all of them and see what you can get.
Job postings never show the pay, don't let that be the holdup keeping you from applying to top companies, that you are in disbelief of levels.fyi. In my experience it's absolutely accurate.
I don't know anything about the ML world, I understand that can go even higher. But a sr software engineer doing backend, full stack, or mobile can indeed make $300-$500k at FAANG.
> “In the U.S., you could have a meeting of tooling engineers and I’m not sure we could fill the room,” he said. “In China, you could fill multiple football fields.”
Then perhaps Apple needs to start training some tooling engineers?
Companies like Apple outsourced everything and killed domestic manufacturing in the pursuit of a couple pennies are now complaining that domestic manufacturing is dead?
I'm currently listening to the world's tiniest violin.
"Tech" companies like IBM used to own such prosaic things as low radioactivity lead mines in order maintain access to the resources required.
Vertical integration got sacrificed to the financial gods in favor of Always Late Inventory(tm). And, now, everybody is finding that it's really hard to reverse.
Suck it up and do it yourself, or bend over for China, Tim.
Tangential but it make me think, given the network effects and associated monopoly position of some FAANGs like Google or Facebook, it seems they could hire engineer to do nothing and still be vastly profitable. In fact, it would have the benefit or preventing top talents joining or creating a competitor. Therefore, how much is a "real" labor shortage vs a perverse side-effect of monopolies or a capital intensive hack of preventing competition? It's just an intuition from their monetized output from their profit centers compared to their workforce, maybe a dumb idea but I'm curious of what people than know more than me think of it.
> The former is suffering from a labor shortage which is why FAANGs and similar companies are willing to pay $300k-600k for engineers with 5-10 years of experience.
I thought it was because they generate >$1 million per employee.
It only matters how much revenue they generate per employee when that revenue dips below salary. If the supply for epic superstar 10x devs greatly exceeded demand, they could make $100M per employee and they still wouldn't pay as much as $300-600k. (Unless they were forced to by, say, unionization.)
It was stupid to put all our manufacturing eggs in one basket, not just for nation state politics but species security against regional war, acts of god…
In the end our decisions were guided by elder concepts of correctness, that coincidentally enriched them at our expense.
Paraphrasing Thomas Jefferson - “the earth belongs to the living and not to the dead.”
We’re due for a rethink of our social obligations, not just this attacking fiscal margins, and coddling the business elite of yesterday.
Who were enriched in an era of higher taxation and much lower costs. But they are obviously owed big returns on their decades old effort. Our reverence for them is of course etched into the physics of the universe. Hmmm…
However, there is still a significant shortage of talented engineers in non-SWE roles. We've outsourced engineering jobs such as semiconductor manufacturing and other tech production to other countries which makes it hard for junior engineers to find jobs and learn enough to become highly talented engineers. And that requires heavy investment by the government in our engineering ecosystem so that junior engineers can find good jobs and learn more. Tim Cook explained this well in the context of iPhone screws: https://www.nytimes.com/2019/01/28/technology/iphones-apple-...
> “In the U.S., you could have a meeting of tooling engineers and I’m not sure we could fill the room,” he said. “In China, you could fill multiple football fields.”