Refactoring Back End Engineering Hiring at Slack
slack.engineering
slack.engineering
I mainly have experience with git, but I assume this generalizes to other version control systems. I also think that version control is a pretty fundamental skill for software engineers (comparable to unit testing), so I think substituting that for "use a version control system to do x" would fit in with with other skills.
Generated a few comments but not many. I put in by thoughts on why code reviews are so much more better at gauging expertise. I have since adopted that and found that it led to much more productive interviews. Even candidates that do not make it thru' appreciate the fact that they were treated as peers rather than being 'questioned'.
I'd like to also add something else that I've adopted -- the solve-at-home question, if we do go with one, is never just a lazy spec. document. It is an unfinished bit of code with tests etc. This way the candidate is not intimidated/overwhelmed/have analysis-paralysis and it feels more natural. Again, insights from submission to those are better than from-scratch assignments IMO.
I use a small application that demonstrates some anti patterns / questionable design choices and ask candidates to talk me through their thoughts.
My question is how does this work for new grads and people that haven't worked in the industry before? Are they using these new techniques to hire recent graduates/people that haven't worked as a software dev before? Does this kind of process adversely effect those who haven't worked as a software dev before?
I'm not trying to say that algorithmic/leetcode type problems are a better solution, but rather questioning whether this form of interviewing has some kind of bias.
In the case above—the bias is toward experience. I don't think that's a bad thing.
Context is important, however. I haven't read any Slack postings, but if they're asking for tangible experience this kind of gatekeeping makes more sense than textbook questions. If they're hiring for an entry-level role then a different approach might be merited.
As for how, you could focus more on logical thinking, user experience considerations, technical writing, or other, softer skills.
For a lot of grads, we already have to re-teach them the language, as universities don't seem to give marks for consistent style/using linters/unittesting/best practices/comments/writing documentation etc. In the time it takes to break these bad habits, you can definitely teach somebody who's technical and done a basic programming course a lot of things.
If you do a large coding assignment you have to leave the time frame rather open ended to assist candidates that have limited free time. Instead this forces every candidate to spend as much time as possible to get noticed, having an opposite effect. There is no obvious solution to that apart from doing short timed assignments.
But what is even more important, a code review can be tailored to provide the same information on technical expertise, has a more natural effort limit and more importantly, it actually tells you about how that person will act as a coworker.
Will they even explain their work? Will they provide reasonable feedback, and will their way of explaining their thoughts in written word be detailed enough to guide people through?
Not only are code reviews, for myself, essentially part of the documentation of the code base itself, but they are also a very important communication channel. And how one communicates with others through it is a great proxy about how they will handle the rest of their communication.
I've never worked with an engineer that was considerate, kind and detailed (with a focus on being understood) in their review comments or presentation, who turned out to be an asshole when interacting with through other channels.
Turns out it's just another article about how to interview people.
They pointed to Nordstrom as an example of an enterprise organization who did this as a part of their internal devops transformation, and it worked wonders at the time when it was needed.
This team didn't tackle new user stories for feature additions or enhancements, they didn't work on existing tickets. Their role was singularly focused on identifying and making payments on technical debt and operational enhancements.
Not every team can afford to focus an entire group of people to the task of paying down technical debt, but what I did take from it is that every team can't afford to not dedicate some time out of the week or month making critical fixes where necessary.
As a hiring manager, I've never cargo culted this particular view. In fact I think it's completely misguided. I always work in at-will states, it's trivially easy to let someone go. I also personally have no problem doing it.
I generally will hire based on conversation alone (no coding tests). If you ask someone detailed questions about work a candidate has done you can get a really good idea if they know what they're talking about. I know people say that they've interviewed people that can talk a good game but can't code a for loop once in the door, but I've interviewed hundreds of people and I can't say this is often the case.
Easy in, easy out. You know what though? There's very rarely ever the out part. If I can look at your Github, like what I see and you can back that up in a conversation, you're hired. That has worked out really well for me and reduces a lot of friction and wasted time (mine and other engineers') during the hiring process.
The moral of my story is that just because Google or some other tech giant espouses a theory like "false positives are way more costly than false negatives", it doesn't mean it works for all organizations or that it's even true at all.
I've also worked with managers who have no problem being the hatchet man and it's great. They sniff out the losers, put them on a plan, and they're either out the door soon after or stick around to get fired.
I would rather managers teach each other to wield the hatchet than try to get seven steps ahead of a dud hire during the interview process. "Release early, release often."
Interviewing people is extremely disruptive to an engineer's time and in a large company it could potentially happen a lot. I think that is the metric that should be optimized for, not minimizing firing work for the hiring manager.
I care about the people I hire as humans and don't want to put them in a bad situation.
I think there are two issues at play:
1. Ineffective managers are terrified of firing people.
2. Ineffective managers rightly or wrongly think they can't screen people without code tests, white boarding...
Like I said in my original comment I look at their Github or any other work portfolio they provide and have a deep discussion about it with them.
Most managers are not as cold-blooded as you are claiming to be.
In order of importance a manager should put the company first, then team, then individual employees, then themselves. Poor performers hurt everyone on that list.
Most of the time the under-performer will be happier after any of these scenarios than they would knowing they're under-performing in their current role. It just takes a bit of time and maturity to realize.
As a manager, it's my responsibility to do what's best for the business.
>> If I can look at your Github, like what I see and you can back that up in a conversation, you're hired.
Wish more hiring managers followed this line of thinking
> when you expect your teams to satisfy multiple stakeholders or to grow beyond initial job requirements
This honestly sounds like bad management.
I can't figure out if your devs just don't do that, or if you think you can speak for everyone's standards after one conversation with a candidate.
> This was often a barrier for candidates who couldn’t afford to invest the time needed to complete the exercise to our desired level of quality.
Isn't there a conflict here? Why are you setting the bar for your own desired level of quality so high that it isn't possible to meet it in the amount of time you expect people to take?
The decrease in the hard time-to-hire metric was great to see. This is a real problem with some top-tier shops.
Why do they work better ?
Maybe open an office in a different location or hire remote?