The most important factor in the success of a tech team is good engineers. You can have the greatest process and product in the world, create a collaborative and supportive environment, and have a sizable training budget, but if you don’t hire the right people, none of it matters.
So at Skimlinks, we look to hire the best people, that will truly thrive in our environment and we review our interview process all the time to ensure it’s helping us do that.
When we hire, we look for skills and culture fit and we structure our recruitment process around assessing both things.
Our team members must be able to:
Develop reliable, well-built new projects/features
Fix bugs efficiently
Help other engineers learn and develop their skills.
In terms of culture fit, we hire people that love to learn, strive to go above and beyond, are accountable and reliable (when we promise to do something, we don’t stop until we deliver), and above all are nice people!
Once these basics are covered we examine the other skills that are useful (but not mandatory) when working at Skimlinks e.g. machine learning expertise, big data engineering, front end development.
If we hire for a specialist role then we will test for relevant skills, but normally we focus on hiring the best candidates we can and finding the best role for them.
If you interview for an engineering role at Skimlinks, this is the process you will go through.
Skimlinks engineering interview process
Step 1: Phone interview
We start with a phone interview to save both your time and ours.
It’s an opportunity for us to tell you about the company, the team and the kind of engineering challenges we face. And for you, it’s an opportunity to decide if this is the right environment for you.
During the interview, we use http://collabedit.com/ to test you on a series of basic programming challenges, a sample of which is below:
“Write a function that combines two lists by alternatingly taking elements. For example: given the two lists [a, b, c] and [1, 2, 3], the function should return [a, 1, b, 2, c, 3].”
def combine(a, b): return list(itertools.chain(*itertools.izip(a, b)))
Mainly we work in Python but for this interview you are free to use any language of your choosing.
If you pass the phone interview then we proceed to next step in the process, the programming challenge.
Step 2: Programming challenge
Here we want to assess how good you are at building new features.
You receive a set of requirements for a small service we want you to build, with whichever language and framework you like, without a time limit.
If you pass the programming challenge then you’ll progress to step three: the onsite interview.
Step 3: Onsite interview
This usually lasts about 4 hours and takes place in one day. It is split into five parts, each lasting approximately 45 minutes to one hour, with two different Skimlinks engineers running each stage of the interview. This means that by the end of the day you can meet a cross-section of people from the department.
The first part is a code review interview, where we’ll look over your submitted programming challenge and discuss the following:
– Did the code complete the requirements?
– Is the code readable?
– Would it be easy to maintain and extend?
– Do you understand what other options were available to you?
– Do you understand the downsides of the approach chosen?
You’ll then be set a bug fix challenge.
In this you’ll be presented with an existing Skimlinks project which contains a fairly detailed requirements document. In the requirements document there are two bugs listed. Your task is to fix both of these bugs. You have about an hour to do it. Here your choice of language is limited to Python or Java.
We are assessing the following :
– Your ability to find where the bugs are
– Your ability to make good choices in how to fix the bugs once identified
– Your ability to spot other optimizations and improvements that could be made while going through the code
The next stage is actually up to you.
It is our belief that when you put a team together, it doesn’t matter if everyone has the same skills. Instead what matters is that we have the broadest range of skills possible across the team. With that in mind, in this part, you get to choose from a range of potential options, which are:
– Systems design – We will give you some requirements for a project and we will work through how you would approach building something that fulfills those requirements (big data focus) .
– Machine learning – We provide you a sample of Skimlinks data and you will have to describe how you would train a model to fulfill requirements.
– CS fundamentals – A series of questions to assess your core computer science knowledge. Questions range on topics from O of N complexity to data structures.
After this, we’ll cover our culture and assess your cultural fit. It’s a chance to learn about you and your motivations. We’ll tell you more about our culture, ensure you understand the environment and give you plenty of time to ask lots of questions too. This is your time to suss out Skimlinks, see if our values match up and if you want to work here!
Finally, there’ll be a “code review”, where we show you some Skimlinks code (warts and all!). One of the skills we expect a good engineer to have is to be able to sensibly critique existing code. We want you to look through the code, identify issues and suggest areas for improvement.
We are assessing:
– Ability to spot potential issues
– Ability to improve readability
– Ability to make good, well justified arguments
And…. that’s it! Once all of those steps are complete we either make an offer or we do not. You’ll receive an update and feedback from us within 48 hours.
We hope that the interview process at Skimlinks proves to be a rewarding experience regardless of the outcome. We value every candidate’s time and effort and endeavour to make the Skimlinks recruitment process an enjoyable one!
You can see current vacancies here