How not to hire a software engineer
tonsky.me
tonsky.me
What's the ego, arrogance, competence, willingness to ask questions, interrogate things, redefine problems to be less work (or none at all).
Do you see what's not there? Programming language competency. Database knowledge. Things like that.
I've been hired as a Ruby programmer, I didn't know Ruby. I was hired for mainframes in the 90s - I had never seen a mainframe. I was told about 20 years ago to write a program in perl, my boss gave me a perl book with the assignment because I didn't know perl and I did it.
This is not a bad way to go about work. Every codebase is new. Every job has a steep learning curve. Every requirement is a conversation which may only be internal, but has to always happen. Every programmer you work with is someone whose preferences, strengths, styles, and weaknesses you need to have intuition on. People good at those things are what make good programmers.
That's why general competency, ability to learn, not to create a mess and not to waste time on stupid things are the only things I care about. That's really it.
Preexisting technical skills aren't as important as how dynamically you can apply new ones.
My first couple of hires before I did this were a brilliant computer scientist and a guy with a business degree and some coding background. I was surprised to see the guy with the business degree excel because we weren't doing many CS-hard problems, and an ability to manage time, talk about the problem, and navigate the project life cycle were far more important than classic algorithm knowledge. He needed to know how to code and debug, for sure, but like most software jobs, his soft skills were a force multiplier.
I'm pretty sure this has been done with me - I was given a problem and told to come up with something like an O(n log n) solution, and I honestly couldn't do it. I tried a few different approaches but I could think of really bad pathological cases for all of them. The interviewer gave me a few suggestions which I explored and I kept exploring them and then admitted I didn't see a way forward. I thought I was bombing and then he told me I did really well. I looked up the problem and found out he had done Ph.D. research in that area, and there was no general O(n log n) solution - only solutions that could do that in most practical cases.
I further surmise that very few companies need these kinds of people. If your needs are people that can be managed to do basic programming tasks (my job as well), then that's what you hire. That's something like 99% of all programming work.
It's like hiring someone that understands the building of nuclear power plants, and being surprised that they don't understand basic home building codes.
The saddest part of it, for me, though, is that someone with a Ph.D. in Computer Science that is searching for a job in the non-research sector is probably having a really bad time. Research is happening, but I don't think it will jump in a very large way until there are a lot more dollars being pumped into research using public money.
One of the most unrealistic parts about a code interview is just how high-pressure it is, time sensitive in unrealistic ways, way more impact on your career than usual 5 minutes of coding, no peers to ask questions to, unclear if asking to google will be seen as a negative or not, etc. I think trying to reduce some of these unrealistic pressures, by being clear about what you're expecting (and being in this case up front that you _have_ intentionally given them something out of their domain knowledge) can probably give you a better evaluations. Some people do better under that kind of pressure than others, but if that kind of pressure is not actually representative of the actual job, it may not be what you want to be testing for.
Also set expectations for transparency and kindness (instead of bullshitting or preening) by modelling it yourself, right from the start.
IMO anyone else saying you should tell them the solutions might not have answers are dancing around needing to have that skill.
I know I will after this discussion!
I know I would also get very thrown by a question without an answer if I wasn't expecting it, in a way I don't think I would be on the job. (On the job I know too well through experience that not all problems have good solutions, but in an interview question I maybe would have assumed there was an answer they expected me to get, before this exchange).
Of course, the end goal of interviewing for an employer is maximizing their chance of filling position with good people, which involves balancing false negatives and false positives -- and in fact a "false positive" (wrong hire) is probably _worse_ than a "false negative" (turning down someone that would have been great). So... filtering out some candidate that might have been good may be a neccessary sacrifice, not a flaw in the process, so long as you're doing even better at successfully filtering out those that wouldn't work out. Whatever works!
If I felt someone was intentionally giving me a "trick question" in an interview, I might conclude they weren't someone I wanted to work for anyway, so everybody wins I guess.
I used to ask about the layers in the network stack, and how you might troubleshoot it. I start with something as simple as a firewall blocking a port, or the server not listening on the port you expect. If they do that, great. Anyone who's had to troubleshoot distributed systems should have checked that stuff plenty. Then we try a protocol they might not have used. Most developers have a rough idea of UDP vs TCP, but they might be confidently wrong about some details or try to make stuff up and say "I'm pretty sure...". We go down a layer and try some scenarios where routing is messed up. I don't expect most devs to know about that, maybe someone with more sysadmin experience, but by now it's painfully obvious if they don't know what they're talking about. It happens to be pretty handy on my team, but if at this point someone says, "you know I really don't know a lot about networking", great! I'm glad you told me. Let's skip talking about voltage fluctuations in Cat5 cables and get back to software development.
Another good one is designing a data structure where there's a lot of different access patterns you might optimize for. Gives them a chance to demonstrate some simple coding and CS skills before it gets complex, but then there's lots of room to talk about the use cases. Once you're talking about use cases, are they willing to ask about the trade-offs? Priorities of various use-cases? etc.
A good way of approaching this might be to provide problem feedback during the mock, stating that there's a given problem reported with the results or some other plausible complication and seeing how things go from there.
Also, the not knowing thing. I've hit that a few times myself, however I'll generally exhaust every reasonable option I have to look-up or reverse engineer the solution on my own first. Google / duckduckgo, stack-overflow, asking some other tech friends if they've encountered similar things before; if I worked somewhere with other technical users that I expect might have seen this they'd be just before the out of company friends on that list.
By the time I get to something I don't know, and can't find out on my own, it's actually a DIFFICULT or VERY domain specific problem. Generally then I go for adding diagnostic prints or using a debugger to trace the problem and find out where things are going wrong so I at least can narrow down causes/solutions. Even then, it's still taking a __LOT__ to get to I don't know.
Can be a problem trying to out-generalist a generalist, but if you pick something in your niche (I ask them lots of other questions relating to their background, so this question doesn't have to cover the exact job requirements) and practice the problem with dozens of interviewers, it'll be pretty hard to have someone who can genuinely out-think you in the depth of that problem. And missing out on the "I don't know" is a small price to pay to find a candidate that does that well on the problem!
There's 3 ways to answer these kinds of questions and it exposes you as either a genius (or in this case a linguist), a non-genius (real geniuses are as common as 7.5 ft tall people) or a bullshitter trying to look like a genius.*
I've never met an actual genius in an interview so let me address the other two. That third group is a nonstarter. I've known the person for 10 minutes and they're already trying to deceive me. How the hell am I going to build a product with them?
Kim Scott, some SV big wig wrote an entire book on this called Radical Candor. Essentially it's "don't bullshit people (and know where your taking the relationship when you use that rule)"
I strongly believe companies work best with the smallest bullshit quotient possible. They may sell more or be more profitable with certain flavors of bullshit, but things are easier and more stuff gets done without it.
At the end I would have rather actually made something than duped people with sham products sold on dreams
---
* I actually can't answer that question but I could probably identify the neighborhood of a real answer (...something something limitations of the von nuemann model restricting the constructions of parsing systems something something...). The point isn't to answer it, although that would be quite impressive; it's to see how far someone digs into their own BS.
What's the point of grandstanding like this? To make yourself feel smarter than they are?
My way of dealing with bullshitters (who in general are surprisingly eager to reveal themselves as such -- there's no need to lay special traps for them) is simply to say "Hmm - okay" and politely end the interview at the nearest reasonable opportunity.
When interviewing and I didn't get a job I always desperately wanted to know how to improve things next time and nobody would tell me. Instead there was this little canned BS email from HR "after much consideration blah blah blah" stop that ... tell why!
This goes one step beyond telling. Show people why. Show them what they are doing, when they are doing it, how you can see it, why it's bad, why it hurts them and help them not do it in the future.
Give them an offer to correct it after you've made it clear (this is like throwing an exception in programming versus silent failure). Reset the clock and try again if you want. Maybe they're actually great and you read them wrong (they might be a "good program" with your bad input). The interviewer isn't some flawless executioner.
Most interviewers don't act like characters out of an Ayn Rand book. At the end of the day they care about others and know they have bills to pay. Doing this shows "this is why this job can't happen". Try to be their best interview for a job they didn't get.
The candidate doesn't walk out the door with ambiguity or false pretense or the illusion of doing well. Nor do the decisions come across as arbitrary and indiscriminate. They know exactly what action they need to take for their next opportunity.
If they don't get the job on offer, the best you can do for them is help make sure they can get the next one.
> what are the strengths and weaknesses of classifying grammars via the Chomsky hierarchy?
Are there alternative classification schemes for grammars? I haven't come across any personally—not for formal languages anyway.
Or was something else meant by the question?
Type 0 is an unrestricted grammar.
Type 1 is a context sensitive grammar.
Type 2 is a context free grammar.
Type 3 is a regular grammar.
For our (CS) purposes we typically use Type 2 and 3.
The Kobayashi Maru of programming interview questions!
I interviewed for atlassian a few years ago. They gave me a tricky Java test, the kind that you’d only pass if you’ve been battling Java for years and know the gotchas. So that was a fail. I could have studied Java harder, but I’ve only got so much time and so many opportunities.
I here that SF people are getting $130k out of uni. That would be a rare high salary here (180k Aud).
Probably a manager of 100 people or a good cider working in trading, or a smart employer who doesn’t want to play the market rates game.
Salary is total comp here pretty much.
Recently I've had three or four interviews that didn't quite get to the job offer stage, but they did both include over 30 hours of work + interview steps. I'm sorry, but a full week's of unpaid work that I have to fit around my actual day job is just not practical, I know you want to make a good decision, but really...????
The best I've seen recently is a company that paid an hourly wage for 2 days worth of take-homes. Not consulting wages, but a good wage. It gives them incentives not to invite everyone in the world to do their test, and gives the interviewee something for their time.
This lines up exactly with my experience. 3-4 interviews, each requiring ~30 hours of technical tests, and interviewing. Absolutely ridiculous.
I suppose that is what triple-byte is trying to do.
But really, we're all at-will employment, let's just work together for 3 months or so, see if you like my skills and I like your culture and if not just part ways - I'd even be happy to work at a wage cut for the first 3 months. But having a full-time job interviewing while working a full-time job is exhausting, esp when after 30+ (!!!) hours of interviews and conversations, you can be cut at the final stage without a single word about what went wrong.
What you get is actual, real feedback on your performance, and you skip straight to onsites with companies they match you with. The feedback is valuable, but I don’t know how their matching process works at all.
What it _doesn’t_ do is “turn an O(n) process into an O(1) process,” as their FAQ suggests. All it saves you is 1 phone screen per company they match you with. If a typical phone screen is 45-60 minutes, and the time you spend on their process is 4 hours, you need to interview with 4-6 of their clients to make it worthwhile in terms of time savings.
IMO, don’t try Triplebyte to save yourself time. Do it for the interview feedback, because that’s the best place I know where you can get real feedback for free.
If I get to skip 10+ hours of interviews and coding work, that's a significant time savings
Their other processes are probably equally terrible and their codebase is likely a nightmare. Make your money somewhere else. Really.
I hear this a lot, but I'm not sure I agree 100%.
I want to work with people who can write idiomatic code and are able to use a database efficiently (or who are at least willing to learn these things).
1. I've worked with people with years of experience in a language who can't (well, really, "won't") write idiomatic code in that language. This has—in my experience—typically come down to overconfidence/arrogance built on top of their experience whereby they've spent enough time with the language to develop their own "better" style.
2. Learning quickly on-the-job typically involved picking up idiomatic style first, before you really gain a deep understanding of the underlying workings. Ideally a good engineer should gain both, but at least initially, I haven't found the former to be a problem for "good" engineers starting out on something new.
3. For some language ecosystems, what's idiomatic changes over time. Flexibility and adaptibility is key to being a good engineer, but if someone has a lot of experience but isn't so adaptible (and/or hasn't brushed up on modern techniques in their ecosystem), this can also lead to non-idiomatic style.
I get that some of the things above should be red flags "in an of themselves" when hiring, but I'm just pointing out that a focus on past familiarity with tech can cloud things somewhat, and shouldn't be implicitly prioritised.
In a sense, they were right. I have noticed myself increasingly comfortable with new codebases whenever I change jobs, so experience definitely counts for something.
you talked about paying attention to their attitude but I mean more specific things like, if they said they use Emacs and write bash scripts would you take that as arrogance or that they are competent?
People do stupid things and create a mess, while they learn.
Why these interview processes act as if candidates are going to be designing graphics engines from scratch for graphics hardware extracted fr om a downed alien spacecraftis beyond me. We just really be testing their ability to sort through a bunch of legacy OOP designed by people who are so board with the project domain that made of bunch of bad abstractions and used every new OOD technique in the books when a handful few procedural functions would have sufficed.
this is exactly the company/boss i would not want to work for. It is exactly the opposite. You should not care if the person if familiar with the tech you use. Who cares if you do php or c#? Does it REALLY make any difference when it comes to taking the business logic and adapting it into MVC/API?
Because if they don't have a deepish understand of the language and framework IME they tend to write crap code.
If someone is being hired to write C# /.NET all day every day I don't want to have to spend time teaching them C# or .NET
Especially not how to write good C# / .NET.
I've been writing code for a long time in many languages and I do my best to write "good" code. The principles that make code "good" in one language appear to apply equally to other languages...
The only criteria I have for good code these days is "Does it work", "Can I understand it". Everything else is a good IDE's command away for being willed into reality. So I really don't spend too much time on the "good" code debate like I did as a teen reading "Clean Code" and GOF books. I actually wish I could have that time back, I would have read, in their place, books on type theory and OS design, Posix, in other words things that actually help me build stuff and get things done and that I subsequently had to read later. Undo the damage done by the "good code" people that have me thinking about stuff that nobody cares about. Take a month off, read a book on game design in opengl, and write a cool robot simulation or something and remember how much more gratifying that is than writing a small do-nothing program just to try out some useless design pattern that doesn't scale beyond micro-examples.
There is so much varying lit out there on how to write good code that I am surprised that I am surprised if even 2 programmers can truly agree on what good code is. So Again, I'll say that "good" when it comes to code should be equivalent to "easy to understand" and "does the flow of text match the flow of program execution" in other words "is it easy to understand given I am familiar with the problem domain".
Which of course, are not trivial to achieve by any means.
Maybe also add "Can my coworkers understand it?" Which might be a very different metric.
"I would have read, in their place, books on type theory and OS design, Posix, in other words things that actually help me build stuff and get things done and that I subsequently had to read later."
If you want to get very far with any of those, you will need to write "good code", as you have defined it. So maybe a better way to understand good code would be to read the code of large projects implementing the things you want to learn about?
> If you want to get very far with any of those, you will need to write "good code"
If you have ever looked at the code of the most successful programs the code is anything but "good". Have you glanced at the Linux Kernel code lately? But again, "good" is very subjective. The Linux Kernel works well enough to server the purpose of millions of users and enough people understand it. Its good code!
I'm sure there are similar situations going from .NET to PHP. I think they would understand the implications, but I'm not sure they would be able to quickly fix it if the expression tree implementation changed and they had to determine which implementation was being used with reflection.
That said, I would hire the PHP/Ruby programmer who didn't run screaming at the use of reflection and monkey patching over a .NET/Java developer with no interest in all the neat things their language of choice can do to eliminate massive amounts of boilerplate code.
My preferred coding interview approach is indeed to let the candidate interact with a correct but poorly-written piece of code and refactor it into something more maintainable. I find that reading and working with other people's code is a hugely important part of the job on a modern dev team, but rarely is that part of the evaluation.
The word you are missing from your description is "effects". The parts of program or system interacts with each other not only by passing and returning values, but also by effects. It is good if your effects are isolated in SQL with ACID, but oftentimes they are not. The interaction is often subtle when resource in conflicting usage is shared indirectly (systems programming, come here!). And in the end of the day you are more Sherlok than you could imagine you ever would.
I am here not to say that interview questions are perfect. I am here to say that things that programmers do are not mundane (or they would be automated out quite quickly).
And they have been automated out, and so we are all working to solve other things now, which will then be automated, leaving us to solve other things...until the Singularity.
I will typically do this on a phone screen, having informed the candidate beforehand that they need to be near a computer with an internet connection during the call. Typically this will be after business hours, so they're at home where they're comfortable, and on their own machine, whatever it is.
I use a site called rextester to administer the test. I've been using it for years, and it's fantastic.
As the tester, you go to the site, choose the language, and click 'live cooperation' at the bottom. Then you email or tell the candiate the link to follow, and both of you click on it to go to the shared coding editor. You can now see the candidate type and talk about how they're solving the problem, editing yourself to give hints/clarity if need be. To save time, you can have some code handy to paste in and pre-seed the problem if you choose (like a list of data to sort, etc.)
This tool has proven immensely useful in my interview process, and beats the hell out of whiteboard coding in person, IMHO.
[edit - spelling]
I think even if you're not the kind of person who can think on the spot with someone watching you well, you should be able to knock out fizz buzz style question in that setting quickly.
Except maybe for pair programming shops?
Yes, the solution might be a couple nested for loops. But if it's a new question to the interviewee, then they don't know the solution yet.
If you're bad at taking tests, being able to make a vague excuse for why you failed one is not an acceptable substitution for passing it.
Nor is the above argument an acceptable substitution for a sound argument that these kinds of tests have some kind of validity.
But, I've personally never been asked these kinds of questions in a live coding/whiteboarding session. It's always brain teasers or some sort of algorithmic problem. Usually they are things that aren't necessarily hard, but are about as far from everyday work as you can get.
After all, you would never continue to try to win the affection of a guy/girl who wouldn't at least give you a first date? Why do the same for a company that can't bother to give you some of their time?
I understand an aversion to legal risk, but IMHO this is going to an extreme that hurts all of us.
I consider it lucky if I even get an email or voicemail saying they've decided to pass. Honestly, most of the time, I don't even get that.
If you're a recruiter, or interviewing someone for a position, it's my opinion that you should be able to give the candidate feedback on what they did right, and what they did wrong, so that they can improve themselves for their next interview.
So often, as a candidate, I've been left to guess at what I did wrong, or why things didn't turn out well. Sometimes, you can figure it out. Other times, it's not very clear what it is you did or answered wrong. Maybe you have a nervous tic or other habit that you are totally unconscious of that nobody has pointed out - and that put them off? Or maybe you need to work on your delivery, or who knows what?
I can understand why companies don't do it; I can see it from their side. I'm sure they (well, their recruiters) can see it from the candidate's side as well. I wish there were a way around this impasse.
I tend to wonder if it has become this way, in part, due to candidates getting honest feedback, and then they in turn went off the rails against the employer or employees? Pure speculation, but it wouldn't surprise me to find out this was the case for some of this.
When I get rejected, the response is usually "You are not a good match to our company culture". What I would appreciate would be "Your lack of experience in managing remote teams is a gap for us."
I feel that quality to the pool of candidates will increase once this feedback loop problem is fixed.
The last time I was asked for a reference I was contacted by a hiring manager who said they were about to make an offer and just needed a couple references. It was a previous employee who had been a particularly low performer. My response was "Company policy prevents me from providing any references. However, (pregnant pause) you should always be very careful and selective in your hiring process." The hiring manager asking for the reference was baffled. She must have been new and had not yet learned the code. Later I bumped into her at some industry event and she thanked me profusely because my non-reference prompted her to do more digging and she learned just how bad that candidate was.
Moral of the story: learn the code (strikes me as kinda funny on HN where the usual advice is learn to code)
Next time before you do something like that I suggest you communicate with your companies lawyer and ask his opinion on the matter before you get your company sued and yourself fired. Especially if you are going to discuss the matter on the public internet.
Odds are incredibly good that its trivial to discern your actual identity and that you have done the same thing repeatedly. Its entirely possible that someone could be working out right now why they weren't hired and whom they should sue.
you basically said dont hire that person to someone. because of your bad experience with that ex-colleague ?. you are denying that person a chance. how come ?
what are you going to do next time someone calls for reference ? the same ?
immature, questionable, discriminating practices...
I disagree. If you had a bad experience with an employee and you're asked to validate the quality of that candidate why should you lie or omit that info?
When you're looking for a job do you also feel that it's wrong to ask current and former employees for references?
Furthermore, it seems you're oblivious to how many candidates outright lie about their CV and working experience.
You need info to make good informed decisions. Otherwise you have no alternative other than to fell for con jobs.
Not everyone's great to work with, I'm sure you have had a few co-workers you would rather not work with again, right?
references in form of background check - worked years a, b, c, on projects x, y,z - yes, sure.
references about performance, likability, etc - why ? how are you going to judge that ? are the references legit ? are you going to get references on the reference giving people ? are you gonna research the excompanies culture to judge tbe referential credibility ?
you're just fooling yourself giving any meaning to this, you could be as well tossing a coin.
What even is your rant about? Managers especially can easily tell your performance, how you get along with everyone, etc. That's the whole fucking POINT of a reference.
In the US it's illegal? It's discrimation yes but isn't that the whole point of a recruitment process?
You can get sued for anything - it need not be illegal to be sued for it.
They can't tell the person that the employee was fired, or anything like that.
But as noted - there are ways used to get around such things (that is, the laws of our country). Those laws exist because people were wrongly discriminated against by using such "references".
But if you have a reference to someone you worked with, and they are no longer employed by that company - then I'm pretty sure they can answer anything they wanted too (unless there's some kind of NDA they are still under after leaving the company). Because they don't represent the employer any longer, and are a personal reference - things become more casual.
There are a couple of main things. Usually when I have this issue it's because the candidate seems really keen to do things or have things that we just don't offer. For example, "Every piece of code must be a micro service". Some of our code works that way but lots doesn't and we aren't going to change it. Another example might be a very junior person saying, "I want to be the scrum master". Well, we don't do scrum master in our team and even if we did, we would be unlikely to pick that person.
Basically, "You aren't a good match to our company culture" is saying "I really think you would be very unhappy here based on your responses". Again, I try to explain if I can but I also don't want to get into an argument. If I'm getting "no go" feelings and they aren't reciprocated, this seems doubly like a problem.
My advice, if you are getting this response a lot, is to consider how you are responding to questions. You may be projecting an inflexible attitude. Don't wait until the end of the interview to ask questions about how things work. Try to make sure to fit it in at every place you can. How are they doing their development? What are the people like? How do they resolve disputes? How do they decide on their tech stack? etc, etc.
However, also think critically about the place you are applying into. If you think, "Oh this is an awesome place" and they think "This guy isn't a good fit", That's a pretty bit mismatch. Did you listen well enough to their explanations? Are you sure that it works the way you think it does? However, if you are thinking, "Oh well, this place is OK. There are problems, but I can fix them", maybe there is a mismatch between what you think is a problem and what they think is a problem.
And while you might be thinking that "not a good match" is corporate speak for "you can't balance a B-tree", my experience is that it really means exactly what it says. As much as my ego takes a hit when I experience it myself, in retrospect every time I've gotten that response it's because it was true. I would have hated that job.
Sorry for the rambling nature of this reply. I should be working, but I hope it was helpful.
I have been on both sides of the hiring table, and while the engineer in me wants to give constructive feedback so that the rejected candidate can better themselves for their next interview, the corporate management in me is telling to do something else.
It has been a conflicting point of view in my head ever since I got involve in hiring.
b) if its a repeating thing consider asking someone (a friend, a forum, a senior dev) for review of one of these "exercises". this could show you what youre not seeing. or could show you your code is just fine or perfect and it's about the company not knowing what they want. so either you will learn something or you will boost your self confidence.
a series of "rejections" can put one's self-confidence to a test, remember good times will come again.
It's sort of a selfish way of interviewing; to write good code for these projects, it can take me upwards of 8 hours. An engineer where I live (NYC) can fairly easily make $50/hour (usually more), so they effectively expect me to give $350-450 of time for this company where there's a fairly high likelihood that they'll tell me to buzz off. I typically write in a very functional lispy style (even when I did JavaScript), and while the overall understanding of FP has improved in the last couple years, a lot of the interviewers would simply not understand what I was writing, and ask me to write it "more object oriented".
Big corporations like Google can get away with that, but for a small startup I really don't think it's worth it to do them (not to mention that I had a friend who did one of these assignments, and they ended up using his code in production without paying him).
The good data science take-home assignments I've done suggest a 2-3 hour limit and they were correctly scoped for that limit, although technically there's no incentive for the candidate to stick to that limit.
The worst take home I did suspiciously did not have an expected time limit (but was due in 48 hours after issuing). It was extremely broadly scoped, and as a result it took 16 hours; even after a couple years as a data scientist now and familiar with time-saving tricks, it would still take 8 hours minimum if you weren't already familiar with the company's data.
16 hours is kind of insane and you have my sympathies. My record is around 10 hours.
Which is a good way for you to weed out companies where the developers are low to average intelligence.
Not understanding basic functional programming concepts, in 2019? Seriously?
It's fine when I'm in a "my job is to get a job" situation, but I haven't been in that situation very much.
As a result, I only start these kinds of projects when I have a clear understanding of the company; and when my personal ramp-up will be very small. Otherwise, I just walk away. My free time is limited.
Or do-able, but they end up requiring 2-4x the "just a couple of hours" they asked for to be done reasonably well.
After which at some point one starts asking one's self: "Do I need this industry actually?"
If there is a big company that hires a lot of people and this is managed by many HR stuff, it is much cheaper and safer not to give any response than go through every rejection response to double check if something seemingly innocent cannot be interpreted as "discriminatory practice", rightly or not.
Legal doesn't have 'interview experience - net promoter score' or any other interview quality metrics as one of their KPIs, so they're happy to mandate the nuclear option because it gets work off their plate.
If you explicitly flout standard and as a result get sued for violating one of the related hiring/discrimination laws, your investors may have a good case to sue you personally because you didn't act in the best interest of the company by opening your company up to that extra risk for no tangible benefit.
>Sorry I want to write an extension to emacs so I'm solving your problem in elisp.
I saw several candidates solve the problem in scheme and every one of them was beautiful.
I usually go through the resume, and have interviewed enough coders to understand that they would know about what is written on the resume. Hence, knowing the background is good enough for evaluation, but feels repetitive during the interview. (Also, if you have had 4-5 years of experience, and 2-3 jobs, you can only stay for long if you had good skillset)
And then I point out that "it's not practical to spend 2-3 days on-boarding you for a job interview. Thus, these questions are contrived. The best way to succeed is to have a conversation about code, and sometimes you need to play a little bit of the 'tell me what I want to hear' game".
And then, for one question, I need to point out that, "I once had a candidate say, 'I like JSON better then XML. XML's outdated.' This question is to discuss concepts that are easy to discuss with C#'s XML APIs, because chances are, you've used them." (And if the candidate tells me that they don't have a lot of XML experience, it's okay.
While hiring (only 2 people, one junior and one senior, both fully remote) I just had a ~45-60min chat about technical and non-technical things (e.g. what do you think about functional programming/rails/deployment/ops/whatever, what does <something> mean to you, how do you feel about <some workplace practice>) and then gave them a small paid project to work on our actual codebase - something like implementing a small, self contained feature or writing some tests for a particular piece of code. I found this to be a really good way to find out if I’ll like working with someone and if they are a good fit on a technical level.
job title inflation bingo !!! ;)
I love the idea about doing the paid project on the real project; I'd love to implement that too.
On the contra side: Nothing of this really felt like it helped me. I found interviewing people absolutely horrible and almost never had a good feeling. People who seemed like they may have been a good fit didn't get offers for one reason or another, some people seemed awesome in the interview and then weren't. Overall I've been happy with the decisions I personally made (not all that the team/higher-ups then made) but even with the best of intentions.. it's hard. But it was a small company so maybe it was already a problem of not looking very interesting to some.
It still amazes me that some people seem to be utterly disinterested in what your company does or how they will work in a team, asking basically zero questions besides "how much money?" and "which language?".
Boss: Do you have any questions for me?
Co-op: No
Boss: Would you like to know about the company? What we do?
Co-op: No
I couldn't help myself from laughing. I know he's just a student, but he's still a 20 something adult. No interest at all, just looking to check another box on his list of credentials. At least fake it!
I asked to have a brief meeting with senior leadership to talk about their business model/plan -- how did they intend to make money?
CEO, COO, CFO, CTO, or the like, would do (it was a small co.). So I got an appointment for 30 minutes with the CTO or CFO (can't remember). Day of the meeting I show up and checkin with reception. 20 minutes later, I reminded them I was still here and someone came out and told me the guy I was supposed meet was out of the office on travel.
I could see meaningful questions about vacation policy and overtimes and such, but that comes with experience and a.) youngsters wants pretend how they don't care bout weekends in work b.) companies lie about that sort of thing.
I know that this attitude exist so I will ask something, it is not about that. But, the exercise is mostly empty for someone who is inexperienced and does not fully know yet what are situations where he fit vs where he does not fit.
- How are requirements communicated to developers?
- How is work by developers tracked?
- What VCS do you use?
- What bug tracker, etc?
- Do you practice devops?
- What's your build process look like? Automated? Continuous deployment?
- How big is the team?
- Do you do sprints? how long typically? How do you decide what to work on in a sprint?
- How do you determine when something is "done"? Who decides?
- Describe your infrastructure.
That's usually enough to get started. You can drill down as far as you want on pretty much any of those.
It's not like we were Facebook or something where he'd already know.
"Who are your most important customers?"
"What is your monthly recurring revenue?"
"What is your best selling product?"
"What's one thing you like about working here?"
"What's one thing you don't like about working here?"
This isn't very difficult. Just requires a slight interest in the industry you plan to work in.
Moreover, they are unlikely to tell you monthly recurring revenue. That is just odd question. Our company would not definitely.
Hiring manager will not tell you what he does not like about working there - for the same reason why you are not truthful about why you left previous place. Seriously. I would not ask the like dislike question for similar reason - it strikes me as odd and possibly would mark me as someone with low social skills. But the risk there is not too high.
Even suppose you apply to a straightforward company with an extremely detailed web site, so that all your questions have been answered already, then this is still a test if you can meet social expectations. You are indeed expected to have questions, and if you don't even follow this simple convention because you think you know everything already, then your social skills are probably underdeveloped.
Finally, even you already know much about the company (e.g., about the most important product), asking about things you know already and comparing this with what you are told in the application talk will give you additional valuable information. Are they excited about their product? Are they exaggerating? Are they bored when answering? Do they know the basic information on their own web site? If you don't use the opportunity to extract as much information as you can, it's simply not smart.
Yes, it is test of whether you know that social thing. So, if the company is treating it as the test of that, then it is fine. Instead, the parent was almost offended over that "No interest at all, just looking to check another box on his list of credentials. At least fake it!".
> Are they excited about their product? Are they exaggerating? Are they bored when answering? Do they know the basic information on their own web site?
Christ, you are talking with hiring manager at that point. I would not mind him not knowing company web site. Most employees don't actually go there all that often. That person might not even work on that product. Unless we are talking about very small company, people do their small parts of the larger whole.
You are hiring tech person and while cooperation, ability to express oneself clearly and without pointless insults, ability to listen and such are important, ability to guess excitement from someone they don't know much less so. It is not sales position.
Second, most people aren't lucky enough to interview for their dream job, they usually have to settle for something else. Consequently, they really have no significant interest in their future industry. Do you blame them?
You want them to fake interest? Sure, they can do that, but does it really help anyone? They applied because they might want to work there, for whatever reason. Why not let them be concerned with how interested they are?
Being inexperienced can excuse a lot, but not a total lack of basic curiosity. And I'd say it's useful to know what a company is producing so you can know if you have any interest in helping produce it.
|I just don't really get this attitude.
Hopefully you just weren't understanding just how bad this was. If not, then try harder I guess?
A real example: a product person once asked a team I was on for a feature that'd be difficult and time-consuming to program, probably taking the better part of a year. My teammates said no. Not, "We want to ship this software soon and we don't think that's an acceptable tradeoff," they just said no. Product became furious (not knowing how hard it'd be, since the engineers hadn't explained it) and it hurt those developers.
Knowing how to invert a b-tree doesn't help you solve situations like those, which are far more common than 99% of fake problems presented in programming interviews.
When I interview a candidate I ask them to tell me about projects they worked on and poke and prod about real-world stuff they actually did, not converting a singly linked list into a circular linked list.
Ideally people would be offered the choice of an in-person or take-home to satisfy both those who feel like they shouldn't have to spend their free time on homework and those who don't like being forced to instantly come up with solutions to fake problems.
I blame Google for introducing this scourge, hopefully it lifts before the next time I do a job search.
My favorite example of this is Google turning down Max Howell for a job: https://twitter.com/mxcl/status/608682016205344768
I like to see them work in as comfortable and nerve free environment as possible.
And in the event that the person doesn’t get hired, they have a commit on their GitHub and maybe added some value to a project.
Maybe I'm applying to the wrong places but virtually no one cares about my Github. It's really sad to see so many potential employers ignore one of the best pieces of information for a candidate. For reference, my github is filled with maintained projects and OSS with people using them, submitting issues, prs, etc. It's like the employer's process is set in stone and since a lot of people don't have active githubs, it cannot be used as a comparison.
I think the places that do look at github profiles are great, but then I fear they end up looking for massive OSS projects for it to bear any weight.
When can you start?.. Tomorrow.. See you then.
Find someone you can work with on the actual problems you face: work with them during the interview. Just struck me as genius.
I was nervous about my CV not looking too good, he didn't even bother to look at it.
But I can see from the company's side it being a bit of a potential legal challenge issue. Depending on what the problem is and how deep it goes into the codebase or whatever, you might get into proprietary process information that someone outside the company shouldn't have access to, possible IP access violations, etc.
If it can be done in such a way to avoid those pitfalls, then it might be ok. But I bet it's a tricky challenge, and may be why it isn't done often?
Save your eyes.
It is sad that interviews in tech have been reduced to a process that resembles SAT-esque entrance exams. And now, there's an entire industry around prepping candidates for the interviews.
That said, I like the approach tptacek wrote about: Give the candidate a book or two, and when they are ready, interview them on it instead of interviewing on algorithms and data structures regardless of the position/industry [0].
I'm not so sure about Stripe's process as well [1], because one might have been effective because of the team and setup they are comfortable with in a given setting that isn't replicatable in an interview setting. No amount of 'bring your own laptop' to the interviews is going to make it work for the interviewee. You need to test the interviewee on the basis of their strengths. Not arbitrary measure of strength. Gosh, this is a hard problem.
There was an article on techcrunch about interviewing in tech and how it breeds ageism [2]. The premise was that it is simply not possible that most folks with X yrs of experience at a software shop are all secretly terrible that they can't get past your interview process.
Either you are part of an exclusive network to get on a rocket ship of a startup [3], or slog it out like everyone else: I remember how tough it was to get a job at Facebook in 2009 or Google in 2005 with ACM ICPC finalists and TopCoders as your interviewers.
[0] https://sockpuppet.org/blog/2015/03/06/the-hiring-post/
[1] https://www.quora.com/Stripe-company/What-is-the-engineering...
[2] https://news.ycombinator.com/item?id=9166501 (on secretly terrible engineers).
I'm not sure why that is bad. The more standardized the interview process is, the more consistently people can prepare for interviews and know what to expect. The interview process doesn't have to represent actual work, as long as preparing for and performing well on the interview requires the same skills used to learn and work with a new software feature / language / problem.
>The premise was that it is simply not possible that most folks with X yrs of experience at a software shop are all secretly terrible that they can't get past your interview process.
That's an obviously false premise.
Yep, agree. You tend to then hire folks who are good at interviewing and not at getting the job done. I think there is no right answer but multiple right answers. Provide three or four different interview loops and let the candidate choose which one they want to opt for: for instance, one loop is the standard algorithms/data-structure, the other loop is a take-home problem, the third could be tptacek-style, the fourth could be stripe-style, and so on...
> That's an obviously false premise.
Sorry, I didn't get. The article argues that obviously that many folks with that much amt of work experience can't all be secretly terrible that we continue to find it hard to hire and so the current interview process needs an overhaul.
I finally had to give up and say hey lots of people can do what you want, I can do it and I can give you a list of people who can do it, I don't understand this "best" thing you want from me?
Interviewer didn't like that answer too much, heh.
Before anyone burns me at the stake...It's not really the "best" but it can work. I was a coding interview advocate for a long time. I changed it from solving puzzles, to solving real problems taken from the domain they were interviewing for. In the early years I was a bit surprised by who struggled with coding, but I noticed a trend after a while, I could mostly tell how well someone was going to do from the preliminary discussions about software / design / experience / tradeoffs / etc. So I actually learn a lot more about the developer from that discussion and have tried to get better at that to explore more things. I like to focus on the nitty gritty of real problems, hand ow to approach architecting a piece of software from all angles. I do still use coding where I think it might help, with grads, I mostly do coding as its a good icebreaker into general conversation, and intermediates where their experience is still limited, I like to set problems that test peoples ability to keep their code tidy and modular, to see if they have developed any coding discipline, but sometimes from the initial conversation I will already know. But most often I already have a good idea.
I always want to see some kind of code from someone for whom coding ability matters at all. Doesn’t need to be extensive, tricky, or even written live in front of us, but when the job is more than talking, I want to see more than just talking to evaluate.
I have made several bad hires over 25 years and probably 100 direct hires and 500 total hires where I was on the panel. It happens. Most would have been difficult to ferret out in an interview, because an interview is an inherently spotty/lossy process.
The worst hire I ever made had, in retrospect, been given the (business case) question ahead of time and had pre-written notes in his notepad. He theatrically took careful notes while I was stating the business case problem, asked if it was OK if he did some computations and composed his thoughts in his notebook before presenting the case at the whiteboard. He did just that and stood to deliver literally the most polished presentation on the case that I have ever experienced. 5/5 definitely hire.
Shows up to the job and couldn't get water out of a boot if told the instructions were printed on the bottom. Flames out in a few months and moves on to his next gig. It was only after playing things back that I realized the only way he could have pulled that off was to have pre-seeded his notebook with the solution to the business case.
First, we'd both read the problem, and talk about our understanding of what it is asking for.
Second, we'd talk about algorithms to solve it, probably at a whiteboard. No need for actual code, or even pseudocode. Anything that gets the ideas across would be fine. Somewhere in here we'd also talk about what cases are tricky and what we would need to do to make sure any test input we were to write would cover them. I'd try to let the candidate drive this, but would provide sufficient hints and nudges to get to a solution and not count needing that against them--this is really just setup for the third part, which is the most important part.
Finally, and most importantly, we'd go to the LeetCode discussion area for that problem and look at solutions people have posted and review them together. Many of the solutions will have mistakes, ranging from minor to major, and trying to spot those together and talking about how to fix them would, I think, give good insights into both the candidate's technical abilities and how they work with others.
It's all in the experience but that might be the other side to the situation you are describing.
I am practicing a lot to be more comfortable but I still feel bad for those people who interviewed me and ended up disappointed.
We currently ask mainly, let's face it, poor theoretical questions.
I want to ask more experience based questions.
so instead of:
Explain what a database index is
Ask:
Can you give us an example of a time you used a database index? What were you trying to achieve? Could there have been a different solution to reach the same outcome?
If the candidate doesn't have experience with databases that's fine we just ignore this question, at least that's what I would like to do, whether I can sell this is another story.
To be sure if the candidate has no database experience, no cloud experience and no backend development experience then it's probably not going to work out but we can try to be flexible about candidate's experience.
It's easy enough to learn what SOLID means but a lot harder to know when it's a bad idea to use it or when it might be a good idea to compromise.
So anyway the interviewer told the recruiter who'd contacted me that I was not a good cultural fit for their Senior Frontend Developer position.
A guy I used to work with would walk through the technical skills section on candidate's CV asking for knowledge level out of 10 and then ask questions accordingly but that is trickier to do on an online platform (at least as far as I'm aware)
For example. On a scale on 1 to 7 how do you rate your self on Linux Then, On a scale of 1 to 9 how do you rate your self on AWS.
It was maddening and I could couldn't give an honest answer as I kept getting confused. That is one of the many reasons I declined a second interview with that company.
I guess the interviewer thought the scale change would make you think harder about your skill level ...
> Can you give us an example of a time you used a database index
Hey this query is slow, what could we try doing to speed it up?
Last I read, Google has something like a thousand applicants for each position, each level of filtering reduces the amount by an order of magnitude for a position they may or may not fill so it becomes statistically harder than being accepted to Harvard.
Likewise, people practice for these interviews harder than they do for college entrance exams and work on saying the exact things the interviewers want to hear. In essence, the filter is on this particular kind of "grinding" work ethic.
So I have only two big topics in my head.
1) Verify that this person is competent by getting to talk about anything remotely relevant. The job here is listening; not asking. If buzzwords come up, ask follow up questions. If someone is a bull-shitter, it will show in minutes. I have some generic questions that I can put in to keep the conversation going but usually, I just focus on stuff on their CV that interests me. Tell me more. Anything. What do you want in a job? Why?
2) Establishing whether I like the person enough for further collaboration. Yes, this is super subjective. But the way this business works is that anyone passing #1 you basically should hire unless you have a good reason not to. Not liking them would be a red flag.
Most of the rest of the interview is selling them on the job and figuring out whether that even remotely aligns with their expectations. This is a sales pitch. As an interviewer, your job is getting the candidate enthusiastic about working with you. If they are good, they'll have other offers lined up. In other words, it is you the interviewer that needs to be nervous about whether they will say yes; not the other way around.
This is the most important step in the interview and this is where you either get somebody enthusiastic about working for you or disengaged. If that's the case, don't hire but if they show eagerness, interest, etc. you basically try to hire them.
It's not like we have a long list of candidates typically. So, decide quickly and act with a sense of urgency.
When I'm interviewed, I think of it as a privilege for the wannabe employer. You successfully got introduced to me by somebody I trust. We talked and I liked you somehow. Now we are talking shop. Your job is to make me want to work for you. Sell it to me. Make an effort. Don't waste my time with bullshit. I'll talk to your HR after you convince me I'm not wasting my time; not before.
How are interviews for not-software-engineers conducted? ie. how do you interview for a business analyst role, or a sales and marketing role? I have to assume that those roles suffer from the same sorts of issues a SE job does -- that someone can talk a good game but not be able to perform in the role.
The fact that a work sample test predicts work success makes a lot of sense - have them do the thing you want to pay them to do and evaluate how well they do it. Duh!
You should screen folks using the work that they are going to be doing for you. Are you hiring someone to code on a whiteboard? No? Then why are they doing that in the interview?
Doctors also need to go through periodic re-credentialing.
To put it bluntly, when a doctor has credentials, you at least know that they're competent; and more competent than 2-4 1-hour quizzes.
I'm not a lawyer - but my guess would be how many cases they've handled in the past, whether those were with another firm or by themselves (not sure what this is called - if anything - "self-employed lawyer"?), and how the case turned out and such (though this latter thing may not tell you much - after all, they could be a great lawyer and candidate, but lose every single case not based on anything they did or didn't do).
As you can probably tell - I really don't know what I am talking about in this area...
I always hate these kinds of questions because it took Twitter 10 years to get to where it is, and I'm certain they didn't design all of it in 15 minutes on a whiteboard.
Anyway, I'm drawing little boxes and arrows, and when the subject of a DB comes up, I ask "do you want availability or consistency", because I figured that CAP theorem was part of the "gotchas" on this. The interviewer said "I want both", to which I replied, kind of sheepishly, that you cannot have both. We go back and forth, and eventually I pull up the CAP theorem wiki page on my phone and he had to concede the point.
This is rare; usually when I know more than the interviewer, they double down on their wrong ideas. I have several stories like that.
Joke's on me, I think; looks like the company is doing better than before, the stock package they had might have made me about $400k.
It's quantitative, not qualitative; it's not about how well the candidate can solve problems - The 'if' is much more important to them than the 'how'. Unfortunately, not many people have the ability to objectively measure the quality of a technical solution, that's why they don't bother at all with the 'how'.
There's no right answer here, other than to show thought and understanding of the engineering problems this is seeking to address.
Obviously there should be some domain/framework/language specific things in here too. But the object is to gauge competence and experience level, and thoughtfulness vs doctrine.
The 'practical' should take place on the job, give them a week and if they aren't up to the task(s) at hand, say goodbye and move on.
First two hires quit after only a few weeks.
Third hire was temporarily successful. He eventually revealed himself to be both a jerk and not very technically skilled, so I spoke to higher-ups to get him removed.
My hiring strategy was designed to be simple and respectful. A simple, 20 minute assignment completed between phone screening and on-site. And 2 on-site interviews. Despite the 3 failures, I still feel like it's a good strategy. But evidence says otherwise!
> Those puzzles are fun to talk about and solutions to them can be very insightful. I used to enjoy lots of them reading Mathematical Recreations and Essays as a kid. Don’t take me wrong, they are fun.
> However, no matter how fun they are, they are merely anecdotes. The property of a puzzle is that you either know the answer to it or you don’t.
I disagree with how the author lumps these questions together. Questions like "Find all permutations of N elements doing only N-1 swaps" are actual brain-teasers and typically require a flash of insight and creativity beyond what most people can do within a 45 minute interview. Questions like "Does one N-dimensional box fit into another N-dimensional box" are algorithmically challenging and can be approached from first principles and solved within an interview. One question does not carry signal, the other does not, and by categorizing them together the author suggests that neither are useful.
*note that it sorta doesn't matter because cats are notoriously good at climbing trees and likely wouldn't wait for you to fall.
Oh come on. It's true that people seeing the problem before is a major confounding factor, but it sounds like the author is saying that nobody ever solves the puzzle in the interview and it's a pure coin flip. That is obviously not true.
The puzzle type questions probably aren't a great fit for startups, but they're not meant to be. Big tech can afford the vast numbers of false negatives that they produce. In return, they're able to effectively conduct IQ tests of candidates without running afoul of the law.
1) Take home assignment with extremely clear instructions directly related to the job.
2) Discusses the results of the take home assignment over video conference call, and/or in person, and actually asks specific details about it.
That is all I ask. Most of the other interviews either are all conversational in nature, white boarding, or don't actually evaluate the take home when you are done with it. My conclusion is nobody knows how to hire and maybe I should switch to becoming a starving musician full time instead.
Hiring is hard. A lot of interviewers aren't good at it. Every technique that gets promoted has flaws.
We could be like doctors and have a grueling licensing process, and then interviews that are mostly about finding mutual interest. But, I don't think most of us like the idea of a licensing process.
Things like, "I usually work from home, so its too difficult to concentrate in this meeting room", "I use Windows, so writing code on a Mac is really hard" and the most common for some reason for why the technical exercise isn't working "Intellij usually saves the file for me"
Practical interviews are difficult to get right on both sides, but from the side of the candidate, I feel there has to be some ability to handle those situations, under pressure, with confidence.
> under pressure
is this a common occurrence in your company? people expected to code well under direct supervision and a strict short time limit?
If you have years of muscle memory and shortcuts and knowledge about Windows OS, switching to Mac OS will be painful. Not least the different Cmd/Ctrl keyboard placements and shortcuts.
Also, those universal text editing/navigation shortcuts on MacOS?: they're emacs shortcuts which don't exist on Windows OS.
It was a rather annoying experience when you are not used to it and some of your time does get lost fighting with the system.
In this case, I do think it was a good thing because everyone in the company had to work on a mac. I do believe it's not a reason to complain, just work with the tools you get, but it might impact their performance a bit
1) candidate is modest (it was pretty tricky but I think I got it) and they did a good job
2) candidate is modest (it was tough I think I screwed X up..) and they made some major mistakes
3) candidate says it was easy and totally blew it.
I've yet to have a candidate who said it was a breeze actually ace it.
1. You bring the candidate in to your office. You have their future desk already available with computer and development environment already functional. Pick a somewhat standard environment configuration.
2. Have an exercise already prepared. Best option is not a "build this from scratch" but have something that already works and needs some additional feature. Something small that could be done in, at most, an hour. Another option is two or three smaller tasks that together would take as long.
3. You give the candidate incomplete information. You describe the task clearly and in a mostly complete way, but leave out a number of details.
4. Very clearly explain these things. One: You won't be on them; this is not pair programming and they should feel at ease and free to do however they want. But you will be sitting in the next desk and you will be doing something unimportant so they can -and should- ask you anything and all they want. They can also use S.O. or whatever search service they want but you'd prefer that they asked you first. Two: You won't be looking at their code unless they want to show you. Three: they have around one hour, but time doesn't matter that much. If giving out more than a single task, indicate that they won't be judged by how many they manage to finish.
5. During that time, you focus on the questions they ask you. What they ask, how they ask them, which problems they face, what things they do or don't understand. This is the key. This is what will tell you about how they think, what things they know and which ones they don't. Keep an eye on them, if they seem too quiet you can interrupt them with simple "how's it going?" or "something wrong?", but don't push it too much so that you don't stress them. You may even suggest a 5 minute break for a coffee/water half-way through if you feel they might need it.
6. The whole idea is to get them to do some task but more importantly to get them to talk about it. When they are done, or when enough time has gone by, don't go over their code. Instead, ask them how it went, what they managed to do, if they got stuck. If they got it running, they can run it. If they want, they can show you the code or part of it. but you don't need to focus on that. Focus on their talk.
7. Finally, do offer them the option of showing the code. But then, get them to show it and explain it. Don't just go over it yourself.
8. The task(s) should be adequate and reasonable for the role, of course. But try to lean on the easier side more than on the harder one. And remember: do leave some information out. The task should be clearly understood but not finely detailed so that they will need to ask and maybe even make some decisions. (You can make them have to decide something by giving them more than one option as answer to some question.)
Currently our process consists of three exercises: A small website-layout where the candidate has to fix two styling-bugs and equalize some container-heights (CSS-Part); a Palindrome-Function (JS-Part); and a discussion where we look at a webpage-layout, and go through how they would structure it HTML/Component-wise and talk about general topics that come up. But I like the colleague-like approach of your way and guess that it'll work better in our case.
Can you name an example of an app which the candidate has to extend?
Oh, it can be almost anything, but it depends a lot on the role. For the kind of work you mention you could, say, give them an already built layout and ask them to add some additional component or section, or to rearrange some parts. Maybe add a form similar to some other one in a different page. Or something like "add an option for this block to be hidden/shown depending on a configuration". Really anything can do.
I've sometimes had success picking up some minor tasks that we had already done in the previous months. Using things you actually work on is nice. It gives them some sense of what you do and gives you good knowledge about the task and possible difficulties. There's the risk of becoming biased towards the particular solution you implemented. To combat this I sometimes pick tasks I didn't work on myself or that I wasn't completely satisfied with the solution we achieved.
Most of the time it's "solve this already thoroughly solved problem in your own time but with {one hand in a blender, whilst you're on fire, without using any variables}" or some such bullshit.
Took me a couple of hours, interviewer said my code wasn't particularly "object oriented" but I got the job.
The irony of this was it was for a Director of Engineering job where I didn't do any coding! :-)
I have used it, though, when I had to hire. And it went fairly well. I don't have any hiring responsibilities now so I haven't had the chance to use it more often.
Most importantly, writing programs on whiteboards. I hate this, but it's an insightful way to measure the individuals thinking processing, decision-making skills, and communications skills.
Expect them to fail and see how they handle the situation and themselves.