A Method I’ve Used to Eliminate Bad Tech Hires
medium.com
medium.com
> If they get defensive, it’s an immediate no-go. Remember, there’s a difference between defending which is good and being defensive which is bad. The difference is that the former is based on rational facts, the other is based on emotion.
Are you always able to challenge them based on "facts", or are you going to challenge them with your current world view? I can see someone getting defensive if your challenge is perceived as deliberately provoking.
Using the author's definition, "being defensive" based on emotional responses is more a character trait than anything else, and a negative one at that.
I would much rather work with a slightly above average or average developer who is thoughtful and rational than a rock star who gets personally offended if you question their use of $DESIGN_PATTERN.
Once I was in a position to offer advice and assist in the interview process, getting rid of that altogether was the first thing I did. It took time, I got nothing out of it, and all it showed the company was that given 40-50x longer than necessary I could produce a working product.
Personally, I prefer to make the assignments less open-ended than the ones in the OP. That way hopefully there's only so much time that could really be reasonably spent on them. It's still an issue, but (over-) paying for the "2 hours" helps too. The remaining downside is worth it in my opinion for the far better filtering it provides. (Also, classical interviews are no picnic for many people either. I know plenty of people who would rather spend all weekend at home working on something than be subjected to a regular interview.)
^Also we're all-remote, so in our particular case we really couldn't do that even if we wanted to.
It should be functional but contains known bugs, of which, some are easy for junior developers, and some are much harder for senior devs. Whilst I don't like checking broken unit tests into source control, leaving a broken unit test in the source code is also another good test of the candidate, to see if they can fix the code to match the assertion.
It would also contain methods that a senior dev should be able to look at and then appreciate that there is a optimization that could be made to improve performance.
Everything is in a private Github repo that the candidate can be given access to and a week to play around with, giving people time (some people have families and busy lives) to complete.
They should issue a pull request when they are finished and their changes should be well documented.
Most companies have an existing product and developers are needed to support, fix and extend those existing products. It isn't often developers get greenfield development. They need to fix code written by other developers.
The really good developers:
- figure out how to clone the repo
- comment their changes well
- fix all the bugs
- figure out how to run the unit tests
- fix the unit tests that don't work
- optimize the poor performing methods
- manage to issue a pull request
If the developer is junior, then they might miss a few bugs and the potential optimizations, but if they can get to the point of issuing a pull request with some bug fixes and good documentation, then they have done pretty well.
Most importantly, check the developer's knowledge beforehand. For example, they might not have had Git experience before. If they can figure things out for themselves, then it shows they can solve things for themselves without someone else having to hover over them constantly.
Finally, if they ask questions to validate their assumptions, the developer isn't going to be one of those devs that goes off on left-field for 3 days, only to find out they got the wrong end of the stick. People that think they understand but don't, are dangerous and expensive to your organisation in the long run.
I really enjoyed it even though I failed miserably, and I believe I would have done much better if it hadn't been done in one hour. The exercise was really novel to me after having interviewed with a dozen companies who think Google-style coding questions are a silver bullet.
At Pivotal Labs, we have an interview project where the code works and is tested, but is a horrifying big ball of mud. We ask the candidate to add a few features, but really, they need to refactor heavily first.
That said, it is a great approach.
In other words, you are excluding people who have a job.
Also, I fail to grasp this idea that potential candidates must prove their worth through numerous hoops to compensate for the interviewers lack of skill in judging character and competence (i.e. seeing through the bullshit).
In any hiring process not only the interviewer is interested in avoiding a bad hire, but the candidate is also interested in avoiding a bad employer. Both stand to loose from a bad choice, but that's why even the most strict employment laws allow for an experimental period.
Certain hiring requirements tell a lot about the culture of the company. Avoid sending candidates the message that you have a culture of distrust. You may end up loosing the ones you wished to hire.
They say:
>> It’s very easy for someone to embellish (to put it generously) their resume, and coding trivia can be memorized
There are arguments about the efficacy of interviews, but judging technical knowledge is not one of them.
If I was hiring for a Java programming position, I might start out with an easier question, like what is the difference between an interface and an abstract class. Or ask what a class was, or an object, or a constructor or method. Or what a static class variable was. Plenty of people with resumes that look good will stumble through these questions, whereas others will give clear answers.
Perhaps you can't tell if someone knows all they need to know or can do a good job, but it is certainly possible to see who does not have the level of technical knowledge you want.
That's a funny way of putting it. If one can fake actual skill... well, hire them!
Give them a cube and pay them to work in the office. Stop by to see how they're doing and interact with them.
For example, I'm one of those developers that customise my development environment heavily and that have spent 99.99999% of my life using a regular keyboard (ie. not on a laptop). Now you want me to use a vanilla environment + laptop keyboard, which combined roughly means that you're going to divide my development speed somewhere by 4 to 10. Nevermind that the laptop you're going to give me will probably be a half-broken extra that's both underpowered and unmaintained...
Of course all interviews are a negotiation, so the onus would have been on me to inform you of these factors.
In fact, intense time pressure has a very adverse affect on cognitive tasks.
And whose call is it to make that distinction? Presumably the author of the optimal-hiring-procedure #122327 that has been posted here.
Pro tip for candidates: after you solve the problem, when you share it with the team this is a good time to show how friendly and open you are. "Gosh guys, I've never been much good at TDD, but I limited the code to less than 50 lines, so I thought for such a small project I could squeak by" or "What a fun project! Yeah, that screen design sucks. I suck at UI design. From a technical angle, though, it was fun and I enjoyed playing with the problem"
People want to know both how confident/competent you are and how you handle weakness. If you're an ace on the technology, can talk a good game, and enjoy having people help improve your work? You're a keeper.
Hope will never need to waste my time on that again.
It does not test the speed and quality with which a candidate can absorb new methodologies/ways.
Therefore it is perhaps, reasonable if the job assignment to maintain an existing code base in XYZ tool chain, or participate in a larger team where the architecture/design approach is done by somebody else.
Maybe when the market's a bit worse I'll be forced to jump through one of these hoops. But right now...
Front loading the cost of recruitment brings major cost savings in the long run.
> I may say please use functional reactive principals in JS to solve this problem, but the decision of using Kefir, Bacon, or RX is left up to them.
It also works really well for sysadmins: give them a subtly-broken system, get them to fix it documenting their thinking along the way.
Does anyone expect this for 2 hour assignment? Seriously!?
One position was CTO and the other was a Software Director position.
Tech interviews are getting crazy.
They also didn't have an answer to "How often does the board meet and how long is my part of the meeting, typically?"
Prescribed...?
If they are asking you to do your interview homework over the weekend, it seems likely they'll be "asking" you to work unpaid overtime, weekends, etc on a regular basis.
I'm a busy guy, I have kids, and I like spending time with them (on top of the 2 hours I try to get in every day). That removes the weekend daytime.
Weekend evenings - well, realistically once everyone's fed, bathed, and had a bedtime story, we're talking 7:30-8pm in my household - are then for eating, spending some time with my wife (shocking, I know!), taking care of household tasks, and then going to bed, ready for the inevitable 6am kiddie wake-up call.
Yup, weekends are by far the busiest time of the week, and that's even when everything goes right!
Give me a week, interview on Friday, deliver code/presentation by the following Friday, then I'm absolutely game for it, will get it done, and will get it done well.
That said: I guess this may be a deliberate filter against people like me. Always difficult to know.
I suspect that that might be a secret feature. If you cannot work that weekend due to other, more important plans, then that is a strong indicator that you might not be able to work other weekends in the future.
That shouldn't be a secret feature, they are wasting their own time and resources by hiding it to applicants.
Yes, agreed. It may also test, if you are really serious with your application. If you are, there will be a way to free some time.
This goes both ways: companies blow time to interview candidates, who just want to see how far they get. Or who plan to negotiate better terms with their current employer (happened to us recently, we paid flight, hotel, lost 3 months and a whole application round).
Candidates blow their time by implementing stuff for companies, who just want cheap code or who want the best solution for a problem they cannot solve, or simply re-decide their plans after you invested your time for the coding.
Both sides should find out how serious the others are. Payment for code is a good step. But if you pay, you can also ask for something, right?
> make sure to be available for their questions via email over the weekend
> A key aspect of this is that everyone in the group MUST come prepared, having looked through the solution.
> Have the candidate make assumptions and document their reasoning (risks invalidating the final product but that's a slim chance)
> Meet late Monday or later that week
One point I haven't seen mentioned here: If I'm currently employed and interviewing, I am not going to take two days of vacation just so that I can interview with you, work on something for you over my weekend, then interview with you again.
That said, I agree that weekends might not be the best for all candidates. Maybe tailor it to the individual case (E.g. ask them beforehand if weekends work, or they'd rather do it during the week)
Agreed. Another issue with the timeframe described: When is the current team expected to have a chance to look at the candidate's solution prior to the presentation? Stretch the timeline out a bit and everything becomes a lot easier.
If it's not worth the risk do you think it's a good hire for that company? Because in that case you clearly don't care much about the company and will jump the ship when next slightly better opportunity arrives.
Possibly I'm assuming too much and don't mean this to be personal but I'm really curious, is this the case or am I missing something?
Personally I feel about $100-200 fee as well, if the candidate is looking for compensation to build something fictional in 2 hours, is that candidate really care about your company, and is it a good idea to hire people who joins to your company just because you happen to be paying decent salary and they don't have a better option at the moment?
The money is more of a token to show that the company values the candidate's time and is not having them complete this coding challenge lightly.
That's my point. If a candidate takes it lightly because you didn't pay some dollars, does she care enough? If not, is she still a good hire? Do you want to hire someone who doesn't care about the job or the company enough to even fail to provide full effort on their first assignment?
And what's wrong with that? You are basically asking for a loyalty from the employee that is almost never returned by the company.
Edit: Not saying I would do the project. But tax reasons are not why.