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

None of these things have anything to do with node.js or JavaScript, 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 language 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.

Recruitment process

Role is identified.

Hiring Manager writes job description.

As resumes come into [email protected], 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...").

  1. Post the job description.
  2. Wait at least 2 weeks after posting a job description before screening (don't screen as you go; screen as a batch).
  3. 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").
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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 other candidates.
  10. 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?
  11. 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.
  12. 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.
  13. 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 hiring 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 those
  • 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 done things
  • 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 potential

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 document to view the changes.


This document may be reused under a Creative Commons Attribution-ShareAlike License.

results matching ""

    No results matching ""