The motivation for this post is the disconnect I’m seeing between the marketplace and my own experience with hiring developers. It seems an adage these days that hiring great developers is extremely difficult. My experience is that there is enough talent out there and that employers, large and small, are particularly mediocre at hiring. The market is certainly competitive, but I’ve discovered that a well-crafted process, an attention to some key details at each stage, and a healthy respect for the psychology of relationship-building quickly catapults you above the rest.
I can say this with confidence, because my experience with hiring has been tested in cash-poor-equity-rich, cash-rich-equity-soso, and cash-soso-equity-soso situations. The Googles of the world can always outspend you, but you can win by being more scrappy and clever. In this post, I’ll share the details of my process. My diabolic interest in doing so it that I have a soft spot for small companies, where a single great developer can have outsized influence on the success of the business.
The single best way to hire a great developer is to leverage your network. It’s common knowledge. Unfortunately (for us), great developers typically find themselves in great situations. When I’m in hiring mode, I regularly find that the people I want to pull-in are happily employed. I’ll send an email into my network asking for referrals and no leads will come back. More often, folks will remind me that they too are looking for awesome developers. At some point, we need a strategy to explore outside of our network. This post is about the art and science of tapping into a pool you don’t know (yet).
The Job Post
When you post for a position, you are starting a conversation. Measured in that frame, most companies are terrible conversationalists. But it’s important to get it right because first impressions count.
Imagine you’re at a party. Who would you prefer to talk to?
Here are three major personalities that are regularly represented in job postings…
Person A - The Drain
This person is boring and long-winded. They use a lot of buzzwords but say little that is meaningful; after listening for a bit you just want them to get to the point. They are self-important and lack awareness about what makes a conversation fun - the push and pull, the giving and taking of ideas, and the cadence and flow that that requires.
Here’s an excerpt from a job post I pulled at random at the time I am wrote this section of the post. I hit-up StackOverflow Careers, searched on keyword “Java” with location “New York” and the first hit was for a Senior Java Engineer. This illustrates some of the qualities of Person A. You could rack up dozens of examples with just 5 minutes of searching:
“… is embarking on an exciting transformation driven by an energetic new team of high-performers. This group is nimble and creative with the power to shape our technology and product roadmap. If you have the talent and desire to deliver innovative payment products and services at a rapid pace, serving our customers seamlessly across physical, digital, mobile, and social media, join our transformation team! You will be part of a fast-paced, entrepreneurial team responsible for delivering world class Cardmember experiences across multiple channels, including native iOS, Android, web, social integration, java services, and APIs. You will be challenged with identifying innovative ideas and proof of concept to deliver against the existing and future needs of our customers.”
Shoot me after I snooze.
Person B - The Game Show Host
You say hi to Person B. They are cordial and say hi back. Then, suddenly, mysteriously, the room goes dark and a spotlight is pointed right at you and your new friend picks up a microphone and says “Are YOU awesome enough to be part of our insanely awesome team of awesomeness working on the most awesome stuff? Well, let game of questions begin!!!” (insert blaring Roman horns announcing battle).
Here’s a pretty typical question-oriented job post that took me exactly 3 seconds to find on StackOverflow Careers (amusingly, I was searching for “free food”):
“Can you build the data platform and services that ingest billions of points per day…Can you do it at low latency, high scale, and achieve the impossible trifecta of good, fast, cheap? Do you speak Java? Do you dream of Hadoop, HBase, MapReduce, Spark, Kafka, the many variants of NoSQL, and MySQL and PostgreSQL? How about Dropwizard, Guice, and Hibernate? Can you navigate the neighborhood of Amazon Web Services? Are you ready to create a 9-figure business?”
This style of conversation is patronizing and annoying.
Person C - The Entertainer
Continuing with our party analogy and on the flip side, consider The Entertainer. This person is super high energy, amusing, and has a number of tricks up their sleeve. Maybe their company offers free gumballs. Their conference rooms are all named after esoteric gaming systems. They host dancing monkeys on Fridays and they employ a full-time staff of chefs that dress like ninjas every day except Halloween when they dress like real chefs because it’s ironic.
We’ve all seen that post. We’ve all talked to that person. They certainly make you smile. Like a good movie, you are swept away for an hour or two. But in the back of your mind, you know that this isn’t going to lead to a long-term relationship. It would be too exhausting and only superficially fulfilling.
The Job Post Done Right
Who should you be at the party?
If you want attract lasting attention, you should be balanced and interesting. You want people to see your spark for life; less in what you say but how you say it and how you carry yourself. You want to be curious about the other person. You want to create an open space for them to share who they are. You want to be a tad bit charming, but backed by substance. And you want to be authentic.
Doing this in a job post is hard damn work!
You have to labor over words. It takes lots of editing and iteration. It’s far more art than science.
Lest I be accused of waxing philosophy, here is a link to a job post for a position I recently filled that embodies this kind of thinking. Hopefully you can absorb some of the “art” from this:
So, maintain the frame of an excellent conversationalist and ask yourself, “would you want to get to know this company if it were embodied in a person and you met this person at a social event?”
Congrats, now a whole bunch of people want to talk to you! How can you efficiently decide which folks to continue the conversation with? Well, naturally it depends on what they say on the topics that interest you. Equally as important is their level of commitment to the conversation.
To gauge both, I include two open-ended, dev-related questions at the end of my job post and I ask candidates to submit their resume along with an answer to these questions. In the Example Job Post, you’ll find these questions:
“What technologies or paradigms in data systems are you most excited about right now?”
“What technology or topic is at the top of your list of things to learn? Does not have to be related to data.”
These are fun questions. They take very little effort to answer and, when answered, they provide valuable feedback about the candidate: Does this candidate have an awareness of what it takes to develop modern systems? Are they honest about their gaps? Do they display a passion for continual growth? Can they bring diverse ideas to the table? Can they effectively articulate what’s on their mind?
Often you won’t get any answer. These folks are not committed to the conversation. Perhaps they will be difficult to manage because they can’t take directions. Likely they are click-submitting their resume en masse. I trash these applications wholesale, accepting that I probably dumped some gems. The end-game is to make a hire. To maximize my chances at doing that while respecting my time, I want my initial pool of candidates to have some level of buy-in right out of the gate.
This type of screening has worked wonders for me over the years.
So, if a candidate submits well-formed answers to my questions and their resume shows a track record of working in the areas that I am hiring for or they demonstrate, on paper, the potential to grow into the role, then I move them to the first round of interviews.
The First Interview - Who?
I deliberately turn convention on its head for the first interview because it’s a game changer from a hiring perspective. Convention goes something like this: HR does an initial phone interview, then the candidate does a first round with a mid-level or senior engineer, then a second round with another senior engineer, then perhaps they do a code test followed by a final round with a hiring manager or the CTO.
Conversely, I, as the most senior technology-focused employee, always do the first-round interview.
Why do this? Isn’t this a huge time sink?
Going forward I’m going to use “CTO” to embody this senior-level position for brevity, but you are free to substitute “VP engineering” or whatever your preferred flavor is.
Based on the sections above, we are starting with a strong pool of candidates and it is highly likely that you will, eventually, want to hire one of the candidates in that pool. A good CTO owns more than just technical leadership. As a CTO, you are likely pitching customers, raising funds, driving strategy, shaping culture, and/or galvanizing the energy and enthusiasm required to keep your developers engaged and excited about conquering the world. When you interview someone, there is that inevitable moment when you know you have someone special sitting in front of you. Based on the skillsets required of the role, the CTO is singularly in the best position to get to that go/no-go moment from a “fit” point-of-view (you will, of course, need to probe on code, but more about that later). And when it’s a “go”, this person is singularly in the best position to sell the heck out of the company and the role.
When I’m enthusiastic about a candidate, I aim to have them jumping out of their chair by the prospect of working together. Metaphorically, I want them to stand beside me, look out on a vast land of opportunity, and feel in their bones the enthusiasm I feel for waking-up every day and going to work. With a hand on their shoulder, I’m telling them that they can have this amazing thing if they can just make it thru a few trials and that I believe in them.
Contrast this to the frame that’s created when your first round is with HR. It’s rare to meet someone in HR that has past experience writing code. Although HR will be well-versed in the vocabulary of development, it’s difficult to trust their assessment of the situation because they attempt to speak with authority about something they have never done. The whole hand-on-the-shoulder metaphor doesn’t work. It’s only believable when the candidate has a sense that the interviewer herself could tear through the coming trials blindfolded. Trust and respect go hand-in-hand.
A mid-level or senior-level engineer might garner the requisite respect, but they may not have the skills or repertoire to inspire, particularly if they are more focused on the day-to-day of developing software and less on sales and culture.
My opinion on this matter has been shaped by my own experience being interviewed. It is typical that I will leave a first-round interview with a lukewarm feeling about the company because I don’t experience the energy and vision and/or I don’t trust the person delivering the message. Typically a candidate, even if they have aced the interview, is told that “someone will be in touch.” The typical frame is demotivating - you interview a bunch of times and work your way up to an opportunity to see how exciting the role can be. It’s an arrogant approach.
The First Interview - How?
Interviews are, by the their nature, awkward. In an ideal world, you could work with a candidate for a few months and observe their performance in a relaxed setting where the candidate can be their true self. Here’s a strategy I use to quickly create an atmosphere that aims for that ideal world…
At the start of the interview I say the following, almost word-for-word:
“Ok, so let’s set an agenda for the call. I want spend just a minute or two telling you more about myself so you know a bit about my background and my role at the company. Then we’ll spend the bulk of the time talking about you. I want to ask you some development-related questions and talk about aspects of your resume. There will be no trick questions or anything like that. I’m just trying to understand how you think about software. So this should be a lot of fun! Then we can have an open discussion and I can tell you more about the company and answer your questions. How does that sound?”
Every sentence is purposefully crafted to induce a state of relaxed enthusiasm. And it’s authentic! It fully represents my intent for the interview. In practice, after I get through this intro I typically receive significant physical and verbal feedback that a calmness has descended upon the interviewee. They will literally say things like “oh…that’s a relief, sounds fun!” I’m sure there’s a proper social psychology term for what I’m doing, but I’m not versed in that so I’ll give you the layman’s perspective: I’m just telling them how the next hour will feel and because of that expectation they allow themselves to feel that way. “So this should be a lot of fun!” I’m telling them that it will be fun so it becomes fun because of that! “…no trick questions…just trying to understand how you think about software”. It’s going to be a natural conversation. Just two people who love software talking about the thing they love. Just like a co-worker picking the brain of another co-workers, nothing out of the ordinary.
The next item on our agenda has me talking. That’s good, it gives the candidate more time to relax. I have an opportunity further settle their nerves by first putting myself on display. I want them to experience a real person with real feeling, rather than a critic sitting high up and looking down upon them with judgment. Typically I’ll say something like this:
“Well, I’ve been coding since I was 13 years old. I’m much older now, and my job requires that I do other things like manage people, but I still love to code. Heck, I’ll probably go to my grave coding. I just love it so much and there’s so much to learn, sometimes I feel like I’m just getting started…[a summary of my work experience here].”
This consistently generates excitement and feeling of connectedness. And once again, it’s authentic! I regularly express these same feelings with my wife. The strategy is in choosing to reveal something about myself that’s relevant to the person I’m interviewing and that’s appropriate for an interview.
The First Interview - What?
So what questions do I ask a candidate? How do I evaluate their capabilities?
In a future post, I hope to cover:
- how to evaluate candidates in the first round interview
- details on the second and third round interviews
- how to engage a candidate in a coding test and what to test
- closing the candidate
I welcome your reaction and/or a comment (anonymous or not), below!