How long should my resume be?

Disclaimer: I do eng hiring for startups so my advice will be based on startup experience. Big, established organizations may do things differently.

I would try to keep your resume as concise as possible without sacrificing readability. Sometimes, this means you will go over one page, especially if you’ve been working for a few years. It’s not the end of the world. I would rather see a 2 page resume that looks like it was written by a functional, thinking human being than a one page resume that lacks any kind of content or soul. Try not to go over 2 pages, though, as your reader’s attention span is short. In other words, you should be aware that the people reading your resume are not going to read everything. Make it easy for someone on autopilot to internalize the most impressive things you’ve done, and always err on the side of conciseness. This means that you probably should:

  • Refrain from listing every project you’ve worked on. Pick the ones where you took some initiative, built something from scratch, or had major impact on the final product. At the end of the day, I’d rather see one impressive project than 5 projects where you upgraded some framework or followed detailed instructions to fix a subproblem of a subproblem of a subproblem.
  • Explain what you did in plain English. I can’t harp on this point enough. People outside of your company aren’t going to know what any number of internal acronyms or tools are. Think big picture. Ask yourself, “Why does what I worked on matter? How did I contribute to the overall mission of the organization? What is the context for what I did?” and so on. This doesn’t mean you shouldn’t go into technical details (you should), but it does mean that you shouldn’t use obscure terminology or the languages/tools/frameworks you used as a crutch.
  • Don’t keep repeating what tools/languages/frameworks you used. This wastes precious space, and in most cases, what you did trumps what you used to do it (unless you did something very specific like migrate from one language to another or fix a bug in some framework). Rather than going on about how you used Hibernate to do ORM or whatever (this is a particularly poor thing to go on about because you’re not adding any value — you are using a tool for its intended purpose!), just put all the things you used/know in one concise Skills section. For bonus points, delineate which things you’re very proficient in, which ones you know pretty well, and which ones you’ve used but would need a refresher on before diving in.

To illustrate these points, here are some project descriptions (taken from real resumes). My comments on the bad ones are italicized. I think the good ones speak for themselves.

Bad ones:

Designed software application including: data modeling, software architecture design, software- hardware integration, user interface design, and database management

I have no idea what the candidate did or how he contributed. This is super vague and uninspired.

Developed [product name], using C# in .NET framework, for marketing and allowing end-users to experience [another product name]

Again, I can’t tell what the candidate did. He’s hiding behind products/technologies to potentially mask the fact that he is either not too excited about his work or that he didn’t contribute much.

Good ones:

Created and launched a service that collects product opinions and recommendations from Twitter. The service finds related tweets, removes spam, analyzes sentiment and creates a structured database of everything that was said about particular products [link to demo]. The service is exposed as a consumer website and as widgets that can be embedded in online retail websites.

Evaluated and identified [OS name] network stack performance bottleneck in latency, system jitter, per-packet processing overhead, and scalability of different network IO models through various system measurement and profiling techniques

Note: This post was adapted from an answer I wrote on Quora.

What are the characteristics of great engineering recruiters?

A great technical recruiter should be able to do 2 things: (1) present engineers with companies that fit their criteria and (2) present companies with engineers that meet their standards and are likely to accept an offer, should one be made.

Before I come up with a list of bullet points (though you can skip to the TL;DR section below for bullets), I'd like to pose the question of why an engineer or a company would want to work with a 3rd party recruiter. I'll then go on to explain what value a good recruiter would add.

From a candidate's perspective

As an engineer, what's the point of even working with a recruiter when you can just apply to companies directly? In short, a recruiter should be able to help you flesh out what you want in your next job, come up with a short list of positions, deal with interview logistics/minutiae so you don't have to, advocate for you throughout the process, and help you understand your offer.

People want all sorts of things from their jobs, though sometimes it takes some time to really distill what someone's requirements are. Sometimes it's more money. Sometimes it's more impact, a specific type of challenge/problem to solve, or a specific kind of team structure. Sometimes someone wants to change over from an enterprise product to a user-facing one. Sometimes it's a matter of entering a new industry. It's the recruiter's job to know which questions to ask and figure out what's going to be most important to a candidate. In figuring this stuff out, I'm of the opinion that having industry engineering experience is going to be invaluable (how else would you really understand what it means when someone tells you they are tired of monolithic code or want to work somewhere that is more receptive to using 3rd party tools than their current gig?).

Once that's figured out, a good recruiter should help you go beyond your personal network and a sea of badly written job ads to find the job that will make you the most happy. To do this, a recruiter should have a pretty good mental model of what companies are out there, what they do, how much traction they have, what projects are currently being worked on, what the culture is like, and what compensation looks like, and then use that info to handpick a short list of jobs that would be perfect for you.

Sometimes this process takes several iterations, and it's the recruiter's job to elicit useful feedback and go back to the drawing board as many times as necessary to get things right. If a candidate says that he wants one thing, and when presented with that specific thing, he doesn't want it, that doesn't mean the candidate is lying or not being helpful. It means that the recruiter didn't ask the right questions.

Once a list of companies/jobs is in place, the recruiter should continue to be useful by abstracting away some of the interview scheduling back and forth. In essence, the recruiter should tell you to put on pants and to show up to interviews at some specific place and time. After each interview, the recruiter should be advocating for you to figure out what next steps are and make sure that you hear back and hopefully get any relevant feedback in a timely fashion.

Once you get to offer stage, your recruiter should be on hand to provide you with any non-confidential data about salary and industry trends and help you navigate the equity component of your offer.

From a company's perspective

As a company, what's the point of working with an external recruiter rather than doing all your outbound sourcing yourself? Chances are, if you're a startup, you're not going to have a huge recruiting department. You may not even have a dedicated in-house recruiter (though you probably should). Regardless, there's more to recruiting than just sourcing candidates. You have to deal with the candidate pipeline (screening people, making sure subsequent interviews happen in a timely fashion, and make sure that candidates are moved through the process, made offers to, and rejected). You have to deal with placing job ads, campus recruiting, figuring out ways to promote the company's engineering brand (meetups, tech talks, hackathons, wrangling people to write blog posts), incentivizing internal referrals… the list goes on. Having a bit of help getting candidates in the door is not the worst thing in the world.

Let's say that you now have some agencies working for you to find engineers. There are 2 pain points I've encountered as an in-house recruiter working with 3rd party agencies: influx of either low-quality candidates or of high-quality candidates that have a low chance of accepting the offer.

Consistently sending high-quality candidates to companies isn't easy. There is definitely some correlation between a candidate's pedigree and technical ability, but in my experience, it's not as strong as one might like. Therefore, getting an idea of a candidate's ability before pitching him to a company is invaluable. To be able to screen a candidate thoroughly, a technical background is going to be necessary, no two ways about it. Even with the advent of a single screen, it's pretty hard to tell who's good. It isn't too hard to tell who's bad, though, and ideally a recruiter would be able to filter out the poor and mediocre candidates, leaving the fine-grained filtering of the decent from the great to the companies themselves. Even if a recruiter isn't technical, he can still filter out some amount of poor candidates by asking them to describe what they worked on in a way that a non-technical person can understand. Doing this well is non-trivial and, in my opinion, tends to correspond to future workplace success more strongly than pedigree. Regardless of how the filtering is done, a great recruiter is going to find a viable way to do it.

Let's say that a recruiter is working with a candidate who is clearly strong technically. At this point, the recruiter has to decide where to disseminate the candidate's info. A great recruiter will take into consideration what the candidate wants (see portion above about the candidate's perspective) and will only pitch him to companies who match what he's interested in. Doing this is non-trivial because, in addition to understanding what the candidate wants, the recruiter must also understand the companies' business models, cultures, be familiar with their tech stack, and so forth. Unfortunately, because effectively matching candidates to companies really is non-trivial and requires deep, specialized knowledge, many agencies don't do this and turn the recruiting process into a giant feeding frenzy. The same candidate's info can get sent out to any number of companies, and for each company, the odds of closing said candidate drop off. This approach is particularly poor from the company's perspective because interviewing candidates is expensive, both in terms of engineering time and logistical expenses (such as flying people in).

As with candidates, it often takes several iterations to nail down exactly what the company is looking for. Sometimes, there's a disconnect between what a company claims to look for in a candidate and what candidates are actually successful. To mitigate this, it's always helpful to get an idea of the current eng team demographics. In general, it's also good to keep a frank, open stream of communication in both directions (company providing feedback to the recruiter and the recruiter potentially sharing insights about inconsistencies between what the company advertises to want and what it wants as well as any industry salary/equity trends that might be helpful).

TL;DR

Great tech recruiters:

  • grok engineers' and companies' criteria
  • are familiar with salary and equity ranges at startups in different stages and for different positions and understand/are able to offer meaningful advice about these things to both companies and candidates
  • are able optimize on candidates' and companies' constraints within a preexisting, broad network of companies and engineers
  • are able to filter candidates' technical ability to some extent (separating bad from decent is much easier than separating decent from great)
  • are able to elicit useful feedback from both candidates and companies
  • care about people/take pride in doing their job well so that when it's tempting to just play a numbers game, they don't

Note: This post was adapted from an answer I wrote on Quora.

What is a better recruiting strategy for small/med teams: casting a wide net or targeted?

This question has a tacit assumption, namely that these two methods, while different, are somewhat interchangeable. I would argue that they are not. The situations in which each method will be most successful are different, as are the resources you would need to execute on each of these methods. In addition to finding the best method for you, please keep in mind that there's no magic bullet when it comes to hiring great engineers. In addition to explicit recruiting efforts, you should be perpetually working to make sure that (1) your company is the kind of place where top people want to be and (2) the world knows about why you're awesome.

When is casting a wide net effective?

Casting a wide net can be very effective if your company already has a strong engineering brand. If you make the conscious decision to play the numbers game, chances are, your messages to prospective candidates aren't going to be very personal. Engineers with good pedigrees receive at least 3-4 LinkedIn messages/emails per day, and they're going to quickly skim your messages, if they read them at all. They're definitely not going to go and research your company, and these days, everyone is a disruptive, well-funded startup with great culture and free food. Therefore, if nothing in the message speaks to them directly, and if the name of the company isn't something they recognize, the message will probably get lost in the noise. Facebook, Google, and a short list of high-profile startups can afford to employ this technique because people are familiar with the prestige behind these brands. In other words, if you're Facebook, you can scream into the void, and the void will answer back. The rest of us aren't so lucky.

The same rule goes for working with external agencies, though I'd argue that there are a few disadvantages to this approach. First, someone from the outside is going to be worse at selling your offering than someone from inside the company. Some agencies have strong brands in their own right and have a great stable of companies they work with, so their response rates may be pretty high. However, if a solid candidate bites, that candidate will most likely be farmed out to a number of companies. Therefore, with agencies, you may get more good candidates in at the top of the pipeline than you would on your own, but you may not end up closing them.

Another situation in which the wide net model can be successful is if you just want to hire a few people but aren't looking to really scale your team. With enough messages, you will probably get a few decent people in the door. However, you're not getting anything sustainable for your efforts. After a year of spamming, you may have a few hires, but what else will have changed? You won't have enough positive data to really tweak what you're doing, and you will not have built something that makes future hiring easier. You are forever beholden to the number of messages you send out.

What resources are needed to cast a wide net?

Casting a wide net takes resources. For one, you're going to want a dedicated sourcer. You can hire an in-house recruiter to do this (either f/t or contract). On top of that, you're going to be paying agencies ~20k/head if you're going to be working with them on contingency (another option is to pay an hourly rate that will get the agency to do your sourcing for you). The good news is that finding recruiters and agencies isn't going to be too tough, if all you want them to do is message as many people as possible with some boilerplate copy.

When is a targeted approach effective?

This approach is effective when you have the specialized manpower to do it well (will discuss more about what you need below). Sending personalized messages to people is really hard. You need someone who can research the person, read blog posts, and grok their personal projects. Why is this important? Because to meaningfully engage with prospective candidates, you're going to have to figure what they value and what drives them, use this info to actually identify what it is about them that your offering speaks to so profoundly, and articulate that. Much of the time, it's not as simple as matching the technologies that your product relies on to the technologies that a given person is passionate about (e.g. webGL). People are driven by all manners of disparate things.

You're also going to want your manpower to know who not to go after — just because someone is great doesn't mean they will be happy working for you. Interviewing people take a lot of engineering time, so you're going to want to do your best to only engage with people who are going to be likely to accept. For instance, if your company is pretty conservative and isn't using a bunch of new shiny things, someone who gets off on trying every new framework out there is probably not going to be happy.

If you do end up pursuing this approach, one indirect benefit is that it will help build your brand. People really appreciate it when a company takes the time to send them something personal and relevant, and even if you don't end up hiring everyone you reach out to, they may remember you and appreciate that the people working for you are good at what they do.

What resources are needed for a targeted approach?

The best people who can understand what engineers are working on, what they'd like to be working on, and what drives them are other engineers. Some companies will explicitly dedicate a certain amount of engineering time to recruiting tasks (e.g. looking over GitHub and LinkedIn, finding people to contact and contacting them). This approach is costly, of course, and not everyone is going to want to participate. Another option might be to hire someone technical to help with recruiting.

What is the best thing to do?

As I mentioned above, if you already have a very strong brand among engineers, or if you want to do a few one-off hires, casting a wide net may make the most sense for you. However, if you don't yet have a strong brand but do want to scale your team, I would suggest the following.

Take some of the money and time you would have spent on spamming and use it to build your brand. First, ask yourself if your company is the kind of place where really great people want to work. If it is, that is awesome. If it's not, then fix it. Even once awesomeness is in place, if no one knows about why you're awesome, no matter how much time or money you sink into recruiting, you will not be able to hire top people at scale.

In general, it's very tempting to look at low-effort, seemingly accepted, high-cost solutions and hope that they will make everything better (e.g. finding an in-house recruiter and hoping that he/she will fix all the things, throwing money at agencies, buying ad space, buying a huge booth at a career fair). However, that money is best spent on finding meaningful ways to tell the world that:

(1) you have a great product,
(2) your company is full of really smart, driven, passionate people that anyone would be proud to work with and learn from, and
(3) that you're solving hard and interesting problems.

There are a number of ways to accomplish this, including

  • giving tech talks (both at schools and at meetups)
  • open sourcing some of your stuff
  • having an engaging engineering blog
  • hosting hackathons and meetups
  • having really great job ad copy
  • having a creative, fun, and difficult coding challenge that will make people want to share that they've completed it
  • having members from your team share what they're working on on their own blogs
  • guest-posting somewhere like TechCrunch, if possible
  • developing a highly selective internship program

Some of this stuff is hard to do, but without it, hiring is going to be an uphill battle.

Once a strong eng brand is in place, you can employ a mix of the two techniques you mentioned, depending on what resources you have available to you. In addition to GitHub and LinkedIn (as well as Entelo, which aggregates info found on these sites and others), I would recommend StackOverflow (more for their candidate database than for their job board), Hacker News' whoishiring, and potentially working with Udacity and Coursera.

Note: This post is adapted from an answer I wrote on Quora.

In what situations should your resume include an objective at the top?

In my experience, most objectives are complete fluff with no content. I don’t care if you want a challenging position where your sharp analytical skills and programming ability can contribute to the vision of the organization. I just threw up in my mouth a little bit while I wrote that.

That said, I can think of a few situations where having an objective might make  sense (listed below). All of these situations are specific instances of a more general case, i.e. it makes sense to have an objective when it is not immediately clear what you’re looking for just from looking at your resume. However, proceed with caution, and don’t start writing fluffy crap.

  • You have pretty broad experience within some field but are looking to really hone in on something specific at your next job.
  • It’s not immediately clear from your resume whether you want an internship or a full-time job.
  • You have worked in a number of different disciplines, or you’re a new-ish grad and have a degree in something that doesn’t directly apply to what you want to do now.
  • Your startup folded, and you’re looking to work for someone else again.
  • You were doing management for a while but want to get back into being an individual contributor.

Note: This post is taken from an answer I wrote on Quora.

Why recruiting sucks

I’m a recruiter. Now, before you do the digital equivalent of pelting me with rotting vegetables or show up at my doorstep with torches and pitchforks, know this: I hate the way the recruiting industry works as much as you do. Before becoming a recruiter, I worked as a software engineer for almost 5 years, so I’ve been on the other end of the incessant spamming and the cold calls. In fact, the reason I’m posting is that I am convinced that the tech recruiting industry, in its current incarnation, is completely broken. The fact that I have to apologize for being a recruiter and skulk about in the shadows isn’t right. But, I get why you guys don’t like us. It’s because a particularly loud faction of tech recruiters out there don’t treat you or your privacy or your goals with any modicum of genuine interest or respect. Of course, there are some truly great recruiters out there, and maybe they have some thoughts on this, too.

In any event, as I see it, here’s what’s broken, in general:

1. Wanton cold calling/LinkedIn/email spamming
In my engineering days of yore, I had nothing but a visceral disgust for LinkedIn and the contents of my LinkedIn inbox. I didn’t give 2 shits about which investors were backing which companies, or how I could get in on the ground floor, or listen to the empty praises mashed together from the 2 keywords available in my profile. Now that I’m on the other side of things, I don’t really feel too differently about it. I still refuse to spam people (or cold call them on the phone, which is even worse) — I think it makes me look bad (spamming is, to me, a tacit acknowledgement that you don’t have the industry-specific knowledge to craft something more personal), has low response rates, and doesn’t really engage the candidates that do respond. A lot of people say that this industry is a pure numbers game, and maybe it is, but there still has to be a better way to engage with people than sending them spam.

2. Keyword matching
I can’t harp on this one enough. What programming languages you know or what IDEs you have worked with in the past ARE NOT THAT IMPORTANT. If you’re a good programmer and you’re interested in the work the company is doing, for the love of god, you’ll be able to learn the new languages/environments. I hate when, during interviews, I ask candidates to describe some project they’ve worked on, and they start prattling off keyword after keyword. Sometimes this prattling is an indication that the candidate sucks, but sometimes, they’ve been so conditioned by past HR calls to just list technologies that they can’t help it. I’ve had several conversations where I’ve told the candidate to back up, that I actually want to understand what you built and why you built it, and sometimes there’s this palpable sigh of relief on the other end of the phone. And for the trolls out there, yes, I realize that there are outliers — if you are a pure Java programmer, there is probably no way you can easily work on a 3D game api team writing C++ and shaders. And if you are a C++ programmer with no front-end experience, you can’t just walk on to the Sencha (née ExtJS) team. I’d hazard to say that these are the exceptions more than the rule, however.

3. Communication breakdown between the recruiter & hiring manager
You get pulled in by a perfect-sounding job and ultimately realize that the company isn’t doing what you were told and that the job description itself has nothing to do with what you were promised.

I’ve been lucky enough to have enough of an eng background for keyword matching to not be an issue, and I have a great working relationship with the hiring manager at my company (I work in-house), so I’d like to focus on the issue of spamming. Without spamming, what am I left with? I still have to find people. There are some good options out there that have been working for me (job boards, InterviewStreet/CodeEval, StackOverflow, HN), but these options have not proven to be enough. My favorite thing to do is to have enough info about someone to write them a personal and relevant message. I like taking some time to craft these messages, and whenever I’ve been able to hit on a few personal subjects and match the tone to the recipient, I’ve always gotten a response. Recently, I reached out to a guy who had his own startup but was starting to look around for a job. I took the time to figure out what his startup did and thought it was really cool. When I sent him an email, I asked him about some implementation specifics and made a suggestion about an existing, somewhat similar product that his product could integrate with. It turned out that they were already doing what I suggested, which was cool because it means I’m not completely out of touch, yet, and also cool because he responded… and ended up being a really excellent candidate.

Anyway, I want more interactions like this — interactions where you’re not annoyed/full of rage/violated and where I get to help you.

I’ll end this post with an open question. What’s the best way to reach you in a compelling way without pissing you off and without exposing you to the drooling masses who don’t know big O from a big ass? How do we bridge this gap between (hopefully) good tech recruiters and engineers? Is there a good way I (and others like me) can find you when you want to be found without compromising your privacy and our souls?

TL;DR: I’m a recruiter, but I used to be an engineer. This industry is broken, specifically with the communication breakdown between recruiters and engineers (spam, cold calling, keyword matching, etc). Help me fix it by making suggestions on how I (and others like me) can find you without compromising your privacy or flooding you with irrelevant content.

Note: This content was adapted from a Hacker News post I wrote.