Hacker Read top | best | new | newcomments | leaders | about | bookmarklet login
If software engineering is in demand, why is it so hard to get a job? (betterprogramming.pub) similar stories update story
57 points by anupamchugh | karma 1196 | avg karma 2.85 2021-08-30 08:52:56 | hide | past | favorite | 586 comments



view as:

everyone wants to underpay the talent and there's only limited amount of talent

the price floor for really talented engineers is also high so high in the sense most startups can't afford those 300-400k salaries.


Outside of FAANG, who is paying $300k+ for a standard / non-management dev job?

Any big trendy startup that everyone knows the name of

pretty much any public company with salary plus rsus

The comment I'm relying to is pretty grayed out at the time of me making this comment but is this really that off?

I know a number of folks who work either as developers or on an IT team for a publicly traded company. 300k+ is a stretch but a lot of them pull an extra 30-80k / year more than working at a non-publicly traded company simply because of the stock options they get every year as part of their compensation.

Having publicly traded stock is nice because once you've gotten past the vesting period you can hang onto them for >= 1 year and sell them on demand for 15% long term capital gains tax instead of the usual 35%+ you would have to pay on income tax. Getting an extra 25k to 68k extra post-tax income every year on top of an average dev salary is a big deal.



So a handful of well-known Silicon Valley-ish companies and then you have Comcast, which is probably as good an example as any of a well-known technology-oriented but fairly mainstream company outside of Silicon Valley, and they're paying a senior engineer about $150K.

Yes, but Comcast is in Philly and has a much lower CoL than CA & NY

Do you consider Senior SWE and above IC roles "standard"? If so lots of companies. Think Salesforce, Adobe, etc.

It's hard to get a job because there are a lot of charlatans out there and it's often very hard to get rid of them once hired. Even worse is hiring someone merely mediocre and not actively harmful.

That said of course the modern coding interview is I think only very loosely correlated with quality.


I get the feeling that mediocre business should be able to run just fine on mediocre people. So it can't be that bad.

Of course, every business likes to pretend they're the top and can only hire top talent.


I think the thing is there are a certain core number of critical things a business has to do where if they are continually messed up it’ll go out of business eg payrolls, strategy around capital expenditure etc. The issue might be that even small business involved in e-commerce mean cross over with these areas. For example storing sensitive data is dangerous. PHI/PII is digital toxic waste. Like with real toxic waste do you want trained experienced professionals or inexperienced charlatans.

A team of well managed mediocre members will be less of a headache and ultimately more value to a company than a team of rockstars.

Besides all that, mediocre literally means average. You (collective) should be fine with average and stop overloading terms making general life more difficult than it needs to be.


Exactly this. Mismanaged rockstars going off in different directions is chaos.

I have no clue how the term 'mediocre' has come to mean essentially bottom of the barrel proficiency that is still the minimum hiring level quality. The top dog companies can be elitist, but when the company is "MegaCrudSoftware Inc.", it's just plain narcissism. Many Reddit/HN posters exude this in the individual sense and believe they're god's gift to the keyboard and it's just as narcissistic.


Top tier engineers are essentially lubricant. They ideally bring experience and talent to bear on the current site of friction in a business. Even better if they circulate like lubricant.

Exactly. They are the lead singers of the rock band. The maestro of the orchestra. The foreman of the construction team. Yada yada.

It’s a similar thing to incels. Many companies and bosses are kind of like incels. You’re a regular guy that’s probably not that interesting, rich, smart, or attractive, but you believe you deserve a chance with any girl.

Get over yourselves.


Using the term 'incel' has become just as cringeworthy as the word itself is depicted by the person who's explaining or calling someone it. For what it's worth, it should just be dropped completely from one's vocabulary for purposes of maturity alone.

Any word that encapsulates an entire concept is worth keeping around.

We've had to ask you more than once before to stop posting flamebait and/or unsubstantive comments to HN. If you keep doing it, we're going to have to ban you. Please review https://news.ycombinator.com/newsguidelines.html and stick to the rules when commenting here. That means thoughtful, substantive comments and curious conversation.

Top talent means different things to different businesses and many people forget or don't see that. Most companies don't need and are probably actively hurt by people that would be considered top talent at Facebook or something; they need people who can churn away on boring stuff (maintenance, crud, ...), reliably and in a predictable way from 9-5, 4-5 days / week. And like that kind of job and want to do it for decades and decades on end for you; people who don't reload LinkedIn looking for 'new challenges with the latest framework' 20x a day. I would like to hire almost only 'top talent' like that. I like to have 1-2 top performers that 'could've or did' work for Google etc but the rest, no; it's actually risky to have those people in that position because they get bored too quickly, job hop, like new things too much, want to redo stuff they think is badly done etc. Money is not really a thing that binds them either (maybe if you go crazy town, but who besides the FAANGs can pay that?): I had people walk off that were paid US wages in Spain by us (work from home, before covid) because they 'found a more interesting opportunity for their career'. That's not top talent to me.

Edit: and that similarly goes for how you define mediocre; I think my toptalents are your mediocre. I'll have your mediocre please!


> And like that kind of job and want to do it for decades and decades on end for you; people who don't reload LinkedIn looking for 'new challenges with the latest framework' 20x a day.

Interesting, I associate 'latest framework' more with trying to keep the monotonous job interesting (or perhaps misguided attempt at keeping sharp) than with 'new challenges'...


Part of it, is it seems that once you are in web dev, its hard to leave. So you try to make it interesting as best as you can, with "latest frameworks". I personally find all of of web dev to be monotonous

Once you are a {something} dev, it is hard to leave.

That {something} can be web, embedded, ML, etc... it doesn't matter.

The problem is twofold.

First, your skills in {something} are appreciating more than the other skills. If you're a web dev trying to transition to embedded, the skills as a web dev will let you get a more senior spot than going back to a lower experience embedded.

As a $150k/y web dev, would you rather go to $175k/y sr web dev or $125k/y embedded?

It's not that its hard - just that the skills that you've invested time into don't have value and you're going to need to go back to being "just" a competent programmer who needs to learn the domain for anything you switch to.

Secondly, there's the "why are you switching" problem.

If you are switching from web to embedded, the question will come up "why are you switching to a different domain." When that question gets asked, many candidates exhibit a more whimsical or capricious nature of just wanting to do something different. At which point the interviewer is looking at "competent, but likely to leave in a year or two because they got bored" vs "less experienced, but interested in the domain." The second candidate is probably a better choice.

The way to solve that is the personal project and demonstrate that you're interested in the domain at more than a "I'm bored with what I currently do."


This is a talent strategy at some companies (mine included). Our business model simply doesn’t allow us to compete for the “top” engineers. Our best engineers have been people who are just general technologists dabbling in solo projects within the business side of a corporate or working as the lone IT person at a small business. They have enough of the fundamentals to hit the ground running and learn quickly, but not enough experience to attract the big offers.

Are they mediocre developers? Yeah, absolutely. But under the right guidance they can absolutely be valuable to a company, and our turnover tends to be low because we have a 9-5 culture. It’s less about being a mediocre company versus a company that can’t compete for talent on price, so our talent strategy is to keep it a nice place to work so people want to stay.


> "I get the feeling that mediocre business should be able to run just fine on mediocre people."

The mediocre app/system quality and performance and mediocre security for customer and business data that results creates a (sub-)mediocre customer experience.


> Even worse is hiring someone merely mediocre and not actively harmful.

What's so bad about... mediocrity? For obvious statistical reasons, most companies, most jobs, and most people are mediocre (or worse).


> For obvious statistical reasons most companies [...] are mediocre

That's assuming companies exist on a one dimensional spectrum. The more prevailing wisdom is that companies will be mediocre or bad at many things, and good at a couple of particular things, and those couple of things are what make the company viable. This is the essence of a "unique selling point".

But to the point: most companies don't need great developers. Nowdays most medium sized businesses employ some tech staff, but IT is not core to their business.


Because a person's worth is directly tied to how much value they can produce for their company's shareholders.

And if someone mediocre ends up being able to do the job, the company's management may face the fact that they're just a bunch of lame yuppies spending their life in the office to make someone else richer, not changing the world/making the world a better place/any other bullshit eaten from the trashcan of ideology (sniffff).


> Because a person's worth is directly tied to how much value they can produce for their company's shareholders.

Well, perceived value rather than actual value. Which might be pretty much equivalent in a field like Sales where it's easy to track figures, but much harder in fields like software.

And in the end, most people are near the centre of the bell-curve of talent, and still manage to produce plenty of value for themselves and their employer. Not everybody has to be extraordinary to keep the society ticking, and the perception that we should always be excellent isn't just counter-productive, but actively harmful (see what magazines did to people's body image).


Every day I am eating from this trash can.

> What's so bad about... mediocrity?

Nothing, if company managers would admit it.

Instinctively, they know it. The old cult of management-as-a-profession believes that by skillfully directing the activities of replaceable cogs, a company's managers can achieve outsized results.

But they can't admit it because they're afraid that knowledge would demotivate the replaceable cogs.


> What's so bad about... mediocrity?

Nothing, but engineers are expensive, so if you can spend a couple thousand dollars to get better value for the money, you might as well.

Of course, some companies spend far more than that, which is probably not economical.


Most developers are mediocre, no way around that. And every developer was bad and mediocre before he became better. Companies that don't invest in employees don't really deserve performance anyway. Exception might be start-ups though, developers need to adjust expectations especially around pay.

I have seen enough software projects that certainly didn't fail because the devs lacked ability, there was always another reason and mainly that is leadership not knowing about the problem they try to solve.

A bit of an exception might be more artistic topics like video games. Here marketing and chance play a larger role than management.

Sure, maybe you do cutting edge research, here ability is important again, but that is truly exceptional.

That said, I don't think it is hard to get a job currently.


On top of this, it’s hard to select for qualified people because the vast majority of interviewees are terrible candidates. Truly qualified job applicants get callbacks for (almost) every job they apply for, choose to interview at a few select companies, and get offers from most of the places they interview at. Thus, they’re only briefly in the interview pool. On the other hand, unqualified people are constantly getting rejected at every step of the process, and must continually re-insert themselves into the interview pool, and thus comprise the vast majority of interviewees.

Because of this, the interview process is not designed to efficiently handle a minority of qualified candidates, but rather efficiently weed out a majority of horrible candidates. It is therefore a terrible process for the people actually qualified to pass it.


Ding ding ding

Earlier this year I read all these doom and gloom interviewing anecdotes on HN

Spammed resumes to local places for one week. My resume is swiss cheese and I'd been unemployed by choice for quite a while

Totally casual at interviews. Not sober at all

Offers offers offers... places thought nothing of going way over the supposed pay ceiling

Apparently I was the best person they saw in ages? And not fly-by-night firms either

High quality engineering is in demand. There is a talent and knowledge deficit

Hard to not shake your head at top comments crying about nothing but rejections. Go study and stop expecting free money


Sibling is a throwaway I tell you! Bake em away ~dang~ toys.

What's the "modern coding interview" trying to achieve? The other day, a guy showed me a 30-line convoluted, deeply-nested, redundant, and contradictory conditional statement and then rolled his eyes at me when I took longer than 5 minutes to parse it. Maybe I'm slower, but my quality is just fine.

Sounds like the purpose of that interview was to stroke the interviewer's ego. You should have asked him if that was his code, or was that code in production, then rolled your eyes back and left.

> Even worse is hiring someone merely mediocre and not actively harmful.

How is hiring a mediocre developer worse than hiring a charlatan?


I assume the logic is that, at many/most places, the charlatan may actually be let go if they really don't work out whereas the person who is just "OK" will be allowed to cruse along indefinitely. Most companies aren't pro sports teams.

I get that's the logic but I think it's completely stupid. If someone is "mediocre" enough to scrape by that implies they are competent enough to get the job done. If they are not able to get the job done, then they are by definition a charlatan and will be let go.

>it's often very hard to get rid of them once hired

Every state in the US is an "at will" state, meaning a company can fire you with no reason as long as it isn't discriminatory towards a protected demographic.

https://worldpopulationreview.com/state-rankings/at-will-emp...


I wouldn't be surprised if most of those states have laws for unfair dismissal as well. Companies develop an internal process to cover their backs for such eventualities. Running that process to the end is the costly bit.

Those who want someone removed are usually not the people empowered to remove someone. Even complaining to their manager (which is often a bad move) usually wont result in the removal of that person

(Montana isn't at will)

Even with at will, the company can get into difficulty with unfair dismissal and other issues.

The few times I've seen someone fired (and fired fired not PIP or layoff) have been for clear and undeniable issues. The "your work isn't up to performance standards" without a PIP falls into the rare bucket (and more likely at the small companies than the larger ones).


I've never seen this question posted by anyone who had either a CS degree or any nontrivial amount of experience.

It might be hard to get a FAANG job, but it's not hard to find a $100k legacy code janitor job at any old Fortune 1000 in a flyover state.


It's not hard, you say? Give us some pointers then? I'd appreciate a legacy code janitor job for a few years while still collecting $10k a month. I need the break from stress.

Well, where are you coming from?

Getting the first few years of experience is going to be the hardest--hardest relative to the rest of your career; it's not that hard by any absolute measure. Apply broadly, and take whatever comes. If a company is looking for a junior or mid-level SE and wants "1-3 years" of experience (which is common), your degree is that experience. If you have a CS degree and are in a low- or medium-cost of living area, you should expect $60-80k to start. If have a CS degree and are in a high-cost area, you should expect $100k.

If you don't have a degree or experience, it's going to be harder. But why should a shortcut be easy? Is there a secret backdoor career path for people who want to become physicians without going to medical school? No. Do the work, and earn the reward. There are plenty of online and nighttime options for earning a CS degree.

If you apply somewhere and don't get a call back, don't sweat it, and don't take it personally. It just doesn't matter. Hiring is a noisy process, and the cost of a bad hire is tremendous. Most companies will try harder to reduce the number of false positives than to reduce the number of false negatives. Again, apply broadly and treat it like a numbers game. There are limits, though. If you've applied for 10 jobs and not gotten a single interview, pay a professional to rewrite your resume for you.

If you're getting interviews and bombing the technical questions, then study. If you're bombing the cultural/behavioral questions, read some self-help books and join Toastmasters. If you think you're acing the interviews and not getting any jobs, then you're probably bombing something but are too clueless to realize it. Hire an interview coach.

If you're at the point where you have a degree or 5ish years of experience (or ideally both), you are ready to be a $100k code janitor. Learn a common stack well enough to do smart things with it. For instance, if you learn .NET, you should be able to manipulate collections in interesting ways with a single expressive LINQ statement. Pick one from each category (but don't combine Java with SQL Server - I don't think you'll see it as much in the wild):

1. Java or .NET

2. Angular or React

3. SQL Server, Oracle, MySQL, or PostgreSQL

I'm going to offend a ton of niche fanboys now: Don't pick Vue, Go, Erlang, Haskell, or Rust. I'm sure each of them is amazing in its own way, but getting a job is your goal, so you don't pick a technology used by only 1% of employers.

Now I'll offend the embedded and systems programmers: Don't pick C or C++. They're just not widely used in business applications. I know both (at only an intermediate level), but I've never seen either used in a business application. You should know both on some level, but you're not going to get a Fortune 1000 code janitor job with either of them.

Congrats, you are now qualified for the majority of SE job postings at non-tech companies.


> Well, where are you coming from?

19.5 years of programming, but mostly web programming for the last ~12. I want to move away from that, I am sick of it already. There's always something more to learn and even though I don't mind at all -- it keeps my mind sharp which is something I want to keep all the way to my death! -- the churn of knowledge in there is exhausting.

> If you have a CS degree...

I am not from USA and have no degree. I am 41 y/o and I'm a self-taught programmer ever since 12 y/o. Not sure how well that flies on interviews; I feel the US companies put a lot of value on degrees?

> If you apply somewhere and don't get a call back, don't sweat it, and don't take it personally. It just doesn't matter. Hiring is a noisy process...

Completely agreed. I've been in a rough mental and physical health patch for ~3 years now and I've changed more employers/customers than I wanted. Tech hiring is completely broken indeed. You're quite right.

> I'm going to offend a ton of niche fanboys now: Don't pick Vue, Go, Erlang, Haskell, or Rust.

I am not a fanboy at all. I've used 8 languages over my career -- Elixir (stepping on Erlang) and Rust included and I've picked them based on their true, proven and testimonialized merits.

I don't take offense with your statement at all. I presume you meant "aim for something huge and somewhat commoditized that has a ton of legacy code to maintain"? If so, I'll agree with you immediately; there was a period during which I've been barraged by offers from German and Swiss companies almost every day, for months -- all for Java and C# huge legacy beasts.

But sadly that's not where my heart is. :(

Furthermore, I am willing to bet my neck most of those are NOT a code janitor job at all. They'll require a ton of time and attention every day. If I'll do that I'll just find an Elixir or Rust job but at least be happy with the tech stack (if not the area -- the webdev -- which I hate with a passion nowadays).

> Now I'll offend the embedded and systems programmers: Don't pick C or C++. They're just not widely used in business applications.

I haven't been an active C/C++ programmer for like 12-13 years now but IMO you're not on the mark here: there are a lot of business apps but they usually belong in huge old mastodons that are too stubborn to move on (I personally know the VPs of engineering in two such companies!).

But overall you are right -- they are niche but not the good kind of niche; you need a metric ton of battle scars to even qualify there.

> Congrats, you are now qualified for the majority of SE job postings at non-tech companies.

I'd agree but I've neglected networking -- both physical and virtual -- for most of my career and now at 41 y/o I started to feel the negative effects of that. :|


> 19.5 years of programming, but mostly web programming for the last ~12. I want to move away from that, I am sick of it already. There's always something more to learn and even though I don't mind at all -- it keeps my mind sharp which is something I want to keep all the way to my death! -- the churn of knowledge in there is exhausting.

The churn of knowledge can be limited by choosing technologies that don't require constant adaptation. (Time to offend the .NET fanboys): If you pick .NET, there isn't that much difference between .NET Framework 4.5 (from 2012) and the latest version of core. The job still gets done, just with a different set of packages. If you don't have a use for async/await or the TPL, you can go as far back as 3.5 (from 2007).

> I am not from USA and have no degree. I am 41 y/o and I'm a self-taught programmer ever since 12 y/o. Not sure how well that flies on interviews; I feel the US companies put a lot of value on degrees?

Some do, but with 19.5 years of experience, this wouldn't be much of an impediment for you in the United States. All of my opinions apply only to the United States. I haven't worked in other countries and can't comment on them.

> They'll require a ton of time and attention every day.

IMO, a "code janitor" doesn't just sit around all day reading HN. When I use those words, I mean the type of job where you're expected to fix bugs and implement features and not much else. Even if there is talk of higher expectations, there are never any consequences for just going with the flow. You'll rarely/never be asked to work overtime or learn on your own time. You'll only pay lip service to clean code, clean architecture, and long-term thinking. You'll still be expected to show up by 9, hang around until 4, and not screw off the whole time. The job is still a job; it just doesn't strain your brain.

> I'd agree but I've neglected networking -- both physical and virtual -- for most of my career and now at 41 y/o I started to feel the negative effects of that. :|

Headhunters are the antidote to this. When a recruiter wants to connect on LinkedIn and have a short phone conversation about an exciting new position, you always say yes. And if they're not sending connection requests to you, then you send the request to them.


> IMO, a "code janitor" doesn't just sit around all day reading HN. When I use those words, I mean the type of job where you're expected to fix bugs and implement features and not much else.

Yes. We are on the same page, just using different words.

I definitely didn't mean "slacking off". I meant exactly what you said: have 3.5 to 4.5 hours of good solid programming work per day (because realistically that's what most programmers cover in terms of actual focused productive time in the standard 8h work day) where you have already ticked the boxes (or nobody cares about them as you said) so you just pull stuff from a backlog and move at a steady pace with not much supervision.

The company I am very soon starting with has people I like very much, plus I love what they do. But if that turns sour then I'd likely be looking for 2-3 "code janitor" jobs in parallel in order to protect my mental health for a while.

> When a recruiter wants to connect on LinkedIn and have a short phone conversation about an exciting new position, you always say yes.

Maybe you are right. To me outright insisting on a phone call is very disruptive and out of place. I've tried it several times and maybe I drew the short end of the stick every time but they all were young and fairly clueless HRs who just wanted to parrot their speech that was supposed to motivate me and then immediately pressure me for an answer. Don't know, didn't find that a good expenditure of my time.

Maybe I am doing something wrong, I am open to that, but I really am not sure that I want to expose myself to such toxic time wasters. Any advice?


> But if that turns sour then I'd likely be looking for 2-3 "code janitor" jobs in parallel in order to protect my mental health for a while.

Oh, I wouldn't try to juggle multiple code janitor jobs. It only takes one good one to pay my bills. And it would defeat the benefits that I perceive in the code janitor job. If someone wants to put that level of effort into his career, he's better off aiming higher.

> Maybe I am doing something wrong, I am open to that, but I really am not sure that I want to expose myself to such toxic time wasters. Any advice?

Ask for the client and salary range immediately. If they don't give you a straight answer, politely end the conversation.


> Ask for the client and salary range immediately. If they don't give you a straight answer, politely end the conversation.

That's... actually a very good advice!

But what if they counter it with "we'd like to hear your expectations first"?

> If someone wants to put that level of effort into his career, he's better off aiming higher.

You are right but I have zero clue how to aim higher, exactly. Hence my idea.


It depends on the type of recruiter. If you're working with an external recruiter (like an agency recruiter), they're not going to do that. They'll just give you the client's expected salary range. I've never had an external recruiter play this game with me.

If it's an internal recruiter, you might get that question. In that case, have a good idea of what you're looking for, and throw out a number at the top end of the range. If you're talking about a senior software engineer job, and you know that, in your area, they generally pay $120-150k, then say $160k. If you want, condition it based on total comp and benefits. Most Fortune 1000 code janitor jobs will offer a nominal bonus, anywhere between 5-20% of salary. Nothing like the huge FAANG bonus structures. But saying "depending on TC and benefits" gives you some leeway to ask for something even higher later on. And it tells them that, if they can pay you $150k plus a 20% bonus, then you could be happy with that. It leaves the conversation open.

If that makes them walk away, then you didn't want to work there. And don't feel bad negotiating like this even if you're going for a code janitor job. Compensation correlates with negotiating skill more than software engineering skill. It's just the way things are.


Hm. Mostly what I expected then. With one exception: I am in the EU so here $120K a year does not exist. Not even $100K is easily achievable although I've commanded the equivalent of ~$90K a year and will soon work for the same figure.

So I started wondering if I can pivot to the US market -- which was never a goal.

I appreciate your advice. Insecurity and the impostor syndrome can hit even super capable people (I've seen it). Your words help me reassert my self-confidence, and that's sometimes shaky. :)


Retirement, healthcare, and taxes eat up a significant portion of a US earner's pay.

The amount of money that actually gets delivered to a worker's bank account could be a little as 2/3 of their stated salary.

And many things cost more here.

It'd be a good idea to work the numbers and figure out what your take-home pay would be and how your expenses would change. There are some expat websites devoted to this.


You have to move there. Even if you put it up front in your resume (they usually only read it 30 mins before they interview you). None of these companies want to hire from another state. As you can not 'start tomorrow'. Even though they will have these positions open for a year or more.

Be up front you about what you are doing. They are going to think 'he is going to jump at any time'.

Be willing to stay there awhile. But be warned some of these places there may be one to two 'big companies' that hire there (and if they do not hire you are SOL). There may be some small startups here and there. So plan on that. There may not be much to choose from there for you. It is why many move away from those areas. So if you are 'lucky' enough to get into one of the companies do not plan on jumping around a lot. You will burn bridges and the community of devs is small there, and they talk.

Be willing to dig into some seriously legacy code. "oh we still use sourcesafe and vb5". The Joel test is a good indicator of how strong they are. "oh we buy the best for our devs" and the computer on existing devs desks is some beige box from the late 2000s with a CRT.

Set your pay expectations much lower than what you are used to. Had one I was looking at, I was one of 3 people who applied. He passed me over because 'I was not in the same state'. I had 5 years 'full stack' exp on the exact type of system he was working on. After a bit of back and forth they wanted to pay nearly half of what I was looking for. Which was not terribly out of line for that area. Another dude thought he could snag me for 1/4th what I wanted. These guys can be cheap. They have a product someone tinkered together years ago. But they do not have enough income to really justify any sort of real work. So they do what they can and usually just farm it out to some consultant group.


> You will burn bridges and the community of devs is small there, and they talk.

You've hit the nail on the head here and this is my main worry. I've been much more selfish lately (last 3-ish years) and I know I definitely did burn some bridges but I can't make myself care very much -- I am 41 y/o and at one point participating in a one-sided "exchange" of trying to appease while mostly humiliating yourself becomes impossible to swallow (but then again, I recognize I've had both shitty luck and self-selected bad employers due to personal drawbacks that I am still actively fighting with).

> Be willing to dig into some seriously legacy code. "oh we still use sourcesafe and vb5".

One of my strongest selling points as a senior dev is that (a) I don't mind dirty and heavy work at all, and (b) I have an excellent eye for detail, very rarely miss something and (c) I try to leave the code with better readability after I finish my current task on it.

That being said, many companies are too impatient. I've hit the brick wall of "we want somebody who can hit the ground running and we won't provide any training" personally at least 5 times in the last 3 years. And I seriously don't know what to do about that; I certainly can't know all tech stacks and domain expertises on the planet!

And it's flabbergasting how much in denial many companies are about the risk management aspect. I mean they know; they absolutely know what's going on but they concluded that training new hires is a huge business risk (due to most people never staying more than 2 years on a job) so people like myself -- even if senior and very experienced -- have literally 1% chance of getting hired in many such places.

They do have a point and they are mostly acting rationally in this situation; but they could still spare some minimal training so they stand to gain a bit more from the employee that's going to move on maximum 24 months after being hired. One or two months of training isn't that expensive for them I'd think.

> These guys can be cheap. They have a product someone tinkered together years ago. But they do not have enough income to really justify any sort of real work. So they do what they can and usually just farm it out to some consultant group.

I am realistic about that aspect and I accept it. If they wanted to pay top dollar they'd just court somebody who is 45-50 or more for several months and then do their very best to promise them retirement in the company and all the good stuff that a long stay can benefit the person.

I know they want to pay less but I'd aim for having 3-4 such customers, independently, and collect a 120% - 200% of my normal payment combined through such venues. Not always sustainable in terms of mental strain and energy but I've pulled it off successfully even as shortly as 9-10 months ago without being hugely taxed in terms of health.

RE: the consultant group trope, I suppose this is where I fail in terms of marketing. Many companies just can't take a single random person seriously even if he's John Carmack in disguise. I suspect I need to make a fancy consulting website with some fake testimonials and pretty graphics, have a photo in a rented suit and then I'll suddenly be taken seriously. People can be very shallow and easy to manipulate, huh?

I am a bit flippant here but I likely should indeed work on marketing. But how does one strong and senior single programmer advertise themselves as a consultant or, generally, a guy you go to to solve a business problem, and who is not a wage lemming? Got any pointers on that?


The consultant thing is usually a matter of budget. Hiring someone is the personal budget that has had an increase of just enough so everyone does not flee and zero real room for a new head. Yet a consulting budget is from a 'different bucket' and can usually scale up and down quickly. Those are taxed at different rates and depending on their accountants how it will work out.

For your last Q I would say a lot of the same points still matter. They are going to want someone 'local'. Someone who can come in on a moments notice when they are in the thick of it. Also keep in mind a business is not programming. I would suspect what you are really asking is 'how do I sell things'. That is a much different topic. But targeted advertising, cold calling, trade shows, emails to former and clients and colleagues. It may be worth looking into hiring an advertisement firm for some small ideas. Do what you want your customer to do and hire an expert. If you do not have the cash for that you are going to have to do it yourself. Your personal network is probably your best bet for starting to grow your business network. My dad a former insurance salesman spent a lot of time in bars selling and meeting people. They had hundreds of hours of training they took to be any good at it. It may even be worth getting a short part time job as a salesman to get the idea of what to do. Think of it as just as there are jr devs you are jr salesman. But keep in mind, there are several types of sales. Those that sell themselves (they were already going to buy it, it is just from who that matters). Those where you need to work the sale. This is the harder type. You have to basically sell yourself to them. This is either showing them they have an existing need that is not being fed, or faking it by 'creating' a need they did not know they had. Another way is to associate yourself to one of the consultant groups out there. They take a cut but can help with lead generation.


> anyone who had either a CS degree

I see many, many more developers lamenting the "requirement" of a CS degree to get a software development job than I see lawyers lamenting the "requirement" of a law degree for a law job or doctors lamenting the "requirement" of a medical degree for a doctor job. If it opens doors, and you want that door open... get the degree!


Because developers want it both ways... they want the benefits of a job that makes money while also not wanting the requirements that those jobs usually require.

CS Degrees from local universities can be had for far less cost than a 250k law degree and less time than a 13 year MD.


Downvotes incoming from bootcampers who don't want to do the work and from hiring managers who don't like how much we cost...

A recent comment from reddit:

This year I became a co-owner of the company that worked at for the past three years. It's a small development and consulting company and we're currently struggling to find new developers. At the same time, my girlfriend is trying to get her foot into this field. Since she's interested in a completely different tech stack than what we use, hiring her through good ol' nepotism is not going to happen. This situation gives me a small glimpse into both sides of the whole equation.

Before I continue, I want to point out that no side is at fault here. It's just market forces at play.

So why don't companies want to hire newcomers? It's simple, really. It's never worth it.

Even newcomers want competitive salaries because bootcamps, popular media, etc. paint the picture of a career in software-development as being extremely well-paid and with great benefits. This picture is absolutely true -- for senior developers. Meanwhile newcomers need to be trained and built-up, often with intensive mentoring from senior staff. In general, there's nothing wrong with that. I had a great mentor and in turn I love mentoring. But once they've gained know-how and experience, they will look for a different company hoping to use their newly acquired commercial experience as leverage to get better compensation. And that's exactly what they should do! Trust no employer that talks about crap like loyalty. Leaving your first job after max 2 years is something I would recommend every new developer. It is what the legendary Andrew Hunt (author of The Pragmatic Programmer) recommends in this podcast episode. If your first employer gives you a hefty competitive raise to keep you, use it as the new base for negotiations and still try to switch because, as Hunt puts it, at the beginning of your career it's crucial for you to expose yourself to different technologies. Maybe you'll start out as a web developer only to find out after your first job switch that you're much happier in embedded systems. Switch jobs often. Forget loyalty.

But what does that mean for employers? Let me explain it with a few of our cases. In the past, we tried hiring newcomers multiple times. In the most recent case, I was the senior responsible for the new hire. I spent up to 16 hours per week on one-on-one training in the first 6 months to get them up to speed in anticipation of a big project. They left us after 14 months for a different job in the middle of said project. I do not blame them, it's the exact right thing to do. For us, this was our third failed attempt of hiring newcomers and it was frustrating and extremely costly.

Since we're a B2B company creating software for IT departments, I asked around to see how our clients approach this whole situation. And the consensus is, "We refuse to train the future employees of our competitors. Hiring newcomers is a waste of resources. Paying the premium to get senior developers is always better." Especially small IT and software departments/businesses cannot afford training people who will just ditch the place within 2 years while big players like the FAANG companies can and have their pick from the very best newcomers.

As a result, entering this field is incredibly difficult and one has to essentially hope a company is dumb or desperate enough to take the gamble of hiring someone trying to get into developing.

So how can this be fixed? Well, I don't think there's a fix. Most newcomers will never find a job and quit trying to enter this field, the lack of senior developers is going to hurt small and mid-sized companies in the long run and many of them will eventually disappear from the market as their current developers are reaching retirement and cannot be replenished. Only newcomers who give the impression that they don't need extensive training will ever have a chance to get hired. As such, my recommendation is portfolio is king.


There's (at least) a third category:

Small, not tech heavy companies like simple webshops, small crowdfunding platforms, etc will need someone, ANYONE, to keep working on their giant stack of legacy PHP/Rails/whatever code. The business does not support hiring very senior people and the founders are not technical at all so they don't recognize the troubles inherent in hiring a full team of juniors.After a few years the business may fold, but at that point the junior devs have gained some experience and move onwards and upwards. The attitude of "We refuse to train the future employees of our competitors.", while not un-true, fails when you can't even hire seniors.


You are underestimating the effort it takes to inherit a big codebase and maintain it, this is not a task for a junior.

I have done so with several big codebases, so I know that you speak the truth here. Putting junior devs in charge of a tire fire is only going to make such a codebase worse. But most of the owners of such businesses do not recognize it and only call in professional help when the business is already at the verge of collapse.

Yes. A huge million line php application running a profitable company is a hard fit for a junior off a boot camp.

It's a hard fit for seniors even. Legacy is hard, big codebases are hard. You'd have to be crazy to let juniors take over such a thing. I think a junior might actually do better on a greenfield project if deadlines aren't too strict.

Yet i can't count how often i've seen business owners giving juniors large codebases without mentorship because they don't want to pay a senior.

Sometimes you pay a really crappy lawyer because you can't afford better.

I actually agree with the practice, and generally don’t think you should be employed to learn the basic tools of the trade.

First there’s a code fluency wall you have to get over.

Then there’s a tech debt/spaghetti lesson that needs to be learned (IMO this can only be learned the hard way)

I did this with 6 months working on my own stuff 12 hours/day, then 6 months working for nothing but equity in a never gonna happen startup.

Once someone is over those two walls, they can be useful to a company. Absolutely never writing greenfield stuff, but maintenance, matching style, very clear start and end type stuff for at least a year.

Before you’ve internalized code as a fluent language and developed basic code hygiene, you should not look for a development job. Even if you get one you will be an imposter.


>I actually agree with the practice, and generally don’t think you should be employed to learn the basic tools of the trade.

In what other technical field are you expected, post-school (which probably hasn't taught you a ton of practical skills), to spend a year on your own making yourself employable?


In medicine you spend a decade making yourself employable. The on your own part is a luxury and a curse, in that we don’t need patients to practice on.

The closest comparison I have is professional musician.

you’re supposed to love the language of music. If you don’t, good luck.


The view of some that software has to be this all-consuming thing from a young age if you want to be any good at it has a great deal in common with the arts.

And very little in common with how most people treat other technical professions.


It has a lot in common with other fields (most of which sure, are not “technical professions”, but that's because this is not about broad content) in which there is an oversupply of talent at the low levels, regardless of the conditions at the top of the industry.

The reason is because — between the people with the genuine love of the field plus those drawn in by the lure of the high-end pay — there is such an oversupply.


Sure, because software is both an art and a science and draws a lot of comparisons with music where you have to understand the technical theory, the creative and also be comfortable physically playing an instrument while having some level of understanding the digital domain (MIDI etc).

Software also sits at this technical/creative/implementation intersection where unless you're doing something very specific, you're going to need to push/pull in different directions.

A lot of software doesn't do anything exciting, standard office CRUD, dashboards, back office tools can be banged together by a single developer as long as they can connect to a database, render a UI (web/desktop) and take requirements from the business.

There's a lot of software jobs which aren't at software companies but regular businesses who just need to track something domain specific and can't afford to tender.


So you're suggesting new software engineers spend a full year with no pay before trying to get their first job? That's not feasible for most people.

This is a really useful perspective, thanks!

I will say that I've hired a couple of newer developers and in some cases they've moved on, but in other cases they've stayed with the company I was at when I hired them, in some cases for 3+ years. So not everyone leaves after 2 years.

I think that companies need to be really explicit about their training and goals and try to make employees happy. Yes, that bootcamp grad is going to be super happy to work for you for the first year, and grateful to have the experience. But, yes, they are going to start looking around. So plan for how to meet their needs as best you can. Some folks will simply be on the hunt for difference and comp, others will be happy to stay at the same company if you can challenge them and continue to let them grow.

> ... at the beginning of your career it's crucial for you to expose yourself to different technologies

This is one reason I feel like a small consulting shop is the best place to start a software development career. You matter (because it is a small shop) and you'll get exposure to many domains and technologies (because it is a consulting shop).


The trades have apprenticeship programs... might be an interesting model to try to replicate.

Apprenticeships in a trade tend to be such that with sufficient hard work and determination, anyone can fill the trade requirements. The problem solving skills of software development don't seem to fit that model - there are some people, no matter how much you train them, don't seem to be able to move beyond "follow instructions" to "give tasks" when it comes to developing software.

The second part is that the trade has a bonded period. Depending on how that is written, this becomes more difficult to enforce with at will employment. It can also lead to companies taking significant advantage of their bonded juniors. I mean... if you think this is a good model, revature is out there.


> Apprenticeships in a trade tend to be such that with sufficient hard work and determination, anyone can fill the trade requirements. The problem solving skills of software development don't seem to fit that model - there are some people, no matter how much you train them, don't seem to be able to move beyond "follow instructions" to "give tasks" when it comes to developing software.

The trades face the same challenge. Over the past decade, I've gotten along well enough with my HVAC guy (one-man shop who brings on a rotating cast of apprentices) to talk with him about this. He reports the same experience ("no matter how much you train them, don't seem to be able to move beyond...").

This isn't a case of "can / cannot solve problems", either. For hobbies they delve in, that cohort appears to problem solve extremely well. I suspect the challenge is finding ways to communicate a mental model of the same problem domain that "clicks" with different personalities.


I'll start off with apologizing the "trade" comment - in my mind I was more thinking the landscape / basic construction. I hadn't really thought about the mental model of hvac.

The "skilled trades" with hvac, electrician, plumbing, carpentry and such where the apprenticeship is more appropriate do have that issue again.

While it is often argued and parts of it have been refuted - The Camel Has Two Humps ( http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf ) is applicable here.

There are people, for whatever reason, can't accept a different mental model than what they've got in their head. Software development is about twisting how you think to that of how a computer works.

I've presented this very light model of "levels":

A junior follows instructions

A mid completes tasks

A senior solves problems

There are people who plateau at each level and never go beyond that for whatever reason. In many cases it is a failure of putting the proper problem solving / learning skills in place to be able to think in a way that isn't the easy way.


Which is more a symptom of bad apprenticeship and i believe we don't acknowledge enough that there are too many shops doing a bad job on training the apprentice.

This then asks a two part question:

* How do we prevent a predatory apprenticeship?

* How do we ensure that a non-predatory apprenticeships are able to keep their staff for a long enough duration that they're not losing out?

There is a part B to the first question on preventing predatory apprenticeships. There was an anecdote told on reddit of a person who was trying to get out of tech support and so signed with Revature for becoming a software developer, went through their bootcamp and then got placed at a company. That company found that he was rather skilled at doing tech support (rather than as a junior dev) and so moved his contract over to do tech support... getting paid less than he was getting paid doing tech support prior to joining Revature. Furthermore, the locked in two year contract meant that he did tech support for two years. At the end of this, he's got two more years of tech support on his resume that paid him less than what he was making before and no additional software development accomplishments.

So yea... Predatory apprenticeships are a problem.

The way that the "stay around long enough" of old was a signing bonus. When I started in '96 with Taos ($54k/y), I got a $5k signing bonus and $1/mile moving bonus (Mapquest was a new thing - HR was amazed at how much easier that was going to make their job in calculating the moving bonus). If I left before a year was up, I'd have to pay it back.

That works reasonably well enough when salaries are about balanced overall. But it works poorly when there are some jobs that can either offer a much larger bonus or the new pay can quickly repay the bonus. If you're making $75k/y and have a $10k bonus to repay and then get a job for $150k that bonus can be repaid within a month or so (by the time accounting sends out the "pay us back" the bonus is ready to be paid back with the increase).


> But once they've gained know-how and experience, they will look for a different company hoping to use their newly acquired commercial experience as leverage to get better compensation. And that's exactly what they should do!

I disagree here, and I think this is the main reason we're having this conversation. If someone has been trained up or learned on the job such that their skills are more valuable, then their employer should treat them as such and give them a raise. I've seen time and time again that good employees leave just to get compensated fairly. Alternatively people get disgruntled and leave when an experienced outside hire is brought in at a higher pay band to struggle to do the same work that they've spent years learning to do.


>I spent up to 16 hours per week on one-on-one training in the first 6 months

This is crazy. If the junior needs more than 1 hour a day to be net positive (= do more work in the remaining 7 hours that you would do in that lost hour) then I would say they are a lost cause.

This is also so easy to filter at the interview level - give them homework to learn some new skill, junior candidates are generally willing to spend significant time on that and it gives you much better picture of their abilities than whiteboard puzzle.


The best and most practical comment so far.

That's what my experience says, including the conclusion.


It feels like there is an attitude here that you should be able to recoup the cost of training a junior hire by paying them below market rate for for their new skills. This just isn't reality, as OP has discovered.

That means that the true cost of a junior candidate vs a senior candidate isn't just their 1st year salary difference on paper, you have to count in the cost of training _and_ retaining the junior hire. That doesn't necessarily mean the math doesn't work - especially if the market for senior developers is much tighter than for junior developers.

Also the idea that you'd be mentoring for 16 hours a week one-on-one seems like it is either inflated or there was a problem. Maybe the candidate was a bad hire even for a junior role, or the mentor is micromanaging, or the work product expected was never appropriate for a junior developer - but something seems off there.


I think this article gets close, but glosses over one of the major issues in software dev hiring: the filtering process is all wrong.

Front line recruiters tend to be non-technical, and can't pattern match for good candidates outside of very narrow criteria. (ex: They won't know that a person with strong C# skills will likely be just fine with Java.)

Just getting your resume in front of actual people doing the hiring is hard. My experience is that if you want to make it easier to hiring talented software engineers you need to make it easier to get the right candidates in front of the actual hiring team.


I think this is part of why getting hired through connections is even more important in this field, and why it's also interesting that so many members of the field look down on that very process.

I agree it's not very meritocratic, but it DOES get people in front of people more qualified to pattern match their qualifications more quickly.

The problem with getting more people in front of the actual hiring team is the "charlatans" other people have mentioned in this thread will effectively waste the (very expensive) time of said team. Using a (less expensive) recruiter as a first stage seems rational until you discover the high rate of false negatives.

I've mulled this problem a lot and I still come up empty on a new, more effective way to solve it.


> getting hired through connections (...) it's also interesting that so many members of the field look down on that very process.

I think the explanation is quite obvious. People who gravitate to this industry are not as social as those who gravitate to other industries, hence the disdain for (or rejection of) the process that leans heavily on something that doesn't easily come to them, that feels like something they shouldn't have to be dealing with.


I'm not sure it's so much a case of social vs. not-social though some of it probably boils down to that. I think it's more of a rationalist viewpoint that the "best" person should be hired rather than a merely "good" person who knows someone who may put their thumb on the scale.

> Front line recruiters tend to be non-technical, and can't pattern match for good candidates outside of very narrow criteria. (ex: They won't know that a person with strong C# skills will likely be just fine with Java.)

Sounds like a problem with the job description, rather than the recruiters.

Sometimes you really do want an expert in a narrow domain, using a specific framework/language. Other times you don't. This needs to be communicated to the recruiters.

Engineers love to lay the blame on the recruiters. In my experience, the recruiters are usually just a mirror for what the hiring managers are asking for. If the hiring managers do a poor job of defining the role, then how do you expect a recruiter to find good candidates for that role?

If Java and/or C# experience works, communicate that to the recruiter. Don't just assume they will know. Even as an engineer, if someone asked me to find a Java candidate, I would find a Java candidate. I would not make assumptions about what other experience would fulfill the requirements.

As far as filtering being the problem, I highly doubt it. Most of the complaints I hear from people are about the interview process. I know a few engineers that can't get hired, and it's not because of a lack of interviews. They just can't pass the interviews.


I’ve just interviewed at 4 places. None had technical recruiters; I was contacted and went through the process with the hiring manager.

Same nonsense though; here’s some random leetcode problem; sure our company hasn’t made anything novel or proven itself in the market but we Googled how to do a tech interview and this is what we found.

Getting a job is hard because people are lazy. They’re just regurgitating what popular companies are doing, whether it’s good for them or not.


Recruiters are non-technical in every business though, why would we need special recruiters for programmers when we don’t need special recruiters for neurosurgeons?

I think a lot of this is because our profession does not have an accepted universal bar everyone can jump over to be considered ‘qualified’. Every technical interview feels like rolling the dice in proving I am a competent developer. Giving me 50 minutes in a high pressure situation in an environment i am unfamiliar with and people I just meet will never product my best results, and then add to the fact that I could be asked any question, and my ability to answer is it being ranked against other candidates. Maybe someone else _just_ did a similar question in another interview and it’s fresh on his mind. Maybe someone spend their entire career focusing on just this type of problem given in the interview, but the question in the interview is only partly related to the actual job.

This is a great point.

In many other fields (medicine, law) people study a standardized body of knowledge, take a standard test and then get a license so they can do something others cannot.

However, this doesn't prevent a lot of awful and a lot of great people getting through. You would still need to interview a lot of them. I wonder if it sets a minimal level.


For the top law firms, things are pretty straightforward. You have to pass the bar, there's the school you went to, your class rank at the school, internships and clerkships, and then associates are largely up or out.

I assume it actually works pretty well but there's obviously a huge amount of gatekeeping involved.


That all makes sense, and it bothers me, too, but they do hire somebody eventually, which implies that somebody can produce quality results in 50 minutes in a high pressure situation in an environment they're unfamiliar with and people they just met.

>implies that somebody can produce quality results in 50 minutes…

This is more a random fluke as much as sampling bias. Akin to someone either getting lucky or someone who is coming from a very similar environment. This isn’t a measurement that guarantees someone is competent, rather it’s a guarantee that someone is coming from just as incompetent an environment as you have.


You know the company is on a good trajectory when the new hires are a little less incompetent than the past hires.

Note: This depends on hiring style. Some companies have a bar and everyone who meets that bar is hired. Other companies are hiring for a position that gets one person...

These results may be "curved".

If you give the same easy test with no pressure and everyone is sufficiently good, then it was a waste of everyone's time.

In such an approach, you do something that is sufficiently hard that you're able to identify the people who are the better performing ones along with a reasonable idea of how well they work under pressure (because that will happen at some point).

Is it testing the right thing? Probably not. However, we still haven't found "the right thing" that is able to scale, respectful of the time of the candidate, not too intensive on the interviewer, and minimizes biases in hiring (same set of questions to all candidates, same grading scale).


> Is it testing the right thing? Probably not. However, we still haven't found "the right thing" that is able to scale, respectful of the time of the candidate, not too intensive on the interviewer, and minimizes biases in hiring (same set of questions to all candidates, same grading scale).

Maybe because the concept of a test is flawed? It seems to me like every company that uses a whiteboard test gives out the same tests anyways.

What are they really trying to test? If someone understands common algorithms and data structures? I dont see why that couldnt be determined by a simple interview with an engineer. A test might be useful for a HR recruiter who doesnt have a computer science background, but those tests are usually conducted by other engineers anyways.

The whiteboard thing just seems to me like an arbitrary hazing ritual.


Or they have have a really high hackerrank score and know the answer already.

Or they just hire the guy they knew through their network. A lot of "how to beat the tech interview process" advice is about how to break down the door with a battering ram when you don't have the key.

This is basically the advice I give everyone I know when it comes to things like this, "If you're going through the front door, you've already lost."

My experience has been that this applies to recruiting, hiring, BD, sales, fundraising, etc. Anywhere that there's a systemic principal-agent problem.


This is fairly true. The easiest side-door if anyone is wondering is a recruiting firm. At least with those there is already a somewhat simple contract in place that helps get rid of poor people.

I am wondering if the entire interview process should just be pay them for 2 weeks and see if they stick.


> If you're going through the front door, you've already lost.

I've heard that advice in various forms but I must say (anecdote incoming) - in my own 30 year career, the best jobs I've ever had were the random ones that I just applied for and the worst ones were the ones that somebody I knew from before recruited me in from outside.


hmm, I guess I can say a reasonably good one and the worst one ever that almost made me quit programming came about this way. The same guy recruited me in both places.

How many jobs have you had? You talked about the best and the worst. Can you comment on the relationship between (y-axis) quality of job and (x-axis) strength of personal connection before you joined. If you plotted a scatterplot, what relationship would you find?

I've changed jobs ten times since 1992. As it works out, exactly half of them I was recruited into by an internal reference and the other half I found on a job board like Monster or LinkedIn. By far, the two best were relatively large organizations that I applied to cold, and the two absolute worst were actually the ones I was most actively recruited into by former co-workers. I suspect that the problem in both of the latter cases was that they worked so hard to bring me in that they ended up overselling me - I'm good, but I'm also a human who has two kids to look after. On the other hand, if I'm "just" the best candidate from the pile of resumes, expectations seem to be reasonable.

Very few people hired at big tech enter through their network without a technical screen.

Speaking only of ICs:

From principal engineers down, there's a technical screening. Distinguished engineers? Maybe. But then you're speaking about Guido van Rossum, James Gosling types.


I was a hiring manager at Facebook, and even when there was someone we specifically wanted to hire, they still had to do the same coding interviews that a new college grad has to do.

Or their standards drop enough to hire someone

I have done that in the past, and I've failed miserably in the past as well.

Am I on the top of my game right then and not stressed about anything and the questions out of the random million possible questions that could come up are ones that I just happen to have had on my mind recently? Then I ace the interview.

The last time that happened it was in a big international consulting company, they then put me through 5 other interviews afterwards, each one telling me I would hear something back in the next couple days.

The last one I got told couple more days, they didn't call me back for nearly two weeks. Then they call: Hey Bryan, we would complete the offer process now hope you're still interested?

Uhm unfortunately I got an offer last week for a 6 month consulting project, sorry but I had to take it because they said they couldn't wait to see how this turned out.

on edit: clarification.


I have known of many positions that stayed open for years until the position or company disappeared.

I did an interview with Reddit - whom I hope sees this comment - and they not only provided zero information about the context of the tech interview in advance, or whether it would be one, but also the interview itself was like playing a random version of tech Jeopardy, but without the category columns, and very few of the questions had anything to do with the job I would be doing.

I have over 20 years of programming experience, am a founder, and have worked for multiple venture backed startups. That includes hiring countless developers, so I get both sides of the situation. And my partner is also a tech recruiter for a top tier HFT / market maker, so I know what a demanding but respectful hiring process looks like.

Reddit’s hiring process converted me from a fan of the site into someone that thought the entire organization was second tier - which obviously it is in terms of monetization - but also in how they treat people compared to the FAANGs. And a year later the role is still open.


Maybe they don't really want to fill it.

I had a similar interview with a different company last year. Three guys and me on a Zoom call with me sharing my screen trying to solve a coding problem that in no way resembled anything I have ever encountered in my 25 year career. When I got stuck they just stared at me. They would not give me any hints whatsoever. They just stared at me.

When the interview was over I thought, "Is this how working with these guys is going to be?" If I ran into a problem and went to them for help, would they just stare at me, waiting for me to figure it out on my own?

They didn't extend an offer to me and, based on my performance in that interview, I can't say I blame them. I'm not sure I would have accepted if they had, however. That experience really left me with a bad taste in my mouth and a low impression of that company.

We as an industry really REALLY need to figure out a better way of conducting interviews.


"Is this how working with these guys is going to be?"

Unfortunately, yes. Young engineers are terrible at communication and working with others. Partly due to workplace incentives and partly because you must realize that entire generations have grown up with computers and not people.


I don't think this deserves the downvotes it is getting simply because there is some truth to the comment.

A good friend of mine worked with a young developer recently who was excited about what he was able to generate with a single npm command. When my friend, who has been writing software longer than this guy has been alive, calmly pointed out that the npm command had just generated 400 files and thousands of lines of code that didn't actually solve their problem, this guy got mad and went to complain to their manager.


I'd be mildly ticked-off, too. The senior guy was being an ass.

I can easily imagine how it went down.

"Wow! I can do so much with so little!"

"Everything you just generated is wasteful and meaningless."

The right way is to encourage that enthusiasm and guide them toward doing more useful work with the same power they just discovered.


We only have your telling of your friend's telling of the story. This is rhetorically similar to saving a 50% quality jpeg as a 20% quality jpeg.

In all honesty it's not just younger developers. I have worked in plenty of companies where the idea of "communication" needed to be stressed and would of fixed many problems and saved a lot of money.

In a cut-throat environment, where 10% of people are PIP'ed, it is expected: your senior colleagues are not going to help you, will lead you down a wrong path, etc. That way, the tribal knowledge will be with them, and they can outshine any new employee.

In your interview case, they should have given you hints, even if they want to not hire you later.


That’s not how 10% attrition works at any notable company.

Pray tell, can you clarify what's incorrect in the above description?

I know some MIT labs work that way. Backstabbing people b/c there are only so many upper positions instead of titling and paying people their skill level you would have to wait for someone to retire.

I had an extremely similar experience recently and it really shook me up for a few days. Same amount of time in the industry as you.

Looking back there's no way I would have fit in there, but damn did that interview screw me up for a while.


Nothing about tech interviews is a signal for what happens inside the company, aside from you having the dual role of giving tech interviews while you forgot to factor that into your sprint planning

You’re making the same mistake at vetting them that they’re making at vetting you


The interview is signal from the actual company - it's definitely got some information about what's inside.

You are simply determining that you are okay with false negatives

Which is exactly why they do irrelevant interview brainteasers as well

This problem is a two way street in the tech sector, in case anyone wanted to fix it. The candidates alone are making the same mistake and bringing it to the company


Is a "false negative" a positive?

Its a quadrant. Positive, Negative, False Positive, False Negative

It is a determination that something should be rejected, when it really should have been accepted.

Similarly, a false positive is something that was accepted, when it should have been rejected.

If you have a sufficiently high candidate pool. you can (for a while, at least) live with an interview process with a relatively high false negative rate (that is, x% of the time you don't hire people you should have).

If it is typically quick to go from "in through the door" to "is a productive member of the team", it may be that you can live with a high false positive rate (that is, y% of the time you hire people you shouldn't have).


Honestly, these are the reasons I don't look for a new position.I make "good" money, but by no means great. I have the benefit of 20 years tenure and apparent stability in my current role. Trading that for more stress in hiring and gambling more stress in daily work doesn't balance the potential salary increase.

I've never understood the heavy emphasis on in-interview coding or brain teasers. To the extent that I've participated in the hiring process (both as an IC and a manager), 80% of the interview is assessing culture/personality/ethic fit; that is, the basic "do I want to work with this person" question.

The technical competence check is all retrospective, hearing them talk about prior projects and what the design and implementation process was like, how decisions were made, what the challenges were and how they were handled, any regrets/learnings. And most of that is just digging in far enough to confirm that the person was actually a first-class participant in it with a deep understanding, and not a bystander. Any whiteboard stuff would be "show us how the system worked" as a last-ditch check on basic communication skills.


You know, I was nodding my head in agreement as I read this when something occurred to me.

This all requires that the interviewer be willing to interact deeply with the candidate. Our profession has a (well deserved, I think) reputation for having a high percentage of people who really don't like interacting with others on a peer level.

Is it likely that a large part of the problem is that we have people doing interviews who really shouldn't be? I mean, if your typical response to talking to another technical person is immediately to try to one-up them, then you're going to be a really shitty interviewer. And that's exactly the personality type I see being described over and over in these anecdotes.


Not sure about English, but in my language we have a saying "The fish stinks from the head"

I can tell you, with quite substantial sample size from me directly and from people I deeply trust that every time we encountered an interview like this, we later found out that the company culture was really bad.

Those are not the kind of people you want to work with.


For clarity, is the "like this" in your comment referring to brain teaser technical one-upmanship interviews, or the less structured style that is focused on getting to know the person and having them describe in their own words the projects in their past?

I was referring to this:

> I had a similar interview with a different company last year. Three guys and me on a Zoom call with me sharing my screen trying to solve a coding problem that in no way resembled anything I have ever encountered in my 25 year career. When I got stuck they just stared at me. They would not give me any hints whatsoever. They just stared at me.


> Not sure about English, but in my language we have a saying "The fish stinks from the head"

English has this expression too, except it's "The fish rots from the head". (Which, when you think about it, makes more sense.) What's your first language?


> if your typical response to talking to another technical person is immediately to try to one-up them

The psychological reality behind all this is even worse.

The interviewer is not looking for new colleagues, he is looking to improve his own self-esteem and rank. The reward for rejecting a candidate is a feeling of superiority and an appearance of being irreplaceable.

The interviewer and the candidate have opposing goals, and the interviewer can randomly change the rules at any point.


Ugh, that's horrifying. I don't think I've been the interviewer and not felt the exact opposite, like "I'm desperate to have more people on the team ASAP; do we satisfice here and make it work or hold out?"

But then I've always been interviewing for my own future colleagues/boss/reports. I guess the dynamics could be different if you're in a huge company and just generically interviewing for new cogs that might get slotted anywhere.


I'm in semiconductor design not software but my goal is always "I've got way too much work, is this person good enough that after a few months of training they will be able to do some of my work so I can get more sleep?"

If the person is smarter than me even better! Instead of spending time teaching them maybe I can learn from them and get into their network so that if I ever need a job in the future they can help me out.


this is very well put, indeed both parties are set up to fail: - the interviewer has an incentive to fail the candidate, whereas the interest of the employer is to actually hire someone eventually.. - the interviewee is rated on something that has little resemblance to the actual job (difficult to succeed when you're not told what the admission criteria are...).

Some years back I wrote a post about interviewing, from the point of view of the _interviewer_. I emphasised that during the interview, the candidate is the most important person in the world.

It only later dawned to me that our industry has a non-trivial fraction of people for whom empathy is a foreign concept. They're not sociopaths, because those folks can at least feign empathy - we're talking about individuals who can't see themselves in another person's situation at all. On top of that, we don't really provide actual interview training to engineers either. Out of all the people I personally know in London, only one (1) has received formal interview training.

Is it any wonder that the interview gauntlet is such an awful experience for pretty much everyone?


That seems like a reasonable approach if you have the right skills for it. My problem with such an approach would be that I'd not feel comfortable to make an overall evaluation of a person based on a short interaction. Having a clear cut process with well defined metrics provides me with more confidence that I'm evaluating candidates fairly. Without it I'd be worried that my rating would be too biased by superficial stuff like how they dress etc. Something that at least in psychology research seem to mbe a lot more common than many people think. In general, looking too much at cultural fit would feel I'd risk "hiring my friends" rather than based on what value they could contribute.

That is a risk, definitely. And I think that kind of thing is probably in part why Google and others who followed them ended up where they did— wanting a system that was completely impersonal, quantifiable, and which could be said to be 100% meritocratic.

Which is noble, I suppose. But clearly lots of people still felt that it was unfair and alienating; closer in spirit to a hazing than a good-faith evaluation.


> I've never understood the heavy emphasis on in-interview coding or brain teasers.

Here's why https://blog.codinghorror.com/why-cant-programmers-program/


I guess, but I would hope that kind of thing could/would be smoked out in the course of a discussion following these kinds of prompts:

- Tell us about the approach you took with the take-home coding challenge. Why did you break up the functionality in the way that you did (modules/classes/functions)? What kinds of constraints or requirements would cause you to make a different call here?

- Tell us a debugging war story. What was the bug, how did you discover it and come to eventually understand the root cause? Any challenges with reproduction? What steps were taken to prevent it from happening again?

- Pick a feature of XXX programming language and explain how it contrasts with approaches taken in other languages. What do you like about it? It is more productive, efficient, safer, more explicit? What are the tradeoffs and how do you balance these? What kinds of projects would have you prioritizing using a language/ecosystem with this capability?

Someone incapable of writing a fizzbuzz program is not going to be able to bluff their way through an interview like this. Obviously you need to be committed to listening and exploring the space with the other person as opposed to flexing and looking for the "right" answer, but that's just part of the discipline of being a good interviewer and not a jackass.


I have found that a 30-minute discussion on a random variety of technical topics (including questions such as those posted above) is sufficient to determine whether someone has required technical expertise.

Coding exercises entirely miss the point, because writing code is the easy part. The hard part about good software engineering is being able to rapidly acquire problem domain expertise and knowing which engineering design choices enable rapid, scalable, and maintainable development to solve the problem. That's why companies using code exercises to screen candidates are generally not worth the interviewee's time to work for - it indicates that the interviewers don't understand the problem domain, either, and (by extension) that company is mired in mediocrity.

I've had code exercise interviews. I'm quite happy that I have never had to work for one of the companies that used them. I have never given a code exercise interview, and I've been quite pleased with the candidates that have responded and worked with me.


i've had similar experiences over the phone.

"How would you pull in data from an arbitrarily long -- maybe never-ending -- source of data in Python?"

me : "What kind of data? What is it used for? How should it be represented afterwards?"

Silence on the other end , followed by "Well that's up to you."

I then fumble out a few ways to do it (verbally), to a recruiter that doesn't seem to understand anything that i'm saying -- he's probably reading a question from a script and pattern-matching what I say to the supposedly correct answer given to him in the same script.

Finally it ends with "Oh, that's interesting. ...We'll get back to you." , and the interviews that go this direction -- they never get back to you; you've already lost.

I'm not spouting gibberish, i've been at this for a long time; i'm just not spouting out whatever tech-jargon that their company supports and is needed to conform to his script, and quite honestly the person on the other end of the phone call seems to be universally under-equipped to judge anything remotely CS related.

It's a really weird/ephemeral/surreal experience. Imagine a surgeon being appointed to a position at a hospital because the secretary quizzed him on some flash cards (flash cards provided by Acme Sharp Scalpels), and the surgeon -- by chance -- prefers Acme Sharp Scalpels, and so mentions that brand. Instant hire according to the flash cards.

That's a lot like what it's like when a technically-accurate developer gets passed over for one that blithely mentions popular software packages (pandas/tensorflow/whatever is popular this week) without any real technical knowledge on how to achieve the goals wanted by the hiring party.


> "How would you pull in data from an arbitrarily long -- maybe never-ending -- source of data in Python?"

The answer to this question is to use a generator. If you don't know this, then both people are going to wish that they had that half hour of their life back.

Is this a good question? If you want somebody with a lot of Python expertise, then knowing about generators is a good thing.

If I was interviewing a candidate, and they didn't know this, then I would just find a pleasant way to move on after a minute or two. If this is the only interviewing question, then that makes me happy, because this company has a flawed process, and is leaving some great talent for me to hire.

It's not a big deal if you didn't know this at the time. You might not have known what a generator was, and the person interviewing probably wasn't very good at interviewing people.


How about asyncio streams.py?

That seems like a good answer too.

I think that's only applicable if you are reading from a socket. Although I don't know too much about asyncio streams.py, so I'm not going to get a job at this company.


> > "How would you pull in data from an arbitrarily long -- maybe never-ending - source of data in Python?"

> The answer to this question is to use a generator. If you don't know this, then both people are going to wish that they had that half hour of their life back.

That's funny...I've implemented more than my share of such things in a long career, and my first intuition for an answer to the question, as phrased, was to implement stream sampling. It never even occurred to me that the answer might be a syntactical feature of the language (and yes, I know what generators are).

According to you, I'd be so wrong that I'm a waste of time.

Do you see the problem yet? It isn't theoretical. I've hit this kind of situation with so many interviewers that I'm actually more nervous when I'm sitting across from someone who is clearly on their first or second job out of school. They're asking (unclear) questions in the "python syntax" category, and I'm thinking about the engineering consequences of consuming an endless stream of data...


> According to you, I'd be so wrong that I'm a waste of time.

I don't think so, because you actually know about generators. If you were hiring for people who had a lot of Python experience, but didn't know about generators, that would be a bad sign. You would probably want to ask a some other questions, so you would have a more complete picture of what the candidate knows.

My main point is that the company's interview process is flawed.


> I don't think so, because you actually know about generators.

Sure, but will the OP give me a chance to demonstrate, or simply flip the idiot bit as soon as I don't give the expected response? In the context of a phone interview, I probably wouldn't get anywhere near discussion of python generators in an answer to this question. I'd probably say something like:

"For an infinite stream, my main concern is system resources, which are never infinite...I'd want to use something like stream sampling to calculate the desired metrics, but it's hard to know the right solution without more information about the problem."

Far too many interviewers hear that as weasel-wording, and simply disengage. It's even worse when the interviewer thinks they're asking a clear question about python syntax. It takes a high level of self-awareness to know that you might be the problem when you're the interviewer.

An experienced interviewer might engage with that, but many folks don't have the patience to listen to an unexpected response, nor the respect for the candidate to give them the benefit of the doubt. As I said, this pattern isn't theoretical. I've been on the interviewer end of this kind of pattern many times before.

> My main point is that the company's interview process is flawed.

Agreed on this.


This is a sign that the interview questions aren't there to actually assess technical ability, but are geared towards excluding anyone who hasn't travelled in the right circles. The employer isn't looking for someone skilled, they are looking for someone who is pre-filtered to think a certain way and know certain things.

Maybe. I tend to think that's a cynical take. Never assume malice when incompetence will suffice.

This is a...youthful...industry, and a lot of junior people (with "senior" titles!) are out there doing interviews. It takes experience to become a good interviewer, and if you've never had that experience, you don't know what you don't know.


No malice is needed. Just incompetence at hiring and defaulting to the kinds of measures that don't actually determine if the person has any aptitude.

How does "use a generator" answer this question? A generator can yield an endless amount of data, but if they ask "our customers buy things 24/7 on our website, how would you pull the endless orders into Python?" and you said "a generator", I'd think you were trying to guess the teacher's password ( https://www.lesswrong.com/posts/NMoLJuDJEms7Ku9XS/guessing-t... )

It surely matters if the data source is push or poll or something else, matters if it's a lot of data or a trickle, matters if you need all of it or if you can miss some (and how much), if the source buffers it or doesn't. I'd expect discussions about message busses, queueing, buffering (maybe ring buffers), data stores (maybe SQL or No-SQL), as well as concurrency or parallelism expecting the question could move to "and what if there was 1000x more data?". "Process stock market data" needs more than "read a temperature every minute".

Or at least for a candidate to ask about some of them and be told "this isn't so complicated", not "it's up to you". If it's only asking whether you can loop over a generator instead of trying to read all the data up front, the question could surely be more focused?


The question is garbage as phrased to be sure, but I think the auxiliary context matters a lot in this type of questions. Mentioning "python", when databases are language agnostic, heavily implies the answer is a language feature. Furthermore the way the question is asked (reading from a script) also implies there is a specific non-open-ended answer.

I still answered the question in my head on a whim, half-expecting it to be false, it's a really vague formulation. Sounds like the interviewer was randomly browsing language features and cutting and pasting random descriptions from whatever tutorial. Or maybe the company was using python generators in a really specific "data pulling" niche that the answer seemed extremely obvious to the technical team writing the questions and they forgot that outsiders are not wired to think of the same patterns.


>>The answer to this question is to use a generator.

Wrong answer.

The heap data structure would be a right way to go about representing such data.

>>If you don't know this, then both people are going to wish that they had that half hour of their life back.

Same in your case now.


> trying to solve a coding problem that in no way resembled anything I have ever encountered in my 25 year career.

that describes 2/3rds of the 'codility' tests I've been given in a few scenarios (toptal used it to weed me out). The couple of jobs I've been in where I was explicitly barred from ever asking any clarifying questions, or talking to business/SME folks about the problem at hand... I left those pretty quickly. I guess it serves to weed out people who have some hard-wired dependency on talking to people to clarify requirements.


Never understood this way of interviewing. I get shit now and then for helping people too much in coding exercises, but if someone has reached the point where they are obviously not going to progress why not nudge them along and see how they respond?

I've found that the ability to receive and act on guidance with a certain degree of humility is a much better signal of someone's potential than how many algorithms they've memorised.


Interviewing is hard.

It takes a lot of practice to know what level of assistance to provide at what time. A coworker once showed me a technique of keeping a google doc with the problems, as well as a step-by-step of the solution and the times at which they should be at that step. It always seemed to work out well for the candidates, as even a poor candidate would finish the problem at like 55 minutes into a 60 min interview.

Even with that, getting a person to see what they should be doing next, without telling them explicitly, is definitely a skill you develop with practice. I think you're right in erring on the side of too much assistance. You get to see much more of how the candidate works if you can skip over the part where they are getting stuck on something.


Yes some people just need a nudge in the right direction to carry the task through to completion. And some need to be pushed along the entire way. In either case they don't leave the interview feeling humiliated having floundered in the face of smug silence.

It is one of those common tropes, "interviewing is hard", that seems to justify the inevitability of poor attitude, wasting time of interviewees (remember the interviewers are paid for those hours) and a painful process for basically anyone. I often interview for my company/group and yes, it is challenging in one hour to find out "life, death, and miracles" of some guy who is being interviewed, but it is especially challenging when the interviewer is in a bad mood, does not want to be there, or sees interviewing as a nuisance, and he is looking for a reason to make someone fail. I worked at a FAANG and I got offers from FAANGs-adjacent companies, so I am not one of those you-cannot-win-at-this-game-so-you-complain people. I saw: someone stopping the interview for unexplained reasons after the first 45 minutes, an interviewer at a blue company looking at my private parts for a good part of 45 minutes, multiple people interviewing while doing something else in person or virtually, recruiters (those were the fronts, the hiring managers were responsible) dragging the process forever and then say no with zero explanation. Is it really "hard" doing better than that?

> and see how they respond

Actually being able to take a hint and work with the interviewer is a strong signal that a candidate, while maybe not the best for the job, has growth potential.


Right, one can note in the feedback that they got questions X,Y and Z but needed more than average / normal / acceptable level of hints. Better than sitting there staring down the interviewee in silence for 30min like a psycho. Then again.. it says a lot about tech management, doesn't it?

Reading all of these accounts of horrors in HackerNews I feel my idea of creating a "TOEFL for Developers" would be perfect.

(I am hesitant to describe my idea, but WTH, I'm currently not in a position to act on it, and they say ideas are dime a dozen so...):

For those of you for whom English is not your first language, you surely know what TOEFL is: Test of English as a Foreign Language. The private company provides a test where they evaluate a person for proficiency on different sets of English skills: Reading, Writing, Speaking, general comprehension. At the end of the test they give you a score for each of those and then a general score.

Now, the nice thing about the TOEFL score is its reputation: When you are going to study into a University (from Oxford to Liverpool, from Harvard to Queensland), if you are not a native English speaker, the university asks you to take a TOEFL (or equivalent) and get a score higher than X. As long as you provide that score, the university won't ask any questions. They don't doubt your English proficiency skills.

I want to do something like that but for development: Sure, University thought you CS101, CS201, etc. But what companies are looking for are specific skills (similar to say, https://sijinjoseph.netlify.app/programmer-competency-matrix... or https://docs.google.com/spreadsheets/d/131XZCEb8LoXqy79WWrhC... ). These very concrete skills that can be concretely measured.

I want this becase I've been dealing with recruiting, interviewing and also being interviewed for most of my career. And in my experience setting up a "recruiting wheel" in a company or startup is very painful. Most developers don't know how to perform interviews. Or don't care (who has time for that?). As an Engineer manager, having to comb through 400 resumes a week is time consuming and unproductive.

So I imagine a scenario where, there is this proverbial "Full Stack Developer" certification authority which is independent, very reputable and unbiased: They won't tell me if X or Y developer will make it into my team. They will tell me how does the person score in "Algorithms/Data Structures" or "Micro Services development" or "Frontend development" and then I will choose whether I want to hire them or not (according to my current requirements). That way, I only have to do a culture-fit interview and that's it.

In the past I have dealt with "Sourcing Agencies" that try to do something like that: They do the 1st technical interview, and they say that there will be alignment to what I want. But that was not the case: They send me 2 candidates and get very surprised when I reject one and not the other. And I feel our objectives are not aligned, so everybody is frustrated. Moreover, I don't want to have to deal with hiring agencies. And paying 1 to 3 salary months is too fucking expensive.

Now, as a candidate/developer: I would love to have a "TOEFL" like certificate that I can show, with my proficiency. That way, I can "look for a job" passively. I don't have to be making countless of code interviews showing one time after another what I know. I only do it ONCE for an authoritative company, and everybody else can check my qualifications there.

Companies like Microsoft or TripleByte have tried to do something like that, but the problem is again that they do other things: Their interests clash. Why would I trust LinkedIn? That's why TOEFL monetization make sense: The candidate has to pay for it.

I am aware there are some certifications: Oracle whatever, Microsoft whatever, AWS whatever. But those are either too specific/niche (WebLogic Server 12c administration exam) or they are only a "badge" (AWS Cloud Engineer) that doesn't tell you that much.

There is opportunity here for disruption. And I know that the problems that I've faced are faced by countless of other CTOs/Technology Heads.


certification authority which is independent, very reputable and unbiased

That is a big ask. There have been many attempts at CS-adjacent certifications, some of them government sponsored, but none of them find widespread use. The ones I've personally encountered were grossly out of date (e.g. a C++ assessment that didn't mention templates at all, in 2012), and weren't even mentioned during interviews by the company that demanded them.

It's not just a matter of trust, either. Our industry is incredibly conceptually diverse, despite the common current of abstract patterns that underlies everything. There is no specific or generic skill test that won't be out of date in a year, and forcing the required degree of standardization on our industry to make that possible would effectively destroy it.

In the mean time, the only organizations incentivized to keep their assessments up to date are the vendors themselves, who as you note, have conflicting interests. And at root, if you want to be even slightly more generic than a vendor certification, you are basically trying to test for intelligence and adaptability.


Now, the nice thing about the TOEFL score is its reputation: When you are going to study into a University (from Oxford to Liverpool, from Harvard to Queensland), if you are not a native English speaker, the university asks you to take a TOEFL (or equivalent) and get a score higher than X. As long as you provide that score, the university won't ask any questions. They don't doubt your English proficiency skills.

They should. My university had a minimum TOEFL score requirement. The number of grad students who passed that requirement, but then couldn't write a coherent English sentence to save their lives was still incredibly high.


> my idea of creating a "[standard aptitude test] for Developers"

Already exists. https://news.ycombinator.com/item?id=27662804 Don't you have apprenticeships in your country?


I am compelled to write all the list of things why it will not work :) unfortunately I don't have that much time in my life. Don't take it as putting you down, I would love to see such thing working and live in real world, so look at it as problems that would need to be solved while aiming for grand solution.

First, there are wrong incentives at play, good guys currently don't need that as they mostly are employed and look for jobs passively. Good guys don't care about certificates and you want to certify good guys so your certificates mean something and can build trust. Weak guys will be spending money to cheat their way around just to get passing grade, which will cost money to prevent.

Then you have hiring managers that will not use this exam as good enough just to hire a person unless there is big company that would do the same. So you have chicken and egg problem, because no one will trust your certification and to get the trust someone would have to use it.

My idea is that you cannot effectively hire at scale. I could hand pick maybe 5 devs/year for my company, getting to real numbers in my small company I can see that we can hire maybe 2 developers per year. When We hire someone it worked for me with simple questions and attitude check. I don't see a way to hire 100 good developers in 1 year, that is not possible. Maybe at a scale you can hire 10-20 good developers a year but you have to have 3-5 people involved full time - and ideally those 3-5 people should be nice and technical - where in the end you don't want to use them only for hiring because those are probably your best developers with soft skills.

For that competency matrix - that is something you can do when you have developers inside of the company and you can observe them for at least 6 months. Good luck getting that in practical testing setup for 2 or less hours. I also find those kind of matrices terrible and not useful for evaluating people or projects. I work on a project where we were not fitting in anything of what was in the matrix .. yet we were delivering good quality for business all the time, while teams that were stuck on their "competency matrix" trying to improve meaningless points ended up disbanded and not working anymore in the organization.


> Now, as a candidate/developer: I would love to have a "TOEFL" like certificate that I can show, with my proficiency. That way, I can "look for a job" passively. I don't have to be making countless of code interviews showing one time after another what I know. I only do it ONCE for an authoritative company, and everybody else can check my qualifications there.

One interesting thing about TOEFL is that it is, arguably, correct and complete. I.e when using the English language you use 100% of the skills the test measures, and the test measures all skills necessary to thrive in English. That's why you only need do it only once (every X years).

Engineering skills as defined by those matrices are so much more open ended that you'd need specific matrices tailored for different positions. E.g. a front end developer doesn't need to know what a linked list is. Then you end up moving away from the idea of ONE authoritative test.

Also worth noting that wherever I've seen it used, TOEFL is usually a mere checkbox to tick, and there are other, more thorough measures of skill involved.


My honest opinion, at this stage in my career I don't have any patience at all for explaining technical concepts. Its almost never a one off, once you have to hold someones hand, you always do. And if you don't, they are creating technical debt.

  > We as an industry really REALLY need to figure out a better way of conducting interviews.
maybe i'm naive but, how about just ask the candidate to make a mini version of what they would actually do irl?

if your an app dev: make me an app that does x, you have 60 min

if your a rails dev: make me a site that does y, you have 2hrs

if your a pdm: make me a spec and tickets for a system that does z

maybe i'm missing something but it shouldn't be too hard should it?


It's all the potential criteria around the request that makes just that one piece more complex than it seems.

For example; "Make me a site that does x, you have 2 hours" Do I need to build the app in front of you? Problematic because how often does one build an entire web site in a couple of hours, while someone is standing over their shoulders scrutinizing every keystroke?

Do I take it home and do it? If so, how do I prove to you that I did the work?

Do you care what framework I use? Do you care if I use Open Source code?

What design should I use? Where do I get the site assets from?

If I'm building this site for you, are you paying me for that time?

Then there's the non-technical parts missing from an interview like that:

How does such an exercise tell you that I'm the kind of person you want to work with?

How does such an interview provide me an opportunity to ask you question? It tells me nothing about you or your company which is every bit as important as you finding out about me.


I could absolutely never ever make anything with people staring at me. I need to be alone with my PC.

>We as an industry really REALLY need to figure out a better way of conducting interviews.

Won't happen, because most don't want to figure out a better way. We just have to come to terms with it.


Had a colleague have a similar interview with Reddit for an infosec/appsec role. They said it was a shit show, no feedback, never heard back. Sourced through an external recruiter, so Reddit is burning some recruiter's time churning through candidates. Picked up by someone in finance at similar comp a few days later.

They're too busy writing self congratulatory blog posts on their hiring process to have time to improve it.

https://alexgolec.dev/reddit-interview-problems-the-game-of-...


It's a good signal for me when I'm presented with silly brain teasers like this in interviews, especially when the technology of the company isn't that great.

I'm interviewing you too, so give me something that reflects the problems you solve as a team, otherwise my assumption is your office is full of white boards containing puzzles of the day and your tech is all 3rd party libs.


I wouldn't actually class this as a brain-teaser. It is a non-trivial[1] problem that doesn't require an "aha!" moment to get right. It is amenable to multiple ways of reaching a correct solution. It has interesting follow-up questions. It also stands a minimal chance to actually discover (some) of the way a candidate thinks. It is also implementing the VM for a Turing-complete computational model.

It may also be that anything work-related is actually too long to fit into a limited interview time.

Now, a trivial, brain-teaser, question would be "you have an NxM matrix, and you can either go left or up. How many paths are there from the lower left, to the upper-right corner?"

I consider it a brain-teaser because if you write code that contains any matrix manipulation or searching, you have basically failed. There is a closed-form expression for the number, so...

[1] By "non-trivial", I basically mean that there are multiple correct solutions.


That's actually a nifty problem in itself, I don't see anything wrong. Of course I have learned that the actual "proposition" of whatever problem is not what is right/wrong in an interview.

The way I would apply that problem interviewing someone is: We have 1 hour. Here is this problem (to which of course I know the solution to already).

How would you solve it? Let's solve it together so that I can see your decisions, your code, do you use exceptions? do you use specific type of exception for different errors? do you split functionality in a lot of functions? do you know nifty language tricks (maybe a bit of code golfing or functional constructs if JavaScript or Ruby).

The problem comes when the "interview problem" is passed from the creator to the "mid-level" Engineer who now has to do the interview. For them it becomes: "Ok, you gotta implement this in one hour", and they don't know the nuances or reasons for the problem.

I've seen this first hand with an equivalent problem. I had all this nice interview process that I applied, and the first time I shadowed one developer so that he could do the interview, he was just looking at the poor interviewee fail due to nerves, with the aim to evaluate him only on the merits of how far a set of working code did he had.


I interviewed for a director of engineering role there — met the CTO, very informal ahead of the actual interview loop. Recruiter said they would follow up. Crickets. I followed up. Silence.

It was quite weird.


As someone passively looking, thank you for this. I'll remove Reddit from my list. That is unacceptable. I do 5 interviews a week on average for my company, and if we did that to candidates, heads would roll.

As an interviewer your two objectives are:

1. Ensure the candidate has an excellent experience

2. Collect data points

In that order. Sometimes we run into candidates who make the second item difficult. They fail to complete the specific technical problem. They can't speak about their experiences in detail. We need to drag data out of them screaming. It doesn't matter, your priority is to ensure they feel respected, and leave thinking they WANT to work there.


The last technical interview I did was for Facebook, and say what you will about them, it was a great experience. Before the interview they actually gave me a couple paragraphs about what I was going to be tested on. Needless to say, I nailed it. :D

> I have over 20 years of programming experience, am a founder, and have worked for multiple venture backed startups.

Do you want a pat on the back or something?


Probably not? They most likely want you to know they've been in other interviews in the past, and this one was particularly egregious?

The implication is that they aren't new and they've had ample opportunity to be humbled and grow. That their perspective is the result of experience. Thats all.

I also interviewed with Reddit, although it was a few years back at this point.

I thought I nailed their code challenge and expected to continue through the process, but after that session that was pretty much the last I heard from them. It was pretty disappointing.


One of my buddies gave me this useful insight once: the impression you give your candidates, even the ones you don't end up hiring, will likely be the last impression you'll get to make on that candidate and the tech world is very small. Negative experiences will impact how candidates perceive your company and word of that experience will spread. Always be respectful to the candidates. If nothing else, they took the time out of the day to meet with you and go through various obstacles, etc.

It's too bad your experience was so negative. That's going to be a datapoint in my mental dataset of companies to consider when the time comes.


> Reddit’s hiring process converted me from a fan of the site into someone that thought the entire organization was second tier - which obviously it is in terms of monetization - but also in how they treat people compared to the FAANGs.

And from a completely non-technical persons perspective Reddit is incredibly disorganized at the executive management and corporate level. The amount of turnover, controversy, business model revamps, etc. for a 16 year old company with the hype they have is unique and unprecedented. It's not surprising whatsoever that their hiring practices are similarly disjointed.


I interviewed for a front-end dev position (it was my first ever interview in the industry, I vomited before I got there so it was a pretty crazy day).

I come in. The front-end guy starts asking me questions to try and solve something he is working on. No-one else is there yet. He is asking me about why a JS compiler is removing his comments, I say I don't know, I have never had that issue before...I make an off-hand comment that I use React and most of my JS code doesn't have comments because I am just working on projects by myself, and I don't do a lot of library code...the manager comes in at this point, and proceeds to berate me about why commenting is essential. I say: I use comments where they are needed. Off he goes, again.

Interview starts. Manager proceeds to go through a series of questions designed to expose my ignorance. None of which are related to the job. One classic was him explaining to me that database normalization made no difference to the size of the database because "the data is all the same on the disk" (which is, ofc, not accurate...I tried to explain, he just kept repeating that over and over...he actually said as I was leaving "make sure you understand databases for your next interview" with a massive shit-eating grin). For some reason, there was also a back-end guy there who, upon hearing that I built something in Java, proceeded to launch into a series of questions on internals of Java (for example, he asked me what the difference was between certain versions of Java and the size of the heap...perhaps unsurprisingly, he also got some of this stuff wrong but began laughing when I said I thought X was Y).

The only two questions that I had about front-end dev were: the front-end guy trying to ask me to help solve an issue he was having (before the interview, when no-one was there), and a question about the value of this in arrow functions (which I got wrong, but is also an excruciating thing to try and explain, so I don't think the guy knew whether I got it wrong...it is a terrible question). That was it.


>He is asking me about why a JS compiler is removing his comments

Huh ? language parsers remove comments because they're comments, that's literally by definition. Are you (or your past interviewer) using "comments" in a different sense ?

(Also, not trying to be a pedant on you I swear, but technically JS is traditionally interpreted. Most mature runtimes have compilers but it's not part of the API. It's just a juvenile pet peeve of mine when language implementations are generically referred to as compilers.)

>he actually said as I was leaving "make sure you understand databases for your next interview" with a massive shit-eating grin

I sincerely hope from my heart of hearts that company or department is in it's well deserved position in the depths of the toilet now, or at any rate that specific person.


I actually can't remember the details. I believe we were talking about Babel...so, technically, a transpiler. Or it actually could have been one of those code bundlers (I seem to remember they were using browserify...this was a while ago but I believe most people were already using webpack then...JS...what a mess).

Actually can't find him at the company anymore. But the company isn't doing too well (although they seem to have moved into a nicer office). Revenue down 50% last year (from a small number to an even smaller number), costs up 60%, losing substantially more money than they have revenue, the operations guy who did my interview isn't there anymore either...true "tech company things". I didn't the impression that the company was that bad, they were more "much steam, no fire".


> it was my first ever interview in the industry, I vomited before I got there so it was a pretty crazy day

I'm really sorry to hear this, that sounds incredibly stressful. The worst part about stress in technical interviews is that even under good interviewing conditions (which you clearly didn't have) it can really hobble a candidate to be stressed.

I hope this experience (or this HN post) doesn't scare you away from programming or interviewing at software companies in general. Those guys sound like jerks. There are good companies and decent coding interview routines out there.


My favorite interview surprise was when I was asked to craft a presentation on an interesting project and be prepared to discuss it. When I got on site, it turns out they wanted me to present it cold to the entire dev team of 50+ people.

Reminds me of how too long ago they ended up hiring someone with a very controversial background, and quickly backpedaled on the decision. Seems like they need to take a long look at their hiring practices

I have a not dissimilar background and what you describe is exactly what caused me to throw up my hands and leave the tech world. It's just not worth the BS.

What do you do now? I'm looking to stay in tech (for now), but I'd really like to get out of web development at the very least. Though, I'm not entirely sure where to even begin my long journey.

My educational background was CS and business, I spent 23 years in a wide range of technical, managerial, and consulting roles, and now I sell real estate in two states (our market spans a state line). Would be happy to chat anytime about career ideas.

That's very kind of you, I think I will take you up on that offer. I've only been in the field for like 5 years as of next month. Do you have a preferred form of contact?

Sure - see my profile.

Yeah the amount of trivia folks like to throw out, and the assumptions made based on them is absolutely absurd.

I've ran into "OMG he didn't know that!" responses when one dev disapproves of a candidate. Inevitably I ask "Really how often do you need to know that? and if you needed to wouldn't you just google it and be done?" but we assume it means so much more and there you go.

Then someone else gets hired and they knew the trivia, but can't apply it or worse only really knew the answer and not the ramifications... or they just can't wrap their mind around / don't care to think of second order effects or whatever.


> I think a lot of this is because our profession does not have an accepted universal bar everyone can jump over to be considered ‘qualified’.

Credentialing organizations already exist[1], but none have lobbied the US government to prevent the uncredentialed from practicing.

Perhaps it's time. If none of the existing orgs are good enough, start a new one.

1. https://www.computer.org/product/education/professional-soft...


I’d be happy if some organizations started accepting a credential in lue of a coding interview, and just did a design/architecture and cultural interview.

People here are suggesting credentialing as if it will remove interview requirements rather than simply add a new hoop to jump through. I do not believe required credentialing solves the interviewing problem at all. You see it today with the certifications that already exist in the market. They aren't worth the paper they're printed on. Anyone can trivially study and pass the certification tests and still never have implemented a system, nor even have basic programming ability.

Adding a new hoop is the desired effect, and it does solve at least one problem. If you're at a tech company or some other org that interviews well, you might not have seen it yet.

Many devs are not good at their jobs. They mean well, but they can't solve basic problems without looking at stack overflow. And by "basic", I don't mean leetcode, I mean iterating over a collection.

> Anyone can trivially study and pass

Yes! At that point, I would know that the guy sitting next to me did at least some amount of studying of the fundamentals.


A real credential with teeth would likely eliminate plenty of the "Does this person know anything at all" element of current tech interviews. I've interviewed people who didn't even know what a for loop was or the difference between the stack and the heap. If there was a piece of paper which said that the candidate knows at least the bare minimum about software development, you could at least start the interview at a more advanced (or domain-specific) level.

I doubt hospitals interviewing senior doctors need to ask them basic anatomy questions, or law firms needing to ask candidates the difference between tort and criminal law. Tech could benefit from this minimal minimal bar.


Just turn the Leetcode-style data structures/algorithms segment into the basis of this credential, so it at least doesn't have to be repeated ad nauseam each time an applicant interviews with a different company, despite having the least relevance.

Triplebyte was trying to do this a while ago, weren't they? My last observations from a year and change ago suggested they were running into what might have been signaling equilibrium issues / risk aversion, but I'd be curious if there's other perspectives around.

That's what Triplebyte is attempting to do, yep. But it does seem like a considerable challenge and they're still figuring out their product. Also feels like for an industry-scale problem like this, it would require a consortium of the major employers (not just FAANG but large companies from Microsoft to Intel to Oracle and beyond) to hash out some sort of standard, not to mention a body representing the engineers (if not a SWE union, at least something like the IEEE/ACM) and the academic institutions that provide the education.

One wonders what the history of how the credentials in medicine or law were forged.


What is the interview process like for architects? Lawyers? Surgeons?

I can't speak for architects, but there is a very high bar for licensing for them. For lawyers, I had a friend at a top tier firm that interviewed with another and had to do a full doc review- essentially doing several hours of actual work. They were moving to a small boutique firm outside of "big law" so this may have been somewhat outside the norm.

> I’d be happy if some organizations started accepting a credential in lue of a coding interview

Sure, but what credential exists that both is reliable enough to support that use and would remain reliable enough once it became used that way, even in a specific narrow subfield of development?


A majority of Silicon Valley-style tech is now using data structures/algorithm interviews, so it already is a de facto credential.

Didn’t this exist with the PE designation in software engineering in the US?

https://www.nspe.org/resources/pe-magazine/may-2018/ncees-en...


Yep. It existed for a while. It was canceled (as noted in the article) because not enough people were taking it.

I looked at it briefly but realized that I would need to study a significant amount of engineering aspects (how much water can flow through this pipe type engineering) to be able to pass the first exam.

For people who are developers, while the ethics, principals, rigor and similar type aspects of the PE exam process are useful, that it is still focused on being a PE first and a PE with an Software specialization second means that most people who are software developers would not be able to pass it or find use in the additional engineering principals that it provides (you wouldn't want me to sign off of a building design... well, maybe if I studied enough to pass the FE exam first...)

So, first I'd have to take the FE Electrical and computer exam... https://ncees.org/wp-content/uploads/FE-Electrical-and-Compu... or go with the other disciplines exam - https://ncees.org/wp-content/uploads/FE-Other-Disciplines-CB...

Either way, there's a lot of material there that I don't know and I don't imagine most CS new grads would have a clue on.

And that's just the FE exam. After four years of under a PE, then the PE exam - https://ncees.org/wp-content/uploads/2015/07/SWE-Apr-2013.pd...

It's just not worth it.


>our profession does not have an accepted universal bar everyone can jump over to be considered ‘qualified’.

They even do this crap to people with CS degrees. If a 4 year CS degree isn't enough, then people who do this have no idea what they are doing.

I started in this field in 1997. The interviews were more old fashioned, a few tech questions, see if you were an oddball, then they'd get back to you. If you didn't work out, they would just fire you. Pretty simple.


> If a 4 year CS degree isn't enough

If it's not enough for an employer, it's because that employer devalues what's taught in most CS programs. Granted, there's a significant mismatch between CS degree work and real world work, but that's true in lots of engineering. Ask any engineer in whatever subfield how much time they spend solving differential equations. I mean, great that I learned how to balance a binary tree and write a heapsort in my DS&A class, but have I ever needed to do that at work? Other than to pass some stupid coding interview?


> They even do this crap to people with CS degrees. If a 4 year CS degree isn't enough, then people who do this have no idea what they are doing.

Not all CS degrees are created equal I'm afraid.


A CS degree often doesn't have jack to do with being a professional software engineer

> If a 4 year CS degree isn't enough, then people who do this have no idea what they are doing.

I’ve interviewed many people with 4 year CS degrees who can’t really code. I’m not sure how this happens, but it definitely does. I disagree that having a CS degree should excuse candidates from coding interviews.


My current company works predominantly with 2 major programming languages: Python and JavaScript. This is made very clear when advertising our open software engineering positions. Despite this fact, we once had a CS graduate (from a top-tier US university) who applied and was unable to write a for loop in either language. Yes, that's right: a for loop.

I think it's because software varies vastly in complexity and spans many domains. Every software engineering role may use a generalized skillset to a degree, but I feel like there can never be one all-encompassing bar that can effectively cover the requirements of every role.

You mean like Law?

The same would apply for law and medicine, but those fields have chosen to make a requirement where specialists do have to be generalists first and have to learn and be examined on the whole field.

Becoming a specialized divorce lawyer still requires you to pass certification on things like criminal law and constitutional law (among many other things), you won't be permitted to practice law if you know just your specialty, no matter how well you know it.

Becoming a heart surgeon still requires you to pass certification on pharmacology and gynecology (among many other things), you won't be permitted to practice medicine if you just know your specialty, no matter how well you know it.

But for software workers we do accept that you can ignore many related (and even relevant) fields and just learn only one niche of technology - we could make an all-encompassing bar, but it would be a major change and I'm not sure if we would want that.


It really would be nice to have some kind of license at this point. For interviewees, it sucks because you basically have to take your license exam for each company you apply to. Interviewers have to administer this exam, and they may not be that good at doing that either. They’re more interested in getting to know candidates and hearing about their experience.

The first time I interviewed at Google I didn’t make it past the phone screen. I bombed a question about an appropriate length of a Bloom filter because I hadn’t recently been thinking about Bloom filters, and I was summarily rejected for onsites. The second time I interviewed I was asked a number of questions that I was perfectly “primed” to answer. Because those were in my brain’s cache, I was able to get through the full interview loop with a “hire” recommendation.

My focus is security, and so the second time around I got Travis Ormandy as an interviewer. I was able to impress him well enough with my IPSec foo to make it onsite. Then I got asked a question I had already been asked in another interview with another company, and I was able to knock that out of the ballpark (I mentioned I already knew that question, but the interviewer wanted me to answer it anyway). Then I got asked a question that used recursion, and because I took a graduate course on induction and recursion within the past year, that was effortless for me. Then I got asked a question that involved a kernel feature, and because I happened to recall the Linux kernel list macros and semantics (something I couldn’t repeat now over 10 years later), I really impressed that interviewer.

I ended up having a really successful part of my career at Google, even though I ended up not really writing much code when all was said and done. However what code I did write was highly impactful.

Looking back, things could have gone very differently if I had gotten a different set of interviewers and/or questions. The questions I got just happened to coincide with what was “paged in” to my “working memory,” so to speak.


this needs to be one of the highest rated comments squarely due to how much luck (or gruelling prep) is involved in effectively memorizing answers, i.e. the issue with technical interviews to begin with.

Sounds like the system works!

> I bombed a question about an appropriate length of a Bloom filter because I hadn’t recently been thinking about Bloom filters, and I was summarily rejected for onsites.

I've never even heard of a Bloom filter, so I know how I would have done.


Bloom filters are really cool for space-efficient "have I never seen this before?" lookups. If that is a question that code you write frequently have to answer, Bloom filters may be a good choice. The Wikipedia page actually seems as if it's not too horrible,

> In an environment I am unfamiliar with

I had an technical interview with a company early last week, we did a shared session using VS Code. The interviewer wrote the function signature, and I filled out the implementation. I did great, according to the interviewer, and moved to the next set of interviews.

The next interviewer, which turned out was also technical, ended up opening up a shared Google Docs to write code it. I asked if I could just share my screen in my own editor, but they couldn’t give me permissions to do that. I was given an extremely vague question. When I asked questions, he told me to stop because he was holding out for next iterations of my implementation (again, in a Google Docs). Given no structure and an absurd environment, I completely bombed it. And to top it off, instead of getting an email saying they were not interested in me, they just ghosted me all together. A complete waste of time. I wish them luck in their endeavor to find the best engineer to write code in Google Docs, since that is apparently what they are interviewing for.


reminds of of the systems design interview I had with Google, the interviewer had his webcam off, barely spoke English and had me trying to make diagrams of system architecture in google docs with no reference of what he was actually looking for

it was like sitting in a confusing nightmare for an hour


This is when you open a can of BS and just spray it everywhere. Go for the most esoteric and ridiculous design that you can. Elaborate on the minutia of your design at the finest level. Puff your feathers and flaunt your genius. Both bore and impress your interviewer at the same time.

I suppose I could have, I'm not 100% sure he was paying attention to me

either way I ended up getting a cooler job somewhere else so maybe it was a good thing in the end


"If you can't dazzle them with facts, baffle them with bullshit"

I had an interview with Gitlab like that years ago. Here, write some chef with only the vaguest spec - even after quizzing the interviewer to ascertain requirements.

Had a similar Google interview ~10y ago, shared GDoc. Phone connection was poor, interviewer refused let me try another line. I'd ask clarifying questions and he'd just keep acting annoyed and saying "Are you done yet?"

Frankly the most annoying interviewer I ever encountered. Served as a low water mark and inspiration for me to be as helpful, thoughtful, and kind as I could be in the next 100 phone screens/interviews I conducted for my employees.

FWIW, I've been to many a Google campus and know many employees there, so I think this was an outlier.


I wonder if you are marked as never-interview-again if you leave mid interview citing reason X.

I'd almost rather physically writing on a whiteboard than using something like Google Docs to pseudo code in. I don't know how someone even remotely technical would think that was OK.

I’d be very tempted to end things right there… or use the most obnoxious font I could find.

> next set of interviews

I really dislike when companies do this. It's very time consuming and psychologically/emotionally draining.


Leave a review on glassdoor please

This really is the problem. And I think it leads to a lot of the dysfunctional interview behavior that we've all seen. Interviewers are having to make up their own evaluation methods but really haven't thought through what the acceptance/rejection criteria should be.

I mean, we have things like the SWEBOK (https://www.computer.org/education/bodies-of-knowledge/softw...) that could be used to build a set of interview questions and acceptable responses, but does anyone use it for that?

The best interviews I've had, either as the interviewer or the candidate, have been when there was a discussion and a free flow of information in both directions. Unfortunately, it seems that in a lot of places, this degrades quickly into a hazing ritual.


It doesn't help that so many concepts on CompSci show up in different places under different names and labels.

I haven't participated in technical interviews in a long time, but when I was asked to do it, I made it a point to throw as many lifelines as I could until I got a satisfying answer. For instance, if want to know if the person understands generics and they can't answer the question outright then I'll ask them about C++ templates. Similarly, if someone can't describe the term "idempotence" I'll ask them "can you tell me what makes a function pure".

Mind you those terms aren't interchangeable but if you catch one it should be trivial to understand the latter.


Even if someone's never heard of idempotence, it's enlightening if you can get them to discover it for themselves by asking questions like, "What happens if this request gets sent twice due to a network issue?"

I had an interview with a company a few years ago -- on paper it looked like a perfect match. During the interview things seemed to go well, but things took a turn for the worse with the technical lead's interrogation.

He asked five or six questions related to C and C++ undefined behaviour, a very open-ended one about a technology I'd never used. I answered as best I can, but always opened with "I'd be referring back to the C standard and opening a JIRA task to fix the code". We got on to how I'd fix the code -- remove the UB, but only if there's a unit test covering it. What if there are no unit tests? What if there's no JIRA? Lots of what-if-maybes.

A few days later I was on a 3-way call with the recruiter and one of the guys that interviewed me. They spent the whole thing telling me how "any decent developer" should have known what the UB would result in, shouldn't have to refer to standards or books... and on and on. But as a courtesy, they'd be happy to make an offer.

Half the minimum posted salary, no benefits. It was right in the middle of the minimum wage and the "living wage" lines.

I declined politely, and the recruiter hung on the call...

"Wow. I don't know what to say. That's never happened before... do you mind if I share the recording of that call with my manager?"

They were still advertising to fill several positions when I last stumbled across them on Glassdoor a few months ago...


I thought the actual thing with C (and probably C++) UB is that, well, pretty much ANYTHING is allowed to happen (by the standard)? Including, but not limited to, nasal daemons.

this is advice i give to a lot of people trying to get into the business or switch jobs. no matter how prepared or qualified you are, every interview is a roll of the dice. maybe the interviewer is in a bad mood. maybe you're in a bad mood. maybe there's a communications barrier. maybe there's some organizational issue (too many candidates in pipeline, re-org, etc.) that causes the bar to temporarily be set extremely high. It's ultimately a numbers game and it doesn't make sense to get too invested in one company or read too much into one result

> I think a lot of this is because our profession does not have an accepted universal bar everyone can jump over to be considered ‘qualified’

Someday soon we may accept that what gets classified as software engineering is actually an amalgamation of skills from an entirely different set of titles/careers, most of which treat software creation and management as a tool and means to an end.

I don't generally consider a blacksmith and a welder to be the same occupations. You can lump them under metalworker, but would you really expect the interview process for these roles to be at all similar?


If they were applying in the tech industry you would. Might as well lump in metallurgist, chemist, materials scientist, and sheet metal workers because we do this in the tech industry. Everyones a generalized set of specialists rolled into one.

Your comment explains why the variance is high; it doesn't explain why the mean should be low.

In other words, there flipside of what you said is that sometimes you'll excel and be offered the job on very attractive terms.


It's because there isn't one. So much professional advice seems to be based around a SV/FAANG mode of operations, but that just doesn't apply to a good 90% of the industry. Most tech work is done on line of business software, not megascale internet companies. Building high-design marketing websites is completely different from enterprise SaaS is completely different from infrastructure is completely different from video games is completely different from desktop software. Not just requiring different tech skills, but different personalities and working styles.

True. Furthermore, many of these FAANG sites work terribly and are ridiculous to navigate. Where is the logout button? Oh, they purposely hid it several levels deep under a strange tiny icon menu where users won’t find it … so users stay logged in and they can be tracked by the advertising markers.

Or, why did the screen just scroll down and lose my place in the paragraph? Oh, they loaded an ad in the middle of the document and the page re-rendered itself causing jerks and fits on the screen. Nice job FAANG site!

Or try performing a sort of items by price or whatever other criteria … doesn’t work because the website wants the user to see the “suggested” items no matter what search criteria was desired y the user.

And …


recently interviewed with Robinhood. Their phone screen started with a system design interview, but man I felt so uncomfortable using the tool that they had shared. The interviewer created a text box in the tool and copy pasted a multi paragraph question. The font sizes were little too big, I had to constantly scroll up and down to read the question. After brief introductions, giving previous work/project summary, understanding the question, stating and clarifying my assumptions, writing down product requirements, identifying tech stack, I was already 25 minutes in for 50 minutes interview and from there on I was told to speed up and within the next 20 minutes, I was asked to make it scale, fault tolerant and all this even before I could properly illustrate and communicate my design. It was very confusing to be constantly switching between different design paradigms before being able to explain one. As expected I didn't clear it but at the very least the recruiter later did follow up and I communicated my feedback on the interview. Hopefully they take these feedback and make the interview process better.

>I think a lot of this is because our profession does not have an accepted universal bar everyone can jump over to be considered ‘qualified’.

Keeping aside the universal bar, even a firm/interviewer who interviews you will refuse to define a bar( and it's not too difficult to define one) or define a bar that is vague. Defining a bar will means that now they will have to come up with a really good reason to turn down a candidate. IMO they might as well as be honest and do the "culture" fit interview first and as an icing on the cake ask some simple technical questions, once they have settled for a candidate.

It's profession is filled will low status, low self esteem, insecure males, who bolster their ego by making the interview experience for the potential candidate as tough as possible. Not surprisingly the 'victims' (candidates) are also often the "victimizes" (interviewers).


Very few firms want to hire juniors, while nearly all firms desire senior-level talent.

This manifests inflated job vacancies because so many firms have an evergreen job posting for "Senior Full Stack". Because talent is scarce these roles rarely get filled (hiring managers expect million-dollar candidates to accept $100-200k compensation).

Also, because lots of software requires specific expertise, there are vacancies that can't be filled because of a knowledge gap (novel industries / projects, etc). For example, how could SpaceX possibly fill all their engineering roles? Surely money is not a limiting factor, but rather the limited supply of qualified expert rocket engineers?


To go in line with firms not wanting to hire juniors, I think generally firms do not want to invest heavily in employee training or education. I would, for example, happily make a shift from CRUD webdev and distributed networking to hardware and embedded and more lower level type work, but I doubt a firm would hire me near my current level and train me up.

I think you hit it on the nose. Companies don't want to invest in training their new hires. They just want someone to hit the ground running with as little hand holding as possible.

It doesn't help that, for a certain slice of the software industry, staying in a position for 18-24 months has almost been normed. If it's unlikely that your hire is going to be there for more than a couple of years, why on earth would you "invest" in them. It's not like you'll get a return on that investment.

And why would software engineers stay if you did invest in their training but in the meantime you're going to reduce or eliminate bonuses, make your health plan worse (or just plain switch to high-deductible with no PPO options), stop 401k matching, other key employees have left and you don't hire new people and instead dump that responsibility on someone else without promotion or raises, etc.

I've seen all of those things happen at a single company before (and relatively quickly, over two years), and several of those things happen at several companies.


This is often the case. Another factor is that in many of the areas with a persistent shortage of talent is that it would require 18-24 months of training to really become productive. That's a big investment and people tend to have short tenures at companies these days.

which I think I'm fine with. I can learn skills on my own time. But I expect compensation to be commensurate with that

that is true for firms that never hire juniors. For me, I have a small team, we can only absorb a small number of juniors at any given time, because I have to have people free enough to train them up. And now, having lost most my seniors in my team to attrition, I'm hiring more mid-level developers (and hoping to find seniors)

The problem is likely that most people are willing to learn on the job, but then take that learning and go get a better job. A large portion of this problem is companies not being willing to increase pay to match the value you add by learning that skill, but it does lead to the doubt about bothering to train.

Why would any company spend 2 years to train a junior, only for that junior to jump ship?

Oh and it's not that easy to even find a "trainable" junior. Even if you have a fairly strict hiring process, at least 1/3rds of the people coming out of the edication system will be draft busts if using sports terms


To answer your rhetorical question, because the alternative is spending five times as long trying to hire a senior engineer without the sort of budget that FAANGs have.

And because it doesn't take a full two years before that junior is a valuable contributing member of the team; because they'll likely refer other qualified and/or educable applicants; because they might not jump ship, but be happy to get promoted if you actually reward them comparatively to what another company would pay them.

But sure, if you're not willing to invest either time or money in your employees, then no, you shouldn't hire juniors.


Spending five times as long to hire a senior who doesn't leave in a year or two is then a much better situation.

A junior dev hire involves sifting through many resumes, and then interviews, onboarding, and then three to six months of lower productivity for the mentor.

All of that represents losses against the current status quo. The current status quo is predictable.

This completely discounts the "accept and renege" that also is common with juniors looking for a job which can reset the job search back to square one even when you do find a good candidate.

Taking six months or a year to hire a senior has fewer resumes to sort and fewer interviews to conduct. When the person is hired, they've got a much shorter onboarding and has the necessary skills to be able to become familiar with the codebase without causing a hit to the productivity of the rest of the team (or other seniors).

In this situation, hiring a senior is likely a much better outcome with fewer seen and unforeseen negatives and an eventual positive.


> Spending five times as long to hire a senior who doesn't leave in a year or two is then a much better situation.

yes - assuming the senior also doesn't leave.


Senior devs tend to be a bit more stable in terms of "looking for a place to settle down" rather than switching jobs frequently as they've got a better idea of what they want to do and how to judge if an origination is one they want to be in.

Additionally, even if it is the case that they leave in a year or two, the org has likely spent less time on going through resumes (fewer resumes applying) and overall interviewing (individual interview may be longer, but again - fewer overall being done) and less time on onboarding.

You're likely able to have productive contributions from a senior in 3 months rather than 6-12 months for a junior.

So even if the senior does leave in a year or two - the org is still better off trying to hire a senior than a junior.

---

It really boils down to "if you can't compete with big tech salaries, there likely isn't a way to hire a junior dev that will be a net positive to the organization.


If you hire a junior at $X/year, and two years later, the "junior" jumps ship because the two years experience qualifies them for $X * 1.5/year, then the problem isn't disloyalty on the part of the junior, it's with the company that hasn't kept up their salary.

Junior salaries are low because they're a huge gamble. If after two years you know they're a decent engineer that has learned a lot, then you need to pay them like it.

It's something I see a lot of. Your "junior" that has been there for 2 years should be getting the salary you'd be paying a new hire that has 2 years experience. If they've been there for 3 years, and you've only been giving them 3-7% raises every year, you deserve to lose that engineer for someone that will pay them 50+% more.


The problem is that nobody wants to pay you intermediate/senior salary for junior ability until you learn their field. More than that, even if you volunteer to take the pay cut, they may be afraid you'll jump ship quickly, or that it's just not worth the risk of doing something unconventional.

Most software positions at SpaceX, even those working on critical flight code, do not require aerospace knowledge. And SpaceX is not a great example as they hire a lot of interns and junior people willing to grind.

I find this insane and terrifying.

This is pretty standard in all industries. Most people who work at a bank aren't financial experts. Most people who work at a hospital aren't medical experts.

Thats because most roles aren't the core of the business. Most are supporting the core. You don't need to be a flight engineer to build the system that tracks parts during manufacturing. You don't need to know how swaps work to build an order management system for traders. You don't need to know how to do surgery to build a scheduling system for the surgeons.


What do you work on, and how much prior domain experience did you have? (And if you did have some, was it necessary?)

I currently work for an agtech company, the domain-specific stuff is just context for the generic numbers and equations, or a reason to choose one over the other, to the extent that I need it it suffices to have a colleague who's a domain (but not software) expert.

You might say that's the other extreme, aerospace is different, but I don't really see that it is. I don't think anybody's claiming SpaceX doesn't have or need aerospace engineers, but once they've, idk, specified a formula for a parabola representing a flight path say (yes, I don't know what I'm talking about!) then the domain doesn't (needn't) matter to the software engineer implementing it.


Flight paths and what not are crafted by GNC engineers who hand them over to software engineers to implement. Really the only domain expertise needed in software is for space-grade fault tolerance, which is a couple people per vehicle.

Where are they going to find strong software engineers who also have aerospace engineering qualifications?

Iv'e worked with aerospace sims, grid-level protection products, financial products for banks and safety-certified industrial control software (even nuclear in some cases) that will result in great property damage and even death upon failure.

Basically nobody in any of those places had any domain knowledge outside that which was learnt during the act of developing and, in some rare cases, some "familiarization" courses during a day or so.


they hire a lot of interns and junior people willing to grind

Is this a euphemism for an employer overworking and underpaying their talent?


Overworking, but probably not underpaying. I remember hearing about how much a SpaceX intern was payed and being shocked (it was several X my scientist pay)... Then she told me how many hours she was working, and it made some more sense (but it still seemed high -- scientists often also work 80+ hours)

Getting paid what seems like a lot is not the same as getting paid what the work you're doing is worth.

i.e., did is seem like a lot "for an intern"? Did it seem like a lot when you take into account what was expected of them? I mean, if interns get hired to jobs that seniors (for the sake of argument) should be doing, are the interns getting sub-senior pay?


I work in the same industry as SpaceX. They are in fact well known for pay that would be average-at-best in a sane work environment coupled with an absolutely insane work environment. When I was in college, my only goal was to get a job at SpaceX. After getting a few internships and talking to some people in the industry, my only goal now is to never be so desperate for work that I accept a job at SpaceX.

Their intern pay was also in line with this. I got paid a little bit less as an intern at NASA, but much more as an intern at a non-aerospace (also non-FAANG) tech company.


cool! thanks for the datapoint.

A friend's son is in Aerospace Engineering, attends UIUC in Central Illinois. "SlaveX" is the nickname colloquially used.

UIC is in Chicago. UIUC is in central Illinois.

Fixed, I get them confused. Thought it was the other way around.

When I worked at SpaceX I had one of the saddest comp packages I've ever had in a long career. I left for a competitor and got 35% more just walking in the door, plus I don't have to deal with an inhumane company culture. I honestly don't know what Elon is going to do when he runs out of people to chew up and spit out.

seems like a chicken and egg problem

how are senior engineers supposed to be created if very few companies are willing to train junior engineers? Why aren't these companies offering paid apprenticeships if they are so desperate for workers?


In part because you have to jave enough sr people able to mentor. There's not a great industry framework.

As a plumber, you pay your apprentice usually 60% sr/journyman salary with a 5% increase every 6 months to match the value of the skill up.

There are also industry standard, industry funded classroom settings, that teach things like building codes and industry standards and some adjacent trade craft.

Instead you just throw a Jr to an overworked mid/Sr and they can help with some design and questions and code review but that takes 10-20 hours per week so you have to pretty much have one or more per Jr. Position. Then, after 18 months when the Jr hasn't received a 15% pay raise to reflect the enormous amount of time an knowledge you've sucked out of a Sr position, they go elsewhere for a 20% raise and it looks like you've waisted your time.

In truth, it wastes the talent you've built to not be aggressively increasing their comp to match the skill increase you're providing.


one difference though is that varying levels of skill can be staggeringly different for SWE compared to a plumber. There are people that have been coding in basic since 12 and hacking their entire childhoods, and you have some people that coded for the first time in a cs program which they completed in an average fashion.

Not everyone is equally good of course but I would be very cautious about making hacking since 12 a requirement for a developer job. It certainly doesn't have its equivalent in any other branch of engineering or indeed just about anywhere else other than the arts.

And yet finding someone competent for the job is like a needle in a hay stack.

Having a base of expected/certified knowledge would take a lot of that away.


And yet every other technical field which has no expectation that this has been a passion since childhood and applicants should have personal projects in the field manages somehow to hire people.

That's what I'm saying. We could train a base of knowledge so that skills transfer and we don't have to find super specialized operators for every role. When you get a union plumber to the shop, you know that they passed their certification. You may not like working with them or they may do sloppy work or something but as a whole, you're going to get a competent operator once the apprenticeship is finished.

That will work once the world has decided upon a single web stack with standardized API design and security and every company uses that web stack. When that happened hiring web stack developers will be a standardized process similar to plumbers today as you say. But be are very far from that level of standardization.

I'm not sure about other industries, but for me personally, my competency is in large part based on my ability to quickly pick up domain knowledge and apply it successfully.

I'm not really sure how you test for a base level of that, besides proven demonstration on your resume and doing semi-correlated coding quizzes.


True, I started sorting parts in a plumbing shop when I was 12, you still have to get certified and to get certified you take the same classes as everyone else. That's the same for doctors, and lawyers and all that shit.

This is why we don't have a base of expected knowledge in the field and why we do strange coding tests to try to guess if someone is competent.


> In truth, it wastes the talent you've built to not be aggressively increasing their comp to match the skill increase you're providing.

The issue is that we don't quantify what hiring someone actually costs. We're willing to spend $20k on finding a candidate for 160k yet the people in the same position are sitting at 120k and getting a 3-4% raise.

The new person needs time so expect at least a month of training, yet no one quantifies that as well.


yes, the JR to SR path should be a methodical planned progress with expectations of big raises as they skill up.

I'm fine with an annual cost of living adjustment once I get to a SR level because I'm not increasing skill at a rapid pace, I'm exercising my skill in the expected way. For a Jr path, that doesn't make sense. getting a cost of living adjustment and being twice as good as you were last year means you're a flight risk and that will cost the company more than just paying people what they are worth.


When you say "industry funded", who specifically are you referring to? Tool / parts / consumables manufacturers? The individual plumbing firms?

All of them, you pay some for the classes, If I remember I paid 300/semester for classes which is nothing really. usually your firm will pay your share.

But industry standard groups, unions, people who have a vested interest in having a supply of quality labor so they can do business. Some of the classes are sponsored (especially in smaller places where there's not enough support) and in return, they get to train you on a specific product or just hang a banner and give you a 10% tools coupon.


A sufficiently fast growing startup hires a lot of juniors and then due to turnover, general chaos, etc. leaves them with outsized responsibilities and little supervision. Those who “swim” in that environment are the next generation of senior engineers. It is not like you’ve been supervised for N years, you’re senior now. You get thrown into independence first and if you can hack it, the title and comp follow.

> (hiring managers expect million-dollar candidates to accept $100-200k compensation).

Wait, not even that.

Even if you are senior you can get that job (because, for example, you are from another country and suddenly you are "cheap" even if senior).


> because, for example, you are from another country and suddenly you are "cheap" even if senior

That's a red flag. Because we all know the top of the market, no matter where, is working at SV rates.


Worse, many firms are put off by juniors for entirely preventable reasons. In their minds, juniors are undesirable because the moment they are trained up, they tend to jump ship for senior positions elsewhere. Why train your competition, right?

The reason they jump ship is because the firm refuses to re-evaluate them for what they are worth, and keeps them on work meant to free up the company's existing senior staff (i.e., dead-end grunt-work that results in burnout). If you, as a junior developer, want to be re-valued, you need to jump ship.

This creates a feedback loop. Companies view juniors as a cheaper developer you _might_ get 2 years of low-cost work out of (after training) before they'll leave, creating a self fulfilling prophecy.

I've watched (and experienced) this loop multiple times. It's utterly baffling how firms would rather go through the cost and drain of finding and replacing talent rather than re-evaluate and pay their existing, proven talent what they are worth on the open market.

Workers would rather not move around. Workers would rather have a stable position in a job they like, in a community where they can purchase a home and build lives and/or families. Once you get past 35, playing the required musical-chairs needed to advance your career is a real drag. It does not need to be this way.


> Workers would rather not move around.

I really disagree. These junior engineers you're talking about are mostly in their early 20's (even if they're older and switching from a different career track, they're by definition new to the industry and still have a lot to learn). In my experience, they definitely do want to move around. And even if there is a great track for internal promotions and the compensation is going to be the same whether they stay or leave, it honestly is usually in their best interest to move around every couple of years anyway early in their career. They'll meet more new people to grow their professional network faster, work on new problems, see different ways of how teams operate and what works better/worse, and gain more experience faster.

I do think that for the very top performers, most companies should probably be much more aggressive than they are. If someone is really crushing it, like in say the top 1-5% of performers, be ridiculously proactive and promote them from junior engineer to Staff Engineer within 18 months or something. I've seen a couple of people over my career that actually were performing at that level, and no external company is going to give them that big of a boost, so it's a good chance to use your inside information to be more competitive. Otherwise, for the majority of folks that are learning/advancing at a more normal pace, I don't think there's really much a company can do to keep them longer. (Not that you shouldn't even try, it's still a continuum and if you do a really bad job at career growth internally you'll lose even more people faster. But you shouldn't expect to be able to keep most people beyond 2-3 years).


Hiring Juniors is a positive externality that the company does not see a penny of. They only see a penny of that externality if they don't give a raise, and that Junior chooses to stick around anyway. You get to exploit that he made friends or is stuck in your part of the city due to a lease or otherwise makes a poor financial decision.

It's interesting that the worse the interview process, the less the Junior will want to go through it, the more the company benefits. You make your process painful so your competitors make their process painful so both of you hold onto your Juniors for more time.

If you can fix the externality problem this goes away, but that's not easy.


Isn't this what vesting cliffs are for? To incentivize employee to stay for at least a year or two?

Honestly, I think having engineers come and go is a net win for companies. I've worked at places where the "old guard" has been around forever and they are inevitably stubborn, obstinate, and convinced there is no other way to solve the problem. By changing jobs and environments, you get to see in practice that there are many different ways to implement a solution. Only seeing one set of systems (unless they are a FAANG, which is large enough to have the breadth to counteract it), would ultimately cause those architectures to stagnate, injecting new blood is also injecting new ideas.

I do however, agree with your sentiment, those junior folks that are getting all the work done only get rewarded with more work to do.


I work at a fairly small company that hires juniors. We pay them well, and give them more responsibility in pay as we see them improving.

Most of them still want to move on, usually to change technologies or gain more responsibility even faster.

Sometimes they want to move cities for almost random reasons, and they're willing to just find a new job and do it.

So while I somewhat agree that devs don't want to move jobs, juniors devs often do, and I think they're a lot more likely to move jobs than senior devs.


> Very few firms want to hire juniors

It's not that they don't want to hire juniors, it's that you need a solid ratio of mentors to mentees.

I've worked at a LOT of companies, and for the more well known one, the ratio of junior resumes to seniors was easily 1000:1.

We hired entire cohorts of juniors, often interviewing HUNDREDS of them in a couple of weeks, hiring dozens. That still meant that from all the resumes we got, only a few % made it through.

What choice did we have though? We can only train mentors so fast, and hiring them is hard and expensive. You can't ask someone with 5 years of experience to train 30 people at the same time.

People often underestimate just how many people are entering the field right now, vs how many were 10-20 years ago. Add in people who EXIT the field, as well as people who are poor fits to be mentors, and it gets really dicey.


> "Senior Full Stack"

Also why companies will hire someone with 3 years of experience into a senior position.


Had this happen to me at my first official dev job. Had 'junior developer' in bold at the top in my resume, application, and in several emails to the hiring manager. Got hired, and quit within 2 months. Manager would become upset at times over knowledge gaps I had as a result of being a junior, and the solution they came up with was for me to dedicate my weekends to unpaid, self-directed training.

At some point I actually reminded the manager that I was a junior, which resulted in them acting shocked and saying something to the effect of "well, let's hope that's not the case", and was basically flat out told they have no time for a junior. This was the manager who interviewed me, read my resume, and recommended me for the position.

I was replaced by a university undergrad student on summer break when I quit. I don't think people realize how the problem here often isn't you. Organizations with deep dysfunction are more common that you'd like.

Happy ending though. Got a new position the week I quit, and all turned out well.


I take a different take here.

Juniors write a lot of code. Often significant amounts for a company's products and services. They're the ones who are implementing all the decisions that seniors spend their time making in all their meetings.

Most senior engineers I've seen have most of their days filled with meetings with very little actual coding time.

The seniors are valuable, making decisions, coming up with solutions, building frameworks etc, but it's the juniors who then take that and run with it and build everything on top of it.

So while some will still code, it's far less than what the junior engineers are creating.

Yes they require some more training, and clear direction, but they are the ones actually creating and executing the vision of the company informed by the seniors.

What companies really want, like others have said, are senior engineers who are willing to accept a junior salary.


While of course companies would love senior engineers willing to accept a junior salary I'd say

> Most senior engineers I've seen have most of their days filled with meetings with very little actual coding time.

Is actually a symptom of the shortage of senior engineers. Big companies that can afford to hire as much talent as they want actually will let seniors write code all day (my company does) because they have the economies of scale that lets them afford doing so; no one else can.


> This manifests inflated job vacancies because so many firms have an evergreen job posting for "Senior Full Stack". Because talent is scarce these roles rarely get filled (hiring managers expect million-dollar candidates to accept $100-200k compensation).

At a lot of non-tech companies, the trick is to get hired as a consultant.


> Very few firms want to hire juniors, while nearly all firms desire senior-level talent.

Or many firms want to hire senior-level talent at junior-level prices.


I'm European so I'm unsure as to how the situation is in the states but here the situation is as follows: it's plenty of "developers" that taught themselves coding trough udemy or similar courses and can effectively code basic stuff in one or two languages. While I'm not trying in any way to devalue their knowledge or expertise in my experience a self taught developer will, on average, produce worse code and will ask for a lower pay. For employers though this doesn't matter because they mostly watch at the finished product and we all know "that guy" that can ship a feature in a week when testing/engineering alone would require two. It follows that there's a market saturation for entry level positions for low-end companies because they don't see the need to hire engineers or people with a degree that ask more while delivering "the same product". In my experience this changes when a company is more professional and there really is a lack of professional software engineers.

"Young" companies generally don't care about quality, testing, processes. They just want to build a product. I put that in quotes because being a consultant I'm sometimes amazed at companies that make millions/billions and have never bothered to think about these things, until the reach the inevitable point where every change becomes a pain in the ass.

Any advice for someone trying to get back into web based software engineering? I’ve spent the past 5 years implementing off the shelf solutions that enterprises use. Lots of API work, light web dev with some AngularJS but mostly scripting using JavaScript. I wouldn’t be able to pass a whiteboard interview.

My salary is above $100k and I could probably find a job doing what I’m doing for $150k or higher. My next choice is do IT consulting or try to find a management position but I don’t want to be tied to a vendors platform. Plenty of people have made entire careers on the backs of vendors like Oracle and others but I don’t want to be a crusty old dev keeping things alive until I retire.


>I wouldn’t be able to pass a whiteboard interview.

What the people who insist on giving these interviews don't realize is they are extremely hackable most of the time. The people who give them often aren't bothered to make up their own tests, so they go to the google and type "whiteboard interview questions for bla bla." I suggest you do the same and study up.


When I was trying to get my first internship it took me 160 applications to get 1 interview, before that I applied every year for ~20 internships at the big names and never got 1 interview. Similarly for my senior year I applied to full time and internship positions it took me ~145 applications to get 2 interviews for internships (I would be interning after I graduate). I did the resume prep, went to the career fairs to talk to recruiters and get feedback, went to hackathons to add to my resume, I don't feel that it really did anything. I even tried cover letters as some people on HN suggested to me.

The process seems completely random and based more on pedigree than on anything else. If you have a signal like an Ivy League school, an older friend in the industry who can refer you, or a FANG on your resume those seem to be the only ways to be picked from the sea of resumes.


The lottery of front door applications is largely a waste of time.

The best way to get an interview if you didn’t go to Stanford or MIT (I didn’t) and haven’t yet worked at a famous company is to get a referral.

Which requires somehow making a friend or connection with someone at the place you want to be.


If you can build a specialized skill set you can make things much easier. When I got out of school with no experience, no internships and a degree from a second tier state school, I still had good luck on the job hunt.

What worked for me was that I had been studying Kubernetes and was probably the cheapest guy on the market with that skillset :)


I actually disagree with this (if you’re aiming to work at a company between Unicorn and FANG size), I think there’s 2 parts to getting hired as a new grad or getting an internship as a student.

The first part is the University Hiring recruiters determining whether out of the 1000+ resumes they have read you are likely to have the basic skills required to learn to be a FANG engineer. In this part they don’t actually care much about what you did at your internships or what technologies you’re interested in all they care about is whether you know how to code in a language, know how to manage time and be managed by a superior, and know how to learn to do your job independently. If you pass this, great now you’re off to the races that was the hardest part due to the volume.

Then there’s a second part in every FANG university pipeline where University Recruiting and different hiring managers bounce around your application to find an intern for their team. In this part your demonstrated interests, prior work, and skills are important you’re way more likely to get a deep learning internship if you have deep learning on your resume at this part.

I posit that most university hiring advice focuses on the second part whereas the first part is the most difficult to pass. Think about it is the person with 4 hackathon awards and 3 deep learning side projects more likely to grow into a FANG software engineer than someone who has 2 internships?

Do your side projects involve reporting your progress to your team? Writing design docs and getting feedback from your team? Thinking about maintaining the code base and providing documentation to your coworkers? Those software engineering skills are learned not taught and you learn them on the job even though to other software engineers we would value the candidate with hackathons and side projects more than the one with 2 internships in terms of ability to grow.

I’m probably going to write a blog post or something about this cause I feel quite strongly about this after my experience following everyone’s advice.


I'm just explaining what worked for me- I'm in Raleigh NC, so there were no FANGs here a year and half ago when I was in the market. But I did secure offers at the two biggest tech companies in the area, IBM and Cisco.

I had no open source contributions, no hack-a-thons, and no side projects with users. No experience or internships whatsoever, I had work experience in the service industry that I didn't put on my resume. GPA barely above a 3

All I had were side projects on github, listed prominently on my resume, that showcased skills. My side projects were all toy projects- things like a tiny Go API with a dockerfile and Kubernetes YAMLs, an arduino project that creates a CSV based on inputs from a GPS sensor, etc.

When my interviews went well, it was because I had demonstrable expertise in Kubernetes


Sorry I think I may have come off as criticizing you when I meant it as a more general point. Sorry for the misunderstanding.

IMO the only advice I can give college students trying to break into tech is to always have a tech related internship every summer no matter what. Even if you have to apply to nonprofits looking for an IT admin intern, just have a track record of work experience + having coworkers who could move on to other tech companies and give you a good referral is key. Also make sure to have a linkedin and proactively connect with your coworkers so you can later ask for referrals if you need one, don’t lose contact.

because expectations are not clear. Most of the companies do not know what they expect from the employee in the advertisement or in the interviews. it's just confusion on both sides.

Only entry level software jobs(because of the weird x years requirements) and FAANG jobs (because of the required DS&A prep) are hard to get. Standard run of the mill Fortune 500 SWE jobs paying 100-200k are relatively easy to get once you have any experience at all.

bruh done grown up since #thatsite lol.

Slashdot had a post about this topic a few years ago that I thought was colorful enough to save for posterity: https://developers.slashdot.org/story/18/03/14/1428242/deman...

The top comment seemed to capture the problem best:

"What is in extremely high demand is programmers with 20 years of experience in a technology that has been around for 5, no older than 19 and working for 20k a year.

And that demand will be high, forever.

Pay more and you get more. Pay this and what you get is code monkeys that couldn't find a better employer"


I saw a posting for a full stack engineer last year with a rate of $20/hour. It was temping to apply just find out what they expected. I can only think since this was a startup they were trying to "fill a seat" to look better for investors because having a higher headcount would seem impressive?

This is often done to hire H1b applicants. You run the local applicants through an interview that ends up with them even if they are qualified not taking the job then go and hire the H1b that you really wanted because the H1b is then dependent upon you for staying the United States. You can now hold that over the person and anything you want they have to do like working 100 hours a week.

That is how labs hire postdocs on the cheap too.

I want to challenge the premise of this article.

Is there evidence that's it's hard for devs to get a job in general? E.g. The average hiring times for software devs (on popular platforms) in London was on the order of a couple of weeks.

I know from personal experience that junior devs from bootcamps were getting snapped up quickly - source, I worked for 3 years in the recruitment industry and also hired many devs in that time.

Doesn't seem to be a problem in general?


And certainly one must ask: in comparison to what?

Is it far more difficult for a median skill software developer to find a job than the equivalent person seeking employment as an accountant, electrician, or plumber? I doubt it.

The persistently very low unemployment rate for software developers rather speaks volumes about how not difficult it is to find a job. The interview processes are obnoxious in the field? Sure, that's a reasonable claim and seems to widely be the case.


Computer science has the highest levels of graduate unemployment in the UK

The demand for programmers is largely becoming a myth in my experiences. I work in public sector digitalisation in Denmark and as such come into contact with a lot of private sector companies from whom we buy development, I also work as an external examiner for CS students to keep up with the field and spot potential candidates.

A decade ago my region of the country would produce maybe 50 fresh CS candidates a year, now it’s closer to 500 spread across multiple different educations. This may not sound like a lot, but in a region of 1 million people it’s actually quite a lot, and those are the technical CS/SE types not the myriad of soft IT/design/communication educations which produce a further couple of thousand each year. It’s like this because we (as in the employers) have been telling everyone we needed more and still need more for that same decade. But this is a half truth. We don’t actually need more people to become CS candidates, we need more trained plumbers who are proficient in X technology that we can use for 5-10 years until they leave us or we replace them with someone cheaper. And how do you get cheap labour? Well, one way is to make sure enough people are educated in what you need them to be, and while it may have been the case that the world needed more CS candidates a decade ago that is no longer the case, but it’ll take a while for young people to realise this.

Well that’s one part of it, the other part is how the educational organisations educate our young people by giving them the wrong kind of skills. I’m not exactly sure why they’ve abandoned teaching people actual computer science, but the part that the most students fail on and the part that shrinks year by year is now computers work. I can see how the fundamentals aren’t as necessary as they were in the 90ies when I got my degree, and I also remember how much some of us hated that stuff even back then. But it’s what’s required to fill the best paying jobs, like running the cobol systems for a bank. Cobol itself isn’t hard, a cobol system is hard because it came with nothing and was build in a time where everyone invented the wheel their own way. So what you need to become a good hire for such a system is all the basic CS knowledge that nobody no longer teaches so that you may understand and reverse engineer whatever all those cobol programmers did in the 50 years before you arrived.

It’ll be sort of interesting to see where it lands us though, but I’d frankly get into actual plumbing if I was young today because that’s bound to be a better career for most people who aren’t aces in either the technical or the financial/management side of CS.


> decade ago my region of the country would produce maybe 50 fresh CS candidates a year, now it’s closer to 500 spread across multiple different educations.

A degree is not the same as “talent”. The degree doesn’t even mean you really “learned” the fundamentals, so much as you were able to regurgitate information and pass exams.

I’m a Principal at Amazon. One issue I see among CS graduates is a lack of understanding in very basic CS fundamentals. On paper, these candidates have CS bachelors degrees. On the other hand, they struggle to pick the right algorithmic approach when something is clearly a graph or tree traversal problem.


I don’t disagree with you but in Danish culture you get a degree or you work as unskilled labour in 99% of the cases.

Even if you don’t “need” a degree you still get one because it would be a serious handicap if you didn’t and our educational system doesn’t cost the individual money. In fact we pay you $1300 a month for 6-7 years while you work on your higher education. I’m sure we could debate the system, but the result is that almost everyone in CS/SE get a degree of at least academy level once they finish the mandatory 10 years of school + 3 years of gymnasium granting them access to the higher educations, and as such the number of educated is a very strong indicator of how many new programmers are entering the field.


> the result is that almost everyone in CS/SE get a degree of at least academy level

But this doesn’t mean these graduates are skilled? From your explanation, it sounds like there’s an incentive to get a degree - both cash payments from the government and an opportunity to avoid labor work.

> as such the number of educated is a very strong indicator of how many new programmers are entering the field.

But “educated” in this context means they passed. It doesn’t mean all or even half of these graduates understand the discipline sufficiently to be productive employees or even work at a FANG tier company.

I guess my point is - the market might be saturated with these graduates, at least on paper. But that’s not the same as the market being saturated with talented programmers, engineers, admins, or whatever the job title is.


Businesses refuse to invest in workers education thus refuse to hire juniors. Then they refuse to hire older developers because "not culturally fit". Tech businesses are full of sh...

Its like this for all jobs: the reason is that a bad employee typically subtracts more value than a good employee adds. So companies put a lot of effort in lowering the odds of hiring bad employees even if it means positions remain unfilled.

The classic article on this is: The Net Negative Producing Programmer

http://pyxisinc.com/NNPP_Article.pdf

The bibliography is also something to track down and read if you're interested in the subject.


This would go along with some type of unionizing or organization.. but in the traditional trades (Electrician, Plumber, etc) there are education programs and apprenticeships before becoming "licensed".

Maybe that's what we need here, something to gap the "I'm brand spanking new" and "I'm a senior" time period.


> apprenticeships

Oh, man, to have somebody to do all the stuff I don't feel like doing...



There’s a tonne of variance between software engineers. Even at the same level (junior, intermediate, senior, etc.), it’s not uncommon for a strong hire to be ~5x better than a weak hire. By this I mean more productive, better at helping others, writes fewer bugs, creates more maintainable abstractions, makes better architecture decisions, can tackle more difficult problems, etc. And at the same level, the strong and weak hires get paid roughly the same, so companies REALLY want the strong hires. This is not a McDonalds type situation, where anyone lightly competent will do, you’re trying to hire someone outstanding at their job every single time.

Firing sucks, but it’s hard to truly tease out quality during interviews. So most companies go for false negatives over false positives. Generally this means that of the 3-to-6 interviewers, all have to have strong positive opinions of the candidate for the hire to happen.

Because of this, as a candidate, it’s a bit of a number’s game. You can be a great candidate, but still not get hired on any individual interview, because companies heavily bias towards allowing lots of false negatives to avoid the odd false positive.


> hard to truly tease out quality during interviews

I'm not sure I agree here. I doubt most interviewers have actually given much thought to what they are actually trying to look for in a potential candidate. The widespread practice of over-focusing on algorithmic whiteboard questions is a symptom.

There's got to be better processes in assessing candidates' qualities beyond solving algorithmic puzzles (which perhaps is 5% of a software engineer's job at best).


I dunno, I’ve conducted about 100 dev interviews over the years. Have tried various combinations of whiteboarding, architecture/design questions, take home problems, talking about past projects/experience, and sitting down together with the interviewee and pair coding on bugs or small features. I don’t know that any approach was clearly more effective than another, and for all of them I think the ability of myself and other interviewers to predict performance at the company was decent, but far from excellent. The clearest signal is probably a super enthusiastic referral (from a highly trustworthy source), but it’s rare to be able to get that.

It’s just really tough to figure out in 2-3 hours how someone is going to perform in a given role over the next few years. Interviewing is an inexact art, not an exact science, and it’s very much my experience that companies compensate for this by favouring false negatives (not hiring possibly strong candidates) over false positives (hiring weak candidates).


The 5x engineer at my last job created 5x the features and 5x the bugs, and consequently caused 5x the number of job postings because we needed so many people to put out fires all day. I have to thank him because he is the reason I was hired.

Yeah, I don’t mean just 5x the LOC or features. More a combination of all of more productive, helps others more effectively, creates fewer bugs, can tackle a wider range of problems, makes better architectural decisions, writes more materials abstractions, etc. Basically I think it’s pretty common for a strong engineering hire to produce 5x the long term value of a weak hire, taking all of the above into account.

I reviewed around 5000 candidates last year for TypeScript frontend and backend positions. Global, remote only. I received ~600 applications for an Angular position in one week.

The hiring percent was below 0.5%. There are a lot of candidates, but most of them could not fulfill our core requirements a new team member must be able to accomplish. In our case it was TypeScript itself, unit tests, integration tests, working in a Linux environment. Salary requirements for the same position varied $1000 - $20000/mo. Because there is a lot of supply side (read: developers available), one can be picky.

More details and statistic here:

https://www.linkedin.com/pulse/hiring-remote-angular-nestjs-...


Interestingly, the exercise is so boring (add authentication to a website with tests and documentation, for an outdated framework like Angular) that it probably selects out people who want to have a somewhat interesting job in addition to those who are incompetent.

"Some candidates asked for an interview without completing the exercise. Unfortunately, this was not an option, as this would not be fair for the candidates who worked hard to get to the interview."

This is just how I look at it, but if I reply to a company about a position, I'd like to know about the position before you make me jump through hoops. The exercise itself is okay, and a brief test like this is much, much better than making a candidate fill out an assessment, but why would I invest that kind of time if I don't even know whether or not I want the job. Think about it from the candidate's perspective, some people in this thread note having done 10s/100s of interviews. Imagine how much time they would spend doing menial coding exercises before even getting to know about the actual position other than the JD.

Again, its probably just me, but last year I literally thanked companies for their time because I didn't know anything about the job and their company and they were already asking me to do take home assignments. Sorry but I have a life, and critically to anyone who's hiring; plenty of people reaching out to me not trying to make me jump through hoops. Maybe if you invited more than 24 people for the exercise or just spoke to some people first, you would've gotten a better pool of (potential) candidates.


The position was described upfront on the application page, so you know what to expect. Also, some candidates took the initiative and asked questions. In fact it was even encouraged.

I wrote another post for another position later which has more juicy details like country breakdown

https://www.linkedin.com/pulse/angular-typescript-frontend-n...

Somewhat related, In the interview, the first question I asked if the candidates had tried to sign up on the website and what they thought about it. It is not encouraging if a candidate had not tried to figure out the company product himself/herself at all.


I agree 100% with the general ideas that "we ask stupid trivia questions when hiring people" and "nobody wants to hire Jrs". I'll toss out one other thing.

The people hiring people SUCK at finding people and waste everyone's time in the process.

The amount of Java / JavaScript confusion that persists among the people who are involved in just finding people reeks of incompetence / and maybe worse.

Head hunting corps, even random company recruiters / HR seem more interested in bringing in mass volumes of names / resumes / warm bodies regardless of how qualified they are. Then they filter and I guess justify their work?

I think of it as the Hiring People Industrial Complex where it feels like the end goal is not actually having even the slightest chance of getting a job, rather the goal is to have a process, go through it, and that's it.

I get so much spam for jobs that aren't right for me, not even in the slightest. I'll even do calls with them and explain that it doesn't really fit, and they still want to move forward to some other inane level of the process, but I know I've got zero chance.

It just eats so much time.


I dunno why this was downvoted. Most recruiters have no idea how to program and thus really aren't qualified to be more than a contracted HR person / keyword matcher. Their main qualification is they have a special account on monster and dice to post qualifications that the hiring company gave them.

There are exceptions, but they are rare, and they don't work for the big recruiting firms. They are just body pushers.


I have had a couple of friends get rejected because HR pulled some engineer that was having a particular bad day (which is completely understandable) i wonder how many good programmers have been filtered because of these interview processes.

> Waited hoping one day someone will hire me without requiring me to white-boarding. Yep it is worse than water-boarding.

Never tried waterboarding, but my issue with white boarding is that it’s deeply subjective. With working code you at least can judge the correctness straight away with a real piece of runnable code. You can also observe how the candidate reasons around the problem and how they formulate and test hypotheses. With a white board you can observe the candi^Wvictim making a table test, a term I first heard in the 70s and last heard in the early 80s. It is just cruel.


Getting any software engineering is probably as easy as 1-2-3. It's getting a promising job, in which you can grow, what's hard.

And yes the recruitment process can be very tedious, illogical and sometimes even unfair.

On the other hand, there are leagues of junior engineers (or just self-taught people after bootcamps) applying for all these jobs, so the process is hard for both sides.


you ignore the methodical, persistent, pre-meditated and enthusiastic efforts of business development people to marginalize, reduce wages and commoditize human workers !

Another aspect might be that companies list job openings when they don't actually need them. It's probably just to gain visibility in the market, justify HR salaries or keep a door open for the next 10x developer who might land on their site. The only ones who lose here are the people taking the interviews and getting rejected for no apparent reason.

i feel like everyone just wants to fight for the top 20% of talent with insane salaries while disregarding the other 80%

Because you need 10 years of experience in a technology platform that's 5 years old. /s

High experience on paper is in demand. You with a college degree and not having already worked for X titan of the industry, is not. Marketers and managers always run to the cash cow, and ruin it. They have no clue how the job works, they're just following what their professors told them to do when hiring accountants and laborers.

Fire corporate, that's how you get good workers.


Is this an American thing? Or maybe just a non-embedded systems thing? I live in Canada and was looking for a job recently...got two offers! One was just a casual chat about my experience, the other was a casual chat + take-home exam, which took about 3 hours.

Ater reading all these scary whiteboard interview stories on social media I studied up on programming puzzle-type questions...was a bit of a let-down, honestly.


My experience with the embedded world is that the engineers and managers working in that field tend to be older. They're from the era when it was common to get a job after a casual chat. About how old was the manager who hired you?

I got a contract gig with an embedded development house a few years back after a couple hour interview - more of a chat. The guys hiring me were in their early 60s.


Can confirm. I had two jobs in the past which could be considered embedded development, and got both of them after casual (but technical) chats. The first one converted to employment after a 6 month trial period as a contractor. No whiteboard hazing, no leetcode, no take-home "challenges". And the average age at both shops definitely skewed older.

I also got the impression that there weren't a huge torrent of engineers with assembly and JTAG debugging experience banging down their doors, which probably helps.


Yeah, you're definitely on to something: The average age was much older- maybe not early 60's, but definitely older.

I wonder if we'll see the same sort of thing creep into the embedded systems world as these managers/engineers retire.


Same in Europe, i also believe most of these rants on hn about hiring are describing a unique trend in the united states.

It's because in software engineering your work product is confidential/proprietary and work samples take a very long time to produce.

If you could review someone's code from their previous jobs, I think it would be quite easy to vet applicants. And it would be much easier to move from job to job.

Instead we have to simulate work samples through whiteboard coding, pair programming sessions, take home coding projects, coding knowledge tests, etc. We know that none of these methods are particularly good, so we err on the side of failing candidates when we are on the fence. They also take a long time to complete, so software engineers are reluctant to change jobs because they know how much of a pain it will be to go through interviews again.

It is much easier for product designers and product managers to pass interviews. You can see their work product.

At my company we're working on a way to create standardized coding projects that can't be faked so you can use them across job applications. If you are interested in this space, shoot me a message: robert at facet dot net.


Do medical doctors face this? Their work is confidential as well - patient data is highly confidential.

Medical doctors have licenses which include exams and all sort of other barriers before they’re a ‘real’ independent doctor.

I'd be curious to hear peoples thoughts if they would subject themselves to this sort of professional board and licensing for software. There's clearly a pre-determined set of information and skills that are fundamental enough to be tested, but it is also fairly creative and subjective at the end of the day.

With medicine there are probably like 4 ways to treat a bullet wound. If you go too far outside of that you're probably not a good doctor.

With software you can write a TODO app with a million lines of code or 7.


... Every serious trauma is unique and challenging in its own way.

Realistically, I think I'd not be allowed to practice with that kind of system. I suspect there's an entire class of programmer (maybe this is the dev vs eng distinction the article refers to) which would be excluded by a system like this.

Fundamentally though I think that system of high priests and laypeople who are barely allowed to code at all can't be sustained. I strongly suspect all professions will eventually require a little programming, and certification will be hard for those cases.


I would likely take issue with whatever criteria people chose for judging someone's software engineering ability. Creating the best performing system is rarely anyone's goal (not that performance should be discounted,) they want to make something with the hard to quantify qualities of robustness, scalability, maintainability and expandability, to different degrees. They also often want to use languages or frameworks (or supporting software like databases) based on what boils down to fashion. Often the most desirable quality for candidates is an ability to learn and leverage new tools, given varied and shifting standards of good design, which again is hard to quantify.

Given the amount of people with CS degrees who fail the most basic interviews, it would be hard to set something good up. I assume universities are trying to solve the same problems as the hypothetical board setting up this test.

That, and the field moving so quickly and being so broad. I interview for ML. I assume interviews for front end are extremely different.


Disclaimer: I’m educated as a technologist not an engineer in Canada.

This exists in Canada for some areas of software development that falls under the requirements of being a licensed software engineer.

Many people, including CS graduates in Canada, think it’s ridiculous. The requirement for certification is pretty strict in that you need a computer engineering undergrad degree or a degree in software engineering from an accredited program. This is probably how most people would be accredited, but there are some other ways too. All of them, as far as I can gather, require formal educational credentials.

You then need to go through a formal apprenticeship while working under someone who is licensed. It’s probably an 8 year process in total.

Further to that, there is a limitation on what you can practice. There are different disciplines (e.g., mechanical, civil, electrical) and there are fields and scopes of practice within each of those disciplines. What this results in is someone who is licensed in, for example, embedded systems wouldn’t then be able to go and work on websites or back end databases.

The field is further divided into technologists and technicians that require less education than engineers and have much less autonomy and scope of authority.


Sure, but that doesn't mean they're a good doctor. Most of us have had experiences with bad doctors. The exams they took could have been decades ago, but what does that tell us about how they've performed recently?

Bad doctor is relative. I expect that most doctors who have pass through that gauntlet can pass the doctor equivalent of fizzbuzz, which already is a lot different than our industry.

A doctor equivalent of fizzbuzz could be “what do you prescribe for a viral infection with no indication of a secondary infection” and from what I’ve heard there are a lot of doctors failing that one during the COVID pandemic by prescribing antibiotics.

They are highly effective at making patients stop begging for antibiotics they don't need. Patient satisfaction with their doctor has nothing to do with medical outcomes.

> prescribing antibiotics.

I'd hire that one over anyone pushing horse de-wormer, anti-malarial drugs, or homeopathic remedies.


Well, it's less dangerous than the first two, generally, but roughly equivalent to the third, for covid.

It's quite hard to be really bad physician - because Pareto principle applies to medicine. As far as I remember, 5 autoimmune diseases (of >120 described; ~4%) make up for 80% of total autoimmune diseases. My relative did research on kidney diseases and results were similar.

No.

As a software engineer for 20+ years, I've talked with my sister, who is an ER doctor about this often. Most folks outside of engineering think our interview processes are crazy.

Keep in mind, there's significantly more training that goes into the medical field, so there's more emphasis on the institutions. Where did you go to school? What hospitals or facilities did you work with? Your resume and references speak more strongly.

Other hurdles in software engineering hiring:

- It's both a technical and (often) a creative field.

- Most work requires teams to complete and there's very little insight into who contributed what into a project.

- You don't have many of the signals from other fields, such as published papers, law cases, or hard numbers such as sales, certifications, etc.

Long story short: we don't have good mechanisms within companies to measure engineering productivity, let alone measure programmers outside of an institution.

I'm reminded of Steve McConnell's intro to "Software Estimation":

"Meanwhile, the typical software organization is not struggling to improve its estimates from +/-10% to +/-5% accuracy. The typical software organization is struggling to avoid estimates that are incorrect by 100% or more."


One key difference is licensing. As a physician you have to take the USMLE Step 1,2,3 and then potentially other board certifications. We engineers don't have any of that.

I imagine that amazon would still grill you in an interview even if you have one of their advance AWS certificates. I know those certificates are not the same, but I don't think it's about certifications.

Yes and depending on the field, you may have to do mandatory additional certification and training throughout your career.

We have certs in software engineering, but in my experience, they've largely failed as an indicator of qualifications. Some hiring managers see them as nice to have, but I've also met hiring managers who are actively skeptical of certifications.

We also don't have differentiation of software levels or skills. If you're a programmer, you could, in theory, go program anything from web to AI to robotics. You don't have to be certified to work in nearly any industry. And we don't have formal hierarchy of skilled work, such as EMTs, nurses and doctors.

We're a relatively young industry that just hasn't worked things out yet and, to be honest, in the United States, there isn't pressure by employers to get our act together. The engineers themselves are in charge often and we're skeptical of boards and authority. We have too many stories of folks making it big with no formal education. Those with the money aren't demanding change because the current system "works."

It's possible software engineering will someday evolve into a boring respectable profession, but right now it's still a creative field of fads, trends, rock stars and super stars (let alone ninjas and wizards).


> Some hiring managers see them as nice to have, but I've also met hiring managers who are actively skeptical of certifications.

To me they are a red flag. Someone couldn't get a good job in a bull market straight out of undergrad and felt the need to get additional training...

> We also don't have differentiation of software levels or skills. If you're a programmer, you could, in theory, go program anything from web to AI to robotics. You don't have to be certified to work in nearly any industry. And we don't have formal hierarchy of skilled work, such as EMTs, nurses and doctors.

It still exists, it's just that it's informal.


FYI 'real' engineering (electrical, mechanical, civil etc. ) do have certification exams in USA and many other countries

Can you imagine?

Hi I'm Ed Barns I'm here for the interview of ER Physician.

QUICK Put on your scrubs we've got a patient here with a bone dangling out of his arm.

No you don't understand I'm just here to interview.

THIS IS THE INTERVIEW HURRY UP.


You should write for Grey's Anatomy. That sounds like one of their ridiculous plot lines.

Some nursing boards pretty much have this; you get to a room with a medical actor that's behaving like a patient with X issue and you have to handle the situation.

It's also a big part of residency (having to treat patients with diminishing supervision from senior doctors). So it's not that far fetched.


> Most folks outside of engineering think our interview processes are crazy.

They do, but not for the reason you think.

A hospital administrator would be mad to hire some rando from the street who calls himself a doctor, who has no formal schooling in medicine, a dropped two-year degree in chemistry, but who reads a few medical blogs, on nothing more than 'They have four years experience working at a startup and a good reference and they can answer some second-year whiteboard questions about the lymphatic system.' [1]

Other professionals front-load the interviewing effort into a rigorous schooling, testing, and accreditation process, that costs hundreds of thousands of dollars and years of your life. Meanwhile, software engineers grouse about whiteboard interviews.

[1] Despite the highly dramatized performance by Leonardo DiCaprio as Frank Abagnale, that's not generally how doctors get hired.


No, but they have a legalized cartel to make sure there's never an over-supply (that would lower the price for the consumer, we don't want that!) that also gatekeep credentialing.

Meanwhile in Software there are initiatives for "Gender X of Minority Y can Code" and "Everyone can be an Engineer after 3 months of BootCamp".


    Instead we have to simulate work samples 
    through whiteboard coding, pair programming 
    sessions, take home coding projects, coding 
    knowledge tests, etc. 
Very small sample size but we've had good results skipping coding exams entirely, and simply talking through some scenarios with candidates.

- give them a hypothetical problem ("the page is loading slowly") and role play how they'd troubleshoot it - do they understand how different bits of the stack fit together? have they ruled out network issues before digging into the code? etc.

- "tell us about a tricky technical challenge you solved"

- ask them what makes a for good code review on a pull request / what makes good code review culture in general

- ask them about things the team did well at their previous role(s) and things they'd improve, and how they'd improve upon them. (not looking for "correct" answers or opinions - but they should have some opinions)

- what are some technologies/frameworks/languages you'd like to learn next? again there's no "right" answer. but if they don't have any - red flag, right?

- etc

This of course presumes that some minimal screening has been done to make sure they're actually a software developer; an initial Fizzbuzz screen etc.

At each step of the way we discussed relevant technical bits in a natural and conversational way. For example if they mention that they "optimized" or "refactored" or "fixed" something at a previous job then naturally we ask them for the details and usually wind up swapping some stories as well.

If they passed this conversational interview, we usually extended an offer to them within 24 hours or less. Sometimes we waited longer and they got snatched up by another company.

Of course this sort of interview doesn't tell you about their work ethic and how reliable they are and so on. But, neither does a lengthy coding assignment-based process either. And the "conversational" method gives you a sense of how they'll fit in with the team.

Considering how quickly good candidates are snapped up, doing "fast" interviews like this can be a big advantage for your hiring efforts. If worst comes to worst, and they don't work out, you can part ways. It's not like either side is locked into the employment agreement. Depends on your specific locale a bit, of course -- and at my current employer we're helped by being a remote team, so it's not like we're asking folks to relocate or anything.


> - give them a hypothetical problem ("the page is loading slowly") and role play how they'd troubleshoot it - do they understand how different bits of the stack fit together? have they ruled out network issues before digging into the code? etc.

I don't know. I think I'm pretty good at troubleshooting on the job (since I can be the one to troubleshoot & solve the trickier bugs) but thinking about doing it in an interview setting makes me nervous. It feels too fickle & up to the biases of the interviewer that day, not to mention that any serious production bug relies on knowing how the software stack operates & which things are relevant, all things that are ambiguous in an interview the interviewee would just be stuck grasping in the dark to try to figure out which scenario you might be describing.

The rest seems fine, but I'm curious about your experience with the live debugging & if you've considered cutting it.


page loads slowly ... it is the database query man ... make sure to join the fields properly :-)

Yeah this is generally what I'm trying to lead them to.

If it's not a network issue, it's probably the database, right? Generally you've got an n+1 and/or some individual huge slow queries. I'd interested in knowing how the candidate would zero in on the database possibility and how they might narrow it down from there.


I'd really do well on these types of interview questions. I've spent a great deal of time troubleshooting the most difficult software issues for the teams I've been on. I'd rather not dox myself here, but troubleshooting is a pretty big thing I've done for the past 10 years.

Just today I discovered the biggest issue we've been encountering on our platform, and I'm not even in a developer role here. The developers didn't track it down since I got them involved, but here I am coming in and figuring it out, and it didn't even require access to the source code or how the platform works.

At the end of the day these types of issues come down to creativity and outside the box thinking than it does knowing how the specific software platform works. Looking at bugs and issues in a way that isn't subject to preconceived ideas and existing knowledge.

Sounds like a fun interview for someone like me lol


Surely an interview scenario is far less stressful than an actual outage though? Your performance in the real one is a lot more important for your job/career than the interview is.

Not necessarily. People put a lot of stock into interviews because they could affect not just today, but years of their future. Whereas nobody really expects to get fired if they can't resolve the outage in 45 minutes (instead of 3 hours), say.

Especially if you're junior and your current job sucks and you've never (yet) passed an interview for a better job.

This is counter-productive, but the brain doesn't always work how you'd want it to.


I've done these sorts of questions before and the point (more me at least) was two-fold:

1. Do they understand the basic machinery of a web application (assuming the job is about building web applications)?

2. Can they take a vague problem ("the page is loading slow") they might get from an actual non-technical user and drill down to identify what precisely the issue is? Is it DNS? Is it a proxy server/load balancer? Is their latency at the DB layer? How would you tell the difference between all of these?


I'll take high level architecture design and software coding problems over live debugging any day. Which is kind of my point. This kind of session is going to potentially weed out candidates with different strengths & a good team is a mix of a variety of strengths.

    but thinking about doing it in an interview setting makes 
    me nervous. 
I felt it went pretty well in the interviews and didn't seem to introduce any extra stress.

Personally, if I was being interviewed, I'd really prefer this to coding exercises as those really crank up the anxiety for me. (But of course everybody has different preferences!)

    not to mention that any serious production 
    bug relies on knowing how the software stack operates 
    & which things are relevant,
Oh, I think maybe I didn't communicate this aspect properly in my post.

There's no right answer. We're just looking for their thought process and how they might look up and down the stack to zero in on something. Of course they would need to ask questions about the architecture along the way. We do communicate all that up front - it's their questions that we're looking for.

    The rest seems fine, but I'm curious about your experience 
    with the live debugging & if you've considered cutting it. 
Well it's only been a handful of developers, but I felt it was helpful.

I think that kind of exercise is good for distinguishing "recent code school graduates" who are smart and can write code for one or two parts of the stack, from more experienced devs who have experience understanding how all the pieces of the stack fit together in a production environment.


"tell us about a tricky technical challenge you solved"

I have so much trouble remembering previous challenges I've overcome. I don't ruminate on them, I just move on...


Then just do a few canned answers before getting into interviews, so you don't have to wait and think about it and just shout out the most appropriate one you can think of the list you made?

You don't need to ruminate on things like this but there is a lot of value in keeping a light dev journal of sorts about what you have done and the results.

Makes it way easier in interviews or ever just in a normal performance review where you can refer back to things.


Well, if I was your interviewer, I'd say "no worries."

I'd be fine if you had to skip a few questions like this and did well on the rest.

That's a fairly common interview question, though, so it's a good one to rehearse!


Yes, I have found that this question just selects for people who can recall well on the spot, or worse, can make up some a believable canned war story and articulate it well. As such, it is really testing a particular set of social skills which have minimal bearing on an engineer's ability to do their job.

    it is really testing a particular set of social skills
I need my engineers to have strong communication skills, so this is intentional and desired.

    ...which have minimal bearing on an engineer's ability to do their job
In positions I've held, communicating and remembering are pretty desirable qualities. For engineers and others. I need my engineers to be able to do those things. You obviously don't. That's fine. We'll hire different engineers. Everybody wins.

I've generally found more people flunk this sort of interview than flunk a whiteboard one.

Namely, if you've had only boring, uninteresting jobs so far, you might not have a truly interesting "tricky technical challenge you solved," and similar gaps around the other questions. Like, you can't name many of the ways a big, high-traffic site might slow down, because the internal tools websites you work on don't need caching or proxies or load balancing or...

Whereas tossing an algorithm question or two at them too to see if they can figure it out at least potentially screens for potential in a way this conversation doesn't.

So I always make sure we do both on interview loops, because I don't want to reject you just for lack of good past jobs, OR because of lack of studying algo problems recently (the good senior candidates crush the conversational one even if they're rusty on the algorithms).


     Like, you can't name many of the ways a big, 
     high-traffic site might slow down, because 
     the internal tools websites you work on don't 
     need caching or proxies or load balancing
I feel like it would be tough to spend any amount of time developing web apps, even if they're just internal tools, without hitting a basic performance issue like an n+1 query situation where you accidentally write a page with 500 queries or something. But maybe that's me... maybe devs are better than me these days. I hope so =)

There are of course innumerable network related reasons an app could slow down and we wouldn't expect a software dev to dive into them... I'd expect them to just be able to do some ultra basic stuff to rule out a network issue and zero in on the application stack.


> If you could review someone's code from their previous jobs, I think it would be quite easy to vet applicants.

I disagree, somewhat. In positions where I work with a medium or large team, any code of mine you reviewed would give you an idea of how the team leads want code to be written, not really how I as a candidate write code. I've often disagreed on design/architecture but was forced to go through with it because I really didn't feel like arguing and getting on the shitlist of a high-ranking engineer with influence in the company.

If you want an idea of how I would design something, it's probably best to have me write something specific to the job. I'm not talking a whiteboard red-black tree implementation, but something that is actually indicative of the work I'll be doing.


That's one advantage to working on open source. Your work is all just a click away.

Have you ever gotten a job from just showing off your open source work, though?

Other people I know have. Quite a few have leveraged their contributions to the D language into a much higher paying job than they had before.

I was a committer to Elasticsearch. My name is thanked in the (very old) official book. I will still get asked questions.

No one looks at open source work, just as no one cares about your resume.


I have had good luck hiring developers by asking them to do a code review of something WE wrote (but framed as if a junior developer wrote it)

This helps us look for good signal around their communication skills, mentoring skills, empathy, reasoning skills and software development skills.

We used this review as a diagnostic - there are no wrong answers since we know they’re not aware of our style guide and conventions.

It worked for us. Maybe it could work for others.


I'm using the same technique. Taking MRs from Junior Devs together with the Ticket description, reducing the scope a bit and sprinkling different errors or incomplete implementations here and there.

In the interview, I'm checking of problems that the applicant notices and see how he approaches the problem.

So far I've been satisfied with all hired who passed that test. And they liked not having to solve stupid whiteboard problems.


I do something very similar and it works quite well for anyone except fresh grads (I've a different variant for them).

I pose a situation and introduce the v1 code. They look for bugs and propose fixes. Then I add on a new feature, and they look for more bugs. I've maybe 4-5 levels overall each having different classes of bugs, some of more or less subtlety. Fits on one whiteboard / single piece of paper in the end.

There are no syntax errors, just logic. Errors are in categories like: robustness, failure handling (internal or external), data/thread races, unforseen side effects, etc. The more experienced you are, the more problems I expect to be found. A "I don't know" is just fine (and often the following discussion is MORE informative).


I _really_ like this variant! In my experience new grads never seemed to have too much trouble with the exercise but then I do explain that it’s diagnostic in nature and use the exercise to see how coachable they are.

That is such a refreshing approach to the process. May borrow this next time I hire a developer.

Thanks for sharing.


I disagree on 2 points:

> It is much easier for product designers and product managers to pass interviews. You can see their work product.

You don't see any more work of a product manager than of an engineer. What you see is always the finished product, and you have no idea who contributed what parts. If the overall product that can be publicly experienced is good, then some engineers in that team seem to have been doing a good job. You won't easily know which ones - and you especially don't know whether a product manager on the team really a lot of influence on this or whether the products vision and execution was mostly driven by engineers.

And the second point:

> If you could review someone's code from their previous jobs, I think it would be quite easy to vet applicants. And it would be much easier to move from job to job.

Sometimes employers can - because candidates have open source code. But experience has shown that these datapoints are not used, and employers still fall back to the default process of assuming nothing and doing whiteboard/leetcode style interviews.


And, about reviewing code from someone's previous job -- they might have had to write sloppy code because of time pressure

Seems to me it's just so much in demand that it pays more than companies are comfortable and they almost never want to introduce any applicants to higher pay levels than they have experienced in the past.

something i have seen a few times: candidate is far more qualified for the job than the existing employees and they are afraid of their superiority showing, of the possibility of replacement, so they railroad every candidate. imposter syndrome can prevent teams from growing in positive ways and limit their creativity.

When big tech says engineers are “in demand” they mean “we can make money off them.”

There could be 10 jobs worldwide, as long as companies can make money from those 10 people, they will say they are in demand. Rather than think demand equates to quantity of jobs, it’s better to think of it in terms of cost. The more engineers competing for the 10 jobs, the lower their cost to the company and the higher the demand. Lower salaries mean more money can be made by employing them. “In demand” means the exact opposite of what most people think. And by telling people the demand is high, it increases the supply further lowering costs for the companies and thereby increasing the demand. Engineers could organize and form guilds or unions, like lawyers and doctors have. But that would decrease the demand because it would increase costs. Tl;dr software engineers don’t grok labor economics. VC do.


Even mom and pop shops copied FAANG interview process.

Software Engineering is not in demand.

What is in demand is cheap labor that can churn out low-quality web applications, label them MVP, and use them to convince investors to pour in money to hire more cheap labor.

The biggest tell that this is true is hiring for a specific library/framework/platform.

If you wanted a software engineer, you wouldn't care what particular thing they have worked with most recently. Maybe you would care about the general category of work, but mostly you would care more about practical experience and past achievements/results.


This isn’t true at all. Maybe in some locations (Silicon Valley? I don’t know), but every job I’ve been on has needed top level programmers for critical applications that have real world value.

They need senior level programmers, but most of them are not willing to pay much more than junior level salaries, because they think they just need copy-paste programmers.

I think that a lot has to do with his #2 point: Software is BROAD.

I've changed jobs twice in the last 6 years and in none of the interviews was I asked any coding questions. There were sometimes broad questions about design and concepts "how would you handle situation X"), but no actual coding or whiteboarding. In fact, going back 15 years to the start of the previous job, I don't recall coding questions then either. They were more concerned about my general capabilities and knowledge of useful algorithms that I would use on the job than the actual code.

But then, I'm mainly an embedded systems developer. Sure, I do the odd webapp or desktop application or tool, but controlling hardware is where most of my time is spent. Maybe in this field there's less of a culture of "interview by whiteboard?" Or perhaps it's because I was applying to higher level team lead positions that were more concerned with architecture & design than the framework of the month?

Or is it mainly the web guys (admittedly the largest section of the pie) that are being asked the odd algorithm & whiteboard questions?


Is it hard? Seems that it only is at entry level which is true for all fields. However in other fields there are very few ways to stand out as a grad so opportunities are distributed more evenly.

So many singles, fewer marriages :)

I was laid off during the recession and was "out of shape" in terms of algorithm and interview skills. There is a lot to know. The two previous interview cycles in my career were a completely different experience. I could probably leverage my personality more - in the pandemic it was just a zoom call.

Now I do regular practice problems so I'm always ready. I actually recommend this.

It looks something like this:

  Sunday - Stack | Queue | Priority Queue (Heap)
  Monday - String | Math
  Tuesday - Tree | Dynamic Programming
  Wednesday - BFS | DFS
  Thursday - Graph
  Friday - Linked List
  Saturday - Sabbath

this is actually funny

agree.

One aspect not mentioned: Tech really want to be a meritocracy. We don’t generally succeed, but we try. Engineers at least want to be unbiased, and the Bay Area cares about it culturally, generally speaking.

So we fight against increased barriers to entry like credentials (but that Stanford/MIT degree is still a golden ticket into the interview). We try to give as objective an interview as possible, meaning it’s explicitly technical, rather than just talking about past projects open endedly and going with the feeling you get about the candidate.

I’d bet if we collectively decided not to try to be a meritocracy, we could make tech interviewing a lot easier, but I wouldn’t like that. I came from a nontraditional background too. I only got in the door because whiteboard style interviews let me demonstrate what I knew despite my total lack of credentials.

We suck at being a meritocracy, but I’m glad we try to keep the barriers low and unbiased. I bet we’re better than most other fields that pay this much.


But just as with companies that attempt holocracy and having no hierarchy, de facto hierarchies just creep in. And so the data structures/algorithms interview is a de facto credential, except worse, because it needs to be re-taken at every single company, rather than however many times it takes to pass the credential exam.

Because companies don't want to train anyone.

Every time I think about this topic it reminds me of The Grapes of Wrath. Flyers everywhere talking about how much the orchards need fruit pickers, creating a veritable gold rush of workers. The outsized demand for jobs from the supply side of labor drives down wages and working conditions.

H1b/ageism/purple squirrels

Everything about interviewing sucks. Being the interviewer sucks. Being the interviewee sucks. The politics of hiring sucks. I hate it on both sides.

The more I interview people the more empathy I have for good candidates who can't get hired. I've seen so many potentially good candidates passed over because someone in the hiring chain didn't find them good. Usually this has to do with "lacking experience with X technology."

This is incredibly frustrating because usually the person doing the rejecting didn't know X when they were hired, but they were paid to learn it by the company.

On the flip side, I've been forced to re-interview obviously poor candidates because a hiring manager liked that they had "experience with X technology." Even though I was pretty confident that they were lying. Usually this ends up being merely a waste time, as I've never changed my mind and usually bring along another interviewer who concurs.

I think the hiring process is 50% luck, and 50% having experience with the right tools. My new strategy, after working in the sausage factory, is to look at prospective jobs, find the tools they are looking for, and find a reason to use them in my current role. Read all of the documentation so you really sound like you know what you're talking about, then interview. I'm not sure if this works in the SV startup culture, but it does seem effective in my situation.


0.9^7 < 0.5

If you have a 90% chance of getting everyone you meet to like you, but any one of them has the power to veto your entire candidacy, then after 7 "rounds" you are not likely to get the job.


I’d argue that the ‘demand’ is overstated, largely because job listings and forecasts != actual jobs.

Outside of the browser space there's a lot more opportunity to land work, since there's _far less_ competition for jobs.

Thanks to the billions of dollars spent and hundreds of millions of hours expended, anyone who takes a four week bootcamp can become a passable frontend web developer. The tooling is just that simple and accessible. And so there's a lot of folks taking such bootcamps, and employers have no lack of choice for roles.


Just because you have a degree or think you are a software developer, it doesn't mean you are any good at it and should be hired. Companies are substantially better off having fewer developers than having bad ones.

Bad developers take a lot of time to train, manage, QA their work, fix their work, fix their work again, and then finally someone else just does it. They are in fact a net NEGATIVE impact on the team. You are actually better off without them. They actually slow you down instead of improving productivity.

It's akin to hiring a cook who screws up every meal they make. Not only did I pay them to do so, now I have to pay others cleanup their mess.


Why does it take longer to QA their work? Do you not QA "the good developers" work? Why does their work need to be fixed and re-fixed? Do you not have a test suite?

As an experienced software engineer with a CS degree and having worked as an Individual Contributor for over 12+ years, finding some job is not hard but finding a job that pays well like FAANGs and other similar top tier companies is indeed very hard.

Coding interviews should just:

- review your recent resume

- have some conversations around coding topics that dive in enough to know if you generally know what you're talking about

- focus on things you really expect them to do on the job

- if you really love giving algorithm riddle programming tasks, only use them on recent university grads who are used to such things. it has zero (ZERO) usage for experienced devs in our industry

- basically much of the US already interviews conversationally with little or no coding exercise. but for some reason big tech and the valley fail to change (which is funny since they are usually on cutting edge of other aspects of our industry)

TL&DR: don't do live coding interviews, they are a waste of everyone's time


Not sure but.. some people I know who work in less well paying office type jobs (perhaps with a large data entry component), see the trend and think they want to get into programming. But they just don't enjoy it whatsoever. Their preferred approach is going to the cheapest college course they find, passing the courses by the skin of their teeth and then showing up with diploma in hand at a job interview. But unfortunately that process doesn't leave them able to contribute much and the employers know it.

I've done two technical interviews this summer. The first one was shakey, the second went really well, but ultimately both places moved on with another candidate. It's definitely a skill and learning to not get so nervous about them helps a ton. I went from grad school physics to my first data science job and I'm trying to further transition into ML engineer type roles. My biggest insecurity is not knowing the comp sci 101 basics, since my programming was self taught along the way (learning what I had to learn for my thesis research simulations and then whatever else I learned in my first 2.5 years as a data scientist). I long for the day that I have enough experience under my belt that I'm a ML unicorn and companies view me as highly desirable, but I probably got many more years of grinding til I reach that point.

I got into software from a similar background. You can get pretty solid CS basics very quickly if you go through a book like Cracking the Coding Interview and do a few leetcode problems. It will also probably dramatically improve your experience writing code.

The best way to actually learn how to code is have someone else teach you whose been doing it for several years.

I wouldn't be where I'm at today had I not had my lead help me out during my internship. My school was just trash at teaching programming. Not only was it basically self taught, but everybody got A's so long as they just submitted code that compiled. My lead actually taught me how and why this stuff works.


We made the interview process very simple and traditional in our current organisation. 30 minute chat, judge whether the person can do the job or is a good fit, if yes then offer a year contract with 1-3 months of evaluation period. Changing a job is risky also from the candidate's perspective so if the person is pretending, the lies will catch up. Most of the scenario it has worked pretty well.

Sometimes, people who you think are not capable to do the job, often outperform expectations too. It is all about taking a risk on a person and giving them respect and a chance. We could have done leetcode, or pair programming session. It takes more energy and effort to do it from both sides and probability of finding a good candidate is more or less the same.


This is super interesting!

With a traditional interview and job offer process, a new employee can ramp up without worrying their job is on the line. And I think this is important, because it can take awhile to ramp up to full productivity, which can be stressful if the new employee feels like they're being evaluated already.

Where I've worked, my new manager told me "Hey, welcome to the company. Please feel relaxed and take your time ramping up, you've already passed the interview and we're happy to have you here."

With your process, how do you deal with people getting stressed out during ramp up or feeling imposter syndrome?


If you are a semi-experienced software engineer and haven't been deliberately lying during your interview, you shouldn't really worry about getting fired.

Wouldn't people go from stages similar to culture shock?

1) Wow, very interesting company. I didn't know so many things can be done in different ways than I'm used to. Very smart ideas out there.

2) OMG, this company is full with idiots. Everything is done the wrong way but somehow it has not collapsed yet.

3) Yeah okay, some stuff is the way it is because it would't be feasible any other way due to the quirks of the business. Other things are the way it is because of historical reasons and it doesn't make sense to re-do it at the moment.

4) You know what, I think I understand what this company is all about. It's not perfect but people are actually doing great things here.

5) OMG, this business is crime against humanity. It shouldn't exist, I don't know how I'm supposed to do this anymore. Money can't buy me.

6) Well, the world is not perfect and I understand the imperfections and I can function. It's not like they are doing it any better anywhere else. I grew to appreciate upper management, now I understand our business and I'm happy to do my part.

3 months should be enough for a nice honeymoon stage. Both sides can know that longterm relationship is achievable if they have a nice honeymoon stage.


30 minutes? Not even an hour? I'm a senior and I need an hour to work my way through deep questions (not just technical) to see what real-world experience the candidate has while simultaneously judging cultural fit. I prefer an hour and a half to allow time for the candidate to feel more comfortable and come up with their own questions.

I definitely agree with the taking risks part. Hiring should not be about the most talent or experience, but the best mix of qualities (including their own personal goals) to fit what you're hiring for.


> ...to see what real-world experience the candidate has while simultaneously judging cultural fit.

Could you expand on how do you evaluate the cultural fit?


Not OP but I often ask people their opinion on things (work/project related of course). I'm hoping to find some part of our domain where we disagree, to see how well they can have a civil discussion about something where we don't agree. To fit in on our team, everyone needs to be able to have mature discussions when we don't agree because disagreements happen a lot (and we end up with a better solution when we talk through them).

Generally it is 30 minutes meeting. If the we and candidate have a click we extend the meeting. I think works different for different organisations.

This is something that I have never quite understood. In most of the places where software engineering is big, you have very loose labour laws. But companies treat hiring as if employees are signing on for life (compare this to how they treat downsizing). It is very strange, particularly given: the fact that almost no-one thinks current hiring practices are perfect, and the difficulty in producing a process that actually works (again, it seems odd that people hiring are engineers but take an approach to hiring that is very precisely wrong, rather than roughly correct...this confusion between precision and correctness seems common with engineer backgrounds).

The cost of a bad hire is extremely high. It's not their salary or bonus, etc. It's how they can affect a team, the product, and the deliverables.

That makes no sense because, presumably, the alternative is to have no-one. If you don't hire someone because you are worried about the team, you don't need to hire anyone (this risk is, also, not avoidable anyway...if your product is so fragile, the risk isn't making a hiring mistake).

Most small to midsized organizations would prefer to deal with false-negatives during hiring (missing out on good talent) than the issues of false-positives (bad hires). Often times (not always) no one is preferable to a bad hire.

A bad hire can set everything back significantly more. Not only do you have to deal with new missed deadlines or poor quality work, but you often have to deal with the fallout with team members. Plus you're using up a lot of management/leadership hours dealing with it.

The impact is even more important the more senior the role. Hiring a bad manager or lead can impact way more than hiring a bad fresh-out-of-school grad.


I'm leaving my current role due in part to them not hiring other devs efficiently, resulting in a long-term unsustainable workload and everything that it entails.

The final straw was during a meeting when it was brought up that they were using take home projects to evaluate candidates. We're drowning in work and you're delaying us adding resources AND wasting bandwidth on take home projects? Not to mention wasting that candidates time and contributing to the "all hours" mentality that made the job miserable for me to work in.


I think you'd be surprised. For example, with the wrong hire, one person with bad behaviour could frustrate everyone else on the team to the point where no one wants to work on the project anymore. This could lead to the whole team feeling resentment for one reason or another, and eventually leaving. Now you're in need of a lot more devs.

> if yes then offer a year contract with 1-3 months of evaluation period

Contract work is a great way to find good talent, but it's a different candidate pool. Lots of good candidates can't or won't give up their full time jobs to take a time-limited contract job.

Those who can take contract work are often more talented and more in demand, meaning they're less worried about finding another job if the contract isn't renewed. Contract work (without benefits) is not an option for a large number of developers.


When I mean contract, here in Netherlands it refers to the offer. It is not a hourly contract position. It is position with all the benefits.

Except job security. If you join a company in Finland on a permanent contract, once you have passed the trial period (6 months nowadays), it's quite difficult to get rid of you.

Changing jobs can be a hassle. It means learning new names, potentially changing private healthcare provider, getting new equipment and setup, learning new company politics.


True, but here in Netherland, you can give out 3, 1 year offers before you forced to give a permanent contract.

Three years sounds reasonable, one not so much. For the lack of security at one year, an actual contracting role might be more lucrative.

Is it the case you can earn (quite a bit) more as a contractor, compared to full-time employment in NL? At least when I was doing contracting in the UK contracting roles could earn me almost twice as much as permanent roles (without the benefits of course).


Quite a bit more as contractor. Yes.

>At least when I was doing contracting in the UK contracting roles could earn me almost twice as much as permanent roles (without the benefits of course).

The rule I have always followed - though I don't remember where I picked it up - is that contracting should earn you twice as much as your full time salary - that way the risk etc. evens out.


> when I was doing contracting in the UK contracting roles could earn me almost twice as much as permanent roles

Sadly this is not the case any more; with the new IR35 rules it's common to get a contract that is taxed as salary, except it does not include any benefits. Contracts outside IR35 exist, but they are very rare and pay even less.


>True, but here in Netherland, you can give out 3, 1 year offers before you forced to give a permanent contract.

I guess this just sounds weird to me. I would have to be pretty desperate to take a 1 year contract from a company that only paid me full-time wage as opposed to a contractors wage.

I have to assume the Netherlands has a lot of developers seeking employment for this to work.


It's pretty much the standard across all industries. It's extremely difficult to get rid of an "indefinite" employee, so most roles will start with a first fixed-term contract.

You don't really get any less security than in a country like the U.K, where you can't claim unfair dismissal under two years of service.


There's the same system in France.

As GP says, it's because taking an employee on an indefinite contract is a huge responsibility, and you basically can't fire them unless they set your office on fire.

In France, there's a huge temp ecosystem that was built because of that. Companies don't hire developers, they subcontract to temp agencies for limited time. The advantage for them is if they need to downsize their team, they can simply terminate the contract without risking liability.

The temp agency obviously takes a big cut on the developer's salary, until (at least in my individual experience) the developer decides to fuck off and do contracting directly instead and starts thinking, you know what, the French job market for developers sucks, I should probably send resumes to american companies instead.


Ok in Denmark the system is that you get hired, if they fire you in the first month you get 2 weeks severance, after which you have (IIRC) 3 months, this part is somewhat based on seniority / contract some times you might get a 4 month severance period.

You can be fired for basically any reasonable reason though.

I again have a hard time believing you need to set fire to the office before they fire you, don't French companies ever downsize?


It's an hyperbole. Downsizing is allowed, but there's some heavy paperwork involved, you have to meet some guarantees, etc. The company can't do it at will. (Then again, I'm not a company owner, I don't know the details)

It's the same in Germany as well (but I think the law has changed recently), but it highly depends in which field you work. I've never ever heard of such a thing in IT, whereas my wife is a social worker and it was pretty common to only get a 1 year contract at first up until recently. And if every employer in your field does it, there's not much else you can do.

How would a mortgage lender feel about it?

You can ask the company to give an intent to extend or give permanent contract and that works with mortgage lenders here.

Former independent software contractor turned real estate agent here... I am not a mortgage lender, but I work closely with them. You've likely need (at least) two years worth of bank and tax statements and a good credit score and then they'd be a-ok. Regardless of whether you are self employed or an employee, build those relationships with lenders early so they can advise appropriately.

It's a permanent full time role.

> Contract work (without benefits) is not an option for a large number of developers.

Probably should be...? You're typically getting paid more because of "no benefits". (I HATE the word 'benefits', FWIW).

Buy your own health insurance - it's more accessible in the US via ACA. Yeah, you might miss out on some 401k matching. Save it yourself?


"Contract" in this use does not mean the same thing as contract work in the US.

It is a full-time position with all the benefits therein, except at the end of a year the employer can choose not to renew it. It is not equivalent to US 1099/freelance work.


"Contract work (without benefits) is not an option for a large number of developers."

It might happen, but every long-term contract gig via a contracting house has offered approximately equivalent benefits to some regular W2 employer. Those sorts of engagements typically have you as W2, just with the contracting house, not the end company. I've worked a handful (6mo, 12mo), and known people who stay in those situations for years - they accrue PTO and get 401k matching, just all through the contract agency. I suppose there are some agencies that don't offer that, but you'd likely get a higher rate.

But... this is all from a US perspective. I've done all 3 - direct W2 employee, independent consultant/contractor, and 'contracted to large company to resell my time to someone else'. In the last case, W2 or 'corp to corp' was an option as well (though not always).

Also had that "can choose not to renew it" - worked out 6 month contract, didn't renew.

I guess I'm not sure what the reply was for...? I quoted "contract work (without benefits) is not an option" and you're telling me "Contract...is a full-time position with all the benefits therein".

I think there's some talking past each other going on here...


How do you find contract work in London?

Isn't contract work looked down upon in the US? Here in the UK, its the opposite, contractors make atleast 2x the money, and most wouldn't dream of going back to salary position because no company wants to pay that for a permanent employee (apart from american companies and qaunt finance with nice bonuses)

Contracts often fall into one of two categories.

There's the consultants who make the big bucks. They come in to solve a particularly thorny problem that an org has and then the contract is done and they move on.

There's also the staff argumentation contracts. We need six devs, but because of how accounting works, we can only hire two FTEs. However, contractors are part of an operations budget rather than a engineering budget... and so we can hire four devs as staff argumentation instead.

Another example of staff argumentation would be some place where there's a flex in the amount of work to be done. Long ago, I worked tech support. About 25% of the staff was FTE while the remaining 75% weren't. It was claimed that it was so that it would be easier to flex down (or up) when demand for the tech support slacked off or if it shot up (it did a few times go up with new OS releases).

The staff argumentation dev role is not as prestigious as a consultant.


> argumentation

augmentation?


That too... the debates I've had... oh... yea, I spelled it wrong. The perils of autoincorrect.

Contractors in the UK earn more or less the same as other employees (once you account for benefits and paid holidays and sick leave), but do not pay taxes because of a loophole that hopefully will be fixed by IR35.

This is definitely not true. I've been contracting for 6 years in London, and am currently in an inside IR35 role, and have quite a few friends in the same space but in frontend/devops and its all the same. The differnce is atleast 2x for senior/lead engineers in golang or python.

In my experience, a company that pays 400-500£ per day for a contractor, will pay 80-90K£ per annum for a permanent employee. Once you account for VAT and corporation tax, the only difference comes from not paying NI and income tax. Inside IR35, if my calculations are correct (and they may not be), 500£ per day are equivalent to 90K£ per annum.

> Sometimes, people who you think are not capable to do the job, often outperform expectations too.

I think everyone, employers and employees get too caught up in requirements and forget that humans are very general purpose. And in particular, highly capable and intelligent humans can rapidly acquire skills.

In particular, if you are hiring someone for a potentially lengthy career, capacity for change seems incredibly more important than immediate skill.


Key problem is software engineers are generally bad at hiring. Hiring is a skillset of it's own. For example, you are technical writer for writing user facing docs, similarly I think it is specialized job where you use cognitive abilities to make a judgement, use psychology to see how the person will be in various situation.

Unfortunately, the people who make a career out of recruiting people into jobs are even worse

Trying to measure people is a very hard thing, especially people who are not at senior levels. IMHO, top talent can show some signs but other than that it is all about the motivation.

Given the chance, motivated people can improve at great rates.

The other thing that could matter is deep knowledge. I think I heard it from Steve Jobs, in one speech he was talking about hiring people with deep knowledge in a topic and not only because you can leverage that but because the person will know what it takes to acquire deep knowledge.


Can I get a job? I've been on multiple stages of interviews, of which, some are 2+ hours of coding and even if it seems promising and that everyone's happy... I still end up getting looked over. Even programs like returnships that are specifically for people who've been out of the game for 1+ year, despite showing them that I can code and architect software... I'm still kept waiting and don't get in. I feeling pretty dispirited at this point.

What would be the best way to get in touch with you? Would love to have that "30 minute" chat with you?

That's completely irrelevant to the discussion. We're talking about positions for which many people will apply. You're not going to be able to eliminate enough with a 30 minute informal "chat". Honestly, I think your comment says more about how programming still isn't taken seriously in Europe to a large extent (just look at the salary gap vs US).

If I remember right, Google found something similar too. Everyone knows Google makes the candidates jumps through a lot of hoops to evaluate them and hire the "best and the brightest". But an internal study showed that apart from the really top talent (the rare few), all that technical knowledge doesn't matter much in the long run:

> "Google originally set its hiring algorithms to sort for computer science students with top grades from elite science universities. In 2013, Google decided to test its hiring hypothesis by crunching every bit and byte of hiring, firing, and promotion data accumulated since the company’s incorporation in 1998. Project Oxygen shocked everyone by concluding that, among the eight most important qualities of Google’s top employees, STEM expertise comes in dead last. The seven top characteristics of success at Google are all soft skills ..."

> "Project Aristotle analyzes data on inventive and productive teams. Google takes pride in its A-teams, assembled with top scientists, each with the most specialized knowledge and able to throw down one cutting-edge idea after another. Its data analysis revealed, however, that the company’s most important and productive new ideas come from B-teams comprised of employees who don’t always have to be the smartest people in the room. Project Aristotle shows that the best teams at Google exhibit a range of soft skills ..."

Source: The surprising thing Google learned about its employees — and what it means for today’s students - https://www.washingtonpost.com/news/answer-sheet/wp/2017/12/...


All that tells me is that Google is a big company and, like all big companies, "success" is dominated by politics.

Politics never goes away unless you're the only employee, but the ratio of politics to technical ability that defines success changes drastically the smaller the company.


How do I as a candidate compare job offers between an offer in hand vs a 1-3 contract that may or may not result in an offer?

Same. Except, we actually hire them as a full employee, with a 90 day "probation" period. That's just the 90 days we get where we can let them go for any reason without having to pay them unemployment.

It's worked out well so far, especially for those tasked with doing the hiring.


We tried similar in my last job. Interviews were often in the 45 minute range, but similar idea.

We didn't get into deep technical questions. Rather, we asked questions meant to figure out if the person excited about the work or not. I can bring somebody up to speed on our language, but I can't train my way into curiosity or interest.

For example, we asked what source control software they'd use if they were starting a project. Ultimately I don't care what they're into, so much as that they have used something and see enough value to have an opinion to offer - even if they've only ever used one tool.


Are you using this contract with juniors? Maybe this is a cultural difference but I would never accept a one year contract. Especially because In EU a permanent contract has a trial period in it.

One year contract is pretty normal in netherlands.

Some people that don't have ability just "surf" projects. They try to stay as long as possible without contributing anything, then they find another one. I worked with people like that.

They do it because they can't do honest work that will pay comparably to their scheme.

The only way to deal with them is to not let them in.


This reminds me of this historian's theory that WWII generals were unusually successful because of the dynamic way they were assigned and potentially reassigned within weeks: (US Berkeley Events 2011) https://www.youtube.com/watch?v=AxZWxxZ2JGE

> One drawback to this is that the engineer interviewing you, if he/she is human, will not be familiar with all of them

I see this as a potential plus not a downside. If the person doesn't understand the language you're using but you can explain how your code works in such a way that you can get them to understand it that's a really good demonstration of being able to communicate and how you would describe your code to a co-worker.

I've only sat in on a few interviews (as a person doing an interview on the sidelines) but all of the questions I tend to ask are more casual and around thought processes, or at least the pseudo code implementation. Personally I don't really care if you can't remember the exact syntax of something off the top of your head but I do care that you know how it would work and what you would Google to look it up.

Personally I don't know what it's like being interviewed tho. I've been doing contract work for my whole career and every job came from either talking casually or someone finding me with intent to hire me as long as I didn't come off like a maniac. I know for absolute certain I would fail any algorithm based whiteboard test (I never went to University) but if you're struggling to find employment, just know there's a whole world out there where people don't care about traditional software engineer interview strategies. They only care that you're dependable and can solve their problems in a reasonable and maintainable way.


Roughly: if there’s one job per person in the field, and for each opening there are 100 applicants, it will take 100 applications for the average person, on average to get hired.

Because we interview for CS and not software engineering? Software engineering is at the very least requirements understanding, customer empathy, resolving ambiguity collaboratively, and on a more technical side class/interface design, maintainability, tradeoffs, testability and finally the implementation. What we test for is 3 leet code in an hour and oh asking too many questions shows lack of independence! Worse interviewers often have a different interpretation of interactions as they present the candidate at the hiring committee!

As software developers/ engineers we love talking about this issue... but realistically it's just a symptom of the growth in our industry.

Anyone who pretends you can accurately assess a candidate in 3 hours worth of interviews is lying to themselves. The only real way to know if someone is good is to work with them and get to know them over a long period of time. I wrote a little bit about this here: https://jonpauluritis.com/articles/a-better-way-to-hire/. Practically speaking this means the best way to recruit is via "networking," but networking takes a lot more time than posting a job advertisement and having someone solve some leetcode questions.

(related article: "Why Aren't Developers Paid MORE" https://jonpauluritis.com/articles/why-aren-t-developers-pai...)


As of recently I started having really confusing opinions on the state of interviewing and our industry in general.

Since there is no gatekeeping (for better or for worse), you get a large pool of people with wild variety of skills, so these silly interviews are the laziest way to assess people as an alternative to having credentials such as that of a Civil Engineer, Doctor or other professions.

I don't know of any other industry where the interview is this silly, but studying for it for a few months top could get you a 6 figure salary (not everyone makes it, but the chances are quite high) if you know what you're doing/skilled enough.

I started to play the game as well and actually got a lot better at solving this type of problems than say few months ago. My confidence is high and I'm a lot less intimidated by this type of interviews, but so is my I-take-no-shit-ometer since even if I aced some of these interviews recently and the interviewer(s) was/were acting in ways I didn't appreciate, I can just say no. I mean, I can play your game, but I'm not gonna put up with your shit.


I think the concept of "getting a job" will go away. It is from an area where we did not have software and the internet to work together efficiently as we do now.

"Giving you a job" carries work and risk. "Accepting a job" too. We do not need that type of friction anymore.

I think systems like Upwork will become the norm. Where you just start working on some small task. Without much of an application. Without much expectation. Then both sides can grow together over time and work together more and more.

To me, the old way of writing and reading applications seems rather insane these days. Imagine we would do the same for relationships. No more dating. Write and read letters instead. Then meet and talk once or twice and then BOOM: Marriage. Nobody would want that. I think we will abandon it for jobs too.


I think SWE requires two things:

- a centralized accrediting authority with uniform standards.

- a apprenticeship model.

An apprenticeship model let's you score folks while they're early in their careers and provides a standardized way to traverse levels of software engineering. This will show an engineer can write code.

In my opinion, writing code is not the same as writing optimal code, and also isn't uniformly required. For finding people that can write optimal code you need someone with a more mathematics heavy background. That is where a centralized accrediting entity can determine that you have tested on algorithms, data structures, and how they are related for entities that need that. This differs from college because the standard is uniform.



I currently believe that it is because software engineers are non-substitutable. The hiring manager is not looking for any qualified engineer, they are looking for a very specific engineer who is also qualified. Engineers also are not looking for "any programming job", they want a job at an early-stage startup or in an infrastructure team or to learn a new framework. This is true in many industries, of course, but significantly more so for software.

Nobody wants to hire juniors and train them to be seniors because there are very few incentives to hire them.

Partly because projects are sold at such low margins that they don't allow for tutoring. Or the customer plainly states that they want 5 engineers with 10 years of experience each. It's a hard sell to make that 2 10 year guys and 8 juniors instead.

Partly because the junior will bolt to a higher paying job as soon as they've learned enough. People don't stick with companies for the long haul like they used to. Even if the pay is good, people just get bored and switch jobs.


Whiteboard interview is a non-specific skill for software engineer, but it is relatively easy to hone for any decent coder. Like a week or two 1-2 hours in the evening. It's like solving chess puzzles, and could be entertaining as well. I think that people who are ranting about "broken hiring process" are either mediocre coders or became old and ossified.

Guys I've the solution.. Companies should do an ISA agreement. And see JR and interns as students. The new model works like this...

- If you leave/fired < 4 months no responsibility.

- If you stay after 4 months you agree to ISA agreement.

- Agreement is that if you leave within 4 years you agree to share 20% of income up until you have paid $60k.

- ISA is valid for 4 years. Then it's VOID.

- ISA is also valid if you get a tech job.


Because your premise is wrong. Software engineering isn't really in demand. It's a very dysfunctional system. I'm not even sure how you'd define "in demand".

can you elaborate?

After being interviewed and interviewing the best course of action is have standardized exams akin to the GRE/GMAT, it's worked well for doctors, accountants and lawyers. Those professions are a lot older than software engineering.

And once you pick candidates, bring them on board and have your behavioral/cultural interview to judge if they are a good fit for your team.

Will save time for both interviewers and interviewees.


A lot of these jobs pay between 60-130k/year, have a very high preference for someone 2-5 years of experience out of college.

That only covers a small percentage of the population. I used to fit that profile and back then, the minute I made any change to LinkedIn, I had people message me. Now people don't want to waste their time on someone that will be out of their price range or more experienced than their boss. FAANG is the exception, they seem very interested in scheduling an interview.


There are two problems here: Getting your first software job, and getting all of your other software jobs.

Getting your first job is harder, but for different reasons. You're an unknown quantity, and the only way to know if you're any good is to grill you on things you learned in data structures & algorithms class.

Getting all of your subsequent jobs is also hard, because there's no way to know if you've been a stump who just sat there and collect a paycheck at previous roles.

Perhaps the solutions are different too.


So I've had this idea for a little while, still extremely rough and potentially controversial, but I've talked to a number of people who agree. Its based both on my own experience as well as chatting with other developers.

It seems to me, that there are "classes" of developers. This is not necessarily tied to market or ability, but those can definitely be be big contributors to which class you fall in. Prior to me entering the field professionally, blog posts, articles, etc. seemed to promise an easy six figure salary to anyone who could remotely code, smooth sailing after you get that first job and other highly appealing things. I have a good feeling a number of people on here would likely agree with this reality. For others I've spoken to, this was never the case. I never saw any of that personally. Reasons being both circumstantial and me not understanding the reality of things and being to quick to settle.

I talk to developers from all categories: new grads in the bay area bragging about offers at companies and startups you've heard of, experienced guys in the midwest who claim to still be able to take home salaries unheard of in any other field, or guys who have a decade of experience, but struggle to find a role to pivot into, and all sorts of others.

What always strikes me is they seem to live in different worlds. I had always considered local market to be the big differentiator, but the more I speak to people in the same market with wildly different experiences I start to question that. Particularly in this time where remote work should in theory expose more opportunity to people tied to local markets for whatever reason. Type of company seems to be the big differentiator here, and I don't mean in domain/industry or a tech/non-tech oversimplified manor.

Instead of noticed personally, that the only companies willing to talk to me are very similar to the ones I've worked for in the past. This isn't even about the "stack" being used either, but more about the organization. Similarly people working in prestigious companies seem to be targeted by other prestigious companies. But the interesting divide to me is not upper bound/lower bound, but lower bound/middle bound. People who claim to be commanding impressive salaries while doing run-of-the mill, not particularly intense or specialized work at no name companies, but are talking about median salaries above what any roles I've ever seen is willing to offer. These aren't even in high CoL cities all the time, but the numbers I could likely get cap out at least a few dozen thousand below the quoted median salaries without moving into management.

The problem of course, is when you're in the lower "classes" and want to move up. Especially at the experienced level, where you're expected in more desirable roles to have experience with X or Y, but the roles in your past never could have given you the exposure to that. The typical move seems to be to grind leetcode and pray you can get an offer through some avenue or another, but most people agree cold-applications are a waste of time, and the sort of recruiters you need are not the ones reaching out to you. Referrals seem to be the best shot here. Personally I never figured out networking. I've typically jumped more often and more quickly than my immediate colleagues, due to severe underpayment in my earliest years at places most people settle and become lifers.

I actually enjoy discussing things like this, so if it doesn't get buried by the hundreds of other comments, so please tell me why I'm wrong/right/etc. This was probably an very poor description as the idea is still rather abstract up in my head.


More demand -> increased prices for developer time. Greater costs / impact / scale of software development -> greater risk to the collective stakeholders. Greater risk -> more potential for reactionary measures to implement more stringent hiring / control mechanisms.

That's how you end up with many many interviews, lengthy code exercises, and huge opportunity costs for everyone involved.

Consequently the same pressures would apply to software project management procedures towards growing complexity, and less agency/autonomy.

Why does it seem like 'AGILE' often transforms into less of an idea of short feedback loops, context and communication and more into a bureaucratic control system? We implement control systems to reduce state space of unknowns / chaos and trade-off variance in favor of consistency. So if software in organizations is under high demand, increased cost, and greater risk it would also suggest likelihood of similar reactionary measures to implement control systems measures on software development as a whole.

Consequently the ever present trade-offs of exploration vs exploitation or global vs local maximum would also apply meaning the reactionary measure of increasing control and consistency has side effects counter to its very purpose: improving software capabilities. Instead of increasing stringency / consistency through process/procedure also increasing cost of interaction one would instead want to reduce cost of interaction, but also reduce costs of downsides upon hiring (e.g. contract to hire + tasks to prove but where acceptability of failure is present). This has the added benefit of not accidentally removing "exploration" from the equation allowing higher risk higher reward employees into the organization which reduces risk of overfitting and innovator dilemma problems.


I remember someone on HN said a few years ago that $500K a year was a CEO's salary in a midsize company in the midwest of the US. Now imagine how long it takes a CEO to find a new job.

My answer is that it is not in high demand at all. It is the news sites that tell these false stories for hype.

Top anybody interested, I setup a google form, completely anonymous, asking programmers their opinions on the interview process. I'm working towards building something better that is re-usable and makes life easier across the board.

https://docs.google.com/forms/d/e/1FAIpQLSc8neScWE0-gmc00u1s...

So far, based on the responses, I'm seeing trends like: side projects barely matter, wages can be used as leverage to find better jobs, companies investing in your career are really important, etc...

If I get enough data, I will post my results somewhere public and I will offer some packaged services to companies and developers alike that I think alleviates the issues we're currently seeing in the tech hiring process.


Why is it hard? Because Google ruined technical interviews with irrelevant trivia and excessively long interview loops.

For some reason a lot of the industry said "hey, if Google does that it must be right!" and they also started asking pointless trivia questions in very long loops.

But why stop there? Let's build out pointless trivia as a service, and assign a numerical score to represent your ability to perform pointless trivia outside the context of an interview.

I really think it's that simple. Tech interviews are broken and need to be drastically simplified. Candidates should be evaluated conversationally as humans and given the opportunity to learn on the job. It's a risky proposition in both directions, there's really no need for trivia, it doesn't prove anything (except act as a red flag for candidates).


I agree with most of what you say, especially about simplifying and shortening the process, but I'm not sure about:

>"It's a risky proposition in both directions"

It seems like the worst case for the developer is that they get paid for doing nothing useful for a while, then have to find another job. The worst case for the company is that they pay out a bunch of money, and dedicate a variety of resources, to someone who delays a (hopefully non-vital) project. This is not a symmetrical proposition.


> they get paid for doing nothing useful for a while, then have to find another job.

That's true, but if they took advantage and get fired then they would have poor references and a spotty employment history, which will negatively affect getting another job (and would have been a factor in the hiring of the current role). So in that way there is an incentive for the candidate to perform well in order to maintain their career, and they do risk that track record to some extent when taking on a new role. It sucks for both sides if things don't work out.


I think one imbalance in the industry is that software engineers require years of on the job training to be able to independently get things done. In medicine this is also the case which is why doctors have to go through a residency. Junior engineers are kind of like hiring a resident and asking them for medical advice -- it'll work in a pinch but you really want to have at least one doctor in the room when making important decisions. This is also reflected in the salary. If companies understood this and gave juniors much bigger raises (really an annual market adjustment) there would be far less turnover and interview time wasting in the industry.

At one point I was working in the gaming industry and really wanted out. I was talking to a hiring consultant and asked if it'd be helpful to give my notice now so I could be available for an interview at the drop of a hat... to which they responded "Hell no, not only will you put yourself at financial risk - it'll likely take you longer to find a new job." I've been unemployed and snapped up for a job before - but it was that gaming job and I wanted to hop over to a place that offered a better work-life balance.

It's been my personal anecdotal observation (enough qualifiers yet?) that unemployed folks are similar to the last pear in the supermarket. Sure, that pear might look fine and be perfectly ripe - but two hundred people picked two hundred pears from a pile... and no one picked that one. When you are unemployed and looking for work I suspect you end up getting rejected by a number of places out of hand since, while there's no solid evidence proving it, you might have something wrong with you as an employee since no one is currently employing you. Once you've landed a position - especially if your LinkedIn shows several title bumps during your tenure - all the vultures salivate over how likely it is that you're a high value employee.

With engineering in particular, solid reliable team-players are worth their weight in gold, and, from the outside, there is a strong perception of vast differences in employee skills that I think is mostly driven by the extreme wage disparities we can observe "Sure I've got Sharon and they're a really solid developer - but I only pay them 45k, those hackers in SV make 250k plus bonuses. I can only imagine how amazing they are!" I think this is somewhat further entrenched by the extreme role experience with similar problems plays - and the really deep levels of specialization we have in our industry. Database specialists are absolute wizards when it comes to database stuff and can resolve problems in a fraction of the time someone who's never touched a DB would[1] - and yet both of those developers might be employed as full stack developers. Engineering is really complicated and our field has yet to fracture as much as it really ought to into specialization - so the majority of folks dip their toes into a lot of different pools.

This is totally based on opinion and personal experience but I think that specialization is what really makes it hard to "break in" to engineering - and that specialization makes overcoming the unemployed stigma even harder than in other fields.

1. This isn't an insult to the other developer btw - it's just a lack of experience and possibly a pre-disposition. There are plenty of people who are wizards with a database that will just fumble like they've never seen a lego before if given a ticket to resolve having to do with ops - or systems programming.


Looking seriously for the first time in a few years and it's shocking how much worse the process has gotten.

I did a technical, live coding screen for 45 minutes. It went well enough that they were interested in moving forward. 4, one hour long technical interviews and another hour with management, all spread out over the course of a day. I'm already working full time with a family and I'm expected to burn through an entire day of PTO? And to add to it there was no response as to what would be covered during these 4 separate technical interviews.

What's really maddening is that it's our fellow software engineers that are doing this to us. We're the ones that think it's okay to do "take home assignments" and essentially work for free. We know how awkward and stressful live coding exercises are but yet we do them. We value our time and work/life balance but yet think it's okay for every candidate to go through 3+ hours of interviews.

The one thing that's helped keep me sane through all of this was having watched Jem Young's Frontendmasters course "Interviewing for Front-End Engineers".


Personal advice from going on and giving a total of at least a hundred job interviews in my years:

- no matter how desperate the situation, always treat an interview as a date -- you might meet some really interesting people, you might hear some interesting things, learn how different people think about problems. Or it might really suck and you can't wait to leave. This attitude works amazingly well. If you are happy to be there and talk, you'll have a good time, they'll have a good time, they'll like you, you win.

- always think about how would YOU interview yourself. What info is useful for you to interview someone for 30 minutes and make a decision. Shadow some interviews. Your literal job as an interviewer is to get an understanding of the candidate. If you know what they want to know, just focus every word on giving them that answer. Any interview I ran where everything I was gonna follow up the interviewer mentioned intentionally, I was like "wow, okay cool you really answered everything I wanted to know, let's move on" and those interviews are really the best with time to just chit chat and get to know the person. This is also useful for understanding why they ask you questions, asking clarifying questions to make sure that you understand what they're looking to get out of you. There's nothing worse than losing 5 minutes to someone talking about something completely pointless during a 30 minute interview. "Tell me about a time you failed." "Oh I have plenty of those, but are you looking for say a failure with my team, or a time I crashed production, or when a project got really late" doing such a prompt instantly makes the question easier for you AND makes you look 100x better.

- coding is a tricky one. 90% of the companies want you to code an okay solution, but they mainly want to see how you _think_. Like who cares if I can sort a billion numbers in memory in O(1) time, write a paper and move on with life, if I can't explain it to anyone I am useless to the team. Code out loud, just slowly solve whatever problem, and talk about the problems you're trying to tackle, what is important, what is not. If you mumble make sure to create "okay, I have a solution, I can walk you through it" because mumbling = they disengage. If you explain your strategy, it makes you look better AND if your strategy is flawed, the interviewer will often help or prompt "I really want to help but this is what I really want you to solve" and now their cards are on the table, you know what they want (see previous point).

- learn to whiteboard at least a bit. You need to be able to explain your thoughts to other engineers. Sometimes pulling out a whiteboard is an amazing way to do it. Yeah its cliche but it really is a practical skill.

- If the interview requires you to solve a complex mathematical problem perfectly on the spot or get out, you're either interviewing for FAANG (and have studied for a month or 3) or you probably don't wanna work there.


I interview candidates regularly.

Most engineers need no more than half a dozen interviews to get couple of options to choose from.

Unfortunately, there is population that grossly overestimate their ability, don't prepare effectively at all and take as many interviews as they can thinking it is numbers game. Then blame "broken system".

It reminds me when I went for exam for driver's licence. There was a group of people complaining at the examiner and broken system after one person failed their 27th attempt due to some "silly" problem like almost running a pedestrian. I had fun noting they already all know each other and then I passed on the first try.

The people who complain the loudest are mostly ones like that. Clueless about what they are doing wrong, not willing to honestly retrospect and evaluate their situation, learn from mistakes.

This is their modus operandi. If you always try to find external cause of your problem where a lot of other people clearly succeed, there is a systemic problem with you that prevents you from effectively learning anything.

If this is you, I don't want to work with you. I want people who if they encounter same failure over and over again will eventually stop to think what they are doing wrong. Or who will not start by blaming compiler for their broken code (I had a coworker like that - total disaster).

The first step to solving a problem is admitting there is a problem.

The whiteboard problems we give are nothing out of ordinary. Unfortunately, they are also biggest filter as a lot of candidates who seem to know basics of Java can't write a simple function to specification. I understand some are due to stress even though I try as much as possible to relieve stress, give hints, etc. My boss once tried to listen to popular "advice" and get rid of whiteboard tasks. The next two hires were total loss and we had to fire them within 6 months. We are again giving whiteboard problems.


While I agree with you that theres a few like that, you have forgotten about the candidates that genuinely don't want to spend their spare time grinding leetcode.

I worked at facebook, when I started looking for a new job, I had to start grinding leetcode again to prepare for a new job. Take a step back and realise how ridiculous this is.

Big companies that have prestiege and pay alot of money use it to eliminate false positives, not to actually recognise true positives. If your at a big company that can afford to throw away many true postives, sure use leetcode, but the rest are hurting themselfs by blinding following the mantra of FANG.


If you can't readily demonstrate ability to write a simple function but insist on getting hired as a developer you are, by definition, overestimating your ability as software developer, because you can't code.

If you need to grind to be able to write code you are doing something wrong. Like spending too much time at work copying code from stack exchange or relying on running your code to tell you if it is correct.


Grinding leetcode != software engineering. That is my entire point, not sure why you're confused.

Why do you assume it is I who are confused?

Never had to "grind" to get any software development job I wanted even though I am always expected to demonstrate my coding ability.

Actually, I wouldn't let myself be hired by a company that does not verify if their candidates can code. Too much of a drag working with people who can't pull their weight.


> Never had to "grind" to get any software development job I wanted even though I am always expected to demonstrate my coding ability.

Good for you. Either you are quite gifted or you're not talking about interviews in FAANG or other similar companies like Doordash, Instacart etc. but rather other "easier" SF startups.

I think you seem to be assuming two things: 1. Most interview questions are intuitive and one should be able to organically come to an efficient solution within 40 mins without any prior practice. 2. Anyone who can't do that, is not worthy of being a software engineer

In my experience, both those assertions are false. If you look at the difficulty of questions companies are asking, I can assure you that no reasonable software engineer (unless they do competitive programming as a hobby) would be able to solve them. On the other hand, even a mediocre engineer who has been "grinding" on Leetcode will have a far better chance on solving them since they have seen them before. In short your prep of interview

At this point, it appears to me that the companies know that Leetcode exists and that their questions end up there and they still ask the questions marked as "hard" since most serious candidates would have already prepared for the "medium" ones.


If the exercise requires some kind of leap then it is a bad task for interview. For example: "please, implement A-star". On the other hand, better task is one that removes unnecessary leaps: "given this description of A-star, please, implement it". Which is what I try to do when I prepare tasks.

After all what I want to learn is how a person approaches implementing something and not whether they have good enough memory and luck.

If those FAANG companies do something else, it is their problem. There are so many companies you don't absolutely have to work for them.

The only reason they can get away with this is exactly because a lot of developers think either FAANG or bust.


Software developers are like studio musicians. In software hiring, we evaluate them as if they're stage musicians. Now clearly a lot of stage musicians can do good work in a studio, but you're throwing a way a lot of talent by doing this. And if you're competing with FANG, this might not be a sustainable thing to do.

I feel like a crazy person but this comes up so often and it seems to me like the answer has never changed? We don't have a lack of software engineers, we have a lack of qualified/competent software engineers. If it's difficult for someone to get a job in that area, there is at least some likelihood that they don't happen to be in the category of folks that are in demand.

I think hiring processes fail when they tro to do the impossible: predict future performance of a candidate. And many processes do this. You need to be okay with some risk - so thankfully there are high-growth startups that hire less discriminately in order to scale (though of course this comes with other trade offs).

Interviewing is a numbers game. A large percentage of interviewers are incompetent and/or more interested in showing off than hiring. So keep rolling the dice until the stars align in your favour.

The interviewers want to prove how much more they know, as compared to the candidate. Or worse, they have one optimal solution in mind and anything else is a square peg / round hole.

Ageism is also a factor with some age cohorts preferring to hire within their age groups who play with their cohort's favorite tech-stacks.

A badly behaved interviewer - arrogant, rushed for time and treating the interview as a nuisance, egoistic - all of these make it harder for candidates to get a job.

Data point of one: I have faced the worst lot of interviewers in startups and Unicorns, and have had the best-behaved and reasonable folks in FAANG companies.


if you are interviewing with a global company you also have to realize you are competing against potentially cheaper regions. If two candidates are anywhere close to similar levels, it may be that one candidate can be hired for drastically less money due to region. If you are living in a generally expensive region, this may be affecting you.

In Sweden it has never been hard getting a job as a developer, as far as I know. I have never had to do gruesome coding tests. Just very small ones. Say, finding syntax errors in a page of C++.

Having recently retired, I suspect I’m a bit older than most of the people here. I began my career in the early 80’s as an entry level developer at a large company. Eventually, I chased the money into management. In those days, we tended to hire talented, motivated individuals. As time went on and the Internet became more prevalent, everyone who had ever built a family website in FrontPage was marketing themselves as programmers. As the Internet matured, the diversity of technologies proliferated. Now senior management was telling those of us in the middle ranks to hire specific skill sets, e.g. Rails. The problem was such resources tended to be scarce and expensive. And even graduates of boot camps and weekend warriors who had crunched through a couple of Dietel & Dietel or OReilly books thought they should be paid $100k+, regardless of experience or the local market. Enter the off shore providers: Infosys, Cognizant, et al. They offered senior management what they sought - specific skill sets at bargain basement prices. And senior management at many commercial firms went all in on the offshore/outsourced model. Disney is one of the most egregious examples. Up until the last two years of my career which were spent working at a startup, I was in management at a large Fortune 100 company. This company spent 9 figures, never delivered a product, and eventually sold off the division. At one point, we had 100’s of offshore developers. In the startup, we dealt with the same issues. Senior managers often read literature targeted to their level, i.e. marketing. Hence, micro services and the cloud were the big thing when I retired. At our startup, neither was necessary for the market size and scale that we were targeting. We hired a younger architect who had the lingo nailed and told the CIO what he wanted to hear. Finally, they bought me out and I retired. They still haven’t brought the product to market, now 18 months after my departure. So, at least here in the States, we have an expectations problem and a lack of engineering discipline. Is the technology proposal appropriate to the opportunity/problem? Often, it’s not and the failures are costly and all too frequent. Retirement looks better each day.

It’s because they pay you a ton of money so they want to feel like they didn’t make a mistake

software engineering is decades behind other engineering disciplines; it's in the phase of elixirs, etc; that's why it's "so hard" because the industry is optimized around various insular self-reinforcing patterns; like recruiting practices in the movie Moneyball;

Legal | privacy