Who you hire can have a dramatic effect on your team’s culture and company’s productivity. People are the most influential factor in determining the success or failure of a company. Hiring is difficult and comes with high stakes. Make the wrong hire and you could be living with the consequences for longer than you’d expect. Make the right hire and you might be surprised by the asset the person becomes to your company. Add the additional variable of hiring someone who is distributed for a remote team and it gets even more complex. During the past six years at PSPDFKit, we’ve slowly learned what’s important, what works, and what doesn’t work, at least for us.
Our hiring process for a prospective candidate usually takes 1-2 weeks - we try to never drag it out longer than two weeks, but are flexible if a candidate only has limited time for calls. It all starts with an email response to one of our job openings from a potential candidate. We publish open jobs on our careers page and also advertise the role at various sites and newsletters.
Our job post is fairly straightforward and lists a few things that we’d like to see in an application. We ask a few open questions like “Who are you as a programmer” and “Send us a piece of code that does something you find interesting, and explain why.” The most important thing we look for at this stage from potential candidates is how much they care about applying for the position. Sadly, over 90% of the candidates flat out ignore the few questions, which makes it quite easy to just filter them out.
We have an internal goal of answering every email we receive, since we’ve all experienced the feeling of sending out an application into the job hunt abyss and never hearing anything in return. We have various default snippets for rejection. If people follow up and ask for details, we usually provide more insight into our decision. Candidates that look promising are forwarded to the team lead to gauge interest. If the team lead is interested then it’s on to pre-screening.
We do not use recruiters or agencies - hiring is driven by the team leads and the company owners directly.
Since the post has been released some people asked about the rejection snippets. Initially we provided more detailed, honest feedback why we believe it would not work out. Some people really appreciated the honesty and used it as a way to improve themselves; some others responded with very harsh words or even insults. Accepting constructive criticism is a hard skill and after some “special” emails, we opted to what most of the industry does - using a default snippet, without any reason given. However, sometimes candidates follow up and ask for a reason. With explaining the above problematic and that we’re just being honest and want to help, there have been no more insults, and some people even thanked us for the feedback.
If a potential candidate looks interesting, the next step is to send out our pre-screening form. We use a simple Google Form for this step, and it has worked really well. It’s structured to include both basic questions and open-ended free form questions. The form checks for a few very pertinent topics for us:
Full-Time? This is a check to confirm that we look for a full-time role.
Personal References for later follow-ups.
Salary expectations. We ask for a rough range to be able to gauge whether this is a non-starter from the beginning.
Earliest start date.
Experience with remote work.
What other companies have you applied to recently?
Why do you want to work for us?
What’s your ideal work environment?
And a few more - I don’t want to spoil all surprises. Apply with us and find out :)
The pre-screening form has proved to be a huge time saver and helps protect us from any surprises. In the past, we’ve had people go through hours of interviews, only to find out that their salary expectations were outlandish or that they were actually looking for a part-time role for the next 1.5 years. The free-form questions also are a great way to start a conversation and give us an idea of what is important to a candidate. Again, we still are looking to see how much a candidate cares and this is generally evident in the amount of time they spend on answering the form.
At this point we also take a closer look at Twitter, GitHub, open source contributions, comments on mailing lists, StackOverflow and any other online resource we can find. We’re not interested in Facebook feeds but how a candidate interacts with other engineers, the work approach, how commit messages look or how issues are handled. We might also ping the personal references listed in the form to get more opinions from people who have already worked with the candidate.
If things still look good after reading the pre-screening form, we’ll follow up to find a date for a video call. We generally run all candidates through 4 to 5 video interviews, where some are more technical and some are more here to get to know the candidate. After each interview we write down our thoughts into a shared document. This helps us to track the process and allows us to identify spots where we should ask more and also makes the process efficient.
With “value/cultural-fit” we look for people who understand that sometimes things need be hacked, but that we come back and do it right at a later time. That the line between getting things done and delivering a superb user experience is sometimes a hard one to walk. That working in a team is different than working on your own. That at PSPDFKit, nothing is somebody else’s problem. That we help each other. That there might be times where there’s a lot to do, but that it’s not the norm. That we spend more time on getting things right than most other companies and often have unique challenges. We pride ourselves in having people from currently 17 countries, and while all these different cultural influences are sometimes a challenge, it’s also very valuable and interesting to have so many different people, with different backgrounds and different mind-sets working on a common goal.
For the technical interviews, depending on what role we hire, we ask various questions, or even let people code a small challenge or review a pull request. We skipped this part in the past for people coming from well-known companies like Google, however we now know better - everyone has to go through this process.
We’ll then conclude with interviews by our CEO and COO so that we can get to know the candidate better and explain more about the company. If the candidate gets through the interview process then we get the hiring team together and decide as a group if we make an offer or not. Every member in the interview chain can raise objections. We then have a group discussion in our #hiring channel with everyone involved in the process so far, and make a decision to continue, or stop the interview process. In most cases, if there’s one person on the team who doesn’t approve, we’ll pass.
We learned over the past couple years that although this process is extensive and lengthy, it is well worth the investment in getting hiring right.
Finding great engineers is a challenge. Just look at how much effort every tech company in Silicon Valley is putting into attracting talent. It’s obviously much easier if your company is already known. However, we’ve found that giving back to the community you are in really pays off. At PSPDFKit, we made a goal this year to write a blog post every single week. On our blog, we share our approach, knowledge, debugging stories, tips and much more. We’re not talking about cheap content marketing, but articles written by our engineers about things they are currently working on. These articles give people a great deal of insight into how we work, what problems we face and the solutions we’ve found. More importantly, it shows that we care about the health of the community we belong to and wish to do our part to contribute to that community. This takes considerable time and effort, but pays off in so many different ways. Not only does sharing knowledge within the community feel good, it also is a neon advertisement for the culture of our company and the ideals we hold dear. We believe conveying your company’s culture is the number one way to attract great people.
Of course, when we have an opening, we do not want to rely solely on organic traffic. There’s always people that are outside the groups or circles you spend your time in that could be valuable assets to your company. A perfect example of this was when we needed to find Android developers when the company founders had mainly been connected into the iOS development community. Finding great spots to advertise for these roles is still something we’re figuring out. So far sponsoring emails like iOS Dev Weekly or Android Weekly have worked best for us. Twitter is also a phenomenal resource. We’re often experimenting, like for instance for Android Devs we tried We Work Remotely but found some of these other channels have a higher noise to quality ratio.
Don’t stop at hiring. Building an environment where people can do their best work and where process doesn’t get in the way of productivity is even more important than hiring. The best hires are always the ones you don’t have to make. The place to be cheap is not on things like new hardware or software for your team. Take good care of your people and they’ll take good care of you. At the same time, act as soon as you see an issue. People like working with people that care and work hard. We’ve been quite lucky in building a phenomenal team. However, we have had to let go of people in the past who were not performing and no longer enjoyed their work. Firing someone sucks and should never be taken lightly. At the same time, it is also sometimes necessary for the health of your team, company, and the individual. While we don’t like this fact, firing can sometimes be as important as hiring too.
Oh - and send your resume as a PDF. We’re a PDF company :)
Then again, 1 in 5 CVs we get are in .doc format. FOR A PDF COMPANY. 😶— Peter Steinberger (@steipete) August 22, 2016
This document has been updated on Nov 7, 2018, as we constantly improve our processes.