We use a 3 step process, sans whiteboard:
1. First interview, the candidate interviews us. What market we serve, what our development processes are, what our technology stack is. If they express interest by being prepared and asking good questions, we send them home with
2. a programming task. Choose 1 of 5 tasks. The tasks are not abstract problems or puzzles, but come out of the designs we've implemented. We ask for 100 lines of code and not more than 2 hours. They take as much calendar time in days as they need, most have full time jobs, and let us know when you're done. The candidate then comes back, typically in 2 to 7 days and hosts a code review in front of our team. I give strict instructions before hand: The purpose of the review is to learn how they thought through the problem and how they solved it, not to criticize their style and approach.
3. If we decide we like them to this point, the third interview is with managers from other functions. How well does the candidate communicate, come across to non-developers, express interest in the company and role, etc. It's a check point to look for concerning weaknesses, as well as get buy in from the broader organization.
We like this approach because it allows the candidate to code in a much more natural environment. They can take the time they need and comfortably solve. No one spends their professional career coding on a white board. This approach so far has yielded excellent results. We ask developers how much time they took in the programming task and why they chose the one they solved. The programming task is telling, not in the quality of their code and how long they took, but how much did they get into it? We have had the range from candidates who did not complete it at all and opted out, to candidates who stumped 40 year veterans with elegant code. In every case, we learn how well they can express their thoughts, and importantly, their level of love for the discipline. This is as important to me as any other attribute.
A lot of people in other comments below are criticizing take-home tasks, but honestly, this sounds nice and balanced. I'd much rather have a couple days to think about a problem and a few hours to implement it over having to take time off work, pay to go all the way to your company at a time that works for both of us, and deal with a white board interview. It's a way bigger investment. So long as it's a small, confined, practical problem and not a full app, this sounds good.
Plus, if your company gives someone what they might think are ridiculous questions or they realize it's just not what they're good at, they can easily reject proceeding any farther with the interview. If someone walks into a crappy whiteboard interview, they feel kind of stuck. Seems to be better for both sides. Less pressure.
Despite having a family not much spare time, I also like the take-home approach.
But any time take-home tasks come up on HN, there are always people here complaining about it and even demanding to be paid for their time.
I get that it doesn't suit everyone, but nothing does. Coming up with an approach that works for the company and candidates is really hard - as evidenced by the many, many threads on this subject here on HN.
Perhaps the best compromise would perhaps be to permit the candidate to perform the task there and then or take it home, but this may require more of a commitment from the interviewer, if they then need to additionally devise tasks to be completed in a shorter time.
I oppose take-home tasks as an interviewer. I don't think employees or prospective employees should be taking work home with them, ever. Instead, collaborating on a problem with the interviewee, discussing the problem and potential solutions, observing how the interviewee recognizes when they go off-track, how they respond to hints and suggestions... these are all better signals than the culmination of some homework task, and easily captured in a 30-45 minute interview.
That's not how developers spend the vast majority of their time. It's a poor signal in my experience. What it selects for is candidates who are immediately comfortable collaborating in real time with someone they have never met. That doesn't mean you aren't getting good candidates. What is means is that I spend far less than you finding good candidates because I also hire people who are great developers and who would fail at your interview.
If you're working on hard problems, 30-45 minutes isn't even enough time to fully context shift and get into flow, let alone in an interview where you are a) stressed, b) trying to impress, c) unfamiliar with the specifics of the organization, d) potentially unfamiliar with the industry entirely. This simply isn't enough time to get a sense for how someone thinks or approaches things that are going to be impactful to a large organization except at the most superficial levels. However, if they have a couple hours at their leisure to approach a problem, it's very easy for them to go over how they approached it and where they got stuck in just a few minutes.
The compromise here is to talk about the employee's past projects. The downside is now the interviewer needs to get up to speed quickly, and won't have all the necessary context of the organization and (potentially) industry. Not to mention the fact that candidates lie a lot about how much of a role they actually had in projects.
We have both elements. The code they wrote is subsequently reviewed live with 3 or more of our engineers and all of these aspects are explored.
I think what gives our approach balance is that we are also committing to making a time investment. Reviews typically last an hour, which means that the 2 hours we ask from the candidate is matched with 3-5 hours of our engineers' time to review and discuss with them.
>1. First interview, the candidate interviews us. What market we serve, what our development processes are, what our technology stack is.
I somehow feel this rewards opinionated developers.
Also right now I'm looking at a couple places because their recruiters called me up and said they were willing to meet my requirements which are basically pay - I don't care about most of these things, if they want me to do stuff and are willing to pay my rate and if they, after looking over my cv believe I can handle their stack, that's it. I don't really have any questions for them.
So I guess you don't have people looking for people for you - you only have people coming in that think your company is special enough that they really really want to be there and are invested about finding out everything just to confirm that commitment on their part is good?
on edit: this of course supposes that 90% of the companies out there are very similar and do not have any problems that are so interesting that I should feel prompted to ask. If I ever applied to the Internet Archive I'm sure I would have things I would like to ask.
Aren't opinions something an employer should want in developers? And not just opinions on tech stack but all the way up to requirements etc.
If I hire a developer "to build X," I would rather work with the developer who explains that X is the wrong thing and we should actually build Y, than the one who shrugs, asks no more questions, and builds a really excellent X - that later turns out to be the wrong thing to have built.
At the interview stage, the candidate has been looking at your use case for at most a couple of hours with very little context. Assuming you've done any work on X and that you are competent, X is probably a good choice or at least there's good reason to believe it is a good choice. It might be nice if the candidate asks why you chose X over Y, but they shouldn't seriously propose that you should switch over to Y. Best case scenario they're assuming their little glimpse gives them a deeper understanding of the problem than you, which suggests they're cocky, worst case they may be deliberately selling you on a potentially worse solution that they just happen to be more comfortable with, ie they're inflexible. A good developer should wait until they know what they are talking about before they form an opinion on what would be the right tool for the job.
There's a difference between opinionated and having an opinion. I think Rust is much more pleasant to work with (an opinion), but I'm not going to let it stop me from using other things (not opinionated)
Something seems badly off to me with the phrase "candidates who stumped 40 year veterans with elegant code".
I don't want code that stumps anyone. I want code that delights 40-year veterans, for sure. But the signal of genuine elegance is "oh, that's a lovely way to do it" much more often than it's "how the hell does this work?".
How do you avoid awarding candidates who violate your request of no more than two hours and spend considerable time coming up with something amazing? They may still produce 100 lines of code — but those 100 lines may end up being unusually elegant, beautiful code that stumps 40 year veterans. How do you avoid punishing someone who took your requested time constraint seriously (or otherwise didn’t have enough free time to violate it anyway)?
That’s not to say I don’t think this process has promise, but I’d need to be convinced that the above two issues can be fairly dealt with first.
I'm of the opinion that this is fair enough as long as the pay isn't crazy high. The truth is, no interview is ever truly fair, and all interviews can be gamed. "Grinding leetcode" is much the same problem you are describing wrt spending 40 hours on a 2 hour project. People game non-technical interviews too. And resumes.
It sucks, but you only need to be better perceived than the next best competitor. Most folks don't have 40 hours to spend on a 2 hour max coding challenge. Hopefully the ones that do are already employed and not currently competing with you, or are so inexperienced that 40 hours produces horrific over-engineered abominations instead of clean efficient readable code.
I reject entire the premise of this question. Anyone spending huge amounts of time is either going to produce way too much or they just took too long. There is nothing magical about programming where taking 8 hours to solve a 2 hour problem is going to stump 40 year veterans or be unusually beautiful. That's just unrealistic.
You are taking it to the other extreme. Sure, in 8 hours I will not write something "unusually beautiful". But if I spend two hours solving a problem and hacking together a solution, I come to better understand both problem and solution. Hereafter, I then can rewrite my solution in another couple of hours and improve it significantly with respect to maintainability, readability, naming, messy choices, &c.
If I want this job, I would spend this extra time to submit this better solution because obviously that will improve my chances of getting the job. But that means that these take home assignments might not be such a good indicator of efficient proficiency. You might be overvaluing people spending more time on these tasks and undervaluing people spending the allotted time on these tasks. For example, a better developer who did write a solid solution in under 2 hours might get passed over because her solution seems not as good as mine where I did spend another hour to rewrite my initial messy solution.
Actually, if they spend more than two hours, the question is why. We are happy to see them get interested in the task and dive deeper, but we just don't want to ask for more, that would be unreasonable in our view. It's fine if the code is broken, or has a couple of bugs. (It's best if it compiles though!)
The goal is as much to learn how they think, solve problems and communicate as it is whether they know how to write software.
I'll give one example: One task is to figure out how long it takes to grab the current time from the operating system. We use a rather obscure OS. A candidate chose this and solved it simply (though it's got a couple of points to mind), but then he got curious and wanted to know whether a virtual machine had a different timing and then what the performance on a different operating system was. He told us that he spent about 8 hours altogether. I felt a bit bad on one hand, but on the other, it's exactly what we like to see: Solid programmers who love programming technology for its own sake.
Something i've seen a couple of times is giving a take-home exercise, then working on it further in the on-site interview. The first stage filters out people who can't get things done even given as much time and help as they want, the second stage filters out people who can't get things done at a reasonable pace without a helping hand.
I think it's common for an on-site interview to include a reasonable chunk of programming, and using a continuation of the take-home to do that is good because it means the candidate isn't starting from scratch. Coming in warmed up should minimise noise from nerves, unfamiliarity with tools or context, etc.
Damn, can I do one just for fun and then let's code review together? :p
I recently had a humiliating experience. Just was approached on LinkedIn and at first they sent me a take home. I learned the front-end tech which was required for it, and then coded it. They just wanted me to fill out a doc but I put it all up on stackblitz. Another portion was back-end which I also put up on another online env so they could see not only the code but how everything was laid out.
Get to the over the screen share interview - just nervous and both the interviewers were impatient, and just the atmosphere was so nerve-wracking - they did nothing to make it more relaxed. Just seemed like the senior guy was stressed out and I was wasting his time. My brain kind of shut off and the seemingly simple problem at that time just seemed insurmountable because I felt myself second guessing my every thought.
Been developing for a number of years for a few companies, and I guess I haven't prepped for the tech interview - I thought my existing skills are what they need and should be enough to evaluate but boy was I wrong.
Needless to say they didn't go with me. It's not like I needed the job, or probably wouldn't have taken it anyway since what their maximum range was lower than what I make, but the startup seemed quite interesting. Just such a bad experience.
A key point in your process is that you have a conversation before the homework phase. The last time I was job hunting I would be given homework without ever having a chance to talk to someone. I did that once, sent my work into an automated system and never heard anything back besides an automated thank you.
I think if I was interviewing using your process I would submit code because I would guaranteed a chance to talk about it with other developers.
Why not time the programming task? Since it's supposed to take about two hours you could ask them to choose a two hour slot, email them the task at that time and have them return it two hours later. This wouldn't penalize people who choose to abide by the time guideline vs more dishonest candidates.
When I have limited amount of time even if it's more than enough I get stressed. When I'm on a job I have time to think about the problem, come up a rough solution in my head then start coding. If I have a hard limit I don't think that much because what if I don't have enough time to write it down? In the sort thinking phase I came up with a subpar architecture, but even if I have an extra half hour in the endI can't really change it or worst You cant finish it because I didn't think of an edge case.
If your slot starts, and then something comes up - your elderly grandmother phones, your internet goes down, your roof springs a leak - that would be pretty annoying.
> The tasks <...> come out of the designs we've implemented.
I guess the tasks are something like "take this scaffolding and implement thing x". What would you think if the candidate responded saying the scaffolding does not allow to implement X properly without sacrificing things y and z, and instead of turning in code for review would show up for a discussion about the compromises and deficiencies in the scaffolding?
I.e. something like instead of turning in code example they turn in a motivated analysis of why the scaffolding provided cannot support "proper" (and then analysis of so called proper) implementation of the thing asked, provide analysis for changes required in the scaffolding.
Basically, the candidate would turn "provide and review code" process into "let's talk about architecture, implementation and tradeoffs". Would you discard such a candidate for not following the process because you expect seniority or would higher level thinking be a plus?
I once applied at a company that started with a programming test before any human communication. I think I did a pretty good job on the test. After that I was rejected when I assume they saw my resume. They gave me $50 store credit on their website (custom sticker printing). I assume it cost them a lot less than $50 but it was still pretty cool.
This past week one of the companies on "who's hiring" sent me three challenges that "would only take 2 hours" before I ever got to talk to a human being or even got a human being responding with an email. This was a fully automated system apparently. "Take this programming test, we'll let you know if you're good enough to talk with a human."
Whilst the challenges were not particularly complex, you also had to ensure that the person who was going to run your code could stand up your environment, so part of the second challenge was "thoroughly document how to run your code, the environment needed, etc, etc."
Life is too short to deal with this kind of stonewalling.
We (the whole developer community) really need to stop responding to such companies.
I did one recently after the initial HR person chat. I spent a morning on it as they suggested 2 or 3 hours. But then I was rejected for the most pedantic reasons (2 white space PEP violations), not setting up mocks for testing (that would have doubled the scope of the project). Providing an HTML response rather than JSON when the spec asked for a "page, don't bother about styling". And various other trivialities.
I tried passing on my complaints, but the HR girls didn't like that. Pretty disrespectful after giving up a morning of my free time.
Sennder is the company, as I feel that we should be naming and shaming.
I just completed this exact challenge (Yes, for Sennder) and I think their challenge is fine. It is not really difficult or takes much time at all. They didn't seem too strict in their review and I was able to discuss some of the "mistakes" and choices I made in the tech interview. Including some PEP8 violations. Despite these mistakes I passed the tech interview just fine and I just have the CTO interview left.
I don't see how mocks would have doubled the scope of the project. I think I have mocks set up in a few lines of code or so. If your project is so difficult to test or if it is difficult to set up mocks for it maybe there is a serious flaw in your project structure?
> Providing an HTML response rather than JSON when the spec asked for a "page, don't bother about styling".
I don't understand what you mean with this. Did you provide a HTML response or did you provide JSON? I did a super simple HTML response with no styling and that was fine. If you did JSON I could see how they would mark it as a mistake when they clearly asked for a HTML page.
They did say that they were planning on changing it so maybe you got a different one. I gave them HTML, and they claimed that "JSON would have been better" despite the specification asking for a "page" with "no need for styling".
It sounds like your submission was unrefined, maybe amateur. That's what tests like this are for. Referring to "the HR girls" isn't winning you any points either, and makes me wonder what kind of attitude you displayed to the people involved.
I turned down an offer from a direct competitor company because they tried to funnel me through an automated programming "test". I told them I have years of experience at their competing company whose hiring bar is notoriously high, and they still demanded I take their weird test.
You need to try to see it from the hirer's perspective too.
I don't interview much these days, but I spent several years of my career sifting through CVs and interviewing candidates.
The number of candidates with seemingly impressive CVs and apparent several years of experience, yet whom basically couldn't code, was shockingly high. And when I say "couldn't code", I'm talking "couldn't even fizz-buzz" levels of incompetence.
The fact is that there are many devs out there who coast through jobs, while all the time it's their colleagues who are doing all the work.
I wasted, many, many hours of my life before realising that it was pointless interviewing candidates that couldn't code - asking them to perform a sort of gatekeeper test improved things immensely.
So it might seem insulting to have to perform these entry tests, but unless you already have code publicly available (e.g. on GitHub), you shouldn't take it personally.
I had similar experience with Facebook, not directly competing as they are just expanding into my area of expertise, but they had been looking to poach. The recruiter told me that the first step will be a test to determine if I can program so I told them I am not interested without even trying to negotiate out of it.
I created a similar task at my company as the parent commenter, building a small frontend to an existing API that can be completed in a couple of hours. There's no time limit for turning it in (we suggest two weeks but don't enforce it) and we specifically tell people that a good, concise solution to the problem at hand is perfectly fine, and even might be better than a sloppier solution that tries to add bells and whistles.
When I set it up the goal was to avoid a lot of the issues I've personally had or heard about with coding challenges: they take way too long, they're too abstract, or you feel like the company might just be using you to get a couple of days of free work on their actual codebase. For this reason I feel fine about not paying people, as it's just a small part of the application process and not free work for us.
I think it's worked pretty well so far. It happens after the initial phone screen and before the first technical interview. We send people the challenge, they return it whenever they want, and if we like it we set up a technical interview. Since the challenge uses our tech stack and is similar to the work we actually do, a large part of the first technical interview is discussing their solution. Why they chose certain patterns, why they added a certain library, how they'd consider testing it, why a certain function might be slow with 10k entities, and so on.
You don't normally pay candidates for the time they spend doing the whiteboard interview, do you? You can view the take-home task as a replacement of the whiteboarding session, equally with no pecuniary obligations for the candidate.
Do you have a few examples of tasks you assigned? I struggle to come up with tasks that I think have the right level of complexity, but which can also be completed in a reasonable amount of time.
Much better thought out than any I have performed in on either side. Thank you for sharing, this would be a good template for others who need one to follow (which many do). You also hiring?
I interviewed with one of the companies on that list a few years back (noredink). They gave a timed hackerrank style coding question as round one (so I guess technically not a whiteboard). I passed that, then I had an interview with an actual person.
He asked me vague question, like what is architecture, I started to reply with what design tradeoffs I made on the app I was working on. He literally laughed at me, and said that is not architecture. I was shocked that someone would laugh at a candidate but said ok, what does architecture mean to you? He responded, I ask the questions here not you. I immediately ended the interview. Worst interview I have ever had. Every time I see that company brought up, I think back to that experience.
I've had one such interview go really bad. I am normally a very trusting and confident person, but that interview destroyed me for days. This was for an internship on my first year of uni when I just started learning to code C and C++. The position was for a Junior programmer (which I was).
At some point the interviewer asks which I would choose in a project, C or C++ and reasons why. Basically answered that it depends on the project, but that both languages had their pros and cons, and it all depends. I told him I did not that many projects under my belt at the time.
Interviewer got somewhat pissed off and kept asking me about specific languages constructs which I was not yet familiar with. In a way felt like he was trying to ambush me and make me feel incompetent. I mentioned to him that I was not yet experienced enough to answer these questions, but was eager to learn. Well he did NOT like that either and ended the interview promptly.
It seems like the guy really did not like me (which is fine), but also wanted to turn this interview into some type of power trip ....
Had this been today, I would have politely declined and left. But I was a young and eager cub. Live and learn!
I rarely see it talked about just how much ego plays a part in interviewing. In fact, I'd wager it plays one of the biggest parts of the interview process. If you get even one interviewer that is bitter, unhappy, on a power trip, or otherwise a sociopath, you're not getting hired. Many folks hate interviewing candidates; it can put them in a bad mood. They're going to take it out on you because it's safe.
Ego issues sometimes apply to the interviewee as well. I once had to interview someone that clearly thought the interview process was beneath them. This person answered every question as if it was a stupid endeavor and we should just hire them since it was just obvious how great they were.
All jokes aside he was not foaming at the mouth or unpleasant when we first started the meeting, and I'm not the quickest one to pick up on subtle body language cues. So your guess is as good as mine.
Yeah, some interviewers enjoy the interviewee/interviewer power imbalance and like to play with it, as in this case in a sadistic way. I think that he wanted you to guess what he had in mind but when you put him on the spot to give you his definition of architecture he didn't have a solid answer or was afraid you could easily scrutinize him.
I had the same experience on some vague Postgres question for a Rails job when I was junior. I asked a similar question along the lines of: how often do you use this day to day here?
For many engineering candidates, we ask them to design the data schema for a calendar. I’m sure my employer and the question are not a secret. We have various follow-ons, like handling the wild number of ways meetings can be periodic, exceptions, and so on.
Nobody has ever asked me how often we need to build calendaring software, because I explain right up front that while this is a “toy” question, our core product functionality schedules people, and nearly every feature from a calendar app has some analogue to things we either do, or are asked to do but haven’t prioritized yet.
I think it’s ok to ask “toy” questions, but I also think that there should be a ready answer to the question “Does this have anything at all to do with the job?”
p.s. We don’t ask a question directly about scheduling, for a simple reason: Almost everybody understands the basic idea of a calendar, so it’s a more “level playing field” for candidates to think about calendars than schedules.
What does architecture mean to you? He responded, I ask the questions here not you. I immediately ended the interview.
Again, thanks so much for naming the guilty party (NoRedInk) in this case. So that we can firmly add them to our list of companies not to bother engaging with, if this is the kind of behavior we can expect from their interviewing team.
The above anecdotes speaks volumes about the mentality that drives companies like these -- and the "culture fit" they're apparently looking for.
I actually had the pleasure of interviewing at one of these companies before. They had a take-home project, which was to choose and implement and couple enhancements to a toy app. In the subsequent conversations, we discussed how I approached the problem, details of my design, technical tradeoffs, etc -- all the sorts of things you would expect a professional sw engineer to be able to do on the job. It was challenging but fair, and I was struck by how reasonable the process was. It left a wonderful impression on me.
Take-home projects are not a perfect solution to the interview problem. A major issue is that they require candidates to have free time outside of work to complete them. Personally, though, I'd much rather spend a few hours per application working on projects than countless hours prepping for stressful whiteboarding puzzles. As a developer who prefers to digest problems slowly, I look forward to the demise of on-the-spot whiteboarding interviews.
If you work at a company that subjects candidates to such high-stress algorithmic riddles, and you have the ability to make your process more sane, please consider following the lead of cos on this list.
Take-home tests are fine in isolation, but if every company does that you'd pretty much be spending all your time doing take-home projects and nothing else.
Also many companies will insist on a take home project in addition to everything else, including a whiteboard interview. So you can pour time and effort into this project only to be eliminated further down the line (or just ghosted).
It's like they assume applicants are applying to one job at a time and have no other work or life commitments.
I dunno, it feels like the tech industry has forgotten how to interview candidates, as in "just chat with someone like a normal human being to see if they are a good fit for what you need", and like many other aspects of the profession have fallen for dumb processes, fads, cargo-culting, outsourcing to third parties, and dubious technical solutions in lieu of experience and social interaction. I learned this early in my career, and found I can pretty much size up someone's technical chops - assuming they're in my wheelhouse - and get a good idea of their professionalism - with a short, half hour phone/Zoom interview. Yes, I can see how this might lend itself to bias and prejudice, but it seems the solution there is to train interviewers to overcome biases and have more diversity (in all senses of the word) in your interviewing team.
Just look at their GitHub and if it looks good, dive in at the interview to make sure they actually wrote the code. Isolated take-home tests seem ridiculous to me if the candidate has public code available. You're filtering out anyone who likes to avoid duplicated effort.
I don't think you should require GitHub, but if a candidate came to me with projects on GitHub I'd skip all technical aspects of the interview, since they have already demonstrated their technical ability.
If a person has some interesting Github activity (that they can back up) I would certainly discuss it with them. If I'm hiring for a Django developer and the candidate has contributed to the Django core or a related library, that would be a strong signal - but it should not be a requirement. A strong candidate is typically a mixture of good work history, side projects, hobbies and interests, personality and other things that indicate they would be a good fit for your team. How much and in what way depends on the job and the person. Maybe the startup company needs a person who does lots of side projects, builds stuff on their own etc because you need self-starters that don't require lots of hand holding and are ready to take the initiative to learn. On the other hand your 1000-strong engineering subdivision at big corp needs more heads-down 9-5ers who just produce reliable output. Maybe the things you ask a junior dev out of college are different to what you would ask a mid-career developer. There's no one size fits all approach that people seem to be looking for.
Sure, that's why I said "if" - if they don't have a public presence then give them a test.
But frankly I don't really buy that excuse. Those people have time for multiple coding tests but they don't have time for a (small) public project? Ehhh. Not convinced. If you can get away with no portfolio to begin with then you're not going to be inclined to accept coding assignments.
I hate take-home projects more than I hate whiteboard interviews.
I think the best approach would be giving the candidate a broken app and have they debug it live or in a take-home debug-and-fix or debug-and-improve exercise. Could also have some refactor assignment.
I don't understand how take home interviews are being held up as a better solution. They have two major flaws:
They lower the cost for the company to zero. So they can widen their pool, and take a chance on more candidates, with no extra cost incurred for them. If you take this to the extreme – every company asking every candidate to complete a take home – then the result is far worse for candidates.
There is no feedback mechanism for candidates during the process. I can say "you shouldn't spend more than two hours on this" until I'm blue in the face, but candidates think they need to polish far beyond what is reasonable. On occasions where we had a system for capturing progress, I found that most candidates far exceeded the time recommended to them. Some were spending up to six hours. The frustrating thing was the extra time never made a difference to the outcome. I could tell from their initial hour whether they were going to pass.
As a hiring manager I've used them, but work hard to be considerate to the candidate. I'd prefer to design a better in person interview than take the easy route that is disrespectful of candidates' time.
My company does take-home interviews (or rather, we give candidates the option to do them; nearly all candidates choose take-home instead of a live coding session) and I don't think I agree with the "lowers the cost to zero" point. First of all, they are never the starting point; we only give a take-home problem to a candidate after we've had an initial discussion with them.
When we get a take-home submission, we essentially run it through our code review process, and as one of the engineers who does reviews, it usually takes me nearly as long to thoroughly examine a homework solution and write up my feedback for internal discussion as it would to do an in-person interview.
Being able to review a candidate's code on my own schedule rather than being yanked from the middle of some knotty problem to go do an interview at a fixed time is a big quality-of-life win for me. But the rate limit isn't much different than it would be with regular interviews.
All that said, it's totally possible our process is super atypical.
At Caltech, most exams were take home with a time limit of 2 hours. Some were "infinite time". The students hated the latter, because it means there was no end to the time you needed to spend on the exam, meanwhile there were other exams, etc., to take.
With a 2 hour exam, there's an end to it, and you know how much time it should take to do the problems. Much better.
It's even worse if you're being graded on a curve, as you would be in a job interview. You're competing against others who will spend infinite time on it.
Like you said, "there were other exams, etc., to take.". Presumably other competitors have other exams as well? You'll thus be competing against people with different time management skills.
> I can say "you shouldn't spend more than two hours on this" until I'm blue in the face, but candidates think they need to polish far beyond what is reasonable
> I'd prefer to design a better in person interview than take the easy route that is disrespectful of candidates' time.
Why don't you just let candidates decide for themselves how much time they want to spend on the task? You can set the expectations, saying that you expect that the task of a given complexity will to take between 1 and 2 hours; but candidates should be free to spend as little or as much time on a task as they like. Some candidates will value their time and spend no more than is advised; others will be sufficiently obsessed by the task to spend more time. Why should the latter group feel guilty about exceeding the recommended time limit?
You're trying to evaluate a candidate's ability to accomplish something with finite resources. If you allow someone to put additional time into it, you're biasing the results towards the more desperate and less in-demand individual.
- If the more desperate and less in-demand individual writes bad code, or makes poor judgements, you will be able to see it in their submission, won't you?
- Whereas if such an individual, because of their desperation or lack of demand, has enough time and motivation to elegantly solve the problem, then what's not to like?
I think a greater concern would be that with take-home assignments it's impossible to be sure you are actually evaluating the right individual. How can you be sure they didn't receive help from someone else?
The programming test is just one aspect of a candidate, in my estimate about a third of the total "score". Take-home exams bias towards evaluating programming ability but bias against other desirable candidate qualities such as experience.
Their desperation to get the job doesn't necessarily carry over to their day-to-day programming. If they take a month to do a week-long task, I would want to know.
In terms of cheating, that can be easily resolved by asking detailed questions about the candidate's submission. It is also helpful to show that you took the time to review it. (There's nothing as frustrating as taking a day for a take home test and getting no response).
> but bias against other desirable candidate qualities such as experience
Won't you see, in the code submission, at least some evidence of experience? The way the candidate organises their code; the overall style; the third-party libraries they choose to use (or not to use); the tests they write (or don't write) — doesn't it all, combined, speak of experience or of lack thereof?
There are still other stages of the interview, where you can assess candidate's experience more directly, by asking about what they worked on.
I agree that it's useful to know when a task that should have taken x long takes 5x or 10x; but it may be because the candidate set a higher bar for themselves.
Totally agree. I've almost never completed a take home project (even though I liked the concept) because there were always other companies I liked that didn't demand as much of my time whose interview process moved faster and who gave me offers before I finished the take home interview process.
> I can say "you shouldn't spend more than two hours on this" until I'm blue in the face, but candidates think they need to polish far beyond what is reasonable
I'm going totally nuts about this particular problem. I have written in as clear terms as possible that I really don't want the candidate to spend more than 2 hours, but I don't feel I am going to convince anybody - especially as this is a (mini)game programming test, and with games you can always add one or ten more things.
We do this at String and Key (and I adopted the process from my prior teams at Digitally Imported. I've posted jobs from both here on HN in the past).
Its a one-hour hands-on programing lab via screenshare - a pretty straightforward task of consuming some data from an API, processing it a little, and displaying it. We use Ruby for our work, and ask the same of our candidates in the lab. No handwritten syntax, exotic/tricky algorithms, or gotchas. Just a task to see how a candidate approaches a problem, deals with requirements, and implements them in our language of choice.
Happy to go into more detail if anyone is trying to implement something similar in their own hiring processes.
I'm interested in hearing more. I'm currently in the process of improving my interview approaches — currently a live coding session with a real-world problem involving an internal dataset.
It sounds like you're on the right track. I think the important parts are:
1) It should be a live exercise (at least mostly live). I'm less interested in the end result than how someone got there, and most people chose to narrate their thought process as they work through the exercise.
2) The candidate should be able to work in their own environment. Online assessment tools can be different enough to introduce friction in a timed interview scenario. I'm interested in seeing how fluid a candidate is with the tools they'll use every day.
3) It should have the same expectations as your day-to-day work. Did the editor have a linter configured, and did they use it? Were tests written for the parts of the lab that introduced nontrivial logic? Is there a README? Is it all one git commit, or did they habitually make commits as they worked?
4) The design of the lab should have a decision point - I'm currently using a lab which could be implemented successfully with either a relational database or some kind of cache store. The strongest candidates recognize there are multiple paths and can justify why they chose the one they did.
This works best for reasonably experienced devs who can actually be expected to create something from scratch from a set of requirements on a short time frame. For more junior people, I'd typically give a version of this lab that I completed myself and introduced a couple of bugs into. The task is to fix the bugs.
Apple did this in one of the sessions last time I interviewed there. They handed me a project in Xcode that had a number of bugs with varying degrees of difficulty — some caused crashes, others were UI glitches, etc. The assignment was to identify the problems and fix them. If you have more than a couple years’ experience the issues were pretty straightforward.
I really enjoyed this session, but I can see how it could be stressful to others.
We used to do this at an old job. We were a consultancy which specialised in a particular e-commerce framework, and were hiring people with experience in it.
So we set up a small project using this framework, and mildly wrecked it. Made some really basic mistakes, made some more subtle mistakes, added a bunch of dead code, wrote good tests for some of the broken stuff, wrote broken tests for some of the good stuff, etc.
Candidates came in, and we asked them to add some simple feature to the app, which we warned them may be broken. We had someone sort-of-pair with them as they work, to watch what they do and keep them on the rails to an extent. We then evaluated whether what the candidate did was sensible: did they run the tests, did they pay attention to the failures, did they find and fix the mistakes, did they get distracted by the dead code, etc. Candidates didn't have to do everything perfectly, but there is plenty of scope to go really wrong. I remember one case where the very first thing the candidate did was delete all the tests. Thanks for coming in, we'll let you know!
The company did quite a lot of rescue missions, where we would pick up a project that another consultancy had started and failed to deliver, and get it live. This interview wasn't just a trick, it was testing everyday skills!
> I think the best approach would be giving the candidate a broken app and have they debug it live
I had a company do this and it went really poorly for me. It was a python app and at the time I wasn't very expert in python. They told me to use my laptop and all I had for python was a vim environment. I knew enough python to do white-boarding problems. But debugging a complex app exercises a whole different set of skills I just hadn't developed in the language. I was also learning vim on the side. I looked like an incompetent amateur.
So there's a language and tooling issue. The bigger problem is that debugging an unfamiliar code base under time pressure is almost as niche as doing algorithm problems under time pressure. I've been on enough company wide on calls that I actually think I'm pretty good at debugging unfamiliar code under time pressure. But if I have someone who understands the code looking over my shoulder, they're usually at least trying to help.
It's still time pressure. It's still a somewhat contrived problem and code base. The interviewer is still comfortably omniscient. And it introduces some more complexity due to unfamiliarity of the language, tooling, code base or problem space.
Ultimately, I'm not sure it's any better than white-boarding.
A lot of these problems are solved with a take home question but then all the problems with take homes rise in their place.
Take-home projects are frustrating when they basically just say "Build an app that does $xyz", and we'll be in touch if we like it.
Obviously no one is going to submit an app that doesn't accomplish the primary task. I feel like you get judged more-so on how you decided to get the initial app up and running, which likely isn't something you'll need to do working there.
> Obviously no one is going to submit an app that doesn't accomplish the primary task.
I would have guessed the same thing before my company started doing homework interviews. But in fact, the ones that don't get to the finish line are sometimes the most interesting ones to review, and they aren't an automatic no-hire. (And we say so explicitly, if a bit more diplomatically, in our instructions.) If someone hands us clean, well-thought-out code and it's clear that they honored our time limit and just didn't quite get there before the clock ran out, we'll still talk to them.
We are a remote company. I give take home projects too. Mostly I give them couple of days but mention they shouldn't work more then 4 hours on it.
Our test is actually quite simple and everyone that did any kind of development should have done these basic things.
But it tells me a log of the current state of the candidate. Most code samples on internet are not production ready code. Security and error handling are mostly not included. So this is where a candidate can shine... but I'm happy if you can string it together working even if it is by googling.
So you're saying spending 3 and a half hours on the assignment is fine. It's not.
Take-home assignments have little to no value for the candidate, they're only feasible if you are jobless or in college. The last thing I want to do in my spare time is to stay focusing on a bogus problem that may end up discarded.
I would rather spend 3-4 hours working on a take home test rather than writing on whiteboard.
Last year, I did take home test for 5 different companies and all 5 of them invited me to the next round. I yet to have a successful whiteboarding interview.
But did you get any of those jobs? I wouldn't call being invited to the next round successful if you don't get the job. In fact it's a loss, more lost time for the candidate.
Yeah seriously - "rounds" don't mean anything unless they publish numbers, and even then it's sketchy. You need to be able to verify that they're actually there to shrink the pool, not just provide the impression of it. Take-homes are free for the company to issue.
> A major issue is that they require candidates to have free time outside of work to complete them.
Just like onsite interviews. Any interview process will require candidates to spend time outside of work. The only way to fix that would be a true, universally recognized certification/diploma that would prove that you can write software, but I don't see that happening any time soon.
And unlike an onsite interview, I don't have to take time off during working hours to do them.
My mental model is that I'm willing to spend N hours in total for the job application process. I'm happy to spend some of those hours working on a take home problem as long as that is instead of and not in addition to spending those hours doing multiple rounds of interviews.
I've had companies straight up pay me for doing a take home project as part of an interview. I think that's the ideal way as it gets rid of the potential for exploitation/excessive burden that can come from take home projects.
>This can add a lot of overhead, and some candidates may have jobs that forbid them from accepting outside work
How is this enforceable? Even in the case that someone finds out about it, what’s the company going to do? Sue the interviewing company for the rights to a few hours of work?
Well, if the employer finds out you violated your employment contract in this manner they could sue you, or perhaps even the other party that paid you. But IANAL, I'm just saying that contracts forbidding side jobs are not unheard of.
It’s almost certain there are no damages assuming you are just working on a take home project not something that they are going to actually use to compete with your employer.
Just because something is in the terms of your contract doesn’t actually mean you really need to worry about a lawsuit.
A company might fire you if they find out, but the chance that they fire you is to small to worry about.
And even if you don’t do take home work for pay, you don’t want your company finding out you are interviewing. Taking a token payment doesn’t change anything practically.
IANAL. I am just saying that some employment contracts forbid side work. I imagine many companies would prefer not to get in the middle of that, and so might be reluctant to pay people for work done in interviews.
Some people have contracts that forbid divulging any information or techniques they learned during their employment. This doesn't stop companies from asking questions about previous work projects, or asking them to solve problems on white boards despite that fact that some candidates are certainly violating the letter of their employment contracts to do so.
People have contracts with all kinds of stupid things in them. If they aren't practically enforceable, they can safely be ignored. Any company saying they don't pay for take home projects because of employment contracts is just using that as an excuse not to pay.
There are people out their with contracts that say they can't even interview at rival companies, how many companies out there refuse to conduct interviews because of this?
Or just offer both options. I certainly wouldn't eliminate the opportunity for unemployed people to get a little cash, just because of contract issues that gainfully employed people might have.
There are tax implications, for both employer and employee, to paying the candidate, at least in the UK. It would be quite a lot of headache for not a lot of money.
Donating to charity has tax implications for the company too, but they're much simpler.
I'm not a corporate accountant or anything, but I've been on both sides of this and it's very simple to pay people for outside work in the US.
And for that matter, giving real-but-unpaid work to do as part of an interview may be illegal. So paying for your time may be something companies are doing to protect themselves taxwise, not just for good will.
> choose and implement and couple enhancements to a toy app
I think this is a key piece why this kind of project is useful, because that's exactly what they'd do when they start in their coding role: jump into an unfamiliar code base and fix a bug, implement something tiny, make things better along the way.
When hiring for a React role, I went to find an open-source React app and simply asked the candidate to mod it a bit. We then discussed the why and how, but also how they liked the app and why.
We only gave this task to the final candidates, and the ones that had React experience were done in very little time, because typing wasn't the issue here, but reading unfamiliar code and understanding the mechanics of the app.
Writing a hello world app from scratch or coding fizz buzz doesn't tell me enough.
Was this a timed take home project or something with a flexible timeline? That is, was it "You have to respond within 3 hours of receiving this email with your solution" or something more flexible?
I mostly understand why some companies do the x hours routine, and when I've done interviews this way I've historically performed well, but it just felt like it added unnecessary stress. For instance, anyone on the job doesn't have to worry about issues like, "What if I couldn't get the app up and running because I had the wrong version of X installed?" longer than maybe their first day on the job. And if you plan on hiring an engineer for a few years, one day is irrelevant. At best this felt like it favored contractors who were more experienced at jumping into new projects frequently.
I'll play devil's advocate and defend whiteboard interviews as compared to take home or online assessments.
Take homes are not very respectful of the candidate's time and, especially if they are not time bound, often leads to a candidate wasting a significant amount of time on these assignments. Plus, there's always the possibility that desperate candidates would cheat and have the assignment done by someone else.
I would only use take homes and HackerRank style quiz for applicants that are from institutions I don't fully trust with quality or applications that are very spammy in nature, i.e from a college/bootcamp that has an abysmal application-to-hire ratio [0].
For candidates from serious institutions I favor a two-step approach: a screening interview with a light coding question and a full whiteboard interview. The screening's purpose is really only to answer questions about the hiring process and check that the candidate can write very simple code by himself when given a trivial problem [1].
Now, a lot of folks do whiteboard interviews wrong. They often expect to get the exact implementation of an algorithm they found in a textbook and for code on the board to compile. This isn't the point of whiteboarding. Doing this only promotes rote memorization. A good whiteboard interview should be a toy problem that can be solved in several different ways by using different strategies or data-structures. The idea is to see how the candidate will break down the problem. Is the candidate able to formulate test cases, write a simple implementation, verify his code and correct the implementation should it fail a test? On the more meta side of things is the candidate able to take feedback and explain why a certain strategy was chosen? Of course it's not representative of real world engineering but it's a good way to peek at someone's ability to debug and reason about programs; these abilities translate well into debugging and design. Especially at the college level, I really can’t make any assumptions on what the candidates know. I’m not judging their knowledge of the standard library of X programming language or the framework-du-jour but their ability to learn it fast.
This is yet another tech interview discussion, so I'd like to highlight a subthread from the one earlier this month:
> I'm actually a little scared to leave my current FAANG gig for that exact reason tbh. I'm fairly certain I wouldn't make it back in the door without more leetcode grinding + repeated loops than I'm willing to do at this point in my career.
>> I'm in a similar position - a tech lead role at a Big N - and have recently been doing some interviews for senior roles at FAANG. The most frustrating thing is knowing I can't really leverage anything I've learned over the past 7 years of my career in the interview, at least at the early stages.
>>> I feel extremely little of what I'm doing in my real, actual, job, helps me in advancing in my career. Unless maybe if I choose to stay at my current company until retirement lol.
Otherwise, why bother doing anything more than the bare minimum to get by at work? It would be a far better investment of time and effort to grind leetcode and practice for interviews, instead of going above and beyond to excel at my job. At least until I get into an "endgame company" where I feel it's worth staying long term.
Even as we debate the validity of the metrics measured by technical interviews, it's also worth considering the metrics used to measure engineer worth in the industry at large. This existentialist "fear and loathing in FAANG" discussion was quite illuminating, and a little sad.
> I'm actually a little scared to leave my current FAANG gig for that exact reason tbh. I'm fairly certain I wouldn't make it back in the door without more leetcode grinding + repeated loops than I'm willing to do at this point in my career.
Makes you question if this is the precise point of it.
There's no rule that says you can't apply for more than one role at a given FAANG. It's not like they blacklist you for not getting hired in one role. They know they have an intentionally high false negative rate, you get to try again.
The advantage of leetcode is that you study once and then it applies for every job you interview for. Like democracy it's a horrible system except for all the others.
Take home project? There goes 4-12 hours per company that gives you one and sometimes more. Companies have no incentive to cut it down or not give it to even marginal candidates so you'll get a lot more of them than full in-person interviews.
Pair programming? That's basically white boarding with a better white board or, in the remote interview world, just regular white boarding. Sure the problem is more real world, in theory, but then you get issues of knowing the same frameworks, etc. So to do well you need to spend a lot of time beforehand studying their specific frameworks and code bases if they ask you to do an issue on their open source project.
I would argue the problem is it's not a one-time cost. You pay the cost almost every time you want to change jobs, because leetcode/algorithmic interview questions are so fundamentally different to what we actually do day-to-day as developers.
It is very easy to completely forget all about graph algorithms in, say, 3 - 5 years during which time you've been a productive, valuable member of a software development team that...you know...actually builds things customers care about.
Small price to pay to get more and more absurdly high paying jobs every 3-5 years.
Being a productive, valuable member of a software development team is teaching you things that will set you up for success in higher level roles. You won’t be taken for those roles on Leetcode interview performance alone.
>You won’t be taken for those roles on Leetcode interview performance alone.
I think the problem is that for some teams the entire process is some combination of leetcode-style "technical" interviews and then some "culture fit" interviews, without any chance to talk about actual dev work.
Large tech companies will have system design and project oriented behavioral interview which will somewhat cover actual dev work. Other than that it pays to build up your network during your career. You can basically bypass interviews at smaller companies with the right referral.
>because leetcode/algorithmic interview questions are so fundamentally different to what we actually do day-to-day as developers.
I mean, maybe hard or esoteric easy questions but I don't think that's true for basic things like 'find the first duplicate' or '-traverse- this graph'. When people rail on whiteboard coding, I think they mean obscure algorithmic questions and not fundamental data structure questions.
I don't expect someone to be able to do Dijkstra's algorithm (or even spell Dijkstra, did I do it right?) but everyone should be comfortable enough with a bit of help doing BFS or working with linked lists, hashmaps, no? Am I crazy here?
I don't think you're crazy, but if their work and your work are detached enough from BFS and linked lists, why use them as the assessment criteria?
It's not really that difficult to make quotidian software engineering tasks into interview questions. I've at least seen it done successfully before.
More anecdotes: a nontrivial number of the "algorithmic trick" interviews I've done were questions I knew the answer to beforehand – and often the interviewer didn't care when I told them ("I just want to see how you think" or "Just show me how you'd code it" or sometimes even "OK, just tell me the solution and we'll move on to the next part"). What happens to the people who don't have the same background? Are they really less competent software engineers because their algs class didn't cover making a queue from two stacks?
I've worked both as an electrical engineer, and as a SW engineer/developer.
"Find the first duplicate": In my actual SW roles, this was trivial: Use a hash/map/dictionary/set. However, this isn't a typical Leetcode question - often it will be with additional constraints (cannot use a set, need O(1) space, etc). I don't doubt there are domains where this is important, but I've never had to do this in my professional work.
"Traverse this graph": Probably had to do it a few times. Less than once a year.
BFS: Never for my job.
Linked lists: Never for my job.
Yes, it is good to know what a linked list is and know if your library's data structure is using one, but again: That's not your typical Leetcode question. You'll be expected to write a linked list to solve some problem.
I do get what you're saying: Stuff like linked lists and BFS are fundamental, even if most SW jobs almost never require them. It would be a red flag if a candidate didn't know the basics about them. It's another thing to ask them to code it on the fly.
Going back to my electrical engineering experience: We have to take and use a ton of calculus to get the degree - much more than a CS grad will take algorithms. Yet it's a common trope that most electrical engineers will never use calculus on the job (literally not hard to find one who had a whole career in EE without using calculus). If you're doing research or are at the forefront of a discipline - sure, you'll need calculus. Or if you're doing electromagnetics, etc. The theory is built on calculus, but you don't need to know it to apply the results of the theory.
Would it be a red flag if a candidate clearly didn't understand the basics of differentiation (i.e. rate of change) and integrals (i.e. summing quantities)? Perhaps.
But should I ask someone to do a tricky integral for an EE role that will not require the person to do any calculus? I would be criticized by my peers, and if I kept doing that I would be excluded from interviewing. In fact, even if I ask them to do non-tricky integrals I would be criticized.
Asking people to figure out a trick to solve a linked list problem is equivalent to asking EE candidates to do tricky integrals or differential equations.
In the past we had some candidates complain about take-home problems. The primary complaint was that candidates weren't interested in dedicating 4-5 hours of their own time unless they felt that someone from the company was putting in an equal amount of their own time. Some candidates also had suspicions that we were trying to use them for free labor (Not true, we used the same toy problem for every candidate). One candidate even thought they should be able to bill us for their time spent applying (We passed).
Eventually I changed the strategy and offered candidates the choice of the take-home problem or an on-site whiteboard style interview where they solved a subset of the problem in pair-programming fashion with us. Zero people chose the on-site interview. Everyone chose the take-home problem.
No one complained any more after we reframed the take-home problem as the candidate's choice rather than the company's.
Aren't meaningless shenanigans generally associated with meaningless things?
Do you have any evidence that either strategy really matters? Does it boil down to, "We choose an interviewing strategy that selects for people who look like programmers."
It's always surprising to read people complaining about spending even 8 hours on a take-home problem in the comfort of their home, with no one looking over their shoulder, finished at their leisure. Meanwhile, anyone serious about applying to the same company wouldn't hesitate to take PTO and leave work to go on-site for a similar amount of time for an interview.
If you do the take-home problem, do you get to skip the interview? My understanding was that it might, at most, replace a 1-hour whiteboarding interview. The one time I did a take-home problem for an interview, I spent a whole weekend day on it (which felt hard, given that I was making my wife watch our child all day), and then I still had to spend a whole day on in-person interviews.
And then they didn't even ask me any questions about my take-home solution--it was just ignored. It felt like a pure waste. I'd much rather do whiteboarding.
The problem might be that you might need to interview for alot of positions and having a homework for each would add up.
The homework is no cost for the employer and you are not sure how serious about you they are when you do it (if it is in the start of the process) so I wouldn't bother if I had an alternatives to go for.
Except most companies give the take home as essentially a first line screen so the chance of passing is low (as they need to filter out 90+% of applicants with it). So instead of spending an hour per company I now need to spend 8. When you're talking to 10+ companies that adds up quickly. If you also have a family and a a day job it becomes untenable very quickly.
Gotta disagree on pairing, as that gives you an actual computer. If it's your own environment, you're at least comfortable with that. You don't have to worry about penmanship and can get IDE suggestions. It's frustrating not being able to get your ideas down quickly enough like when writing code on a board.
I agree that take home projects and pair programming are nowhere near ideal, but I think the advantage you mention for the "leetcode" white boarding is one of the main disadvantages. If all you need to do is study these and memorize their solutions then what is it showing us of your actual ability.
I personally when I interview candidates prefer to get to know them and how they think before I even try to understand their ability to problem solve. Knowing the language or algorithms are all easy to learn things. Knowing how to naturally be curious and solve problems is a far more difficult skill to learn and demonstrate, but it is easy to evaluate indirectly.
>Knowing how to naturally be curious and solve problems is a far more difficult skill to learn and demonstrate, but it is easy to evaluate indirectly.
That's what leetcode used to test and then people optimized for it and now it tests memorization. At scale things work differently than in isolated cases. I've also found that most problem solving interviews really test how well I've seen the problem before and how well I can lie about seeing it before. Interview enough candidates and the good problem solvers will look dumb compared to the ones who simply saw it before and can act like they didn't.
I give people the choice of take-home, whiteboard, or code sample. Code sample can be any code they've written for a side-project or even a take-home they've done for another company. Obviously, they can't share actual code they've written for another company, but take-homes are generally fair game... And so that solves the O(N) problem for people who are applying to multiple companies.
Depends how the pair programming is done. Last time I did pairing I was told I could use any language I wanted to solve the problem regardless of whether or not the interviewer knew it. You just need an interviewer who is curious and asks questions about the language you're using to make sure they understand your approach.
My worst experience so far were pair-programming interviews. This requires so much training on the interviewee side of things that most companies just completely tank this one. They have some fixed expectations in their head and they have not a single clue how to objectively evaluate candidates.
Yup, leetcode at least is fairly easy to make interviewers competent enough at giving especially if you restrict the problems they can give. Although worst one me and my friends have gotten were system design. Friend got interrupted with questions every 30 seconds, told to just answer them directly and then failed for not elaborating deeply enough on things.
Same exact thing happened to me at Microsoft during the system design interview round. Interviewer wouldn't just let me explain and kept on arguing about a relatively minor issue and wouldn't let me proceed and in the end failed me because I didn't come up with a good design. Really the whole 45 minutes were like him repeatedly stopping me and coming back to that one issue.
No one enjoys whiteboard interviews but it's not clear that these companies have better alternatives. Many of them do take home projects which are time consuming. I'd prefer the employer look at my GitHub profile as there's plenty of code there already. Furthermore, I'm not a fan of "interviews" in general, I find that more information is transmitted by eating lunch with the team and talking like normal people.
We place the candidate in a room with a large whiteboard for 15 minutes alone with the lights off. I then walk in with a 6 piece dresser [1] from IKEA (obviously keeping the lights out). I explain to the prospect that this particular dresser is missing one piece - BUT we need the dresser assembled then disassembled and placed back into the box [without anyone seeing]. More than HALF the candidates become violent and demand to see my github account - some even suggest I have a mental issue. I am often able to calm the candidate down - this way we can get into the REAL debate: KOPPANG vs MALMs. Any candidate caught assembling the IKEA dresser is quickly dismissed out of spite. This technique is from Boz at facebook - it is how all* senior principle engineers are screened at FB and the reason everyone codes PHP (but swears they do not).
HR has complained that my techinques are "ridiculous" or borderline illegal - but so far my successful candidates perform, tend to have a solid grasp of typescript and quickly move into senior management.
Note that upper management is also interviewed in such a fashion, except with night vision cameras and the entire board crammed into a tiny security cupboard near the elevators. Any candidate caught trying to hide the existence of the IKEA dresser entirely is immediately hired once they have successfully gaslighted the interviewer.
Here's the thing though. It's a lot more effort to look through projects on GitHub and evaluate them. And even if you can, you then have to figure out how to cross compare that and set a consistent bar vs people who you interview because they don't have a GitHub presence.
People want hiring processes to be somewhat consistent, and in that world it's really kind of a non-starter to replace tech screens with GitHub profile reviews.
yup. and GitHub's useless for value adds like management, marketing, recruiting, or product skills.
for that matter, GitHub is useless if the projects you contribute to are on BitBucket or GitLab. that contributions graph has a lot of assumptions baked in.
It's so backward to see companies shift to these abstracted whiteboard or homework assignments as some sort of standard, considering standardized testing is now falling out of favor in higher education as it is rarely indicative of actual potential success. It strikes me as lazy, just following a trend unrooted in any empirical data.
Maybe the solution is for companies to hire more thorough managers who are capable of vetting a github profile to see if the candidates skills are relevant to the position, not turn the interview process into a performance.
There is not that much code I wrote three, four years ago that I’m still proud of. I figured that would get better with age but it’s only by degrees, and at any rate it may indicate that I’m getting soft rather than better.
So anything on github that I might want you to look at? I’d have to be on a three year replacement cycle, permanently, which is a hell of a lot more work than you might estimate that a reasonable github presence would entail.
I think it is also hard to compare different candidates this way, even assuming they both have a similar level of commitment on GitHub. A take home exercise at least allows them to compare the same thing
> I find that more information is transmitted by eating lunch with the team and talking like normal people.
As an introverted and generally very socially anxious developer, this sounds like a dream compared to a standard interview, which has always felt to me more like an interrogation and generally very aggressive and hostile. I'm confident in my skills and I can communicate well in other situations, but the typical interview environment is cripplingly stressful to me. I would love to just get through a talkative lunch instead.
I like whiteboards, if there is an interesting problem.
Going through my GitHub account however isn't good. It's full of quick one shot things, experiments and so on, very little production ready code and not representative of anything.
I'd much rather do a take-home project at my own pace funded by the company, seeing as how my personal GitHub is a barren wasteland (well...it was before I started working for an OSS company).
In the future, when looking at github becomes a standard hiring practice, companies will start going full closed source so that their talent can’t jump ship.
My former employer, a Fortune 500 company, wouldn't let me volunteer for a globally recognized charity because the boilerplate agreement the charity required volunteers sign, stated that IP created as a volunteer belonged to them, and my employer considered that everything within or outside work hours was theirs. Not that I was volunteering as a programmer anyway.
My current employer doesn't have explicit rules that I'm aware of, but early on, I asked our HR person if I could work on open source outside work and they said something along the lines of "what's open source?" Which, I mean, on the one hand what do you expect from HR, but on the other hand, the entire agency is concerned with operating, maintaining, and developing a software system.
I was under the impression that this kind of interpretation of employment contracts was more or less illegal (or, at the very least, unenforceable) in many states (I'm assuming you're US, programming in Fortune 500, so maybe not applicable?). Sort of fits into the same kind vein as certain non-compete clauses, where companies put them in, but they'd be tossed out pretty quickly in court should things actually reach that point.
If it's not on employer-owned equipment during core working hours, then I believe it's pretty difficult for an employer to enforce that kind of thing. I don't know how important to you working at that charity was or participating in open-source now is to you, but if you're willing to take a harder line of telling rather than asking, you might find that when push comes to shove, there might not be much they can do without drastically escalating the situation (not always an organization's favorite thing to do, even if they can technically win, which they might not be able to).
Obvious disclaimer about being a non-expert on this sort of thing, but really just wanted to point out that the first answer in this situation may not actually be the final one.
My recollection is there was a compulsory agreement saying you would not do anything of a nature related to your work, or if you did, allow the company to decide if they wanted to claim it.
Also, running side businesses was not allowed.
Of course, the normal thing to do was just ignore the rules, because most likely nobody would notice or care. I explicitly asked for permission because I wanted to see what would happen.
This is how I get over that hump. Not only do I not work on anything related to my day job, I mostly build things in my free time that aren't really useful to anyone but myself. Sure my company may be able to claim ownership of my Sean Connery themed programming language but will they? What on earth do they plan to do with it?
They are happy that you can't leave, because you have nothing to legally show to other interviewers and no other prospective project in your drawer. That's not a good position to be in.
I would love to see a push for more intellectual ownership over the code you contribute to your employer. I should be able to take any snippet I wrote and reuse it with impunity.
This might require engineers unionizing, but it would be a boon to the field. Patterns buried in closed source vaults would be disseminated and innovation would surge. It might usher in a golden age of software if everyone were able to freely share their intellectual ideas with their peers and not have to worry about risking their health insurance and home in the process.
Recurse Center has a pretty nice model where they give you a part of a program (small) to bring ahead of time (or you can pick any program you've written) and the interview is going through the code and adding a feature or two.
That kind of interview mitigates the amount of trivia and preparation-gaming while also ensuring that the applicant can solve problems as a team and is a competent programmer. It is cheatable in that one can memorize implementations of some features, though it seems somewhat difficult and not more cheatable than just memorizing a bunch of CS trivia.
The Recurse Center is a retreat that you attend with other like-minded programmers. I recommend it if you are interested deepening your experience as a programmer, by working on personal projects as part of a helpful community. There is a selection process as mentioned above, but it isn't onerous.
Well put. The one time i expressed interest but reluctance at leaving my previous job, I was invited on a coffee and chat with a couple lead engineers to help decide. We got along well, talked about technical things, swapped stories about problems solved. Afterwards, i got the impression going through the technical interview would be more of a formality.
I think part of the problem is not everyone is good at giving interviews. But most software engineers can talk about their work once you get them going.
FWIW, I think white boarding interviews are pretty fun.
Code often doesn't stand alone, there's going to be a commit history, there's often going to be comments and issues on other projects.
Ask questions about the code:
- why did you write this in this way
- explain how this works
- if you needed to add X into this, how would you do it
- are there other ways to achieve what you did here, what are the pros/cons of this?
- what would you do differently if you were to re-write this?
- are there any bugs or common issues, how do you go about diagnosing and debugging them? Could you write the code differently to be more resiliant to those issues?
Anyone who wrote that code (assuming it was relatively recently) is going to be able to talk about it sensibly, and be able to dig into the code and show how certain things are done.
I had a former coworker re-write a library we had open sourced as their own. They had used the original version at work so knew it well, knew the internals by asking lots of questions while working for performance reasons. They renamed things and changed pointers around to their preference. They did this right before they left and had it on github as their work. They could meet all of your questions. They didn't really write the code, but it was MIT, what can you do.
It was very obviously there as bait for people like you and it was removed as soon as they took a new job. It was never used in production in its "released" form.
I had no problem with the person's abilities to code, but for reasons like this I probably wouldn't work with them again, or hire them as a eng lead or higher.
One question is, if someone is doing elaborate deceptive work like this, gets hired and has no problems performing the job, does it actually matter? Some people mostly or entirely code at work, so this looks like a legitimate way to get a "good" project in GitHub that he knew well. It sucks that it's deceptive (which could be a major red flag), but it's also clear enough that he understood a large codebase well enough to explain it and modify and/or refactor it, which is honestly the majority of a SWE job. A lot of people are concerned about the "purity" of how someone solves an interview challenge, and outside of potential ethical red flags, people that "cheat" the system are often putting in a lot of work, and are as likely as anyone else to be capable of doing the work.
No if they had no problems performing on the job then no it's not an issue. Maybe they learned and this provided a good reset for them. Maybe they didn't and similar issues will crop up.
I put the anecdote up as a real-world example of one way the GGP's github reference can be faked.
You would have to dig really hard into their knowledge of the system to catch them, which you wouldn't have time to do.
For instance, I believe the issues would show up in a benchmark.
I don't see a solution for this. What you're describing is someone who's clearly good enough to take a project and rewrite it, and still be able to talk in detail about the code.
I'd bet they could also pass a whiteboard, pair-programming or take-home test too.
That they are willing to lie about it and pass off other's work as their own isn't something that you're going to identify in your typical code interview. Using interrogation tactics to try and weed out the frauds is going to be counter-productive, by driving off all the good candidates.
I don't disagree. You might see some of the issues with this candidate on what they choose to highlight as their career successes, I've definitely caught dishonest people, or people I wouldn't work with via soft questions.
But I'm not sure, I've never interviewed this person.
Have the interviewee submit repos in which they're the only contributor? But, uh, with a take home project, you _really_ don't know that they wrote the code, either...
Do a take-home project but don't make them write from scratch. Give them a mostly working starter application.
Sprinkle in some bugs. Start with easy spelling errors and go all the way to concurrency problems.
Ask them to add a few simple features and fix any bugs they find. Bonus points if they find bugs you didn't add intentionally. Good unit tests are also a bonus.
Give them a couple days or something. Don't count off if they don't get everything done. It's better to do a few things correctly that fix everything with hacks.
Invite them to email questions/suggestions to the hiring team. This person might be on your team so it's nice to find out early if they have good ideas or they hound you with stack overflow questions all day.
I've never had this kind of interview but it sounds nice to me. It's more realistic to real daily work. You can cheat by having someone else do the work but that's always a possibility.
This sounds sadistic to me. I've spent a long time on dumb typos, which become a lot harder to spot when you are stressed and on a deadline. Chances are if you are applying for work, you are probably stressed about not having a job.
You've completely missed my point. It's not about being perfect. I want to work with people who leave code better than they found it but I can't expect perfection. I don't care if they can't find all the typos. I'm sure most software has typos.
Whiteboardimg a solution to n=np or building full applications is crazy and not realistic. Most interviews do that yet most work is fixing bugs and adding mundane features. Why can't interviews focus on the actual skills needed?
Which is why the interviewer should ask specific and thoughtful questions about the project, so they can gauge the candidate's level of understanding. This concern could also be addressed by introducing a trial period.
> Why would I leave a stable well paying job
Well, why are you doing that in the first place? Maybe the new opportunity is worth it or the current one is so bad that it's worth it.
At least they’re honest about it. Unless you’ve got some kind of contract in place (or live somewhere where this is prohibited by law) your current employer could fire you in 2 weeks if they didn’t like your performance, too. They could do it this afternoon even.
I have heard of someone trying and pass off repos forked into their github account as their own work. A quick google or even just looking at the commit history in their fork made it obvious it wasnt true.
Manipulating one or more git repos to claim it as yours then ensuring your lie is not uncovered by googling would be technically challenging enough that those who could do probably don't need to.
I would assume the best, then in a week when it is clear that they faked their way in you can just lay them off. If they faked their way in but are a great member of the team going forward and contributing to projects, do you really care as a manager?
I think discussing the projects would be a better solution. The interviewer looks over his projects and asks questions about them, the applicant explains his thought process behind the decisions made.
> but it's not clear that these companies have better alternatives.
It obviously depends on your definition of "better". And it's yet to be seen whether whiteboarding is "better" than pulling candidates out of a hat. You'll note that lots of companies that do strict whiteboard-style interviews are also extremely comfortable firing employees. Would you be "better" just hiring anyone whose resume seemed applicable, that could talk like a normal person, and then firing them if it didn't work out?
Different things work for different people, personally white boarding is my favorite. I think the best would be to offer the candidate options. Let them come in for the culture fit portion of the interview, at the end present them a problem and let them choose if they prefer white boarding, pair programming, or take home and submit by the end of the day.
Here we go again perpetuating the stereotype of the whiney privileged engineer put in a position of mild discomfort by the villainous abusive white board interview boogeyman. I don’t mind whiteboard interview exercises. They’re not great, but they often give a very good and reasonable signal that often has a high corollary to work performance. I think there’s bigger fish to fry in refining fair and objective interview processes, I’ll never understand the perpetual moaning around this aspect of technical interviews.
That whiteboard interviews are actually testing how you perform under stress rather than how good you are at your job.
Additionally, in my opinion, it measures how good the interviewer is. If you get a bad interviewer or even just one in a bad mood, just pack your bags because you aren't getting it.
Whiteboards are incredibly arbitrary in my opinion, if taken alone. If it is part of a complete assessment, ehhhh.
Interesting study and really good discussion on HN at the time, but the opposite of "[Whiteboard interviews] often give a very good and reasonable signal that often has a high corollary to work performance" would be something like "People who do well at whiteboard interviews tend to be worse performers at work." I don't think that's what the study said at all; rather that people do worse at whiteboard problems when they're being watched vs. not being watched.
Also people act as though software is a job without anxiety. There is plenty of anxiety in this job. Sometimes under pressure you really do have to perform or push back and its good to know if people can do it.
> Also people act as though software is a job without anxiety.
Not. All. Anxiety. Is. The. Same.
Ask a firefighter to give a speech in front of 1000 people. This is an entirely different kind of anxiety than running into a burning building. Ironically, it may be the former rather than the latter that makes the firefighter sweat.
Writing code is generally not a performance art. We're not stage performers. Interviews are an unusual situation that aren't anything like our daily jobs. Stress on the job is not the same as interview stress. Work emergencies are not the same as interviews.
We need to take into account human psychology. These factors are all well known, but the tech industry seems to act in deliberate ignorance of humanity.
It doesn't have to be stressful. Whether or not you have a gun to your head is due to management. Deadlines are an abstract concept created by humans and can always be moved. The best companies keep them very elastic.
You can confirm the same using a take-home assignment and a code review together with the candidate. Or even with an on-site pair programming. Neither of those require whiteboards.
I strongly believe there is some signal to shoving enough familiarity with at least one language to come up with mostly correct syntax.
I won't ever fault a candidate for failing to close a paren or being unsure of whether the size of a container is .length() or .size(), but if virtually every line a candidate writes is of questionable value, I'd say that means something.
Yeah if a poor nerd makes some decent money, they need to abuse him with stupid whiteboard questions.
But no one is questioning the money CEO, executives,managers, lawyers, etc are getting.
I am starting to think the interview is a waste of time. Sure, you want to make sure the person is more-or-less who they claim to be on the surface, but you will never really understand their capability for reasoning with your problems until they are working in your process.
One of my earlier jobs dealing with code involved a very brief interview (no whiteboard involved) followed by a 6 month contract offer. The deal was that I basically had 6 months to prove myself, and if everyone felt like it was working out (myself included) this would be bumped into full-time with benefits. The crazy thing is, I was actually the one who decided I did not want to continue after the 6 months was out while they wanted me to stay very badly. I think this can be a really useful checkpoint tool for both sides.
Anyone can misrepresent themselves in an interview and dupe a room full of people for a day or 2. No one can keep up an act for 3-6 months continuously when working with complex code tasks. You will get found out before the term is up, assuming everyone is using this process as an evaluation tool and following up on it regularly.
Arrangements like this are much harder in US because 1) by default there is no health insurance if you’re a contractor, and obtaining your own is incredibly expensive and 2) there are also pretty complex tax implications of being a contractor; there are many other factors as well.
It also puts a candidate at a disadvantage, because looking for a job is heavily one-sided burden.
On a personal level, as both (occasionally) a candidate and a senior hiring manager, I always wonder about white boarding - i believe it works when the interviewer is looking for your thought process, and not code specifically. For example, something as simple as saying “I don’t expect this code to compile” at beginning of interview immediately puts candidate at ease and let’s you understand their logic and not the ability to recall specific function signatures on the fly.
My company does this as policy, except we hire them and put them on full benefits. However there is a 6 month period where you can be fired a lot easier than after that 6 months.
It seems like a reasonable compromise that doesn't leave the job seeker without health insurance etc.
I had a similar arrangement like this in the U.S. but it was for 1 year. When applying for the position it was listed as a term appointment and they were up front about the arrangement (same as OP; after a year, if everyone is happy, the term appointment becomes a FTE). The term position had all the same benefits as a FTE, it just had the time cap on it.
It is easy to terminate straight white men under 40. Anyone else is extremely difficult anywhere with an HR department. Protected classes are taken very seriously.
In 2012 I was told Google gets 1 million applications a year. How do you decide which 1000 of those get 6 month contract offer? How many millions of dollars in lost productivity are you willing to lose of the people who don't pass your 6 month test that you had wasting space, taking up training time, having people have to review and reject their code, etc? What will those people do who gave up their lives somewhere else to be part of your company do when you tell them you've decided to not make them employee when their contract is up?
The value is similar to that of internships - the amortized cost of a 6 month 'trial period' should be similar if not cheaper than false positives that are a lot tougher to fire so you avoid dumpster fires like Amazon's mandatory attrition rate. I also wouldn't call it giving up there lives, when they know what they're signing up for and are presumably getting paid a similar amount to the the full time role they're applying for. Now if FAANG companies try to use their reputation to get cheap labor with no intention of hiring I don't have answers to that, but I can't imagine it would be worth the cost.
They still have some selection criteria for internships. It's not like they take the first 100 students at random so you're left with the same issue. You have to narrow the selection. That likely includes interviews.
> The deal was that I basically had 6 months to prove myself, and if everyone felt like it was working out (myself included) this would be bumped into full-time with benefits.
In the UK, we sort of have this in the form of probation - in most permanent jobs, you don't gain full employment rights until you've done a probationary period, which is usually six months. You get full salary and benefits during that period, but you can be fired with no notice at any time (or something like that).
In practice, though, the culture is not to use the probationary period as an extended interview, but more of a backstop against really screwing up hiring. You'd only let someone go after probation if they turned out to be absolutely incompetent or unsuitable, not if they were just disappointing.
It would be interesting to try using probation differently, though. Make the interview more of a screen, employ twice as many people as you need, only retain half of them at the end of probation, and be explicit throughout that this is the plan. I suspect you could implement and communicate this such that it wasn't absolutely horrible for probationers - active and transparent review during probation, one or two months' golden parachute, what else?
In Ontario, the letter of the law says you can be fired during probation for any or no reason (modulo human rights legislation), but in practice an employer can still be sued for wrongful dismissal if the employer terminates an employee without demonstrating cause.
It’s best to have experienced employment law advice when devising any scheme around using probation as a kind of hiring scheme, as opposed to as a last resort if things go very badly.
I will not give legal advice, but for example I would be very careful before implementing a “Survivor: Tech Island” scheme where the company hires more people than it genuinely expects to keep following their probationary period.
I have been told that if I hire someone I think is questionable with the thought that “if it doesn’t work out, we’ll just let them go during probation,” that can backfire as I make a conscious choice to hire them despite my reservations.
Again, INAL, but I would tread carefully around using probation for winnowing candidates out.
IANAL either, but my understanding is that wrongful dismissal is breach of contract, whereas unfair dismissal is illegal [1]. So if you write this procedure into your contracts, and then follow it, it's not wrongful dismissal. To be unfair, for a probation period of less than two years, it would have to be meet one of the criteria for being "automatically unfair", which are basically about the employer doing illegal things, or be discrimination [2].
I would also be very careful before implementing a scheme like this - as you say, you would want to have it thoroughly checked by legal and HR experts.
I think you’re right about the distinction between wrongful and unfair dismissal, but if I understand Ontario common law correctly, even in cases where the dismissal during probation is not illegal, and even when you have it in writing that the candidate can be dismissed for any or no reason, you may find yourself on the wrong side of a wrongful dismissal judgment and forced to pony up money.
It’s probably easier to structure such a thing as contract-to-permanent, and I suspect this is why there are a lot of such contracts around. Or at least, I have seen a number of such things in Ontario.
And now the counter-example: My brother is the principal Tuba with the National Arts Centre Orchestra. He had to win multiple auditions, resulting in two finalists being selected. Each of them then went and rehearsed and played a concert with the orchestra, they spent some weeks on contract, expenses and compensation paid. They selected my brother.
Full-time job? Nope! He then went on probation, either for a full year or two, I can’t remember. I’m sure he’d laugh at my worrying about 90 day probationary periods.
This seems kinda nuts to me. I don't think I would leave a stable position for a probationary position, or accept one if I had more stable offers. "It's ok, we probably won't use it" - uhh, what? No, that's what legal protection is for.
Is it really that common? I'm sure many companies try to hoist this on propsective employees but I'm surprised people accept it.
Can someone else from the UK verify this? Still seems crazy to me.
Edit: reading around it seems like they're standard, but have no legal weight regarding termination? I.e. you're entitled to 30 days pay regardless. This seems very weird on all sides.
Also from UK and can confirm that 30-day probation is pretty standard.
In 20 years, I think I've only seen employees terminated during their probation 2 times. They were non-dev roles, and both times it had transpired that they were totally incapable of the job (one had also lied on their CV).
Damn. That sucks. At least it isn't common, but I'd like some legal protection against it. Guess it's just a matter of minimising uncertainty for your employer & having the leverage to negotiate your contract.
I've seen this done before. As others pointed out, the lack of health insurance can be a problem in the U.S., although sometimes can be mitigated if the candidate still has access via COBRA.
Even considering the flaws, I think this approach is better than immediately hiring someone full time. I've seen some candidates who seemed perfect on paper and fine in interviews and then turned out to be utterly toxic to actually work with. For the interviewee, the chances of encountering that situation are even greater, since there is one interviewee but typically many future coworkers.
Some personality traits can be very difficult to surface in an interview environment. IMO interviews are worthless for getting that kind of information.
We already have this extended trial period in tech, it’s called an internship, and responsible companies pay interns. Some internships come through university co-op programs, some through organizations that set this up for people following non-traditional career paths, and some companies “roll their own.”
But these positions are overwhelmingly for people breaking into the field. They have much to gain, and very little to lose by working for a company for three months with an uncertain expectation of a full-time job.
Now consider hiring an experienced worker who is out of a job. If Alice offers them a contract with the company having an option to turn it into full-time, while Bob offers them full-time work with the understanding that a major screw-up would lead to dismissal during a probationary period, Bob’s offer is much lower risk.
Finally, consider an experienced worker with a job. For a non-hypothetical example, they’re working at a famous name, with options, and a YC startup that has grown to 200 employEes recruits them.
It’s going to be very difficult to get them to walk away from guaranteed employment that feeds their children, for a temporary gig with no equity participation And the understanding that it’s an extended job interview.
—-
The above focuses on the candidate’s risk/reward calculation. What about the company?
Well, the least experienced person has the greatest uncertainty. They might be very smart, but unable to work well with people. How would we know without giving them temporary work with people?
The most experienced person has the least overall uncertainty. They “brought the receipts.” Without arguing about how they should be interviewed/tested, if they aren’t a completely toxic person, if they have a non-fatal weakness that pops up, it can probably be managed to be fixed, or accommodated.
The employer’s risk goes down as the candidate’s experience goes up. Sure, it would be a bed of roses if the company could hire senior people on a one-year contract and see how all the intangibles work out, but that usually isn’t necessary, and it’s not going to happen often enough to operationalize that as part of the process.
—-
TL;DR:
There is no one-size-fits-all approach that fits all levels of experience, and also scales to large numbers of hires, and also is repeatable.
But the kernel of what you suggest works well for the sweet-spot of high-uncertainty and low risk to the candidate.
One thing I've been wondering lately about take-home tasks is how everybody complains about time estimates, and yet here's a bunch of "small projects" which someone pretends to have very precisely estimated.
Unfortunately, most companies fail to honestly estimate the cost of the tasks they assign for these processes. Many of them because they just don't take into account numerous small tasks that the candidate will need to deal with.
I've seen a lot of these tasks ask for setup instructions, good unit tests, explaining any decisions you make, etc. In case there's any visual user interface (e.g. some web component) they also ask for it to be nice, as in "we don't want a designer but we need you to make it somewhat nice". And then they'll say it should take just a couple of hours.
I've also seen a fair number of others casually say their task should only take about 8 hours. And I can do that on my free time on five consecutive days, after having worked already 8 hours each day. Sure thing.
I've done this a couple of times. All for German companies in Germany. The last one took me a weekend. They liked it and booked me a ticket for on-site. Where they whiteboarded the hell out of me and rejected me on the basis of not getting the right answer fast enough and using wrong syntax in a couple of statements. And there was not a single question about the take-home project.
After that I just decided I'm not going to put the time and effort in that sh*t anymore. I'm not even going to go out of my way to accommodate interviews in my working hours.
Next time it happened I replied back that I'm not interested. For the record, they wanted a silly automation in AWS and kubernetes. Most of the time would go to setup everything up as my future-employer assumed that I had an AWS account and that AWS is the only cloud that matters. (I work on a different provider daily).
Both times it was automotive-related IT. Dunno if that's something to do with it.
My take-away so far: Whiteboard sucks but at least it respects your time while the take-home proj does not necessarily keeps you from wb and is usually ridiculous to a large extent.
I would never apply for a job that made me do a homework assignment. This is a huge red flag that this employer doesn't value your life outside of work at all.
> One thing I've been wondering lately about take-home tasks is how everybody complains about time estimates, and yet here's a bunch of "small projects" which someone pretends to have very precisely estimated.
When I interviewed people and gave them a take home assignment I was very confident in my estimate for one simple reason: I completed the tasks myself. We had 4 tasks for this for the 4 different types of jobs we hired for. The "estimate" was just double the time I needed to do the task myself. We got feedback from some of the candidates that our estimate was very good.
If I could always estimate the time AFTER I complete the task instead of before then estimation would not be hard at all.
- Junior developers should be able to finish this within a work day (8 hours)
- If you are already familiar with all technologies involved then it should take about 2 hours even with all optional tasks completed.
As an example our backend dev task was to parse a CSV file (supplied with the task) and provide 2 API endpoints (return format and url defined in the task) that access this data (free choice in language and libraries). The optional tasks for this was to include unittests and to use docker.
That really isn't much work. We did get some good feedback about this estimate both from junior developers and seniors after they were hired or rejected. Most seniors seem to complete this task in about 1.5h to 3h and juniors do seem to be able to complete this in about 6h.
Coding on a whiteboard in an interview is not "broken". What is "broken" however is making the problem the candidate needs to solve "hard". I can't stress this enough: a whiteboard coding test is nothing more than a negative filter. It's to filter out people who can't turn a simple idea into code as these people exist.
This is why FizzBuzz was such a simple problem.
But interviewers fall into the trap of thinking "this problem is too easy" and make it hard (eg figuring out a problem is g union-find on the spot and then implementing it) or, worse, they make it a crap shoot of whether you know the "trick" or not (eg reversing bits in O(log n) or the tortoise and the hare). This actually makes the test completely useless.
A negative filter is simply a filter whereby if you fail it, you almost certainly aren't a great hire but the reverse doesn't apply: there should be no A+ on a whiteboard coding test. It's straight pass/fail and an easy pass at that.
I realize some people have anxiety about doing this. Having helped or coached a bunch of people in the past about this, I can say that mock interviews and practice help the vast majority of these people. Some may be helped by doing this on a laptop in a shared doc instead, which is fine.
A few will struggle with the anxiety of that, even with coaching and practice. While I feel bad for those people, I do wonder if a reasonable-sized organization, which will generally require a certain level of communication skills and presentation ability, is the right place for you.
I agree with this. I work at a FAANG that does whiteboard coding interviews (opinions my own, etc etc).
When I interview people, I give pretty straightforward questions. My goal is not to run some algorithm guessing game. If I'm interviewing for a senior FE position, I make sure they know enough about async patterns in JavaScript that I feel confident that they could build an event handler without dropping promises on the floor.
A back end position? Can they use (not implement, just use) a hashmap efficiently and do they think about boundary conditions in input sets (you'd be surprised how many people ignore punctuation when breaking sentences into words - they just do a split(' ') and call it a day.
This is really basic stuff. I'm always able to (a) filter out people who just need more time learning to code (or are too nervous to perform well, which is still a problem with even these whiteboard activities) and (b) prompt a discussion about engineering practices.
My criterion is simple: do I think I could see this person submitting code to my project without me needing to constantly fix what they write? It isn't about memorizing algos or anything.
Aaalso: I didn't study leetcode, and managed to get my job just fine. I know there's a reputation of the process being just algos, and I'm sure a lot of the interviews are. But not all of them, even at the FAANG.
I interviewed a FAANG company and made to the whiteboard interview. The interviewer asked me to implement an algorithm to extract words from arbitrarily long string, which do not include any separators, using a dictionary, within 30 minutes and a code that compiles into $PROGRAMMING_LANGUAGE on the spot. Pseudo-code is not allowed.
Yeah, I tanked the interview but I really did not care if I pass when I got to that point.
This is also a fair point. I usually do bad on white board coding. But I really enjoyed a white board interview that only tested my knowledge of javascript.
The problem didn't require 3 paragraphs of explanation and examples.
The interview involved a series of 1-2 sentence requirements that built on top of each other.
>which will generally require a certain level of communication skills and presentation ability, is the right place for you.
It's really not about presentation ability. It's "oh shit I have x minutes to do this and I have to get it right or I won't get the job, oh shit 5 minutes passed already and I haven't done anything" type of anxiety.
And you can't imagine that same person having this mental dialogue?
"Oh shit, I have to get up and talk about my project. What am I going to say? What if my director thinks I'm an idiot? What if they ask me a hard question? What if I can't answer the question? Will they cancel my project? Will they bring in someone to rescue me? Will I get fired?"
The issue with LeetCode style interview is that almost EVERYONE can solve those questions after studying a couple weeks/months.
The only thing that LeetCode questions predict is if the candidate has been training for LeetCode questions.
The fact that Google, Facebook etc still use it as a gatekeeping mechanism makes me believe they want to find cogs that will specifically spend hours studying for it. Making sure that those engineers will be ready to execute their mindless coding tasks at the company.
Right but in some ways this is what they need. Someone who can stare at computer science material, that is probably boring, for long periods of time. Someone who has a good memory for details, can remember routines. Can "solve" problems that have been solved before by applying theory. Someone who is willing to follow the rules and go through the process.
I think you made a logical somersault. Leetcode doesn't imply any of those, neither good memory for details or that you can "solve" problems that have been solved before by applying theory.
You missed the whole point of the OP's post it seems. The only thing that leetcode implies is that you can solve leetcode tasks.
Alot of people cant do it. If facebook is paying 450k to developers who can regurgitate leetcode I'm willing to bet theres some signal there. Its a pretty big assertion to claim the opposite
The reason companies like Google can and do it is because their funnel of incoming candidates is large enough that they can decide to choose the 'intersection' of many factors combined. Meaning they will filter down to people who trained for LeetCode questions AND they are also otherwise skilled.
Take home assignments can be automated the same way as leetcode tasks actually. So there must be something else to it.
I think people underestimate human nature in this case. It's a known thing that many interviewers just do the interviews for the sake of feeling superior than someone else.
It was another trend in the industry to ask stupid brainteasers like "Estimate how many gas stations there are in Manhattan" until Google banned the whole thing altogether. Google judged that these questions only serve to make the interviewer feel clever and self-satisfied. [0]
It's time to do the same with whiteboard interviews.
I live in Sweden and we seem to have a very different interview culture. I've never heard of whiteboards or trivia questions, here.
I've only gone to four interviews (across eight years), and been lucky to get an offer each time (three of which I've accepted). They have all been primarily discussions about personal experience, hobby projects, personal interests, would-be responsibilities, benefits, and company culture.
At one place (Ghost Games, an EA studio and the only company which wasn't purely Swedish) I had to complete a code assignment (create a clone of a classic arcade game in C++) ahead of the interview.
I saw both sides in Sweden. Including being the interviewer who discovered that senior applicants with over 15 years of experience could not for the life of them figure out how to reverse a string. Not something that I could have found out during our casual conversation about past experiences, of course.
Another tech interview thread. For the side that supports these types of interviews, I've never gotten a good answer to a simple question: in the year 2020, why are we expecting people to write compilable code on a whiteboard? It's just stupid at this point. Even a laptop that boots into some micro linux distro and has nothing but nano open would be better. Or just a fresh install windows laptop with nothing but notepad.exe open. Or a chromebook that is open to a HTML page that has nothing but a textarea element.
I'm not including a compiler or having build tools or an IDE. Just a basic simple text editing area that allows the basic functions of typing in text and editing it.
I'm against these leetcode interviews. But if you did nothing else but change this one thing, just stop expecting people to write code on a whiteboard or paper/pencil and allow them to write code the way it's actually done (a computing device with a keyboard and text edit area), that would be such a huge improvement. Writing code on a whiteboard or paper doesn't test anything. Think about how limited it is and how different it is (for example, you can't just press an up arrow and add a newline, have to find an eraser and start over).
It's yet another useless skill to learn just for interviews (writing compilable code on a whiteboard/paper) which also encourages rote memorization (because you have to get it right on the first try since editing the text is so painful and difficult).
I hope people start pushing back on this. The reaction should be, wow you care so little about your interview process that you can't get a $200 chromebook in here?
As somebody that gives both phone interviews with a shared typing environment and whiteboard interviews, there are some problems I can only use with a whiteboard, but no problems that I can only use with a typing environment. In particular, whiteboards are significantly better at letting candidates describe what they're thinking about the structure of a problem before (or instead of) actually writing correct syntax. When someone is sitting in front of a computer, they have a tendency to either jump straight into coding or try to describe their thoughts in a giant block of comments, neither of which is very productive.
Maybe it's just our phone interviews that allow us to focus on higher-level concepts in person, but I've really never found a candidate who did poorly on a whiteboard but seems like they would have done well on a computer. If anything, it's the inverse where candidates jump straight into code, to their own detriment, when placed in front of a keyboard.
The trouble with whiteboards are that some people think nonlinearly. If I'm writing an algorithm, I may write the "middle" first. On a whiteboard, this means I have to guess how much blank space I need to leave in various parts of my code so I have room to fill it later. I almost always guess wrong. On a computer, this is not a problem.
Now while you may be aware of this and not give the candidate a hard time for not leaving enough space, I read a Medium post once written by a Google employee with tips on doing well on the interview. He explicitly highlighted this problem, and literally encouraged candidates to learn to think and write linearly and not leave these kinds of blank spaces.
As somebody who has sadly had to make hundreds of candidates write on a whiteboard, here are problems I’ve run into getting the candidate a laptop:
* IT just fails: they’re unwilling to supply it, there aren’t enough, the current laptops on hand are junk, or the default password is wrong. These all happen with HR buy-in and funding.
* Recruiting just fails: they “have to move the candidate fast because of a competing offer,” they tried to work with IT but IT blocked them, they got laptops themself using their own budget but then ran out.
* I failed: I didn’t make time to prepare a non-whiteboard question, I didn’t tell my manager in each and every 1:1 that candidate experience sucks, I had three laptops and I forgot to bring my personal spare to the interview.
In general the core problem is there is zero incentive for hiring managers to do anything but shotgun candidate pools like they do today. There’s also no feedback loop to evaluators to help them improve. False negatives are completely tolerated despite there being a huge gap between CS jobs demand and CS graduate supply.
These are not good reasons and again shows that the company really doesn't care. IT gives a bad laptop? That's fine it doesn't have to be good, it just needs a text editor open. Get a USB drive with a linux distro and boot to it and open nano. Or bring your laptop and stick the USB drive linux distro in there and let them use it. Again there is zero excuse for a company to not have a laptop ready for an onsite interview.
All these companies expect you to write code using a site like hackerrank during the phone screen. And yet they can't have a chromebook open to the exact same site during the onsite? If that's too much, they can't even get a cheap laptop, stick in a USB drive linux distro, open nano and give that during the onsite?
I totally agree: the excuses are poor and companies don’t care. There isn’t much candidates can do. Hiring managers need to fundamentally change how they approach hiring.
Whiteboarding can fail. The pens might be dry. The room might be double-booked. The interviewer might be late or unavailable. Any interview setup can fail.
> in the year 2020, why are we expecting people to write compilable code on a whiteboard
I think this is the bad assumption that's causing your confusion. Maybe this happens, but I think it's very uncommon.
The point of using whiteboards is to focus more on algorithms, data structures, and problem solving, not just spitting out code. If you make the applicant write actual code it limits the scope of the questions that can be asked.
So, it's actually beneficial that whiteboards aren't good for writing compilable code, because that's not what you want the applicant to do.
Yeah. From the interviewer's standpoint, there is no added benefit of having the candidate write code on a whiteboard, as opposed to a computer.
However, a whiteboard certainly can be easier to write anything that is not code on. Like for instance if the candidate chooses to walk the interviewer through a high-level approach, including a graph topology, before actually starting to code.
I know Google started letting candidates choose between laptop and whiteboard a few years back. I suspect others alos have.
One of the most telling questions I ask when interviewing is “what was your favorite or most complicated project you’ve worked on and how did you solve the problems you encountered?” I don’t need the interviewee to show me a perfect implementation of a red/black tree. Hell, I don’t remember it. But I want to know what they found challenging and how they went about solving it. Often times they will give me all the technical details I would have asked for, but in context. I don’t care that you know the exact name of that one function in PHP but if you mention it off hand in relevant context, I will place that much more trust in the fact that you actually used it instead of memorizing it.
Other questions I ask are things like do you work on your own projects and tell me a bit about the tech behind them, what’s your favorite pieces of open source or free software (I work with almost exclusively FOSS stuff though my own work is not FOSS), what do you do for fun, and if we were talking on the phone and I had never made tea, walk me through the process (this is a fun one). Then take them out to lunch if possible and watch how they treat service workers. I think this has so far worked well for everyone involved. At least as far as I know nobody I says yay to has been a bad hire.
Eh. I don’t care about downvotes. But yeah if people want to throw the same ten dozen puzzles at each other and then wonder why the people don’t work out, it’s definitely not time to try anything different :)
You're selecting for candidates that either have the kind of memory that lets them recollect those experiences on demand, or can fabulate it. Once word gets out about your interview process candidates will just prepare something ahead of time, as they do for the HR interview already.
What was the last interesting project you personally worked on and what were the challenges with it? What technology did you use to solve them?
I mean if you literally can’t remember anything of what you’ve worked on ever, no I don’t think you’d be a good hire. And also this part is surprisingly hard to bullshit. You can say “well I worked on an eCommerce site and it was hard because we had a lot of visitors” isn’t a full answer. If that’s as much as you can give me, no I don’t believe you contributed much to that project. Maybe I’m wrong and you are brilliant and just can’t remember, but it’s a risk of false negatives that I think most employers will find acceptable. But: “It was hard because we had a very complicated system for determining the final price of the whole cart because of discounts offered if you bought certain pairs of products together. I didn’t implement that system and we had plans to eventually rewrite it but in the meantime we started calculating the prices in our task system instead of during the web requests. It reduced web server load and made adding things to the cart feel faster.” Me: “OK that sounds neat but how did you prevent race conditions? Say while the first calculation was running the customer added a second item that triggered another calculation? What if the first task finished after the second?” Then: “Ah yes I recognized that it would be a problem when writing that code. At first I tried using a lock using Redis for the cart but that just made the tasks serial and the whole thing took longer. Plus if a task failed or was interrupted it could cause issues. So instead I just put the latest task ID onto the cart object in Postgres so I always knew which the latest task was. When a task finished and wanted to update the price first it would lock that cart with the Redis lock, then check if the ID still matched its own, then update and unlock.”
The above tells me how they think and what they think of. If I’m not getting enough technical detail out of them I will ask stuff like “what Redis primitive did you use to create the lock?” But usually the interviewee will go into lots of technical detail all on their own.
Personally, the anxiety of whiteboard “coding as performance art” makes my brain freeze. I see it as a broken process. It certainly selects against me.
I think you can learn more useful stuff about a programmer by showing them a function prototype and asking how to black-box test it. Then show them complete code, and ask them to white-box test it. Test cases or a test plan, depending on scale. Then a discussion of test tools they have used.
The people who can produce quality code for your organization will show up pretty fast.
In higher education there has been a lot of walk back from tests like the GRE in most fields. It turns out, being good at the GRE only correlates to your ability to be good at taking the GRE, and doesn't correlate with actual graduate school performance or outcomes.
Performative interviews occupy a similar space. You spend all this time and effort studying for something at is ultimately irrelevant outside of the interview. Just a pure waste of brain cells and calories, with a few new gray hairs for you.
If I were a large company with money I would simply ask all qualified applicants if they would be willing to work on a small part of a real project as a contractor with the possibility of getting hired. Applicants get paid for their time, productivity is achieved, jobs might be offered, everybody is happy.
Sure - That would neatly eliminate majority of qualified candidates :-)
Very few people who are successfully employed would take a risk / have a luxury to forsake their certain employment for an extremely short term contract (with all the registration, taxation, regulation etc headache this implies!) and extremely limited chance of gainful employment.
(it's perspectives like these that make me realize how much of a grouchy old man I am and have always been - always being a buzzkill by thinking things through next 3 steps! :P)
>with all the registration, taxation, regulation etc headache this implies!
It's not if you are in the US.
You will get a 1099 from where you worked, you write it on your 1040 and include the 1099 with your taxes if I recall from when I was an independent contractor for a while.
It takes maybe like 10 minutes extra and 1099-ing is incredibly common nowadays (unfortunately) so not a super weird case.
And it's not regulation. You don't need to worry about anything besides getting the 1099 like you would your W2s and appending it.
>with all the registration, taxation, regulation etc headache this implies!
>It's not if you are in the US.
Its also not if you are in Australia. I'd suggest that the number of developers and designers who at least occasionally take on paid side gigs or who have revenue generating side projects (even if it barely covers hosting etc) is about 1/3.
What if you get a 1099 from another state? Multiple states? Don't you need to file taxes with those states now? (Genuinely curious, I am not a CPA so I really don't know).
What if you don't have any other 1099s (so you have to pay self-employment tax just because of that one interview, at least I had once when my moving expenses were paid with a 1099).
Not even getting into possible illegal work for the candidates on work visas.
My city considers 1099s as businesses due to some shady contractors in the past. So my local government would try to collect a chunk of any contractor earnings (with that chunk getting huge if you didn't register with them first).
You are making a point that many others have made, and it makes me unhappy to see it yet again.
What you are saying in effect, is that hiring regimes can't be (or ought not to be) designed to include a group that is (commonly) discriminated against, if that discriminates against anyone, particularly the majority.
Implicitly, I see you defining the optimum as where everyone uses the same criteria that are as inclusive as possible, and just shrugging and saying "we're doing our best" when some are left out in the cold completely.
But isn't there an alternative vision where the optimum is employers using different ("diverse") sets of criteria that individually discriminate but create a society where there's a place for everyone?
Hmmm; I feel you are making some interesting and valid points, and I would like to engage in a conversation; but I am (genuinely) having trouble articulating/parsing what they are. I don't know if you are trying to be diplomatic if the message may not be politically correct, or are the key points very generalized and lean more toward implication/insinuation; or whether it's a philosophy-textbook-style language and I just lack experience in it to parse generically-sounding words in a specific-context-meaning.
My best effort:
* Who/what is the group you feel is a "commonly discriminated group", that would benefit from "contract first" hiring practices?
* If a company uses a practice that "discriminates against a majority", is that a practically beneficial funnel/sieve/practice for the company? Alternatively, if we are discussing companies which are making a stand / moral decision through hiring practices, I feel that's a very different discussion than what I interpreted original poster to posit as "best hiring practice for everybody in all situations / everybody should do THIS".
* I feel your last sentence is proposing each employer using different criteria in hope that cumulatively they'd create an overlapping and comprehensive venn diagram. My response to that notion would be a) I don't trust either free markets or regulation to make that venn diagram complete and b) that kind of stratification of the market sounds horrible... no matter what, I can only go to specific companies who have specific hiring practices that happen to match me? (I fully understand the irony in that this may in fact be the underlying unspoken reality of the market! my point is that it should be something we move away from, not explicitly design as a goal).
But again, I may be misinterpreting your argument and inadvertently taking discussion in the wrong direction...
>trying to be diplomatic if the message may not be politically correct
Not exactly; whether my message is politically correct depends on how you generalize it and what groups you apply it to.
You could use it selectively in other contexts and demonstrate either a left or right wing allegiance, but right here and now, I'm talking about people suited to whiteboarding vs. take home tests as the groups.
>that kind of stratification of the market sounds horrible
It's what we've got though, and always have. In your words, "the underlying...reality". Of course we agree things can be improved somehow. I think hiring should be more inclusive, and I think most people would at least give lip service to that.
But if different people are always going to be different, then a hypothetical convergence on a single "fair" standard means telling some fraction of the population they have no place in society at all.
Eliminating whiteboarding, strictly speaking, seems reasonable to object to. It would be unfairly discriminatory. But wanting that to be the only standard also is an extremist position.
If you want to draw a more general opinion out of what I wrote, one of the things on my mind is the general scourge of optimization by tech people who assume the solution to anything is to find the one best answer based on some metric.
True, true. In my poor defense I was imagining all candidates as identical versions of myself in a bubble and never considered taxes or anybody else's lifestyle.
I have a small child and a full time job. It's really not very feasible for me to make time to do a "real project", paid or not. Especially if I'm interviewing with multiple companies.
Yea, I didn't consider that. My thinking was that the hiring process is such a time suck that the applicant should at least paid for those 'take home tests' and 'in person interviews' everywhere in that list ... but yea I'll go back to the drawing board.
It seems that you and a lot of people look at hiring as a zero sum game, because there can only be one standard. If it doesn't include someone, but changing it to include them would exclude you, then tough cookies. That's a very depressing outlook.
I prefer take home projects as opposed to whiteboarding, because my personal situation better allows for it - no wife or children, preference for building things, no NDA at my current job, and so forth. For me specifically I would prefer take home projects followed by a debriefing where I explain my design decisions over solving whiteboard problems. But that's just me. Why can't there be multiple accepted ways of interviewing instead of forcing everyone through a whiteboard gate, if whiteboarding isn't the best way for you to prove your competency?
At least we have lists of companies with different hiring processes as in TFA, so there is a small amount of choice. But we're still dependent on the goodwill of companies to make their hiring processes more tolerable.
That only works if the workload is low enough to do with a full time job, potentially out of state.
It is a good idea, but nobody is going to be quitting their current job to be a contractor with a job MAYBE attainable. It remains me a lot of retail seasonal employees who work their butts off to MAYBE get a full time position.
I'd also want there to be a clear decision-point (i.e. it isn't a way to get you to be an indefinite contractor, they make a hire/no hire decision within some set timeframe or at the end of the current work).
I don't think quitting is necessary to work on an unrelated side project. Many of the companies on the list ask you to do a either a take home project, test, or tele-coding - real work that doesn't guarantee a job - how does getting paid for your work suddenly make it different?
This proposal comes up in every interviewing discussion on HN. Apart from the usual rebuttals (you are generally hiring only from unemployed people pool this way), here is a fresh one - this opens your company's codebase for reading and writing (even supervised but, still) to anyone. If you already open-source your code it's not a problem but otherwise you don't want random people looking into your code due to: patents, trade secrets, possible exploits to name a few reasons.
All large companies already have large contractor workforces that work on the non-critical products, I don't really see how that's different from employing highly qualified candidates with probably better resumes and referrals than those who are employed at 3rd party contractor companies.
Contractors are ran through background checks and bound by various NDAs and the literal contracts. Not to mention that the mentioned 3d parties are financially liable for the damages their contractors may cause.
It would increase the barrier to entry, reduce the pool of potential candidates, and increase the load on HR and hiring managers. Most candidates already have a job and may not want to start contracting for multiple companies in addition to their current job. This would also exclude candidates on a work visa like H1-B.
Companies like google and facebook are paying 200k for entry level engineers. They aren't going to have any issues getting people to apply even with the whiteboard interviews.
I prefer the take home text. Less stress and I can really show what I know. Sure it's time consuming, but I always try to have fun with it. If I get a take home test, and it's writing some code, I know I have a shoe in the door.
I interviewed at one of these companies in the list. I'm nobody special, did the test, did the interviews which were more about doing the work and how it gets done and I how I think about it, and they made me a really good offer which I accepted.
What you really want to know is whether the take-home assignment really decides anything, or whether it's subjectively evaluated. Is there a rubric? Or is it the basis of an interview? A lot of take-home assignments are cargo culted; the people offering them don't have much faith in them, and still select candidates based on interviews and resume screens (or "pair programming" projects that are really just multi-hour or multi-day interviews).
I have a hard time believing that this many firms have take-home assignments that really matter, and aren't just another hoop candidates (or, maybe, disfavored candidates) are forced to jump through.
I’ve gotten to the point where it’s simpler than this. Firms get 16 hours to evaluate me. If the take home isn’t a huge component of that I know they’ve cargo-culted it. I won’t do it if they can’t promise that isn’t the case.
I say this as someone who was an extremely early adopter of take home tests and think they are the highest signal filter you can reasonably have in the US.
So many places have added take homes in the worst possible way without removing all the other nonsense. It’s as if orchestras started demanding high pressure auditions and then threw out the results if the person talked a good game in an interview.
Identifying top tier tech talent is not that hard. Identifying yourself as a non top tier employer and setting your hiring bar appropriately - that is hard.
If you’re only hiring candidates who can pass Google interviews, what are you offering that Google doesn’t? (Hint: “we give you a 10 hour take home, then ghost you” is not a competitive advantage.)
I agree that the cliché whiteboard interview is just awful – I've had my share of terrible ones. However, there is one form of whiteboard interview that I really like – it's where the interview is about system design and architecture rather than coding problem nonsense.
I think the first time I saw this was at Google, where the question was pretty much "We are going to design Google Maps from scratch – what does it look like?". The interview is about evaluating the candidate's ability to ask sensible questions when designing a system, checking that they know how to analyse tradeoffs, and understand where they need to think about issues like performance or scaling.
I liked it so much that I've built it into our own recruitment process for our most recent role – it's a process that we go through a lot, even when making changes to existing systems. We do it as a one-hour long collaborative system design process with a short specification for a system that we want to build. We let the candidate lead the design, and help by providing feedback, discussing any ambiguities, and asking questions about specific areas of concern. It's been really interesting to see how different candidates have approached the process.
(Anecdotally, the biggest indicator of a good candidate so far has been the use of abstraction rather than concrete technologies - i.e. "I would have a queueing system here and an object store there" rather than "I would have Kafka here and push to S3 there").
I think the problem is similar to the problems in systems engineering, where techniques and processes can de-rail real engineering progress. This has been observed back in 1969 by Robert Frosch, who served as NASA administrator:
"I can best describe the spirit of what I have in mind by thinking of a music student who writes a concerto by consulting a checklist of the characteristics of the concerto form, being careful to see that all of the canons of the form are observed, but having no flair for the subject, as opposed to someone who just knows roughly what a concerto is like, but has a real feeling for music. The results become obvious upon hearing them. The prescription of technique cannot be a substitute for talent and capability, but that is precisely how we have tried to use technique."
I am probably one of the very few who prefers whiteboard problems compared to knowledge based problems. In my career spanking over 12 years, I have worked on ASP.NET, Silverlight, Blackberry, Android, Node.js, HTML/js/css, Xamarin, .NET Core, Code generation, Java microservices , Native Windows and AWS services.
The result of working on so many things is that I am not an expert in any of those topics. While I do well in generic system design interviews, I lack depth in literally every single thing that I have worked on. So inspite of having more than a decade of experience, I don't satisfy the criteria for companies who ask for 'x' years of experience in 'y'. So whiteboard and algorithm problems work well for me, because there's not really much to learn and memorize in those topics.
This seems to promote Google Docs > whiteboard, what? At least you can brainstorm or draw diagrams on a whiteboard.
IMHO the worst of these options is coderpad/hackerrank/etc. - it's robotic, discourages pseudocode, and perpetuates the idea that rote memorization is required to pass an interview.
Brainstorming with a candidate is great, when you can get them to let you in to their thought process. It easily can turn a technically incorrect answer into a strong answer.
To a large degree, these look like no-name companies who probably have to resort to this kind of thing to make up for worse pay and benefits as compared to FAANG.
"oh no, this 'no-name company' is _only_ going to pay me $100k+ / year while I live in a low-cost of living area, boo hoo hoo"
Scrolling through there are a lot of high-quality companies (Auth0, ASOS, Blue Bottle, Basecamp, Buffer, Canonical, CircleCI... and more and more).
Just because Google or Microsoft aren't on the list doesn't mean these are backwoods operations. Those companies don't need to bring in new candidates by being on these lists.
In other words the companies that 99% of the world's developers work for. What they are "resorting" to is a hiring process that finds good developers at a reasonable cost. "We can't pay you what FAANG pays but we don't put you through a shitty and lengthy interview hazing" is a pretty good proposition to the vast majority of us.
Most companies don't even have spare billions of dollars to waste playing these games. Your normal companies, with normal budgets, have normal projects, which need people who can get work done.
If you want some one who can build web sites using React JS you are better off hiring people who know and have built things using React JS. There is little logic in hiring people who can do some obscure fashion-of-the-week algorithms, assuming if they can do this they can learn React is just plain wrong. A person does what they are good at doing, if some one is good at interviewing their incentives are in changing jobs often to find the next company that can offer a raise. Not getting your work done.
Also this whole thing that one must know these algorithms because they might once in a life time face a need for Dijkstra's sometime during midnight at a place where they wouldn't find an internet connection, is unrealistic. C'mon. Get real. Companies are full of situations where people are digging with shovels and spoons, because people don't have the skills to use and build tools and system to save thousands of man hours of manual effort. Code bases are full of tech debt. Deployment problems because tests aren't written, or there is just no CI infrastructure. Lack of skills and productivity is a far more realistic and commonly occurring problem than these once in a decade algorithm needs. On top of this comes the need for proactive problem identification and solving(a.k.a innovation).
The fact that FAANGs have to acquihire or acquire companies to grow shows they are not hiring the right people either.
As of today if you are hiring for devs. You must look for turn-key projects executed, expertise in one main programming language/stack, ability to script quickly, skills to build tooling/monitoring, ability to produce deployable code, code maintenance, writing test cases etc etc.
I see Ableton on that list, is probably one of the most used DAW applications used in music production, everyone who's in audio production, engineering know these guys. I'd take a job with this company any time instead of working for a Google/Facebook as another code monkey
A thought I had recently was to shift from having candidates write code to have them review code. I'm sure it's not an original thought, but it comes with a few advantages. 1. Reading someone else's code is usually harder than writing your own and in most projects you spend more time reading code. You're seeing how they'd handle the more common work. 2. You can still pick how deep you want to go in the interview. Like some of the algo problems where interviewers keep adding new requirements, you can discuss API design, performance trade-offs, other code qualities. 3. You get to see how respectfully they can discuss a future colleague's work and how well they can communicate their own ideas.
Some of the very productive developers I have worked with are not great at code reviews. It's a different skill from writing code and not everyone who is good at coding is good at reviewing other people's code.
Considering most of us spend about 90% of our time coding and a very small amount of time doing code reviews, your best signal in my experience is just giving candidates something to code.
As somebody who has been interviewing recently, the format I've preferred is from TestDome. I've never used leetcode or others but I imagine they're similar. I had 4 coding problems for which I had to pass a set of test cases which were explained from a high level. The first 3 were fairly easy and had time limits of 10 minutes or so. The last one was more involved from a design and functionality perspective and had a limit of 45 minutes. Then, it was followed up by a conversation with a developer where we discussed the problems and approaches. The time commitment was finite and reasonable, and the opportunity to explain my code was appreciated.
The best interview test I've done was a take-home test with a fixed time window. I was given a working development environment with an existing app and asked to fix some tests, implement new tests and then implement a few new features with tests.
It was good because:
1. There was no faffing about to set up the environment
2. There was some small, easy wins at the beginning which got me engaged and thinking about the task.
3. It was fixed time - I had to specify when I would start and then the test was emailed to me 15 minutes before that time. I then had 4 hours to return it via email.
This solved most of the problems I've seen with take-home tests - namely that they take far too long and ask the candidate to do all sorts of pointless admin tasks before they can start coding. Unless the candidate happens to be super familiar the exact environment of the test (including setting up a new project - how often do most people start new projects?), you're either making them waste hours of time before they can start, or disregarding good candidates.
Ultimately you want to find candidates who can solve problems and understand software architecture. Unless you're interviewing for a devops position, making them spend hours setting up a build environment seems like testing for the wrong thing.
I haven't seen portfolios mentioned yet, but that's another option. Pros: do it once, use it at multiple interviews. Cons: more difficult to make sure it's original work, difficult to come up with ideas. I did CV screening and very few people had anything, it's not like a portfolio project needs to take more than 2-3 hours to create.
Portfolios are a common requirement in other fields where creating a portfolio is even part of the educational process.
Scraping Kickstarter projects with certain keywords and sending yourself an email, a tool for slicing csv files, reimagining various basic command line tools in new languages, a tool to scan a file with an unused filename in the current directory, a program to sort music by idv3 tags, an http media server, etc...
All of these would show 1. basic language ability, 2. some simple algorithms, 3. ability to do something to completion.
I just started working at a company that didn't do any whiteboarding or technical challenges. As far as interviewing me goes, they broke all the "rules" that I used to follow when interviewing candidates at my old job.
So far, so good. They seem to have an attitude of seeing the best in everyone, and everyone seems talented. Maybe I can learn a thing or two from them!
Maybe we should give options to candidates. If I were to hire software engineers, I would offer every option to them:
1. Whiteboard interview
2. Opensource contributions
3. Take-home assignment
4. Becoming contractors for a short period
5. Etc
So if they fail whiteboard interview, they can redeem themselves with their opensource contributions. If they don't have opensource contributions, then they can take home our assignments. And so on.
That's not necessarily a bad approach aside from the cost to the hiring organization to maintaining so many workflows. It lines up with, e.g., Triplebyte's and Google's studies about how a candidate's success in a role is tied much more closely to the moments where they impressed you the most rather than any kind of minimum bar you need to meet or some kind of average performance. By giving the candidate the opportunity to impress you however they're best able to do so you could plausibly get a stronger signal.
Why is US-based computer science seemingly the only field with these strange nonstandard interview processes? It's like a fad that turned into an arms race and is now the default response for any american technology company's HR department, because these guys certainly aren't in HR for their creativity.
A. this is a good list.
B. Lets not forget that whiteboarding is not all evil. If used correctly, it can filter out a lot of people that don't have good CS fundamentals. By fundamentals, I don't mean inverting a binary tree. At the end of the day, as a technical manager, the goal is to hire smart+hard working people.
Here is how to do a tech interview that (I think) will work for everyone. I am sharing in the hope that this will become the standard, it was certainly the most pleasant technical interview that i have had, and somewhere where our industry is badly broken.
I was asked to bring in my laptop with some of my own code - I had a side project at the time, so no problem. We talked about the code, decisions I had made. I was asked to implement a simple feature. I did.
No time consuming take home exercise. No whiteboard riddles. No need to have a github full of work (lets face it most peoples work is in house and not easy to show off). Code I was familiar with, so less stress. The only downside would be not having code available, but then it will be the equivalent effort of a take home exercise to produce something.
> I was asked to bring in my laptop with some of my own code - I had a side project at the time, so no problem.
Seems like a good solution if the candidate has a side project. However, many candidates might have their majority of the "good" code they've written owned by their previous company.
> I am sharing in the hope that this will become the standard
Hopefully it can become a standard option. There's probably never going to be a standard technique which fits for all candidates (or employers).
>However, many candidates might have their majority of the "good" code they've written owned by their previous company.
Which is a huge problem in this field that stymies wider innovation in technology by limiting discussion around technology through literal gag orders. You should be able to reuse whatever you write. It's silly. I'm not stealing cash out of the register, the company doesn't lose anything from me keeping a copy of my code snippet around for future reference. It's not the whole codebase, it's just what I've contributed. I swear, lawyers have ruined technology.
Programmers change jobs very frequently. They come and go. So why are we so obsessed with "getting it right", as if hiring a programmer were like signing a 30 year mortgage?
Hiring is a crapshoot. You'll make bad hires. That's an unavoidable fact of life. Professional sports teams spend millions of dollars on talent evaluation and still get it completely wrong all the time.
No, a bad programming hire is _not_ devastating to your company. You'll live. A bad CEO hire could be devastating, but you can't do a whiteboard or a take-home test for that.
"The perfect hiring process" is classic premature optimization.
I once applied for a company here in São Paulo where after the technical interview (no whiteboard) I talked on-site with the CTO and he passively-agressively asked a bunch of random questions and tried very hard to be a dick about it ("oh, you consider yourself a good self-learner? French? I bet you couldn't read some news in French if I opened any here right now. JUST KIDDING")
At the end of this 40 minute nightmare I had a bizarre homework to do at home that involved writing a list of uses to a paperclip.
They took a month to send me an email saying I wasn't accepted.
Can someone explain to me why isn't it ever part of the discourse to talk about certifications?
Most of the software engineers are certified right from the start when they graduate in university. All these people hold a certification in their hand, namely their diploma which proves that they are actually deemed suitable to hold any software engineering job in the industry.
The whole hiring process could be replaced with a timely renewal of accreditation. Then anyone who passed accreditation could be deemed as passed the technical interview. And then case closed.
The best programmers i've worked with don't have degrees in computer science, or anything like that. Metallurgy, civil engineering, mathematics.
On the other hand, i've worked with plenty of people with CS degrees from respectable universities who were useless. A degree is not anything like a certificate, and universities simply aren't in the business of actually deeming anyone suitable to hold any software engineering job in the industry.
Even if you fixed this, so that somehow every competent programmer, and only competent programmers, had some certificate from a university, all it would do is let you hire graduate developers easily. It wouldn't let you sort the wheat from the chaff at senior level.
You completely missed the second part of my post: "The whole hiring process could be replaced with a timely renewal of accreditation."
The accreditation would be available to anyone. Just like anyone can become a lawyer in Japan for example. You don't need to hold any diploma for that. Although it might increase your chances to get accredited if you have formal education.
Fair enough, that does address the point about hiring seniors.
But if universities can't currently usefully certify people for fundamental development ability, after having them on campus for years, i don't see how they'd be able to accredit seniors for the more complex skills they need.
BTW, another thing: are you saying that computer science departments are not deemed to properly accredit people in computer science knowledge...? But no-name low-ranking SW engineers in a dim-lit meeting room in front of a whiteboard are good judges of CS knowledge?
I feel a better title could be "Hiring without CS trivia". Whiteboard is the most powerful tool I know to brainstorm high-level ideas quickly, such as timelines, diagrams, mock-ups, etc. What sucks is when the whiteboard is used as IDE and the candidate as a compiler.
It’s a funny cultural thing. Here is a caricature:
Hiring managers have a real problem to solve: “how do I hire?”. They don’t have the time to conduct actual experiments and work out what actually relates to better hiring. So they trivialise the solution into some assumption about how the information captured in an interview generalises to overall suitability. They then proceed to defend the process and it’s results as if it was state of the art because bad hiring = bad management in the politics game.
To me it feels obvious that whiteboards, pair programming , take home tasks, panel interviews , etc are all subject to being highly flakey and highly presumptive not least because repeatable processes are just hard to enforce and train people on.
What really works is survival. Practically every company has a probationary period but it’s rare that once you’re in you’ll get bounced out in my experience. IMO bite the bullet, over hire and then collect the cream based on evaluation of the total output and the teams impressions in the probationary period ...
> IMO bite the bullet, over hire and then collect the cream based on evaluation
That sounds at the least unethical and perhaps illegal in some countries. You're messing with people's lives, their ability to pay their mortgages, support their children, and other commitments they might have. While hiring mistakes sometimes happen, you should not be using firing as a tool to make your hiring more cost effective.
And I also think word would get around pretty quickly not to apply to companies who did this. Per the article we are already making lists of who uses ineffective whiteboard tests. I very much doubt any company wants to be on the list of "hires you and then fires you instead of doing effective interviews".
Applicants should know what the process is; I'm not sure why you'd assume that would be kept from them? It's perfectly normal for hiring / firing sales, traders, and other performance oriented professions.
Nothing forces people to apply ... mortgages, children etc.
It really depends on whether as an employee you want a meritocracy or an easy time. Personally, I wouldn't be adverse to this sort of practice; and companies like Valve do something significantly more extreme.
> I'm not sure why you'd assume that would be kept from them?
Where did I assume that?
> nothing forces people to apply
Agreed. I already predicted that the reputation gained from this practice would have talented developers avoiding a company involved in such a shady way of hiring. I'm damn good at what I do and "we will fire the ones who don't work out to avoid doing interviews" is a huge red flag for me. You lose, not me. Companies are competing for developers; experienced developers don't need your company.
> it really depends on whether as an employee you want a meritocracy
A meritocracy is great. Your company just lost at it. There are far better companies I could work for where the interviewing process isn't based on laziness now and fire people later. Want to win in the meritocracy competition between companies? Learn how to interview. I know how. That's why I can hire great devs. Haven't had to fire anyone ever in my career. So that's who you are competing with in this meritocracy. Companies who get the hiring process right.
> IMO bite the bullet, over hire and then collect the cream based on evaluation of the total output and the teams impressions in the probationary period ...
That might work if you have 110 people applying for 100 positions. Just hire everyone and then fire 10 people. Over hiring 10 people probably isn't that much of a problem.
However that does not work if you have 100 people applying for 5 positions. This is the situation we found ourselves in and we had to filter somehow. We chose to do a very simple code challenge which ended up being a very effective filter.
Sure but you’re bound to say that ... Find me a hiring manager than publicly says anything else. That’s kind of part of the point.
I roughly recall google touting ~50% hiring success rate and that’s with a 4 interviewer, 10-15 man interview process, and undoubtedly a massive false negative rejection rate.
I think some undesirable attributes are observable in fairly short screeners ; sure screen away . But I bet you that you’d do at least as well if not better by just selecting at random past that point.
The reason why I say that it was an effective filter was that the majority of people flat out FAILED the coding challenge. We only send out the coding challenge to people who where successful in the first interview and still most people failed the coding challenge.
I am very sure that a random selection, even after the first interview, would have been disastrous.
Result is that we have not fired anyone for performance reasons since we established this hiring process. Which I would say is a success.
Here is the thing: We cant just over hire like you suggested. That would just waste money and as a startup we don't have much of that to waste. Also I think it would be incredibly shitty for us to over hire just to fire people a short time later. The majority of people would have to leave jobs and/or immigrate to this country. Hiring such a person when you are not 100% sure you want to work with them is fairly immoral.
There’s nothing immoral about it if you tell applicants. It’s basically how hiring for sales is done and no one is under any illusion that you won’t keep your job if you don’t perform.
The point here is more nuanced than the straw man you’re painting. Everyone that passes the interview process stays is a bad sign because it confirms something highly unlikely about the interview process: that it succeeds in generalising aptitude.
You’re right that startups can’t do it though other than through intern programmes. Lots of companies do it through intern programmes. Only the fit interns survive and get a job.
The ultra darwinian workplace is probably not a fun place to be. Also it sounds implicit in survival that there is some obviously fairer natural law that governs who survives. It's another judgement by someone with similar repeatability issues, albeit a judgement with more observation time (and more collateral damage to everyone else who is in fear of losing their job).
Well less repeatability issues actually ... since you can think about the counterfactual “what would we lose if they weren’t here” and the actual “what did we gain”. This information is available and you don’t need process to extract it.
As far as “darwinian” goes some of us relish a meritocracy and loathe being surrounded by duds. I understand “Valve” to do something just like this but to a greater extent and they are not having problems hiring.
There. That's it. All this is a far-from-optimal filter for the total strangers. Get a foot in the door with an established insider and you get right to the last interview(s). No WBs, no take-home projects.
Does this actually work in practice? From my understanding knowing someone might get you past the initial HR / ATS hell to a first round, but you mostly have to follow typical processes after that.
I'm absolutely fine with whiteboards. What I'm not ok with is take home assignments. You are expected to work for free for 2-3 days on some project that will help no one.
At the end of last year I wanted to change jobs but I was paranoid about my raw algorithm knowledge. I've been a consultant for over 15 years. The last company I worked at for a decade. I've developed software given a specification, worked with teams to design applications, lead teams, presented to management of companies, and even was part owner in a company -- but I never was good at rote memorization.
I know my limitations and I know how to find answers.
So, for 4 months I practiced online programming problems, read interview books, and had my wife quiz me nightly. The nightly quizzes were whiteboard answers and I had to explain the solution enough that my wife understood.
In the end, I was interviewed at 4 companies: Daugherty Consulting, Google, Amazon, and Target. (For Google this was my second interview in two years. The first interview was a shock, I froze during the preliminary interview, and for two years contemplated if I'd ever quit my job.)
Daugherty never had me do whiteboard programming but did ask me some algorithmic questions. These were much easier to answer verbally. In the end I was told I didn't have enough experience in consulting working with large companies. (This was a bit of a shock but whatever.)
With Google, I never got past the first round. I felt very good with my solution coding in a Google Doc, but, they had wanted me to implement the Python bisect_left function. Instead I just used it to solve the problem.
At Amazon I made it onsite, but again, I failed to whiteboard a hashing function to their satisfaction. They told me it could have been overlooked if my architecture skills were stronger. They did complement me highly on my communication skills, which I appreciated. (I had worked for two weeks rewriting my accomplishments journal using the STAR[1] format.)
Target (where I work now), was completely different. I was given a choice of real-world-like problems to solve and a couple weeks to code. Two were pretty heavily algorithm/math-focused but the third was right up my alley -- implement a microservice backed by a data source and a different (potentially flaky) service. I took my time, wrote code I'm proud of, deployed it on Google Cloud, and explained my solution in detail to a Principal Engineer. There were still personality and experience questions (and I think also some algorithm questions) but nothing like my other experiences. It felt much more grounded in reality. Are you a solid developer, good communicator, and good fit for the company. In the end I didn't get the exact position I applied for but I'm still extremely happy.
My takeaways:
1. Maintaining an accomplishments journal as more beneficial than I could ever imagine. I write down everything I'm proud of - when I'm proud of it even if it seems minor. I can always delete it later. Also, the STAR format is actually really good.
2. Don't stagnate in learning. Technology and methodologies are changing all the time. I don't follow every fad or code in my spare time but I feel strongly taking some time periodically to maintain a level of expertise is a good investment.
3. Knowing my strengths and weaknesses really helped me focus while preparing for my interviews.
4. Learning from interviews and maintaining confidence was big for me. I took notes immediately after each interview of what I wanted to work on. I asked for as much feedback as I could get. These notes made it back to my journals and are things I'll refresh time-to-time because I know nothing is a given. Who knows what I'll want in another 15 years.
I really don't understand the idea that take home is somehow more fair or accurate than whiteboards. I've judged and taken both whiteboards and take homes. Take homes are more annoying for the candidate, and in my experience much more subjective from the interviewer. In my experience take home is the absolute worst way to pick a candidate.
When I do a take home I have access to google, StackOverflow, etc. I can spend 15minutes on it, then pause to do something else (while I still sort of think about the problem), get back to it for 30 to 60 minutes, rinse and repeat. Which is exactly how I work in real life.
Take homes can actually be compiled and executed against a test suite for correctness.
Take homes tend to be more realistic exercises than balancing a f-ing tree or walking some idiotic graphs.
When I interview (and yes, there's whiteboard time), I tell the candidate up front and very clearly, "I will be your Google. I know we don't work in a vacuum"
It's definitely important to prove you understand the core concepts required to be a successful developer, such as using efficient & scalable approaches to solve a problem, but writing quality code from scratch simply doesn't mix with high anxiety. And it's not representative of how programming work is done in the real world.
I think a good middle-ground is pair programming where the interviewer writes the code based on the pseudo-code provided by the interviewee. This way, the interviewee displays their thought process and communication skills without being bogged down by programming language nuances.
Man I've said it before, but I need to get the hell out of this industry. Its pointless to argue against the whole whiteboarding / leetcode process, it exists for a reason, but I'm quickly realizing everything about the industry, including the industry process is just incompatible with the way I work.
I am going to kill myself (exaggeration). I have maybe one of the best cv's (I am not saying that, it is feedback from industry) for last year student focused on low-level programming. But I cannot bypass recruiters. Why? because none of them even heard Boost.Beast or anything on my cv. Or any C++ thing I have done as project or my publication. They literally do bunch of find/search on the pdf. And because of that I am unable to get any internship, particularly now which there is no meet up or in person networking.
P.S. I used to have extremely successful in person networking before COVID19.
This feedback is well intentioned, so please don't take it as an attack.
As much as we'd rather it not be the case, even for programmers writing skills are incredibly important. This comment is contains a few grammatical errors and is quite hard to read - I checked your comment history and many others suffer from the same problem. As some who hires, if I read a job application with this quality of writing, I'd probably dismiss it.
If you're having trouble finding a job, it may be helpful to have someone read over any written material you submit alongside your CV (cover letters etc) just to make sure it's clear and easy to understand.
I really apricate your feedback. Just one thing you should take into consideration, that is, as ESL I am not going to put that much effort on writing comments on HN to check for every grammatical error. I simply don't have that much time and energy.
I do understand what you say. But that is not the case sadly.
Completely valid point and shows my shortcoming. I hope I will improve it. But with COVID19 and danger of going homeless, it has become hard for me to manage it all. But you are completely right.
>Just one thing you should take into consideration, that is, as ESL I am not going to put that much effort on writing comments on HN to check for every grammatical error. I simply don't have that much time and energy.
Yeah, I had a hunch that might have been the case, but didn't want to make too many assumptions. I can't string a single sentence together in another language, so I can only guess at what a pain it must be to deal with on a day-to-day basis!
You are discovering that most of the value in software... is not in software.
Nothing on your resume will ever cause anyone to say, “We simply have to hire this guy.” On the contrary, the slightest typo, grammatical error, or stray bit-flipping particle will mean that your resume is instantly discarded.
When they do this to your resume, they are doing this to a representation of you: they are metaphorically throwing you in the trash like worthless garbage.
Are you offended by this? You should be.
So don’t use a resume.
Figure out some other way to get on the phone with the people you need to talk to.
You are no longer a tech wiz. You are in sales now. Your job is “selling yourself”.
Maybe it makes sense to pay someone (perhaps a fellow HNer[1]?) to review your resume and suggest some changes?
Japanese is my third language, so when I was shipping around my Japanese resume in Japan, I had an experienced native speaker review and revise. As a non-native speaker, there's a lot of nuance in writing that you just don't understand.
Your resume is often your first impression, so you want it to glow as much as possible. Honest, but glowingly so. :)
If you're willing to associate your username with your personal identity, you could link to your projects/CV in your profile. Other commenters may be able to identify what recruiters are looking for and why your resume was dismissed.
Also, to the point of the post, do you consider whiteboard interviews to be good or bad for your situation? With covid it's harder for companies to find which applicants should be interviewed in the first place, and short questions are helpful for filtering out people who can't code at all.
About the leetcode thing, yes, I used to be pretty code. If you send me a link right now, I might not be able to do it, since I am living under huge stress right now, but with 1 week or 2 training I can get 80-90% in the coding challenge easily.
I'm not in a position to help get you an interview at the moment, so I'd feel uncomfortable asking for your resume. Participating on Hacker News and GitHub is an avenue for networking. Without linking to information about yourself you may not be able to take full advantage of that.
I'm sorry to hear about your stress. The worst part about the recruitment process is that it doesn't put folks in a typical development situation. I hope you're about to find something!
Consider applying to companies directly rather than going via recruiters. Recruiters often just look at past job experience, but hiring managers will look at your actual skillset.
We use a simple 2 step process that allows both the company and the candidate to have more certainty about the opportunity. This only applies to technical jobs.
1 - First interview. Does the candidate know about the company? Does he know anything about the business domain? Conversation about problems he has encountered in his past experiences. it works like a knowledge sharing conversation, you really get to know how well things have been thought of.
2 - Freelancing period of about 3 weeks, 20h/week - You get to know the technical skills, cultural fit, communication skills and all other aspects that you only arrive to practicing it.
So far it has worked pretty well for us - we've hired about 11 developers and refused/have been refused by 5. It's an empirical process that works for both parties.
2. a programming task. Choose 1 of 5 tasks. The tasks are not abstract problems or puzzles, but come out of the designs we've implemented. We ask for 100 lines of code and not more than 2 hours. They take as much calendar time in days as they need, most have full time jobs, and let us know when you're done. The candidate then comes back, typically in 2 to 7 days and hosts a code review in front of our team. I give strict instructions before hand: The purpose of the review is to learn how they thought through the problem and how they solved it, not to criticize their style and approach.
3. If we decide we like them to this point, the third interview is with managers from other functions. How well does the candidate communicate, come across to non-developers, express interest in the company and role, etc. It's a check point to look for concerning weaknesses, as well as get buy in from the broader organization.
We like this approach because it allows the candidate to code in a much more natural environment. They can take the time they need and comfortably solve. No one spends their professional career coding on a white board. This approach so far has yielded excellent results. We ask developers how much time they took in the programming task and why they chose the one they solved. The programming task is telling, not in the quality of their code and how long they took, but how much did they get into it? We have had the range from candidates who did not complete it at all and opted out, to candidates who stumped 40 year veterans with elegant code. In every case, we learn how well they can express their thoughts, and importantly, their level of love for the discipline. This is as important to me as any other attribute.