COMPANY INTERVIEW PROCESSES
The Slack Interview
What Slack look for in interviewees
First and foremost Slack look for skilled engineers who are passionate about programming and display a high degree of craftsmanship. Slack values those who can level up their whole team rather than just themselves, and who have a passion for exploration and inquisitiveness about how things work and what our customers need. People who are highly collaborative and understand the value of a diverse team with different backgrounds, thoughts, ideas, and lived experiences do very well at Slack, as well as those who take personal responsibility for their decisions and get stuff done.
What does the interview process look like?
Candidates do their best in interviews when they know upfront what to expect, so here’s an outline of Slack's process. They follow the same process for all web engineering candidates, regardless of position or level of experience:
1. Resume screen
At a high level, we’re evaluating if you’re a good fit for the role you applied for — there are many amazing, talented people, but not all will be a great fit for Slack (and Slack won’t be a great fit for everyone). Slack aren’t concerned with where, or even if, you went to college as much as your experience and the passion for your work.
2. A phone call with one of Slack's technical recruiters
This takes around 30 minutes and covers high-level questions about what you’re looking for and why you’re interested in Slack.
3. A technical exercise
They'd like to get an idea of how you write code in the real world since they feel this is the best indicator of how you’d write code day-to-day at Slack. Granted, the Slack codebase is larger and more complicated than any technical exercise, but they have found the technical exercise to be a good indicator of future performance on the job. There are great engineers at big-name companies and at small ones, so this gives everyone a chance to shine independent of where they are now.
This varies by position, but generally, you’ll have a week to complete a technical exercise and submit the code and working solution back to them.
Since we don’t do any whiteboard coding during the onsite interview, the technical exercise is one of the best ways they've found to evaluate programming competency.
The exercise is graded against a rigorous set of over 30 predetermined criteria. Slack are looking for code that is clean, readable, performant, and maintainable. They put significant effort into developing these criteria to ensure that, regardless of who grades the exercise, the score is an accurate reflection of the quality of the work. Slack do this to limit bias. If there are clear criteria, variations that might impact score but have nothing to do with the candidate (such as if the grader is having a good day) are less likely to influence the outcome.
It is important to note that Slack go to great lengths to ensure the technical exercise is graded as blindly as possible. For the majority of positions the person grading the exercise has not seen the name or resume of the person submitting it (Slack are working towards this for all positions). Some positions require candidates to submit a working version of their coding exercise and some candidates choose to host it on their website, so they are exploring ways to mask the URL from graders.
Slack cannot emphasize enough that the coding exercise is the most important way for them to evaluate your technical skills. If you’re selected to come in for an onsite interview, a portion of that interview will be devoted to discussing this exercise, including the choices and tradeoffs you made.
4. A phone call with the hiring manager
This usually takes 1 hour and is an in-depth conversation about your background, current technical challenges you face and what you’re looking for in your next role. Slack welcomes and encourages any questions, so come prepared with the list of things you’d like to know about Slack.
5. An onsite interview
This usually takes around 4 hours. You’ll talk to 4–5 people from the engineering team, each for 45 minutes, followed by 15 minutes with the hiring manager. Slack's onsite interview focuses on technical and architectural discussions as well as determining how the values they care about at Slack fit with your own.
As mentioned earlier, they won’t ask you to solve algorithm questions or write code on the whiteboard (although they may use the whiteboard to have you draw out how you envision a system being built).
Whiteboard coding often skews towards people who have a lot of experience and practice with whiteboard coding, which is not something that’s part of the day to day job at Slack.
To be clear, Slack often use a whiteboard to hash out ideas, but not to code up a binary search algorithm (or any coding problem). Interviews are stressful, and when the candidate is asked to do something they don’t normally do and do it in front of someone judging them, it introduces a performance dynamic that can be alienating.
There is no need to bring a computer to the interview, nor are there any specific subjects you should study up on. Slack wants to get a good idea of how you think about building and debugging complex systems at a high level, which is not something you can necessarily study for.
Every person you speak with will leave time for questions — remember, you’re interviewing them as much as they are interviewing you. Slack wants to make sure that they are a place you will enjoy working and can thrive in from both your perspective and ours!
What technologies does Slack use?
Many candidates ask about Slack's tech stack and the interesting engineering challenges they face. As a rapidly growing company the challenges are often moving and changing at a high rate, but here is an overview.
Slack is a distant descendant of a conventional LAMP stack app: Linux, Apache, MySQL, and PHP all play important roles in the server-side of Slack.
They've extended their database layer to do automatic sharding, failover and caching. Slack have built a distributed, asynchronous job scheduler and execution engine. They deliver messages and notifications via a custom real-time messaging server and perform intelligent edge-caching in an application-aware way. So far, they have found that each order of magnitude beyond which Slack needs to grow requires creative rethinking of the back-end and front-end, and they know that we have more rounds of this kind of challenge ahead.
Slack's current challenges include:
Their real-time message server, responsible for most of the real-time interactions happening in various clients, is implemented in Java, and accessed via a WebSocket API. A lot of what makes Slack feel like Slack is the result of careful work on the message server. Many of the distributed systems challenges they face on the back-end are in coordinating this service with the rest of the (LAMP-ier) back-end. This server is critical to Slack, and they have a boundless appetite for it to scale, perform better, and be more reliable.
Building and operating a worldwide fleet of cache and proxy servers to make Slack as fast as possible for their users around the world.
Improving the harvest and yield of their data infrastructure, currently built on Presto, Hive, and Spark.
Building and delivering smooth, native-feeling clients on a diverse set of platforms.
Major languages in use include:
Slack's back-end uses PHP for application logic and Java for our real-time messaging server. Their services and portable native libraries are in Go and C++.
All of their code lives in git and GitHub and they use a variety of tools, some homegrown and some externally built, to manage the commit, test, review, build, deploy cycle in a very automated fashion. Slack is proud that their developer tools infrastructure allows them to safely and confidently update Slack >50 times a day in production.
How should I apply?
Slack's careers page lists all of their open engineering roles — if you spot one that looks like a great fit, apply online (but please don’t apply for multiple roles). They look at all resumes and do our best to respond within 1 week.
Many candidates think they need to find someone currently at Slack to “get their foot in the door.” Rest assured this is not the case; in fact, most of their hires have come from people who have applied via their careers page. Slack takes all applications seriously. They care deeply about diversity at Slack and when you only hire from your current employees’ networks, you tend to get a homogenous set of candidates.
Source: slack.engineering September 2020