npm, Inc.'s Recruiting Process
This document was once an internal document at npm, Inc. Because it
is relevant to many people in our community, and we like transparency,
we have decided to open it up to the world.
There is no expectation or requirement that you hire people in this
way if you are not working at npm, Inc. This is just how we do it.
If you apply for a job here, this may
provide some clue as to what to expect.
From here on out, "you" refers to the npm, Inc. employee who is
evaluating candidates for hire.
npm's hiring philosophy
npm has a great brand for recruitment. Our applicants generally
mention three things they particularly like:
- Our focus on work-life balance and a humane working environment
- Caring about diversity
- That our product is open source
and that's a great sign. Your conversations with applicants should
communicate the value we place on these things.
Writing the job description
Some simple guidelines:
- Keep a conversational tone. Imagine you were describing the job to
somebody over IM. This is not a contract.
- Maintain a bias towards inclusion. Applying for jobs is scary and
hard work, so people read job descriptions looking for the first
thing that disqualifies them so they don't need to apply. Don't
give them this opportunity. The purpose of a job description is to
persuade someone to apply, not to scare them off.
- Don't list a qualification (e.g. a degree) as required unless it
really is required (we do not require degrees).
- Likewise, don't list a qualification if it is "nice to have". If we
get a lot of applicants, then we'll screen for stuff that is nice to
have after we get their resumes.
- Do not include a laundry list of technologies or applications. Any
smart hire will be able to learn these.
- Talk about how the role will grow, and opportunities for training
and mentorship. The number one thing people look for in a job is the
opportunity to be better at it.
- Avoid aggressive
of any kind.
- Gendered language is obviously a no-go, and consider if your
language is ageist or otherwise biased.
We have an open source repo of former
job descriptions to help you.
Role is identified.
Hiring Manager writes job description.
As resumes come into firstname.lastname@example.org, HR
will upload to and update Lever. It is the
responsibility of the hiring manager to review resumes on a timely
basis and if there are obvious "NO's" to let HR know immediately so
the candidates can move forward with their job search.
Everyone who speaks to a candidate must put their notes in
Lever. The #recruitment channel on slack is
for discussing hiring pipeline status and recruitment plans, not
individual candidates. (i.e. it's okay to ask "is Jane coming for an
interview?" but not "I didn't like Jane because...").
- Post the job description.
- Wait at least 2 weeks after posting a job description before
screening (don't screen as you go; screen as a batch).
- All incoming applicants MUST be put into Lever. If you receive one
in your personal email account, please put into Lever and let HR
know. This ensures that every application gets a personal response
indicating we received it and a rough timeline for screening (e.g.
"about 1 week from now").
- Hiring manager will read all available resumes and select 25-50%
of those candidates for first-round screening. Anybody not
selected is notified at this stage by HR.
- First-round screening is an informal, 20-30 minute discussion, by
phone, Skype, or Google Hangout by the hiring manager, who will
select roughly 50% of these candidates for second-round screens.
Anybody not selected is notified at this stage by HR.
- Second-round screening is 2 longer conversations, 45-60 minutes,
by phone or Google Hangout if the applicant is remote, or
in-person if they are local. Hiring Manager will determine which
prospective team-mates, or existing employees with relevant
skillsets will be taking part in second-round conversations. For
remote applicants always supply the phone number or Google Hangout
name applicant-interviewer in the calendar invitation. Anybody
not selected for this stage will be notified by HR.
- After the second round interviews, hiring manager meets with
interviewers to select 1-3 candidates for a full team interview.
Often by this point there will be one obviously best candidate,
and it is fine to bring them in by themselves. Candidates not
selected for the final round are notified at this stage by HR.
- Full team interview: the candidate comes in for lunch at noon (any
day except Monday). The hiring manager will invite 6 staff members
that the candidate is likely to be in contact with during their
day. After lunch, anyone who hasn't yet spoken with the
candidate, and the hiring manager deems necessary may request a
30-45 minute slot. For remote candidates after their flight,
hotel etc. have been arranged HR will send them their itinerary
and cc hiring manager, with a short "this might come in handy"
note containing at least one contact number for emergencies and
local cab or other transit options.
- After the full team interview, hiring manager and their team will
take everyone's notes into account and make a final decision.
After selecting the best candidate, we do not yet notify the
- Reference checks: The candidate supplies 3 names and contact
information of people they have worked directly with; hiring
manager has a discussion with at least 2. This is a final red-flag
check and also gives the hiring manager a head-start on how to
work best with the hire. Questions can include What dates did
the candidate work there? What is the documented departure
reason? Would you rehire?
- Hiring manager will consult with the selected candidate on salary,
benefits, relocation, visa (at the moment npm lacks the legal
resources to sponsor visas other than TN-1 visas for Canadian and
Mexican citizens), and any other issues to make sure there are no
unexpected barriers to a hire and a reasonable start date, and
make a salary recommendation to the CEO.
- CEO will have a final conversation with the candidate, make salary
offer (we will always offer the best salary we can afford, so
there is not much room for negotiation on salary) and discuss
equity. If an agreement is reached, we prepare an offer letter. If
not, we consider one of the other final-round candidates.
- Once the candidate has signed and we have received the offer
letter, HR will notify the other final round candidates.
How we interview
Read Laurie's blog post on
for all the things not to do. The remainder of this section assumes
you've read this post.
We are looking for people who:
- can grasp complex technical subjects, because our product is one of
- can clearly explain those subjects to others, because simplifying
the complex is what we do
- can get things done, the best indicator of this being having already
- can quickly learn how to do this job; they don't need to already
know how to do it
- show signs that they will get better at this job, i.e. future growth
npm values transparency and humanity, so as much as possible our
interviews are transparent and humane. Interviews are inherently
uncomfortable and scary, and nobody sounds smart when they are
uncomfortable and scared. Do your best to compensate for this. If you
think the candidate is doing well, be liberal about saying so. If the
candidate makes a mistake, try to prevent them spiraling into
meltdown by moving on quickly or giving positive feedback about some
other aspect of their performance.
Your interview should be a conversation. You are not trying to prove
that you know more about a topic than they do. You are not trying to
quiz them to make sure they know everything about a specific topic or
technology. You want to know if they can grasp complex concepts and
explain them clearly, because that is what a knowledge worker does.
This is a living document and may be updated from time to time.
Please refer to the git history for this
to view the changes.
This document may be reused under a Creative Commons