Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Would you pass an interview for your current position?
151 points by NKosmatos on Jan 6, 2022 | hide | past | favorite | 238 comments
Hello fellow HN users.

Is it my idea or are interviews more harder nowadays? If you had to take a technical interview for your current position would you be able to pass it and get the job?

If you were the one doing the interview, would you be strict and request more things so as to filter out candidates? It’s understandable because somehow you need to find the best ones for a given position, but there are some soft skills that C/Java/Python interview problems can’t identify.

I’m asking because I’ve seen many interesting positions in which I could imagine myself into (having ~20 years experience in telecoms/soft engineering), but the entry requirements with regards to programming languages are set too high.

What are your experiences?




I am still feel pissed about an interview for a job I think I'd have fit in superbly. It would have been fun, and productive. If not for the hackerrank quiz they threw in the front filled with irrelevant puzzles that needed solving under time pressure. I don't have time to spend or willingness to "train" on such puzzles for the purpose of getting a job. I am sure if I had a chance to talk to the team or the engineers, it would have been effective. This bitter experience only amplified my hate for such tests even more. The job I'm at currently, gave me a practical task(similar to the ones I would be doing on the job) and a few days to submit the results/notes of. It was so much more pleasant to walk into a tech interview with such work and have a nice chat about practical technical stuff instead of stupid puzzles.


Yeah this is the super unfortunate state of engineering today. I literally cannot bring myself to study puzzles when I could spend my time pursuing some interesting open source work.

Consequently, I have a lot of successful open source work, but most companies still don’t care and fail me for lack of fake puzzle quiz skills.

It’s utterly baffling to me that companies don’t want creative employees that build successful products out in front of everyone. Where you have a clear view of all their interactions and code.

I’ve tried to change this thinking at my current company and the consensus was it would be biased. Biased?! Code quizzes are highly biased! I’m producing useful functionality to the world!

I believe this and transparency are the new remote work. Some companies will get it early and for others it will take a major upheaval to get them to a place of reasonableness.


I actually enjoy those puzzles, but agree that they are irrelevant to the work. In fact, the very few times they are relevant is something of a special occasion! "Hey look, I have to design a slightly novel algorithm!" Most of the job is, of course, figuring out why things went wrong, based on imperfect evidence, which requires a good mental model of the entire system plus the ability to make changes to test and eliminate hypotheses. Very few, if any, technical interviews capture the essence of this act.


Even more rare "Hey look, I have to design a slightly novel algorithm in 30 minutes while babbling the whole time!"


For someone who can't even get an interview, but loves working on oss, this is highly discouraging...

I already have to be so focused with what little time I have in my life, and sacrifice a lot, to just make the things I want to make, I just can't imagine finding all the time to do this meta work/training.

Every day I grow more comfortable with the idea that my love of software dev and oss will forever be avocational. Perhaps though, financial instability aside, I'll be happier this way anyway


I'm not sure why you aren't getting interviews, but I've had multiple coding jobs in the past where the interviews had little to no technical quizzing at all. Don't get too discouraged, there's probably a match out there for you, maybe just not at a FAANG or one of those super competitive companies (which, quite honestly, I wouldn't want to work for anyway--but it's personal preference).

You can always move onto a more competitive company later once your resume has some solid experience on it, if that's your cup of tea.


I have over 20 years experience, and I've worked for some major companies. I went through a year of interviews with those stupid quizzes.

Needless to say, I got nothing from it. A couple places I was perfect for the job, but I couldn't spit out elegant quiz code on demand from memory. Sorry folks, head injuries f with your memory. I'll always look shit up so I get it right.


I am not sure either, but its been a few years at this point. I have no desire to work for a FAANG company, or to make even relatively good money, I do try to apply to the smaller places. No need to recite all the hiring tips though, I know them all! Think it's just a combination of bad luck and lack of relevant education (I have an MA, but it's in humanities).

That is encouraging though that not all interviews are like this! I have projected so much into the fantasy of getting a tech interview without ever having one, its easy for me to be swayed one way or another.


I think the big relevation would be that these are not “puzzles”… there’s about 10 algorithms that if you learn you can solve the problems pretty easily. Make sure you keep reviewing the 10ish main algorithms.

Example:

Breadth first search

Recursion

Binary Tree

Etc.

Then it’s more a classification problem.


if you ever did an interview a at one of (Facebook,Apple,Google, Microsoft..) you know this is not true.

They definitely are asking puzzle question that an university teacher teaching algorithm would fail. And the only way to is practice stupid question on leetcode


He's partially right. There's a lot of pattern matching involved. Like he describes, there are several broad patterns. But then there are sub-patterns upon sub-patterns. You need to be able to recognize these when the interviewer throws a problem at you.

You grind leetcode problems over and over so that you can better recognize these patterns and know when to apply their associated solutions.

The most idealistic scenario is you get a problem you've recently practiced verbatim. Then you just put on an act like you've never seen it before in your life.

But if you get a problem that you can match to a pattern you've practiced, then you're still mostly in a good place.


I work at FAANG - my take is, all questions can be solved based on these 10-15 data structures / algorithms. They are just gift wrapped with a lot of fluff, but underlying each of them is one or a combination of one of these data structures / algos.

As an aside, to everyone who has asked me how to get into FAANG - I always say you should be able to code DFS/BFS in your sleep like your life depends on it. 1/5 questions is surely going to be a tree/graph search.


How many people are in your company?


> The job I'm at currently, gave me a practical task(similar to the ones I would be doing on the job) and a few days to submit the results/notes of.

Take-homes get a lot of criticism on HN, but in my experience they're superior for all the reasons you mentioned.

I don't actually see pushback against take-home problems in the real world, mostly just online. When given the choice, most people would prefer a practical take-home over a whiteboard style interview.


It depends on the procedure, somewhat.

For example, it's very tempting for a company to send out tests before doing much resume screening. Why should I spend 30 seconds looking at a resume when I could have the candidate spend an hour on a test, and save myself 30 seconds?

Or what if I set a take-home test which is supposed to take 1 hour, but also supposed to really to stretch candidates' ability and give the best candidates a chance to shine? Probably a lot of average candidates will give themselves a bit of extra time - and before you know it, I'm sending a "1 hour" test that takes an average of 4 hours.

Take-home tests are a lot less objectionable if you can properly guard against these problems.


I definitely agree that the second issue is tricky to get right.

But for your first point, that wouldn't seem to make much sense given the time investment from the company as well. It takes time to review take home tests, much more time than it takes to review a resume or even for a recruiter to have a quick phone call with the candidate. So why would they send out a test to someone first?

I've usually seen something more like this, which I think generally works fairly well:

1. Initial resume screening 2. Quick phone call with the recruiter 3. Usually some kind of technical call/interview with developer(s), engineering manager or similar, at the very least some discussion of experience and background 4. Send out the test, review it, call the candidate back in to discuss if they want to 5. Probably some other stage at the end


Home tests can be scored automatically with test cases.


HN people seem to line up 20 interviews and spend a week doing them. Take homes are untenable in that situation as half the interviews would still be a full workweek. I soured heavily on take homes during an active job search phase as I was already interviewing 4 hours a day with 3-6 people. I had a pile of companies, would accept any of them on the surface, and it was just a matter of grabbing one.

Many interview at a much less aggressive pace than that and I would prefer a take home when I am out of leetcode practice.


> HN people seem to line up 20 interviews and spend a week doing them.

Having mentored a lot of college grads and also interviewed a lot of candidates, it's actually extremely rare for people to line up a huge number of interviews in a single week. It can be done if you really, really treat it as a numbers game, but it's not how most people do it.

> Take homes are untenable in that situation as half the interviews would still be a full workweek

Take homes shouldn't be taking a full workweek.

If anything, take-homes make it easier to stack a lot of interviews because you can do them at your leisure in your own time.

> I was already interviewing 4 hours a day with 3-6 people

I think this is the disconnect: You're taking time off of work for live interviews, but take-homes come out of "extra" time. If you're interviewing full time, a take-home is still more flexible than a live interview.


Here's the thing: take home assignments typically come near the beginning of an interview process, even before one progresses to an on-site (or equivalent). Understandably, very few companies give a take home in place of the entire on-site. But, a take home generally doesn't get you out of any part of the 4-6 hour dog and pony show. Which would you rather do: 30 minute recruiter chat + 60 minute technical phone screen with a human + 4-6 hour on-site, or the same process with a "1 hour" take home that actually ends up taking 4 hours in place of the technical phone screen?

Incidentally, I have the same criticism of TripleByte. Sure, they get you on-site with companies faster, but their process takes a significant number of hours (essentially equivalent to its own on-site), and it doesn't get you out of any part of the prospective employer's on-site.


This too. I have been ghosted on way too many take home assignments.


Same here. I did a take home that took 6 hours. Sent it in and then a few minutes later received a rejection. I'll never do that again. I now reject any take homes that will take more than 90 minutes. That's by my estimation - not the company's - I've seen many companies way underestimate the time it should take which is a sign that they've never had their own employees try it.

Take homes are bad because the time investment is asymmetrical. A company can just say to everyone who applies to do the take home test because there's really no investment on their part. At least with an interview, you know the company is investing an equal amount of time into the process.

Triplebyte used to be helpful because it did allow you to skip the initial phone screen but that doesn't seem to be the case much anymore.


> Having mentored a lot of college grads and also interviewed a lot of candidates, it's actually extremely rare for people to line up a huge number of interviews in a single week. It can be done if you really, really treat it as a numbers game, but it's not how most people do it.

What people need to remember is that there's a very real pecking order. Everyone will do Google's take-home but the local business paying local CoL/Prevailing wages? By the time some get to their take home, the A players are already landing in SFO for their final rounds.

The people that are the most hirable won't have time to do 20 interviews, they'll get offers almost right away.

> I think this is the disconnect: You're taking time off of work for live interviews, but take-homes come out of "extra" time. If you're interviewing full time, a take-home is still more flexible than a live interview.

The thing is, with a live interview it's one hour of their time for one hour of mine. With a take-home, it could be 4 hours of mine and... ten minute for them to look at the code and run a test suite on it. So as a rule of thumb, I always suggest favoring live interviews (they are investing more time therefore they place a higher value on the potential hire).


Oh, take homes are fine without the interviewing numbers game. They just break when you do that.

Many of the take homes I encountered also had rapid turnarounds. I would have 48 hours from Tuesday afternoon. A couple of times I was up at 3 in the morning as I had two of them due and had to abandon one of them as I just couldn't stay awake longer.

In hindsight, I should have realized the folly of that earlier, but I was eager to get as many paths going as possible.


My favorite (and only) take home interview assignment. >> here is the problem, research as much as you want however you want, and take as long as you want... when you are done please format it as a 'xyz-ide' project on github and we'll get back to you in a day.


I hate this and find this just as academic and problematic as the whiteboard and quiz styles. Success in software development is about making the right trade offs to deliver while saving cost (ie your time). When you leave it so open an abstract, the dev looses the ability to discern this. "Production" standards are entirely based on context of the project and very specific requirements. Do you need structure logging, or rate limiting, or error handling, or notifications, or system status ect.. With do you already have systems in place to integrate these. Do you need a custom solution (like your own lambda engine) or do the off the shelve solutions (like aws lambda) meet the requirements.


> HN people seem to line up 20 interviews and spend a week doing them.

Somehow they also seem to get all their offers around the same time to leverage them against each other.


Well, this is a function of lining up so many. Apply for 50, get interviews at 30, you end up with maybe 1 in 3 have aligning timelines, pass 1 in 3 of those, and you have 3 offers to choose from at the same time before they explode.


Lol. Offers don't really explode on timelines less than a few weeks. If you get pressure from a company to accept their offer in less than a week or 2, that's a red flag, especially if they want you to start right now.


Ah, interesting. I admit that I am often a schmuck that takes contracts at face value. I have always had it be 24-72 hours. I have even been asked if I would accept an offer immediately (without knowing the salary range or whether I would get permanent remote).


> HN people seem to line up 20 interviews and spend a week doing them

source?


The last time I did more than 2 interviews during a job search was 1999.


I assume you are typically hired through network?


Actually, the opposite. Always cold.

Edit: Oops, sorry, that's not true. 2002 was network. Everything since has been cold.


The best process I went through was for a job I didn't get, but had me do a take home project that took about 4 hrs and they gave me a $300 USD amazon gift card. The biggest problem is it has really limited my tolerance for a lot of BS interview requests that previously I might have considered.


time limits put an upper bound on how long youre spending on it which is good for a lot of people. ive given take home tests and some people clearly put more time on it than we expected.

as an applicant, ive refused takehomes that were auto-sent on receiving the application, but if its after a phone call with the hiring manager or engineer its not so bad. but then, i did end up having to defend why i didnt do a bunch of parts ancillary to the assignment - 'why didnt you build a config loading system?' 'uh cause i timeboxed it and that gives you fairly little signal compared to the business logic'


Yes. There is no silver bullet for this problem. However, interview goes both ways. Hiring team to judge a candidate and the candidate judging whether to go through the process and want to work there.

When I went through the job search, I did close out a few applications because I found out I wasn't too interested in their description of the role (after a conversation with more details than that was in the job posting), or simply if their screening process wasn't worth my time. The one I lamented about pass through those interest tests as the job genuinely fascinated me.


It really depends on what you are given.

A take home that is 1-2 hours (what might be the length of an in person) is fine.

A take home that is 10 hours of work on the other hand


Yeah, even when you are unemployed a 10 hour take-home is a bit abusive. I had to bow out on one take home that would have cost me actual money to set up a development environment with all the ancillary software, plus the three separate programs in three different languages. LOL, no, I'm not going to spend cash on AWS to set up a dev cluster with paid software.


The two biggest problems with takehomes:

1. They do not scale horizontally. You do a takehome and get rejected, then your effort has become worthless when applying to other companies. Versus grinding leetcode - it scales across a huge breadth of many different companies.

2. Often times a takehome is not. instead of an leetcode interview. It's in addition to the leetcode interview. So you end up needing to practice leetcode anyways. Now you just have more work to do - work that doesn't horizontally scale.


I have to chime in with an anedoctal. Chainalaysis, a unicorn blockchain company, was giving take home assignments a few months ago for new grad positions. Seems like enough people refused and they have now switched to a 45 min timed camera on HireVue


There is evidence that traditional software engineering interviews[1] assess a candidate's ability to perform under pressure better than their ability to do the job. I find it crazy that you need to spend weeks studying leetcode-style problems after doing the job all day in order to prepare for an interview.

Coincidentally, I've started working on a product to help this[2]. The general idea is that tasks like pull-requests, bug fixes and realistic take home projects are a better way to test candidates. Everything is done using Github, the tasks are all realistic and candidates can use their own laptop and development environment. It's not fully ready yet, but if anybody wants to chat about it just use the info@ address for the site.

[1] https://www.sciencedaily.com/releases/2020/07/200714101228.h... [2] https://devscreen.io/


If you can capture the candidates ability to setup a BTD (build-test-debug) loop, their ability to find and fix bugs, and that they know enough tooling to get it into production (and troubleshoot deployment), then you have successfully checked 80% of the job requirements for...almost every programming job out there.


I'm lost on the "tooling to get it to deployment" test idea. Deployment seems both company (and industry) specific and trivially easy to learn compared to programming skills.


Great! Today you learned something new: sometimes software deployment is complicated! Get more experience, and you'll find less trivial deployments. "Trivial deployment" is the goal of many systems, and is rarely met.


I never said deployments were trivial. I said they were trivial compared to programming skills. And I also said they are both industry and company specific.

Expecting a random hire to already be familiar with your deployment process and tools seems very strange. I've done deployments in many situations and, well, I wish there was an industry standard. But as you point out there are many conflicting tools and using them is never turnkey.


They are industry and company specific, but so is any concrete problem you'd ask anyone to work on. They don't t need to be familiar your specific tools, but they need to be familiar with why they exist and be able to do something similar on their own if needed. Even at a place like Google, where deployment is extremely mature, it's still important to know what's needed to roll your own. As you say, these things are never turnkey.


That paper has been widely misunderstood in these discussions. Both groups were given the same whiteboarding questions. The only difference was whether the interviewer was in the room.


Having the interviewer in the room clearly creates a higher pressure situation.


Sure. But the study does not conclude that coding-challenge interviews are what tests for anxiety management. It only speaks to the effect of having the interviewer be present. But people cite this paper as though it makes an argument against coding-challenge interviews as a whole.


Is the interviewer typically in the room or no when doing a Leetcode whiteboard interview?


Typically yes.

But if a company did leetcode questions without the interviewer in the room, I find it exceedingly unlikely that people would shout "Interviewing has been saved! It now tests skill rather than anxiety!" As such, the conclusions of this paper don't seem especially relevant to the discussion about interviewing processes.


Well, it seems like either you don't understand the concept of incremental improvement, or you're being deliberately obtuse. Taking a good portion of the anxiety out of the situation can only help, right? I don't think anybody is pointing at this paper and saying "if we do this one thing, then interviewing is fixed," except people who are looking for a straw man, do you?


This is cool!


Having been on both sides of interviewing, I find that the majority of complaints about the status quo seems to come from people that haven't been involved in the interviewer side that much and consequently simply put forward their personal preference (e.g. some people downthread saying they prefer take home, and then subsequently being countered that take homes aren't ideal for various types of candidates)

No offense to anyone, but it strikes me a little bit as armchair expert hot takes saying "why not just X". Personally I think that rather than complaining about leetcode-style loops, it'd be more productive to think in terms of what the problem domain is: namely, many of these companies are typically large and want some level of standardization in the hiring process: you have to contend with things like some ethnicities being culturally prone to "hiring down" to inflate subordinate count, talk-the-talk-but-dont-walk-the-walk types, thinly disguised sexism/ageism/other biases that are excused under the "cultural fit" umbrella, mismatch in terms of desire to provide technical interviewing skills vs volume of candidates, etc. It's easy to attack any one methodology simply because if such a thing as a silver bullet existed, we'd all already be using it. All interview methodologies are flawed, and for better or worse, leetcode-style happens to predominate interview loops because it has a semblance of standardization (though ironically, IMHO a good interviewer ought to be looking between the lines more than seeking specific answers, and a lot of leetcode-style interviewers don't get that nuance)

If anything, my two cents is that leetcode ain't going anywhere, so the next best thing we should be focusing on is making it more widespread that memorization culture isn't and shouldn't be the evaluation criteria (this goes both for the interviewer and interviewee sides)


As a counter-example, I've been on the hiring side many, many, many, many times, more times than I can count, and I despise leetcode-style tests as much as or more than anyone.

I've been doing this long enough to know that the things that matter in every job at every company are almost never technical ability. It's skill in managing deadlines, collecting requirements and dealing with changes, divvying up work with teammates, things like that. Things that are difficult to test for, even on a whiteboard.

Asking questions about experiences and posing hypotheticals to see what gets candidates interested, or what stories they have to tell, these have been a better predictor of eventual success in my experience than any sort of technical test.


> Things that are difficult to test for, even on a whiteboard

Agreed 100%! I'd love to explore scalable ways to test for these. I've heard of people in smaller companies who get lots of success with non-leetcode style interviews because they can either have full control over the interview cycle (e.g. a hands-on CTO) or a still tight-knit "rock star" team that "gets it", but the challenge is that you end up getting a huge amount of variability as a company scales to hundreds or thousands of software engineers and things like rush hiring to meet deadlines start to enter the picture.

I like to start my interviews asking people about recent work experience and surprisingly that has been a pretty good indicator of how well they'll do in the technical portion. It's still a bit challenging to evaluate because experience doesn't necessarily correlate with potential. I've had a number of candidates whose description of past day-to-day work was nothing to write home about, but you can see their growth potential by really reading between the lines.

Posing hypotheticals is actually relatively standard practice at big tech: it's called the system design session. IMHO, you can get a lot of good signal from these if you do it right.


The approach we took at my aforementioned $BIG_CO_EMPLOYER was to have multiple interview teams, each focused on particular aspects. e.g.,

- generic HR chit-chat. Our HR rep was really good at uncovering personality problems (and she was used to dealing with devs :-). Every single person she raised a red flag about also had issues somewhere else in the process and we learned to trust her instincts.

- What did you do at your last job and what did you like/hate about it? What code were you most proud of? If I asked you to design a system to do X, what would you need to know, what would you be concerned about?

- Basic SE theory: what do you know about SOLID?, what are some concerns when dealing with shared data in a multithreaded design, etc.?

- Programming/design exercise with the interviewer as a co-worker/resource. Done on whiteboard, or sheets of paper or whatever candidate is comfortable with. Code does not have to compile, no online access allowed.

There were scripted questions at each level (except HR) and the interviewer keeps notes on the candidate response. OK to dive deeper or go off on tangents as needed. At the end of the day, or worst case first thing the next day (so the interview is still fresh in everyone's mind) we'd meet to compare notes & vote thumbs up/down.


This is why the last large organization I worked (at least my group!) settled on pair exercises.

We had a known problem set that all candidates had to work and this consistency kept HR happy (although it was an uphill battle to convince HR that it wasn't a "test"). The problem was sized so it would be just barely possible to complete the entire thing in 45 minutes. In fact, I think in all the years we did it, only two people every completed the exercise, and one of those we suspect knew about it ahead of time.

However, the problem wasn't a blind "do this on a whiteboard" exercise. We didn't really care whether or not they finished: rather we wanted to see the process they took, the clarifying questions they asked, where they got stuck, how they asked for help, etc.

The candidate could choose to work in complete silence, or work with the interviewer as a team exercise, or a mix of both. The point of the exercise was to see if they could (a) program their way out of a wet paper bag and (b) do so in a way that didn't completely alienate the people they would have to work with. Leetcode? Obscure algorithms? We couldn't care less.

It was surprisingly effective.


Most, if not all, software engineering roles are highly specialized above and beyond general computer science. I think a lot of complaints about interviewing practices stem from candidates feeling their prior experience, which is directly relevant to the position they applied for, is being ignored and replaced with questions about arcane puzzles.


I think even those on the interviewer side acknowledge that leetcode style questions aren't perfect. I think the biggest misconception is the idea that memorizing the puzzle itself is the hiring criteria, when in reality it's supposed to be thought of as a more elaborate version of fizz buzz. For example, inverting a binary tree isn't about binary trees or data structures, it's more meant to be about whether you understand recursion. It can tie into signals about ability to break down problems into smaller pieces, understanding of memory layout (a proxy for understanding of low level concerns), etc.

Ideally one should not need to check an entire barrage of checkboxes perfectly, but enough in some dimension to "prove" they aren't completely clueless about programming, and also not raise a bunch of red flags (e.g. if you tell me you have 10 years Java experience and then struggle with class syntax, that's obviously going to look bad).

Ideally there are peripheral questions where one gets the opportunity to display well-roundedness (I like to ask about testing in an open ended fashion, for example).

Ideally, an interviewer org ought to take a bit of effort to cater questions to roles/stacks more appropriately. Web folks tends to do this well IME.

Unfortunately, many interviewers take coding/algo sessions as an opportunity to do a pissing contest either because they haven't been trained/prepared well or because of some dumb sense that company brand is somehow related to their personal worth or whatever, hence the bad rep.


> some ethnicities being culturally prone to "hiring down" to inflate subordinate count

Sorry, what? Which ethnicities are these?


You know... those ethnicities. The ones with the culture apparently focused around selfishness and power-seeking...

I think answers like the parent are why Google started doing "googliness" interviews.


Been on the hiring side a lot actually! I prefer to have conversations with people and hire primarily off OSS, it works really great


Memoization > Memorization


Perhaps personal memoization is a topology on personal memorization?


I made a bad dynamic programming joke.


I got one of these as the second step for a senior engineering manager position. I had the luxury of telling them there was an obvious disconnect in terms of what we felt was valuable and required to be a good leader, and cancelled the process. No response from them until 3 months later I got an email saying they were moving forward with a different candidate and asking me to rate their interview process!

This is the redacted exchange:

Hi [PeopleOps], I started the assessment and was very disappointed to the point where I didn't complete it. I've been an Engineering Manager for about three years and still have a lot to learn, but I've never encountered anything that looks like a set of brain teaser puzzles & psychometric analysis similar to this test. I have to interpret this a huge mismatch between how [Company Name] defines the best skills and aptitudes for the role and my own, so I'm going to withdraw from the process. I can't imagine a lot of candidates are prepared to jump through these sort of hoops but that's just my single perspective.

MONTHS LATER

Thanks for the time earlier this week.

I wanted to give you a heads up as to where we are at in our Sr. Engineering Manager hiring. We had an Engineering manager join us earlier this week and as of right now, we're ok on the hiring front.

I'd love it if you could provide us some feedback on the process as we're always looking to improve. Here's a link to a very brief survey that would really help us out. Thanks!


One of the things I've come to enjoy about becoming a more senior engineer is how the interview flow has changed over time. Now that I've interviewed lots of people myself, I understand the person on the other side of the desk a lot better and I feel it's a far more balanced relationship.

The issues that candidate employers are concerned about are (should be) more along higher level constructs such as ensuring quality or how to decide on a new technology or platform. What's a really interesting bug you found -- where really interesting probably means it was a system level issue, not just some bad code.

The interview becomes a detailed discussion between peers who are each trying to understand if they want to work with the other.

If someone started out with leetcode crap I'd probably react exactly as you did.


I've only done one of those nasty psychometric tests once. I didn't get a call back . This wasn't a surprise since they screen out non-neurotypical people with tests that are biased against dyslexia, colorblindnesss, dyscalculia, dysgraphia, ADHD, autism, and sequelae of brain trauma like short term memory faults.


This. I've slung code in (now) 16 different languages from macros, to scripting to compiled over the last mumbleseveraldecadesmumble. But they throw btree sort hackerrank puzzles at me when I've been a working sysadmin for over 20 years, and never had algorithm courses for a BS degree? How about no. If I have to sort stuff, I use a built in function, and let the CS hardcore software engineers do the puzzle games.

I'm a script hack and sysadmin/SRE, not a software puzzle guru. I look up the syntax I need for the language I'm writing today. I may end up programming a different language next week, month or year. It's not worth the trouble memorizing the triviata of every language I ever used.

There are only so many ways to cast variables and write loops. Everything else is nomenclature and punctuation.

Ask me to address a system problem, don't give me a BS puzzle.


FWIW, every data structure / algo interview I've done allowed me to use built in functions for sorting (I work at FAANG).

In general, I dislike the interview process too, but there just isn't a better way to do these, as is clear from this large thread. If you look at it from the company's perspective, you have to conduct interviews at scale, and it can't hand off the same system problem to everyone.

You're being tested on your problem solving ability. It doesn't correlate directly to your job, but the general assumption is, if you can solve puzzles after studying for them, the chance that you can solve any random problem thrown at you is high.


> It would have been fun, and productive

How do you know this? The signal of them dumping you with some leetcode should be an indication that it wasn't meant to be?


Not necessarily. It just means that they weren't good at recruiting, they could still have a great team to work with.


It does tell you that the people working there practiced leetcode and puzzles in their free time (assuming they went through the same filter)


Hilariously not in many cases. One of my old jobs introduced leetcode, particularly trees for interviewing. Nobody currently there could solve those.

But a new engineer was assigned to handle interviewing and it was all about a couple of leetcode problems he found on the internet.


This. I interviewed with a company that I really wanted to work with, was overqualified for the job, and would have thrived in it...

The HR person was a complete dolt though, and didnt even understand how to interview me properly...

Sucks - I still respect the company, but their recruiting method was piss-poor..


How do you recruit a great team if they’re bad at recruiting?


If they put together most of the team another way, then it would be fine.

My prior company would have interns do leetcode and system design. Intermediates and up had some paired code writing and a far less formal system design discussion.

Most of the team might have been hired through a network and you only get leetcoded as an external unknown.


Where I work our team gets to review applications (pre-filtered) for candidates we are interested in. Those candidates are then given a general technical exercise. We get to review the results and ask follow up questions, but we basically get zero input into what kinds of questions are asked. I could 100% see a scenario where the people who manage the recruitment process replace that general exercise with some third-party online solution like hacker rank or whatever.


Parent commenter.

The job description was top notch. It was a clear description of what they needed this engineering role to do. Inspire of it being a bit of a niche, I had almost perfect set of experiences from my prior jobs that made it very interesting.

Fun because it would have given me an opportunity to _improve_ upon my already bootstrapped skills. Productive because, I already have a head start than another engineer getting into the groove of things. This is HN, I can be tech specific :-) I have worked a lot on performance from HPC perspective. The job was at a High Frequency Trading platform that needed a sys.engineer who would work on extracting performance with things like pinning a CPU core to a process and several optimisations at the OS and kernel that would shave off a few milliseconds in an already fast application.


It's even worse when you crush every other part of the process, including take homes, and then get blown out due to one idiotic contrived puzzle.


Keep in mind that even if the job would have been perfect for you, the company probably interviewed multiple people, and selected one that they thought would be more perfect for them.

I recently did a round of hiring for my team, and we had several excellent candidates, but could only hire one, so we made a choice.

It’s always sad (for me) because I tend to see the potential in almost everybody, and wish we could hire all the people.


Where on the planet are you and can you send the dropouts my way? This feels like alternative reality - we have jobs available but no takers.


pay more


Not getting the job at a company that hands out irrelevant discriminatory interview tasks seems like a positive outcome to me!


Or you dodged a bullet as they probably also fill their day with useless crap that adds zero business value,but checks all the boxes. You might have ended up equally annoyed at your co-workers and management.


I agree with your overall message, however there's a subtle implication that some malevolent entity is putting up this awful process. In many companies, it is the engineers themselves that are creating these roadblocks. Most of them with good intentions even. I do wish that internal dissent was higher, but it's more common for new hires to be dragged along by inertia, especially since being hired often feels validating and equated with a fair process.


It’s a numbers game really depending on the role and the hierarchy level, though? I mean, we should know in advance what to expect by going into that process, and the cohort we are willing to join. It’s just a preliminary fit, at any level. If employers want prospective employees to bark and you enter that race, you bark.


You can’t really fight the system. We have to realize that those that got into these positions used that opportunity to put these gates in place. The only way to change the system is to get into the system and then break the cycle and advocate for alternatives.

But the enemy has the high ground at the moment.


There are strongly asymmetric risks for an employer in a hiring situation. Hiring a bad candidate is much more costly than rejecting a good one. The goal of the hiring process is to find a good candidate; there can be quite a lot of wasted time in interviewing before it comes close to the expense of a bad hire.

An implication of this is that the optimial interview process -- from the employer perspective -- will have a lot more false negatives (good candidates rejected) than false positives (bad candidates accepted).

So it could correctly be optimal for the interview process to be so onerous that most job-holders would fail their own interview!


This is absolutely true for Google (or companies of similar scale), where it is 1. hard and slow to just fire someone 2. The production of a good (average?) vs. great programmer doesn't really matter in the grand scheme of things (due to massive scale, and robust quality control systems).

A process where you optimize for avoiding false positives makes sense.

Most companies are not Google though, and if they are <50 employee - it's absolutely the opposite. 1. It's fast to fire people 2. Missing out on a great programmer for an average one makes a huge difference!

So, it follows that they should optimize for avoiding false negatives (rejecting a great candidate), without worrying too much if they got a bad apple snuck in.


We did a hire fast and fire fast trial at work and it was not pleasant. The person comes on the team and we spend a lot of time onboarding, people form bonds, and then frustrations start to mount and the person is let go and now the whole team morale is lower. Lower team morale is not something to take lightly.


> This is absolutely true for Google (or companies of similar scale), where it is 1. hard and slow to just fire someone 2. The production of a good (average?) vs. great programmer doesn't really matter in the grand scheme of things (due to massive scale, and robust quality control systems).

This is true also for places like Germany (and Europe in general afaik) where the cost of firing someone past their probation (6 months) is very very costly, especially for small companies.

IMO, at-will employment should be something the employer and the employee should negotiate and not imposed by the state or the employer. Unfortunately, it's usually the employer who has the upper hand.


The fact that non-at-will employment is always the result of legal burden and not negotiation between employer and candidate should make it clear that that cannot work. As an employer it is extremely valuable to be able to arbitrarily fire someone, so since there are always candidates that are job hunting with purpose and not just casually on the side of their current job, it will be very hard to find one to agree to it.

"I'll work for you but only if you can't fire me" is something only the most desperate companies would accept unless they are forced to.


> "I'll work for you but only if you can't fire me" is something only the most desperate companies would accept unless they are forced to.

Yeah this would be a red flag on the candidate immediately. What I meant was that the negotiation should be on the notice period not on being unfirable. I see it's a huge burden on the company to not be able to fire someone and what ends up happening when you have a bad apple is other team members start leaving.


>> Hiring a bad candidate is much more costly than rejecting a good one.

Sure, but the really bad hires usually aren't bad because they lack technical skills. They're bad for reasons that end up in HR. You can always reassign someone with people skills but short on algorithms.


There are plenty of really bad hires who cost a company lost time and money because they simply are not competent. It's made even worse because many incompetent people are genuinely nice and pleasant people, they are open minded and may even sincerely care to learn, and it's very hard and demoralizing to fire them and can take a big emotional toll on many people.

Firing an asshole who is incompetent is one of the easiest things to do and it can be done well within the probationary period, heck even an asshole who is fairly competent isn't a big deal and can be a complete morale booster and likely will not have resulted in much lost productivity.

I'd say most of the people I fire are not so called "HR liabilities", and in general most people are good people. But most software developers are not competent and in some cases that realization can take a year or longer in domains that require a lot of ramp up time, training, and investment. It's often a lot better to avoid hiring people who have even a 20% chance of not working out.


Is the concept of a probation period not universal? I mean if a new hire is terrible, it will show in the first 2-3 months, and during this period they can be fired without any repercussion whatsoever.


Most bad hires can be rooted out in a few months, yes... but a not insignificant number of them can take years as well. Also many, if not most people, simply stop learning and allow their skills to stagnate and that can become a liability after a couple of years.


That assumes good engineers could pass and bad engineers can't. But I come bearing a single data point! The worst backend engineer I know just got hired at meta. He knows stuff! But his execution was always horrible/careless and he spent most of the day on YouTube / reddit when we were in an office.


This is peak bullshit jobs


Make it too onerous and good people will not apply or duck out when they find this. In a world where good talent is limited and finding it is requires effectively a marketing department in most companies, having too many tests might be a bad idea. Unless you are paying FAANG salaries.


We've had existing devs do the take home tests, not to make sure that they were capable of it, or if the test was too hard, but mostly to check if the test could be completed by someone in a reasonable timeframe and not unneccasarily waste a persons time.

My advice for these sorts of tests is to make it as short as possible, and use the test to give you something to talk about in the follow up in person interview. Replace "Invert a binary tree/solve this riddle" with "Why did you do this in the take home? What would you do differently if $FOO was now a requirement".

I find it effective.

To answer the OG question, I'm sure I would do well. Depends on the other candidates on whether I would get the job though.


The expectations for the take-home work also need to be crystal clear.

I've gotten data science ones where you could spend anywhere from an hour to an entire career working on that one particular problem. If it's meant to be a simple pass-fail exercise, say so up front and reserve the interview for discussing how the solution could be improved.


I have recently had similar experience, but sending an email with my questions solved this problem. Of course if their HR or team is slow to answer it isn't worth that much, but still better than not writing that email (you can still point to it later). I was even thinking, maybe this is part of the test, to see how comfortable/proactive the candidate is with asking/clarifying a task.


The company I work for uses a take home project that can be summarized as: Consume some data from a public API, store id somewhere and then build a visual representation for the data you consumed. The goal is to spend less than four hours on this.

I really liked this since it gives plenty of room for discussion, leaves you a lot of freedom to chose your tech stack and make a case for it.


We do something similar -- here's a dataset, give us a cli/api/library that finds things in it, and give us a run through of what/how you did. It's shallow enough that you can do it in 10 lines of code, deep enough that you could build a business around it (with more/better data). We have a rubric of about 15 things that are successively more rare/good approaches (ranging from "returns some data" to "successful approach I haven't seen before") , and 3 that are anti-points.

The thing that I find the most useful are the responses I get when I point something out and ask "why did you take this approach" or "what would you do to go faster" or if there's a bug, "I don't think this is doing what you want it to".

I absolutely grade this on a curve -- Entry level and data science backgrounds almost always go to pandas right off, front end people will be focused more on the UI side of it. But if you're senior and come at me with an O(N) or O(N^2) solution then I'm going to really want to know what you have to say about the performance question.


Our company does something similar. I've found it to be very effective. We do this instead of leetcode, which I have found to be pretty irrelevant throughout my career.


Are there lessons of such that one can follow?


> We've had existing devs do the take home tests

... and?


Sorry, I realize I never elaborated on the results. Some people could do a reasonable job in 30 minutes, others would take 2 hours (but would be more thorough). Neither end of the spectrum seemed "Too long", and so we thought it is a reasonable ask. It takes the devs that inevitably have to look at this, and potentially run the applicants solution, a chunk of time as well, so it's in our interest to keep it simple.

I wasn't suggesting that we had existing devs do the take home, realize it took 30 hours, and then thought that was a reasonable request :D


Also; on the various lengths and "thoroughness", it's hard to control bias, but we explicitly tell people that this will be used as a jumping off point for discussion. This gives the opportunityfor those who "did less" in terms of thoroughness more opportunity to talk about what they would change/do better if it was to be producitonized etc etc.

The worst case scenario for us is someone who has clearly spent a long time on it, against our wishes, and done a poor job. Optimizing to not have the happen is a comms challenge.


Hi.. slightly off topic but what is the meaning of OG here


OriGinal


No, I couldn't pass. Anytime I swap jobs and want to work for medium or big tech cos. in the US, I need 1-2 months of prep to refresh my knowledge of implementing certain algorithms by hand. That knowledge disappears immediately after I accept the job offer.


I've seen the coding questions we ask candidates... whether or not i would pass would depend 100% on which question(s) I was asked.

Something relevant to the work I do all the time? yes, I'd probably pass.

Something about some data structure or algorithm I haven't needed to use in four years that i now have 30 minutes to implement in code? I'd likely fail.

When something comes up in my actual job where i need to solve a problem i'm not familiar with, i first do some research on the problem and learn/remember what i need to know about it and related algorithms/data structures before doing any actual coding.

i certainly do not "immediately write code as fast as possible" when presented w an unfamiliar problem.

if you must ask candidates to work on coding problems, i believe that you should give them 3 or more problems and let them pick which one to work on for the actual "coding test" part of it.

Then maybe have a conversation about the other problems to get a sense of how they would think about/approach them w/o actually making them write code.


You nailed it, man. I don't do terribly well on Leetcode interviews, on average, but, for my last job, my interviewer told me some time after I got hired that I had done the best on that interview that she had ever seen. That's because it was a real world question as part of a structured interview process, as opposed to "let's just 4 engineers to throw random problems at the candidate."


LOL, same here. It seems that my knowledge was moved (not copied) from my brain to my tongue, then it vanishes away through the phone line.


Interesting. This is my weak spot as well. Any tips for going through this cycle? What do you use to learn them? To practice?


I used to reread Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People by Aditya Bhargava and practice LeetCode.

At this point though I just stop the interview if they’re asking Big-O or data structure questions. If the company can’t come up with meaningful real world examples that actually explores my experience, I don’t want to work there.


I love using JavaScript for white boarding. It's very forgiving, it's not strongly typed, interviewers are all familiar with it, and large companies almost always allow it. Python is second. I avoid Go, Rust, Java, Scala, etc.. Too verbose.

I do the following in JS:

- General graph algorithms (shortest path, backtracking based)

- Traversals for graphs / trees (depth first, breadth first, iteratively, recursively)

- Heaps (min, max)

- Tries

- Matrix manipulation / traversal. This is a very error prone for a lot of folks even though it looks simple when they need to write it by hand, and I always need to putz around with 5-10 problems.

I have enough exposure to common interview questions that the above is generally enough.


Any focus on Dynamic Programming stuff? I myself prefer Python(as it very closely resembles pseudocode)


I prefer python as well. It has some built in caching that makes DP problems trivial at times.


Sounds like my physics degree.


Absolutely, yes. The main reason is that my company (Notion, https://www.notion.so/jobs) uses practical interviews, not CS algorithms based brain teasers. So my everyday work is exactly the practice I would need to pass the interview. Our frontend pipeline tests your ability to design and implement components in a UI framework. Our backend pipeline tests your ability to design and implement APIs and services in an HTTP framework. If you want to know more about our engineer hiring process you can read our interview guide here: https://notion.notion.site/Software-Engineering-Interviews-6...

If you want to talk privately you can reach me via twitter DM at https://twitter.com/@jitl or jake@makenotion.com


There are a lot of jobs listed there with zero benefits listed in the actual job listing. You have to scroll >1/2 down the page to find out what the benefits are and those are fairly vague. Why isn't there at least compensation listed?


Almost no one lists compensation


I know, it's not a good trend.


I think soon New York City will require posting the salary range at least.


Thanks for sharing and for reaching out. Good to know that there are companies doing real world practical interviews. Currently there you don’t have anything for EU remote, but I’ll keep Notion in mind. I’m sure that other HN users will benefit from your openness, interview process and available position. You comment (and other similar comments) is one of the many reasons I like HN :-)


Generally, you try to hire candidate into a role that excel at (>50%) it but you promote employees into roles when they are achieving the next level but not excelling (<50%). If you wait to promote until they are excelling then you've waited too long.

Thus, if you interview those promoted employees, they are not going to match external candidates unless they have been in the role for a while and are now excelling.

Additionally, you evaluate external candidates much more heavily on raw skills b/c they have no internal knowledge/experience, but you include that internal knowledge/experience when evaluating employees.

Finally, interviewing skills != working skills. I've been writing software for 20yrs, and interviewing SDEs for almost as long, and I'd still do interview practice to prepare. In a normal job I can go search the details of what a red-black tree is, and find a library to use it (or spend a few days implementing it). In an interview I need to already know it and be able to implement it myself in less than an hour. (yes, that sucks, but it's the reality of interviewing today)


Myself: At a non-FAANG FAANG tier company. No, odds are more likely I'd fail.

Other close people I've asked before:

A, at Google, got in 10+ years ago. Told me she would not pass the current interviews.

B, at Google, an aquihire, 5+ years ago. Told me he would never have gotten in the front door (leetcode) way.

C, at Netflix, got in 5+ years ago. Told me odds are he would not pass if he were interviewing today. He says he is in a very interview un-ready state, and none of his realworld experience working at Netflix would help him pass his team's interviews.


I interviewed someone referred by my manager. He had 10 years working at one company and had probably not interviewed in over a decade. It was a pretty poor interview and I recommended no hire. My manager still hired him since he had worked directly with him and he was one of the best engineers I've worked with.


No I wouldn't. The pipeline to big tech is quite broken. The only way I got in was through acquisition. Now that I'm in, I've been able to be a top performer and get promoted every 1-2 years. New hires are usually really bright, but they lack practical abilities to do anything the job requires.

The technical interview is broken and has been for a long time. I'm sad that as a society we accept leetcode or unrelated system design questions as a means to measure proficiency.

The standard continues to rise in certain companies and lowers in others.

I'm sure if I was in "interview mode", I could pass, but my position is not about knowing how to invert binary trees.


This phenomenon is a major reason that good startups win vs Big Tech companies.

The Big Tech companies have standardized their interview process around hiring new grads. They fight with each other to hire them. These noobs get hired en masse and perpetuate the process, ultimately creating a monoculture of noobs hiring and mentoring noobs. It is the blind leading the blind.

So Big Tech companies end up consisting of armies of highly uniform noobs that throw massive amounts of code/money/people/time at every problem. And not because they're stupid, but just because they never had the benefit of real mentorship and training from a diverse pool of experienced experts. And because they've never learned to build without the resources of a Big Tech company.

On the other hand, good startups seek out experienced experts with diverse technical skills because they really need the most effective people possible. They're not just trying to meet recruiting quotas. They have to do great work and have to do it efficiently or they fail. This is why good startups can very often do much better work than even much larger Big Tech teams.

If you're an experienced expert, and actually enjoy your work, you probably want to work for company with less than ~300 people. And you probably want to quit when it gets to ~1000 people.


The main problem is these smaller companies usually don't pay very well compared to FAANG.


Absolutely true, although it's not as bad as it once was. And if you can manage to choose well (i.e. by earning stock at multiple companies, some of which go on to IPO), it's possible that equity can (more than) make up for it, but it's definitely a bumpier ride. One has to choose where to invest their labor like a VC chooses where to invest their cash, and to build a portfolio over years.

The other alternative is to be a founder, but not everyone is up for that.


> If you had to take a technical interview for your current position would you be able to pass it and get the job?

Yup. I didn't get blasted by algorithms problems and data-structure trivia for my current job. The interview I got was to answer a handful of questions by querying some data from a CSV file. I was supposed to use the programming language of choice by the company but I just loaded the data into a SQL table and did the queries in SQL... which was fine because the application I'd be working on is a web application and the majority if our work is querying databases.

Could I get through the usual interview process at other companies? Sure. I'm used to it by now and came up with a training regimen to keep my skills sharp. It really comes down to being able to categorize word problems into a handful of common data structures and algorithms: breadth-first search, depth-first search, two-pointer, binary search, dynamic programming... linked list, vector, hash map, or tree. Once you can match the description to the data structure and algorithm the solution is usually within reach with practice.

It's not my favourite skill and I don't find competitive programming entertaining. But that's the way the world works right now.


I know for a fact I wouldn’t.

My company recently switched from a code submission to a hackerrank type thing. As part of that switch, several engineers of different ranks (junior, contributor, senior, staff, etc.) took the quiz to benchmark the platform. My score was second-to-last, despite being the highest ranking engineer.

Otherwise, it basically lined up, so we made the switch. It’s certainly possible that I’m under qualified for my position, but I also suspect that these assessments have significant false-positives and false-negatives, the consequences of which will be hard to measure, and therefore ignored or mis-diagnosed.


Yes, but of course your experience may vary. If you have been at the same job/company for 5+ years and not actively keeping abreast of the market it can be pretty easy to stagnate without realizing. I've interviewed a number or candidates that ran into this. They would be a good hire for a lower level position but the Catch-22 is that they are too "advanced" in years at least for that to be a satisfying role and compensation.

For myself I can say a definitive yes for 2 reasons - the first is at my current job all the interviewers test run new interview questions as a filter. If a preponderance of don't pass the question we don't use it. the other way I know for sure is that I have been actively interviewing for new roles in a lateral+ capacity. With an n<10 I have 100% pass rate into the interview process and a 75% rate of offer. My prep for interviews is Linkedin sleuthing of the companies and interviewers. If I ended up in an interview process that was asking for me to balance a tree I would likely fail, but I would also not want a job at a company that uses that question. For reference I am a top end IC (principal/architect/lead/etc.) with 20 years in complex web app dev.


Nope

I only got in because I happened to do the exact LeetCode questions asked the night before, and the questions relied on knowing special tricks

I really doubt when people say they got in to LC heavy companies without studying much, its more likely they just lucked out and got a question they happened to be able to solve

For any candidate you can create an arbitrarily hard/tricky LC question they won't get


I suspect that yes, interviews are getting harder on average. I also think that even if they weren't, it would still feel that way for us experienced folks (also ~20 years of experience here). For one, as you get more senior, interviews will get harder in order to assess your level of seniority. Secondly, I found myself being very indiscriminate about opportunities early in my career, and very much opposite later on. That has meant that the companies I have applied for later have all had much larger pools of applicants and therefore much harder interviews.

I suspect the new grad FAANG recruits are at an advantage here (dubious though it may be), in that they are ready to grind from the get go. Those of us that started out in a different place are running into the hazing later in our careers and there's this existential crisis of "this isn't fair" and "am I a terrible engineer" and "screw them". It took me a number of years to move from denial to acceptance. I still posit that being able to pass these interviews have not made me a better employee, just a better interviewee.


Maybe.

I have been working in the same job for 10+ years. I was hired as a somewhat lower position than my current one and promoted over time. I am not sure my organization likes to hire "senior" developers - so I don't think "my" position would be available. They would probably split the work I do now into two junior positions.

This hiring pattern doesn't seem uncommon in my area. You see lots of junior-level positions kind of rolling around the typical job listing sites with very few senior roles.

Over those 10+ years I have done two or three more serious job searches. I tend to get offers but they are usually lateral moves. Meaning, roughly the same salary and work. I have some uncommon benefits at my current role so when I go on the job hunt I am typically looking for either a significant bump in pay or in work specifics (inspiring peers, programming languages, etc) or it isn't worth changing positions.

I would say that if you see interesting positions, have a go at it! Don't wait. And this is especially true if your vision for your career isn't on track to being fulfilled at your current job.


The technical interviews are not meant to judge your current experience or work quality. They de-facto measure one's ability to research, memorize and explain the top X asked questions/problems in the field. So most of the people "just doing work" wouldn't pass them just because they haven spent any time on that weird social dance. Once they become cynical about the whole process and do what others do, they will be just fine.

P.S. I'm not defending the current situation, I am merely trying to summarize it from the a practical point of view (i.e. action X increases the chance of outcome Y).


I worked for a company where every year we'd do a developer off-site and come up with technical interview challenges. Then, during the meeting, a group of devs would have to complete the challenge under the same constraints as a potential interviewee. That was a pretty good way to figure out whether the challenges were appropriate to pose to candidates.

But yes, I've definitely encountered interview questions posed by a company I worked for that I probably would have flunked. And I've tried my best to push back on those, when it was clear that they were designed more as an ego booster for the person who designed it than as a tool for accurately assessing skills necessary to perform well in the open role.

One thing I would recommend, for companies that have similar issues, is to lean more on your most junior and most senior engineers, rather than mid-level and early senior engineers, when crafting things like coding challenges and architecture/design sessions. They're often the ones who will approach the task with the most humility.


The problem I see with the approach of existing devs taking the challenge is that they do not have the same level of nervousness or pressure. Presumably if they fail they still get to keep their job, right?

IMO, being under pressure in an interview stunts a person's cognitive ability somewhat, between the pressure, the unfamiliar environment, lack of working relationships with the team, etc. I think that would need to be factored in somehow.


I think you just penalize them for that. If they "barely succeed" then assume they wouldn't have under real conditions.


Yes - my current place has a very sane, practical approach which would work well for me. No purist algos stuff, no solving hard problems on the fly on a whiteboard with an audience.

UK based, financial sector, FWIW.

That said if I was looking to move, my confidence about other places being so sane would be low to medium, there seems to remain a lot of deterring approaches out there still.


Maybe. Our interviews (small company, of which i help dictate the tech interviews) don't require any arbitrary skill check, unless we feel we have to. Generally they're conversations about a the language/tech that attempt to assess the persons depth of knowledge. Self admittedly i am not informed on hiring. The position was sort of thrown on me heh. But my view was that i wanted to find a way to be a "good company", and so far it feels to have worked (in my view). No mistakes after ~15 hires.

Would i pass my own interview though? Not sure. The depth of knowledge is reasonable, since i craft my own questions i know the answers, but they are not standardized. They are tailored per resume. So depending on how i read my own resume, i might come up with questions that i don't answer adequately.


Your question is one of the main metrics I use to filter out companies I'm not interested in following up with. Is the interview process relevant to the actual job I would be doing? If no, it's unlikely to be an environment I'd be interested to work in. This signalling goes both ways and I think it's a bit of a weird balance that tends to somehow work out for both sides. People who don't mind jumping through bureaucracy hoops won't mind interviews that are completely unrelated to their job as much as the other half, companies that are like that will in turn be happy to find those people. There is of course the smaller subset of companies that would be interesting to work at but still have a bad interview process, but I would say they're a minority.


Honestly, the interview process being as broken as it is is one of the biggest opportunities for startups, or companies willing to take a risk to snatch up really good talent which is overlooked.


My current job? sure, mostly due to the fact that I am at a company that doesn't do leet code style interviews.

Many years ago however, I got into a FAANG via a "side channel", working as a a support engineer for ~1 year before I managed to impress a manager in the proper product engineer org (whom I and my team worked with closely), and didn't have to suffer through a traditional FAANG style interview as a result. Best opportunity of my life on accident, turns out. Pretty sure that on my resume opened more doors for me than anything else.

I'd never pass that interview process, yet proof is in the pudding that I did well, I rose the ranks over 5 years before leaving due to not wanting to relocate for a bigger promotion.


My company's technical interviews are really practically focused. We ask candidates to achieve a specific simple web application development goal, using any technologies of their choice, with help from the interviewers as if they were pair programming. We evaluate them on how they work more than whether they reach that goal, but any smart experienced application developer should be able to breeze through it.

And we are hiring: https://www.mcg.com/about/careers/search-jobs/?gh_src=266419... (Feel free to email me at the address in my HN profile to ask about the company)


Sounds like a good approach, and also based on what I’ve read here is inline with how a good interview should be. Thanks for the tip and for the open positions, but I’m in EU and I don’t fit in any of your currently open positions 100%. Other people reading about your process and open positions for sure will find this helpful :-)


Yes. I work as a contractor and freelance dev. So, my interviewing session per client is "Can you do this?" rather than "Can you do this to show me you can do that for me?".

It isn't that people are more pragmatic when hiring a contractor. But in fact contractors are hired to do specific tasks. These days, your traditional software engineers are asked to all sorts of things and asked to learn all sort of things as the company grow. I think that there was a probably a time where the scope was limited and recruiter knew what are the problems a candidate might need to fix. Tech stack wise I would guess we are in an era of ambiguity.

Disclaimer: Haven't worked a day as an employee anywhere.


Yes, I would.

But only because the vast majority of our focus is on the person - their character, attitude, what drives them, what motivates them, how do they treat others, what are their communication skills, etc. Very little is spent on technical capabilities.

This has served us well, but hiring takes longer and is more involved. A lot of people fall out of the process early on, but it is totally worth it.


50/50 I think. Some parts of the corp have caught the bug on programming puzzles that are tedious and irrelevant to my position.

I understand the need to narrow down candidates but this kind of screening is about as useful as throwing darts at a dartboard.


Well you wouldn't want to employ an unlucky person would you?


I lol'd


You didn’t ask about PM roles but here’s something I do and may it it’ll work for Dec as well- As an interviewer I’ve found it very productive to ask candidates to bring and showcase projects they’ve worked on (without breaking any agreements). Not everyone works well in a stressful time bound situation. This helps with that. It also helps showcase proactiveness and any out of box thinking.

There’s a risk that leetcode heros might turn out to be the type that throws up their hands at the sign if smallest of team friction points. As a Pm these devs are the most annoying. “That other team didn’t respond so I’m blocked”

Leetcode questions don’t help with this important criteria.


> If you were the one doing the interview, would you be strict and request more things so as to filter out candidates?

I would. I wouldn't ask hackerrank, leetcode or google-interview-type questions though, requiring knowledge of specific algorithms. I would ask questions about the programming knowledge that is relevant for my role. Since I'm in frontend, I would focus on finding out how well the candidate understands javascript (and these days, probably typescript as well), css, and browser apis. This and talking through the problems, I believe, will give me a pretty good signal about where the candidate is at.


I could pass the technical interviews, because we do practical problem interviews, plus a discussion of technical experience with a variety of technologies, which is pretty much the interview I did when I first applied for my job.

However, I would not get the job because I wouldn't pass our in-house recruiter's phone screen. We recently did interview training, and got an explanation of what kinds of questions HR uses to filter out candidates, and when I pointed out that I would be thrown out after the first two questions, despite widely being considered a great culture fit, all I got was a shrug. :(


Yep. After I passed my interview and got the job, I joined the interview process and made my own question. The solution requires for loops, if statements and string indexes. There are no algorithms or data structures required (ok, you need a string array, that's a data structure), nothibg but the essence of computation.

My question scales. It has 5 parts, such that a bootcamper can solve 1 and 2, and completing part 5 would require a whiz to spend several hours. That is, however good you are, I'll be able go get a good signal, see your thought process and you'll come away feeling mostly good.


Well, I did the interview just 6 months ago, so I hope so.

You don't need to find the best people for a position, you need to find the ones that meet the requirements that you should have already set. If you're changing those requirements during the interview then you're doing it very, very wrong. It's fine to ask additional questions to get a better understanding of how well someone will fit, but that's completely different than moving the goalposts as the interview progresses.

Wait for "the best people" and you could be interviewing for years.


At my current job, yes. I'm doing the interviews and I ask them to look at code and tell me what it's doing. Nothing crazy like bit math, just a couple stand alone functions for parsing json (using standard calls) and the error handling. Amazing what you can learn with just that.


At my company our questions are based on a set of ~7 things (technical design, code quality, communication etc.), not just algorithmic efficiency.

New interviewers are required to calibrate their expectations for the question by practicing conducting the interview on 3-4 existing employees.

By evaluating on dimensions you don't have to study for & calibrating based on active employees I like to think this does a better job of making sure we don't miss out on hiring good engineers who haven't spent hours doing LeetCode.


I'm pretty sure that if there was an interview for my position, they'd ask for a lot of things that I can't do. What your boss thinks are mandatory skills and what's actually needed to do a good job is usually pretty different. Especially I'd expect that for a job opening they'd require "Agile" when in reality they need "flexible".


I have a decade of writing code for various organizations and glowing recommendations from bosses and coworkers throughout that time. I don't know why a company would insist on me proving my worth in a worthless waste of time except to prove to me that the culture in the workplace is bad. I can understand it for hiring juniors or even mid-level positions thou.


Because firing people (and hiring them) is expensive, so companies are risk-averse. Combine that with many people who can talk a good game but can't actually build stuff and we get the current system we have today.

I've interviewed many senior engineers who can't code, and worked with principal engineers who can't design/lead. It's painful and hurts the whole group.

The solution is to make the process of hiring/firing "cheaper" so that companies are willing to take more risk, but I've not seen a process yet that is fair to the candidates.

If we had UBI, it would help a lot - people could quit jobs that suck, and companies could more easily hire/fire people without destroying their lives.


For what it's worth, we test our in-house developed interviews on our own employees.

I don't believe they're any harder than the interviews I had to perform 12-13 years ago. If anything I think they're easier, because I remember a lot of weird trick-logic "Google" questions during the late 2000s that didn't even touch programming or software.


There’s been a lot of posts complaining about coding exercise interviews. I sympathize, they are certainly flawed. But I don’t see any sort of consensus around an alternative. The things that many other professional fields do—-a mixture of credentialist proxies and interviews that amount to little more than personality compatibility tests—-seem far worse.


Culture / Leadership / System design? Yes

Algorithimic/coding? _maybe_, not confident in the least and would lean towards "no", simply in that my preparation was significant. I also push back in current company (FAANG) against the strong algorithimic/coding pushes as I don't think they are a good signal for skill/employees.


Most companies I’ve been at aim to error on the side of false negatives. With that in mind, not being guaranteed to pass the interview at your current workplace can be the system working as intended. It’s much better to have a false negative and let the candidate come back another time or find something else than accept a false positive.


Well as a senior/lead engineer, the nice thing is that the jobs I get these days, I try to work from the inside to make sure interviews aren't too ridiculous, and not be super-critical of people who don't ace the programming stuff. So that's kind of nice.

That being sad, where I am (Netherlands), interviews haven't gotten noticeably harder. 20 years ago I had an interview where I was asked to implement polymorphism in C on a whiteboard. The other year I had an interview where I had to implement some kind of graph sorting system related to blockchains. I failed them both, and went on to find a load of other companies that were a bit less silly.

My overall impression is that it's big tech companies in the US that have become obsessed with coding tests, hankerrank and leetcode and the like. I don't know why, when half of them are complaining about acute talent shortages... (Facebook?)


The number of applicants is ENORMOUS but the number that are hirable engineers is not. I think the stupid trivia is just filtering by necessity.

The take-home project followed by discussion is great, but can it scale up to Facebook and Google? Are you going to have engineers doing several of those per week? It's already difficult to come up with algorithm questions that are novel enough that candidates haven't already practiced the exact question, as found in some aggregation site. How do you avoid that with project work?

I agree the system is terrible, but I see how we ended up here too.


I work in a position where there is typically only one of me in a company/team....

As I have been applying a lot lately, I was told by several recruiters that they are getting ~250 applicants to each seat... and most times, thats the only seat in a company - and the applicants are coming from all over the place now that WFH / remote is so much less stigma'd...


2 years ago I did an internal transfer in my company. It's up to each team how they want to handle it, but some teams set up a full interview similar to what external candidates go through. Out of 2 interviews, I failed one and passed one.

I've long come to terms with how much randomness plays in the interview game.


Depends on the interview. I don't specifically study for Leetcode style problems so I would fail there. Systems design? Not too bad. Take home, sure within some time constraints. The numbers on a job posting are really just a weeding out system. I've gotten jobs with 0 experience in their particular tech stack.

Interviewing is a numbers game, so play the game and fail/succeed quickly! I usually put out 25-30 applications a week, accept maybe 10-15 initial calls, and get an offer or so every other week.

It's a candidates market and companies know it. If I receive a request in an interview that I don't agree with I just say so. Leetcode for a Senior role? No, get rid of it or I walk and take another offer I can pick up in a few days. Just refuse to do anything you consider below your pay grade.


At my prior company, I wouldn't have passed the intern interview as an intermediate developer. But I would have passed the current intermediate interview.

They leetcoded and had interns do system design diagrams. Intermediate and higher had paired code writing and a design discussion.


I'm currently unemployed, so I'd pass with flying colors .

Joking aside, I would definitely pass the interviews for my previous job (I left 4 weeks ago). They were very JS and React focused, and they were pretty easy. I know that domain well, so I tend to interview well in it.


Yes, fortunately my company uses a toy project that needs some functionality implemented to gauge developer skills. I find that this approach (given a reasonable amount work to implement) is a better approach to find devs who are a fit for the role.


There is a strong "inflation" of interviews. Because it's a zero sum game, people try to game it. 8 years ago I was asked 1 medium/2 easy questions, now it's 2 medium/1 hard with follow ups.

Where does it end?


Counter question: would you even apply for a role to your team that your HR wrote and you were not even consulted about it?


Good point, probably no.


Which books should I read in order to get better at software architecture and system design? I always do badly at those types of questions because most of my experience has been fixing bugs or adding features to existing systems.

Most "system design" interview material online seems to focus on web stuff where you setup multiple servers but my experience and my interviews usually involve designing an app or some other mostly offline system that would be implemented in C++.


I changed 4 jobs in the last 6 years and the last one was 4 months ago. So yes, I'm confident. (changed 9 jobs in 16 years for variety of different reasons)

The average software we build is more complex than before too. I guess that's why interviews have become harder.

I think I have done around 100 interviews as interviewer too and the biggest problem I see is that many of people that advocate different training programs for passing interviews have wrong idea about the interview process.

You shouldn't practice for puzzles. The whole purpose of live coding interview is to see how you communicate and how you approach to solve a new problem. Nobody expects you to implement algorithm in less than an hour and without studying it first. Nobody actually expects you to complete the assignment, even though it's definitely a plus point if you do it. That's the only part of the interview process that doesn't require practice in my opinion (if you know how to code). Instead you should practice your communication skills, debugging skills, best practices, and focus the actual requirements for the job. If they are building distributed systems, they are obviously looking for talents that at least understand distributed systems.


We calibrate our interviews on existing team members who haven't seen the problem yet.

That's how it was done at my previous employer, too.


Thinking about this from first principles; 1. Is there any evidence that leetcode style process is better at identifying better candidates than picking names from a hat?

2. Wouldn't copying FAANG hiring practices (if you are not FAANG) ensure that you will always get their "rejects"? Where you will always have an inferior talent?


Even this is flawed, because it presumes that what they are doing succeeds at selecting superior talent.


I think so, but the real trick was even getting to the interview. I have no idea how we filter candidates but I know we don't end up interviewing that many people as a team. I'm at a bigger company but our interview process is pretty practical and you only meet with members of the team throughout the process.


I will go a bit off topic here: As the interview processes are quite different than the actual day to day job for 90% of companies, what would be your recipe of success to train for those interviews? I find myself quite capable in by day to day job, but, in the interviews, I am not doing as well as I am expecting.


It's a 100% pure lottery. I'd easily answer some of the questions, but for others I stand no chance without prep time. For example, I've re-learned implementing a self-balancing binary tree at least 3 times in the past, and I literally can't remember anything about it.

I've always found such questions lame, because (1) you rarely need this kind of thing, (2) when you actually do, you can find the information within 5 minutes, and (3) if you don't know it, well... you're not gonna suddenly come up with somebody's PhD thesis during a stressful job interview.

And you may say "yeah, they don't expect you to, they just want to see how you think". That's bullshit, because people know this questions come up often and will sit down and study them in order to game the interview process.


> "yeah, they don't expect you to, they just want to see how you think".

And companies explicitly send prep material now. When I interviewed for Amazon, I got a whole pile of links to study.


This is kinda funny because I was thinking about it on Monday. I was reading some suggested questions to ask to interviewees and some of them I would not be able to solve (about 10%) in 40 minutes, another 20% would have gave me a hard time for sure. So, I think it's also about luck also.


I was thinking about this at a previous company, when I took a look at our questions and thought the same thing.

I realized that when given to a candidate, we don't just throw the question out and come back an hour later asking if they've solved it. Part of the job of the interviewer is to keep the candidate on track, and gently guide them in the right direction if necessary.

All of the questions were much more reasonable (and approachable) when there is someone who is motivated to help you reach a solution within the allotted time.


I think the take home exercises are a good middle ground.

I'd still prefer the whiteboard interviews, over what are sometimes knowledge-based questions that are a search away. Not the common stuff that you should anyways, but something obscure that if you spent 5-10 mins on its man page, you will get it.


I started as a regular, non-senior software engineer 8 years ago. I am now VP of Engineering at the same place. I suspect that my clone would have much less than 100% chance of getting this job if he were to interview.


Of course not.

In my current position I constantly improve my skills to fit a variety of projects and facets of a single project.

Unused skills atrophy all the time.

My skill set is dynamic, adjusting to a variety of conditions and needs.

My core skills are qualities - curiosity, enthusiasm, quick adaptation, quick learning, communication, understanding logic, attention to detail, ability to visualize software as factorio-like machinery, skepticism and paranoia/trusting that people will try to do things wrong.

If I am asked to write a sorting algorithm I shall not pass. Therefore, I will never ask anyone to do so in an interview.


Probably not, because our interviews have absolutely nothing to do with the job. We'll ask an interviewee to code a linked list, and then plop them on Ansible for the rest of their working life.


I can pass the technical stuff, but it depends on who interviews me. People look for different things in potential colleagues and that can vary significantly at my place of work (I suspect many).


Probably not. I got lucky because they reused a question someone posted on Glassdoor.

I prepped on that and some other material recommended by the guy that referred me.

That’s all been changed now so I’d be going in blind.


I once passed inverting a binary tree with flying colours because the interviewers talked about it between themselves thinking I couldn't hear, but I did and googled it.


Yes, and did. The people doing the interviews bounce interview questions at each other, looking to see what can strike a conversation. We want the candidate to be able to communicate and not fear asking questions when she needs. Searching online is fine. Some of our questions are showing some code (~20-25 LOC) and asking the candidate if they can explain how it's working. Is it working fine for all cases? Would you refactor it? etc.


I’m not in tech, and I couldn’t pass the original tests I needed to in order to get started.

I bet the same is true of lots of engineers, too (that’s not my field, either.)

Just for point of reference.


I doubt it. I also didn’t interview for my current role; I got hired on the recommendation of people who worked with me at a previous company.


Wow! I didn’t expect so many replies and for sure I learned a few extra things about interviews, especially after reading all your comments and different perspectives on the hiring process. I’m sure there are different ways of doing things in US and EU (where I am) and especially between big companies, startups and smaller ones. Thank you all for the valuable comments ;-)


I would at my (F500, tier3) company. I think the interview difficulty has lowered over time as we've had trouble recruiting.


Not a chance, but I think its a combination of new-ish position internally and imposter syndrome rearing its ugly head.


Not only I would pass and get the job, but I would also ask for more money than I am making now.


Definitely. I don't find the algorithm-puzzle interviews difficult.


Yes, but only because I've only been in it for 4 months and the requirements haven't changed yet. I don't think I'd have been able to pass an interview for my previous role.


Two jobs ago I was certain half the team would not pass their own interview process. There were a couple really sharp people there and a lot of Dunning Kruger with a separate dissonance I’ve never been able to adequately diagnose.

I’ve never seen anyone hate their product and love their process quite like that, before or since. It was breathtaking.


I usually fail 6-8 interviews for every 1 I pass completely. Sometimes because I genuinely much a question, but often because they are asking questions with little relevancy.


If I was conducting the interview "yes", If my less knowledgable coworkers who settled on irrelevant puzzles as a lowest-common denominator then "no".


I got my position 2 months ago. I went through 4 interview stages. I was external to the org before I was hired. So yes I would pass an interview, because I did.


Maybe, but only because my employer is desperate for devs.


I agree, job requirements for all entry level positions are set the standards too high. Entry level positions should be 1 year of experience or less.


Given that our company's interview process hasn't changed significantly since when I interviewed, I know for a fact that I could.


Would I pass a job interview for my current position?

No, absolutely not. I am a senior front-end engineer with 24 total years experience and about 15 years of full time employment in the corporate space.

I have enough experience that I can build most any kind of application that will execute in the browser. Given my level of experience I can execute pretty quickly. For my current side project I wrote a complete OS-like GUI in the browser, including file system display, in about 15 days. Its mostly WGAC 2.0 AA compliant and performs awesome even when scaling to an absurd number of GUI windows in the display.

Of course, if I approach any problem space that I have no experience with there will be some required learning time. For example I have no experience with graphics processing, so if I were tasked with rewriting Photoshop for the browser I would slow down figuring out how to write the tools specific to that class of application. If I were tasked with writing an accounting application I would have to learn how some basic accounting things work, and so forth.

Experience and competence will not get you hired writing JavaScript. In fact I will argue, as I have observed from interviewing this year, that you can be neither competent or experienced in this language/platform and be hired for an incredibly high salary, even at stable established big companies, if the other conditions are correct. I was having no trouble pitching $170k in a low cost of living area and requesting full time remote.

Hands down the most important consideration for employment writing JavaScript is appreciating the most popular tools. The most popular of them all at this time is React. To prove this visit this month's Who is hiring thread and do a CTRL+F for TypeScript. Around 90-95% of those positions require ReactJS.

https://news.ycombinator.com/item?id=29782099

Hiring aside, why would somebody with my level of experience spend any time with a large framework like that? It will dramatically slow down the performance of my applications, thanks VDOM, and inflate the size of my code by several times. It will also slow down my speed of delivery by an order of magnitude because there are addition technical concerns and more to test for. Then there are all the dependencies and additional build steps and plugins and all the other luggage that I don't want or need and that I certainly don't want to force onto my users. Worse, is that without all the nonsense the front-end is only a tiny part of any major application. Like insignificant trivially tiny compared to the rest of the application code even after accounting for accessibility, security, and cross-browser concerns. All the code swell is tech debt that increases maintenance concerns by orders of magnitude.

At this point I am already immediately disqualified from continuing employment in this field, but there are other more subtle secondary concerns resulting from tooling that add up to widen that gap.

Its interesting, because I went on a bunch of interviews, this past summer/fall. Never, in those discussions, almost never did anything knowledge related about the technologies/platforms come up in discussion, which I found very strange. There would be some knowledge questions about how the language works from a very broad level and how to asynchronously transmit data, but that's it. You would think if you were hiring a Node.js engineer there might be some Node related questions or if you were hiring for a browser related engineer there might be some browser related questions. Weird.


That reminds me of the web dev space around 2000. Everybody wanted you to be proficient in crap like Front Page and Dreamweaver, or other clunky CMS/IDE combos. I built fast pages and CSS in a text editor, but unless I had their pet tool on my resume, they silently binned my resume.

I still loathe IDEs, because they appear to me to be pure bloatware that wants to even help you pee. (Command line linters work just fine, IMO. I don't need to run bloatware to find typos and syntax errors.)


In regards to the initial question: "Given what I know now, would I even take the job again?" I doubt it... ^^


I wrote the interview questions for my current role (first hire)... so hopefully!


Interviewing is easy today because companies are extremely desperate to hire.


Two things. First:

> If you were the one doing the interview, would you be strict and request more things so as to filter out candidates? It’s understandable because somehow you need to find the best ones for a given position, but there are some soft skills that C/Java/Python interview problems can’t identify.

I have interviewed many candidates. I generally gave three rankings to the hiring manager - pass, minimally acceptable and very good should follow up. Candidates tend to be a Gaussian curve with a normal distribution - if their resume looks good and they have been doing the job for at least two years and they pass a simple phone screen, the bulk (two thirds) follow into the minimally acceptable category. They know the basics and obviously have been doing it, but their knowledge can be spotty, and probing in depth almost never has results. Maybe one in six slip through the initial filters of resume and phone screen and show up at an interview knowing next to nothing. On the other end is the other side of the standard deviation - someone whose knowledge has few if any blank spots, and who can answer questions in depth.

I've found I can usually tell if they don't fit into the successful group in the first three questions. I have never had someone who flubbed the first three questions come back and answer subsequent questions correctly and in depth.

Of course having a recommendation internally helps. People I have deemed minimally acceptable who have been vouched for by a teammate have been hired. If they're coming in cold, they have to be in that one in six, one standard deviation above group who have some grasp of almost every subject you should know, and can go into depth on a lot of things.

So from your view being interviewed, it is pass/fail. From my view, I am looking at six people, one obviously bad, four interchangeable who have slightly spotty and not in-depth knowledge, and one who shoots the lights out and can go in-depth on a number of subjects. The last one I pass I bring to the attention of the hiring manager, the others I say they're minimally OK, with the occasional pass. Sometimes they're doing great technically but I know the manager will pass on them because they won't like they're attitude, but I pass on them anyway. Once me and someone else interviewed someone who passed the tech interview, but their behavior in the interview was odd and we both agreed to not pass them on.

Secondly:

> Is it my idea or are interviews more harder nowadays?

Interviewing can be hard.

I've been asked to show Github projects (as my IP assignment agreement might assign copyright of off-hours work to the company, I don't have a lot of motivation to do these), do work samples over a few nights, do 30-60 minutes Leetcode interviews in different languages, with a framework or without, to look at code, fix bugs, and check the code in to git, to whiteboard high level class design, to answer programming questions, language questions, framework questions, popular 3rd party framework extension questions, questions about how I deal with product managers etc. I hear FAANG grills you on graph theory depth first search and things like that which I haven't implemented from scratch since college (at work I'm usually doing CRUD or sometimes UI stuff, anything more complicated I am usually doing on my own time).

It's a lot to work a job and keep on top of these things.

I have been diving into learning some language-specific things in the past two years, and things which you can find across languages to some extent. I have done a little bit in learning the newer framework things coming out, or going more into depth on things I needed to know. If I was gearing up to interview I would probably put these things aside and learn how to Leetcode better and that sort of thing. Most of what I study can probably help me find work, but if I shifted what I was doing into learning how to do Leetcode quickly, correctly and compactly, that would probably help more. Things like that.


> someone whose knowledge has few if any blank spots, and who can answer questions in depth.

I'm curious what you mean by this. Software has a _lot_ rabbit holes. What kinds of topics are you looking at, could you perhaps share a small list?


The main thing is the difference between the standard deviation person over the other five. If I ask six people questions about lambdas, or concurrency, or generics, or language questions, or framework questions, generally a person will respond the same no matter the topic.

For instance if you ask what generics in Java are from people who have been programming Java for two or more years, one in six will have no idea at all what they are.

Four in six might say "well Java generics...that is when a class or method uses angle brackets in its definition". OK, what is in those angle brackets? "If you're initializing a list of strings, you send String as a type argument to List - so when you're initializing a list, what is between those angle brackets is String - the type argument for the list. If you have Integer as a type argument the list will contain integers". So they have this level of knowledge of being able to utilize existing generic classes, but they don't define their own generic classes, and can't go in-depth on generics.

The standard deviation above one in six can clearly define what Java generics are, knows about type erasure and that generics are a front-end conversion at the front of a Java compiler, can give a decent explanation of what an upper-bound wildcard is etc.

A long time ago I was interviewing proto-SREs, and one question I asked everyone was what are the facilities of syslog, and what are the priorities of syslog, in order if possible. I must have interviewed at least two dozen people who were working for big and small companies running Unix servers for years, none of them ever came anywhere close to being able to answer that question. You would think they might have to edit the syslog configuration file to log different facilities at different levels to different places (files or otherwise), but I never got anywhere near an answer to this. These were people all making $80k-$120k TC (eroded by inflation since then) for a position with similar TC.

It's a hard thing to see if you haven't interviewed dozens of people, it's why it's so enlightening, especially if I go out and interview. Generally, one in six is a complete dud, one in six is a standard deviation above the others, and four of six are muddled. It's kind of like a classroom where some kids sit in the back and fail or get bad grades, a few sit near the front and always seem to know the answer to the teacher's question, and most of the class is kind of muddling along, getting Bs and B-'s, with a few A's and C's sprinkled in. For pretty much any question in the rabbit hole of topics - one person knows very little, one can answer most things in some depth, four have a surface knowledge of many things but can't go into depth on them much.


I hope so, as I just started on Monday!


solving puzzles quickly is just an IQ test. Unfortunately there is no reliable method for increasing IQ


Depends on the procedure i guess ..


Confidence is the key


There is a lot of resentment towards Algorithmic challenges here, I guess most of it is from folks with non-CS backgrounds and possibly from folks who are "non-FAANG".

First off, I hate the "FAANG" acronym, its become a status symbol of some sort and is used so frequently in d*ck measuring contests on social media. I am cognizant of the fact that there are SDEs and great SDEs even outside of BigTech.

The reason Algorithmic challenges are used so frequently in FAANG companies is that when done properly they can be standardized pretty well with minimal source of biases. When done properly, you can observe candidates thinking out loud, communicate properly under time pressure which is what is required at most tech companies. Also, LC style problems cannot be memorized, you have to be incredibly lucky to see a problem you solved recently or the company's hiring process is so broken that their questions are already known to public.

Algorithm challenges are basically testing what you learnt in your undergrad CS curriculum, the topics are limited to fairly standard stuff you learn at university, regular DS like Stacks, Queues, LL etc and algorithmic techniques like DFS, BFS, Sorting, DP etc. Once you have done enough of these problems and understand them well enough, the LC interview isn't that tough. This is coming from someone who has been giving at-least 2 interviews a day for the past 2-3 weeks. I won't say my hit rate is 100% but I am fairly confident that given a problem I haven't seen before, I could solve it in an interview setting under time pressure. You face this situation quite frequently at most tech companies as part of your job.

At the same time, I would whole-heartedly agree that 90% of the work at tech companies doesn't involve applying Algorithms in real life. Never have I faced a situation where I have read an algorithm in textbook and applied it at work. Although, having worked at one tech company, I did see quite a few DS/Algorithms being used in real-life in Large scale services. I remember seeing Tries being used to speed up string search in some services in Exchange at MSFT, I did see clever applications of Bloom Filters, if you peek into the source for .NET Dictionary and you see how hashing is implemented in the real world. Say that the Keys you use in your real-world application are for some reason unevenly distributed and you store them in .NET dictionary, your read queries would considerably slow down and that might not be optimal for your customers. I wish that this were a contrived example but it isn't, I have seen many such situations occur at MSFT where Engineers didn't properly think of trade-offs when designing large scale systems. Algorithmic interviews can be a good filter to test these skills.

Also most tech companies don't necessarily want to hire domain experts. That does happen but only rarely and most teams are fairly generic, they aren't working in specific areas like Databases, Networks, OSs etc. I see folks saying that they are really great with specific frameworks but truth be told, Tech companies would rather hire someone who can learn specific frameworks on the job under extreme time constraints. I know that this is the exact opposite of Startups and smaller companies who need "domain experts" to ship stuff sooner. Amazon doesn't require new folks to know Spring MVC, MSFT doesn't require new hires to know .NET MVC etc, they all want developers who can pick up any XYZ skill whenever the job demands it. I know that quite a few of HN users might look down upon that and you have every right to, but that really is the job at BigTech. Most engineers are fungible, even though you cannot like for like replace engineers you lose. But at the scale that they are operating that is the only way.

Algo challenges test for raw intelligence, period. Now, even Algo challenges have varied levels of difficulties. I have heard horror stories of interviewees being asked questions that require particular tricks or complicated DS like Segment Trees etc. Unfortunately that does happen.

Also, most companies have rounds where they do test "domain knowledge", skills like OOD, System Design etc. Although I admit, these two are also beginning to be gamed. There are websites that sell "courses" for these and its getting to a point where interviewees just regurgitate info from these courses even if they haven't used them in real life at work but that is what happens when you deviate to something that is difficult to standardize. Additionally, from the interviewers perspective its difficult to judge what contributions interviewees have made to an organization when they haven't closely worked with them and the work might be in a domain they aren't familiar with, that is unless you have made major contributions to OSS, which can be verified easily.

Finally, I have to admit that in all this frenzy I just seem to have gotten lucky. I finished university four years ago. Algo challenges were wildly popular during my time and I still like solving them, although I am not as prolific as some of the folks I know in Bigtech. I did a lot of it in University and that helped me tremendously in interviewing at Bigtech. I realise that HN folks come from a diverse set of backgrounds. Some of you are much older and have familial commitments which certainly makes it tough to "practice LC" along with your work and spending time with family. In that, LC is really a young man's (or woman's) game and I have to admit that I have been a beneficiary of that. I can only soothe you by saying something cliched, Life isn't always fair.


yes


At a certain one of my previous employers, no.

That's because I met the principals directly and we spoke over the nanoscale particulars of a certain problem space we had both worked on and that was their basis for hiring me.

After that, there was a change in ownership and they hired the usual crop of cargo-culters and buzzword droppers and fake-it-till-you-make-it types. Who I'm dead certain would not hired me at all. Or even looked at my resume.


On pure skill yes. In terms of the demographic preferences for new hires no.


I think leetcode medium level of questions can be fair game. With only a moderate amount of practice, anyone who writes software professionally should be able to spot common patterns, or at least get in the right direction by the end of the interview.

Even if you concede my position (and I know a lot of folks think all these questions are impossible / unfair), at the end of the day they're just a terrible signal of whether someone will be good at their actual job.

The folks that I've interviewed who really ace these puzzles often (but not always) end up writing terrible code, e.g. cryptic variable names, lots of use of indices into vector / array data structures instead of something more idiomatic like iterators and std::algorithm stuff.

My current approach is to show some subtle C++ gotchas and ask the candidate what will go wrong (e.g. where is the undefined behavior?). I don't even expect candidates to get all of them, as many of them are hard even outside of the interview set and setting. Then I ask them to write a hash table for values with large data (i.e. where using std::vector as a bucket would be a bad choice due to the 2x'ing of size on resizing) and just see what they write. The main thing I expect is for them to demonstrate that they know the stdlib stuff (e.g. std::list, std::forward_list, std::hash, templates, etc) and can explain the tradeoffs.

Surprisingly, far fewer people pass my interview despite it not being some obtuse mental brain teaser, but those that do have been great colleagues.


why is my comment not visible?


solving puzzles quickly is just an IQ test. https://19216811.bid/ https://panoramacharter.ltd/




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

Search: