Hiring Developers in 2020: What you need to know

I am really bad at hiring developers.

I believe I’ve been looking for the wrong skills, hiring the wrong people, and actively screwing myself and my company by not replacing myself as the main developer.

While creating this essay on what you need to know to hire developers, I’ll be following the steps with one final goal: to hire a main developer by 2020 to take over the technical side on our company.

Hope you and me can learn something along the way, so we can hire better people and bring joy and prosperity to our companies.

A Developer with the Right Level of Experience

One of the first questions you’ll be asked by any recruiting company is «what level of experience do you need?». If I had been asked this a week ago, I’d said something in the midst of: I need an intermediate level and then would start naming technologies and developing needs.

I discovered now, that titles have a reason to be. Mainly you’ll be looking at four kind of experience level of developers…

Junior Developer

Hiring junior developers is an investment in their long-term potential rather than an immediate payoff.

The first three or so months as an entry level developer is all about learning. Learning how the team operates. Learning how to act in meetings. Learning how the codebase is architected.

Check out what is expected from a junior developer in this article written for them.

Senior Developer

Someone with this word in their job title has been in their field for a certain amount of time or has a specific amount of work experience. But what defines a Senior Developer?

  • Has X Years of Programming Experience
    “X” could really be any number, it’s important not to base this decision solely on years. You also need to take into consideration the quality of that experience. What did they learn over the last decade? What challenges did they face and then overcome?
  • Exhibits Leadership Skills
    As leaders, they have fellow developers look to them for ongoing guidance. He/she would have exhibited leadership skills and the ability to delegate and manage.
  • Can Handle the Entire Software Development Life Cycle
    From start to finish. They should be able to get on with projects without needing micromanagement at the technical level.
  • Supports Junior Developers
    Often a Senior Developer will be assigned more managerial or mentoring duties throughout the team. To as a mentor and support the junior developers.
  • Understands and Respects Team Dynamics
    Not only should have experience on the technical side, but also have the ability to deliver in a team environment. A Senior Developer is someone who understands team dynamics and utilize all their skill sets; they understand you cannot do it all by yourself, and respect the other disciplines needed for delivering great software.

Read more on Senior Developers.

Lead Developer

A lead developer has the abilities and skills of a senior developer. But the mark of a lead developer is that they are a link between your development team and the other business-oriented departments in your organization. They:

  • Aid in planning product development and timelines.
  • Provide feedback to marketing and sales teams among others.
  • Discuss and aid the top managers to make sure that the development team and technologies being selected are aligned with the business’ goals and vision of the company.

CTO or VP of Engineering

Chief technology officer or VP of Software Engineering are important and detail-rich titles used by large companies or startups with various levels of hierarchy. If you don’t have one of those companies you wouldn’t be hiring a CTO or VP, or you just like fancy made up titles.

Here’s a very in-depth article about what each title means and what they will do for your company.

Where to Find Developers for Hire

For the longest time I was fixated with Upwork.com. I had been hired on it as a junior developer many years ago, and so it became my main and only source when looking for technical help for my projects in the following years.

Different kind of sites offer different kind of developers, I’ve learned. And with the increasing number of scammers and pretenders on Upwork, we better check what else is out there.

Let’s see a round up for the most important sites to hire a developer in 2020 (in no particular order).


StackOverflow Job board

StackOverflow

Stack Overflow is a legendary open Q&A community for technical subjects (mostly used as a resource for developers when they encounter problems in their code).

Their job board instantly connects you to Stack Overflow’s massive community which is an excellent way to reach your target audience. If you’re looking for Rails developers for example, your job post will be displayed on the StackOverflow pages where developers are discussing Rails.

At first glance, StackOverflow looks like a good place to find junior or senior developers, and great if you need to fill multiple positions.

A study by themselves showed that 16% of their community is actively looking for jobs, the remaining 84% are what they call ‘passive candidates’, People which are not actively looking but might be interested once they see the job offer.

According to them, «your jobs will have the potential to reach at least 16 million professional developers».


Github Job board

GitHub

GitHub is the largest provided of distributed version control for developers. It is a place where people host and review code, manage projects, and build software. They’re developers at heart, as you can see by the fact that they didn’t hire a designer for their job board ?

It’s a great resource for teams and dev junkies, there for it has one of the largest communities with 31 million developers.

GitHub Jobs, the company’s job board, allows companies looking for technical talent to reach out to GitHub developers.

It offers a lot of exposure, which can work in similar ways as StackOverflow considering the passive candidates, but little else.


Toptal Freelance Talent

Toptal

Reviewers of Toptal agree that it selects only the gems from software engineering and designing fields and introduces them to the elite clients.

It’s one fastest growing talent marketplaces and usually servers major clients (Motorola, HP, and JP Morgan). Known for its rigorous vetting process, Toptal boasts an acceptance rate of only 3% developers seeking to gain entry.

For companies they have streamlined processes, the search of the developer and all interviews are quickly and professionally organized.

Toptal is on the high end in terms of price, according to the talent you are matched with.


We Work Remotely

We Work Remotely

We Work Remotely is a niche job board for remote jobseekers. It’s primarily comprised of developer jobs. Posting a job with them is affordable — between 300 and 500 US dollars a listing. You’ll be instantly connected with remote developers, but screening, vettting, and interviewing will be up to you.

Since We Work Remotely is a niche job board, you won’t get as much exposure as you would on GitHub or Stack Overflow. You need to know exactly who you’re looking to hire and what they’ll be doing.

It’s a great tool for employers looking for candidates of all skill levels. You can expect to find a qualified developer within a month.

(Worth mentioning, for those who value culture, that We Work Remotely was featured by Basecamp and their book Remote)


Hired.com recruiting marketplace

Hired

Hired matches employers with qualified candidates through a combination of online support and in-house algorithms. They have recenlty acquired a another talent company that has has over 500,000 users and a suite of assessment and screening solutions trusted by companies like Opendoor, Wag, and Niantic to evaluate engineering talent.

Their pool of candidates have, on average, at least a few years of professional experience, it’s a wonderful fit for employers with some management experience and looking for full-time employees.

Currently, Hired is only available in 16 major markets (mostly US), also provides assistance for those interested in hiring remote.

How to Format a Job Description to Hire the Right Developer

The job of a software developer depends on the needs of the company, organization or team they are on. You probably have a small business like I do, most likely the position for which you’re trying to hire is very unique and has a life of it’s own.

Some developers are needed build and maintain systems that run devices and networks. Others to develop applications that make it possible for people to perform specific tasks on computers, cellphones or other devices.

Your job description is crucial, so pay attention.

Writing the Title of your job description

To effectively communicate what the actual job is,  you are going to have to keep it simple. It can be tempting to get creative with the wording in order to indirectly inflate the importance of other roles, DON’T. Instead, write for the job seeker by calling the job exactly what is it.

Be sure to mention the level of experience you’re looking for and the type of contract you’re offering (freelance, part time, full time, contract work).

You already know you want a specific level of experience, but what specific technologies were you looking for. Include keywords in your title that target any specific frameworks, languages, tools, traits, or development methodologies that are critical to the role you are trying to fill.

A few examples:

Senior Full stack Developer to take Lead on profitable Web app (Full time)

Lead Ruby Developer needed part-time for a new E-commerce project.

Junior iOS Developer Full time for long term project.

Inform applicants of the position to be filled and what your company is about

Your job description is where you want to get your specifications down. I personally find that the more detail you go into, the better. As long as you make it easy for people to scan through and decide if it fits them at a first glance, and decide to read in depth.

Project description

  • Include your job location and whether it’s remote or not.
  • Estimated start and finish date.
  • Include your company name and information.
  • Provide high level description of intended project,
  • and intended use case(s) and benefit.

Scope

  • Describe the functionality to be provided by the project.  Provide the full intended scope of the project.
  • Specify any interface/API specification proposed,
  • Identity a list of features and functionality will be developed.
  • Identify what is in or out of scope. During the development phase, it helps reduce discussion.

Architecture Alignment

  • How does this project fit into the rest of the Architecture?
    • Please Include architecture diagram if possible
    • What other projects does this project depend on?
  • How does this align with external standards/specifications?
    • APIs/Interfaces
    • Information/data models
  • Are there dependencies with other projects?
    • APIs/Interfaces
    • Integration Testing
    • etc.

Let the applicants know what will be expected from them

Developer Job Responsibilities

Define the responsibilities of the position in one sentence or short paragraph.

Like so:  The role to fill in this position is to be responsible for {designing|coding|modifying|managing}  _____, from _____ to _____ and according to _____. Strive to _____, that feature _____ and _____.

Developer Job Duties

The specific duties the developer will have to deal with.

Some examples may include:

  • Regular exposure to company {stakeholders|management}, as well as the authority and scope to apply your expertise to many interesting technical problems.
  • Candidate must have a strong understanding of _____, _____, _____.
  • The position requires constant communication with colleagues.
  • Experience in _____ and _____ software platforms.
  • Deep expertise and hands on experience with _____ and programming languages such as_____, _____, _____ and _____.
  • Deep functional knowledge or hands on experience with _____ is needed to be successful in this position.
  • Strong grasp of security _____ and how they apply to _____.

Projected Team and Resource Requirements

Inform of any special requirements your team or project needs in order to have a smooth on board.

Developer Skills and Qualifications

List all the required skills and qualifications. Try to limit yourself to the must have ones, developers are usually open and able to learn new things quickly (you can ask about it during the interviews).

Read more on creating winning job descriptions to find a great developer, here and here.

We have been giving our potential developers lots of information, now comes the time to ask.

What to Ask for in Resumes of Software Developers

Most of this section is taken from an article by Head of Software Engineering Dominic White, where he instructs developers on why their horrible resumes are the reason they’re not getting hired.

I have turned it around and included only info that is essential to the hiring party. But I recommend that you take a look at the original.

We will try to address this «horrible resumes» trend by asking for specific formats and providing guides for them during our job description.

Summary or cover letter

This is the most important part of any application. Sadly, says Dominic, less than half applicants ever include a cover letter.

So let’s ask them directly to include a cover letter or summary of their relevant experience. Which will help us understand of who they are and why they’re worth interviewing for the role.

  • Introduction
    «Please lead with a couple sentences introducing us to yourself.»
  • Their enthusiasm
    «Explain why you want the role. Why are you applying for it?.»
  • Key requirements
    «Go through each requirement and explain how you meet the requirement.»
  • Length
    «No more than 1 page please. It’s a summary so should be as succinct as possible.»

«Please don’t list every technology you have ever come across, instead list the specific skills that apply to this job»

The technologies they have used should be incorporated into the summary and career history as long as it’s relevant. They should highlight them as part of their achievements and there should be a clear reason for them to include them.

Work they’ve done

  • Github, Bitbucket and StackOverflow accounts

«If you have a Github/Bitbucket/Stackoverflow account then please list it. If you contribute to open source projects, please add them. If you have an online presence that in any way supports the role you are applying for, please make sure it’s listed.»

  • App store links or Websites they have worked on

«If you have worked on mobile apps and they are any the app store, make sure you include the links to them. If you have worked on websites, include the URL’s. Don’t just include the links, add the specifics of exactly what you did on each project as described below.»

Specific development work they actually did

We are now getting into the details of their experience within a particular role. This is the key information you will look for.

It’ll tell you if their skills, match the skills you want.

Unfortunately, under the description of a role, there’s a lot of this type of thing:

  • Built the xyz IOS mobile app for prestigious client

This seems to tell you a lot, but it doesn’t tell you very much at all.  It tells me you can build an IOS mobile app, but it doesn’t tell me exactly what you did.

«Details matter. Let us know about the development work you actually did during each particular project or role. What were you responsible for? What technologies did you use and for what purpose? Where you part of a team? Did you lead the team? etc…»

Highlight software engineering principles and best practices

For example, show your potential employer you understand and know how to implement design patterns, unit tests, CI and CD. You Lint your code, squash technical debt, code defensively and share code ownership.

Whatever principles you have used, showcase them through your resume. It demonstrates your deeper knowledge of software engineering and shows you have learnt good habits.

What did they learn most from the role

Every role presents opportunities for growth. These are the areas you found particularly difficult or challenging. At the time, they can seem to be the worst part of the job. Sometimes they are so bad you leave because of them.

When you look back, you will recognise you learnt a key lesson and that it’s something you continue to use.

Section for personal interests

Listing your interests outside of work helps to flesh you out as a real person. It builds a more complete image of who you are and makes you more interesting.

How to Interview and end up Hiring good Developers

As mentioned at the beginning, I’ve been looking at the wrong things when looking for a developer.

Let’s see how we can turn this around by following the advice of co-founder and former CTO of npm, Laurie Voss.

We are looking for the wrong things

The primary mistake that people make when interviewing is over-valuing present skills and under-valuing future growth, says Voss.

Don’t hire people for what they already know, instead look for people smart enough to be good at that job.

Don’t hire for what they can remember in an interview

Laurie explains that asking people to code during interviews is a terrible thing that will provide no value to you or the interviewee. This experience is nothing like the real life job and, even a great developer might not perform under this kind of pressure.

Also:

Coding interviews ask people to re-implement some common solution or low-level data structure. This is the opposite of good engineering. A good engineer will try to maximize productivity by using libraries to solve all but the most novel problems.

Don’t hire for a fancy degree

Having gone to a good college, or having gone to college at all, are not in my experience good predictors of ability as an engineer.

Don’t hire for their previous employers

People also over-value brand names on resumes. Don’t hire somebody because they worked at a hot company, or a famous one, especially not if that company is big.

Variation across teams in big companies is enormous.

Just because a company was successful doesn’t mean your candidate had anything to do with that.

What you should be looking for instead

Your first stage of interviewing should be attempting to answer two questions:

  • Can they do this job?
    This is not the same as “can they do this job right now?” but you need to be confident they can learn how to do the job.
  • Are they going to get better at this job?
    The answer has to be yes.

Relevant experience is a plus but not a requirement

Syntax and API questions are aimed at finding relevant experience but they are bad ways of doing so.

Instead, talk about the technology they’re going to be working with. Find out how much they know about it.

You’re not looking to hire or pass on the basis of any individual fact.

If they are weak on the skills they need for the job, then find a topic they know a lot about instead, and get them to talk about it, if necessary explaining it to you.

You are looking for grasp of complex topics and the ability to clearly communicate about them, which are the two jobs of the working engineer.

Somebody who is constantly improving is a requirement

Much more important than what they know is how they learn it, and how quickly.

You are looking for somebody with a track record of learning new skills and applying them successfully.

Talk about their career path, and look for evidence of increasing responsibility (which is related to, but not the same as, seniority).

Remember that anybody you hire will expect raises every year: somebody who isn’t getting better all the time is going to become worse and worse value unless their skills increase in value, too.

Smart and Gets Things Done

Smartness is hard to judge, and some of the techniques I’m talking about here should help. But “gets things done” is equally important. Have they shipped real software?

Somebody who can intelligently discuss technology

As I mentioned, the two jobs of an engineer are to understand complex concepts, and then communicate them clearly.

The best programmer in the world can develop incredibly efficient algorithms in record time, but the job of an engineer is to work with a team to achieve something larger, and if you are unwilling or unable to spend time communicating with your colleagues you’re only doing half of your job.

Somebody who knows what they don’t know

When interviewing I always attempt to find some area of expertise where I definitely know more than my subject. This is not to prove I’m smarter — see below — but because it’s important to see how somebody reacts when they find themselves out of their technical depth.

Strong candidates say “I don’t know” as soon as they hit their limit, and may start asking questions. The very strongest candidates say “but if I had to guess” and then attempt to extrapolate. Those are great because it shows intellectual honesty and a strong desire to figure things out.

This is a conversation, not an interrogation

It’s important that they’re aware of this contract, too. You want your interviewee to be relaxed and comfortable, because that is the state they’ll be in when they’re doing their job (if not, your company is awful, please quit). Answers you get from candidates who are stressed or panicky are basically useless. This is true even if they’re good answers, because they’re not representative answers. Stress and panic are not sustainable states, so you risk hiring someone who only performs when pressured to do so.

Ask yourself: do I want to work with this person?

When you’re sure your candidate is good enough to do the job, you have another question to answer: do I want to work with this person? There are no specific questions to ask to get this answer; it’s more about how they answer the other questions. This makes it a personality test, and that makes it very, very dangerous territory. Personality is subjective, and that means you are inviting bias into the equation. Personal bias, implicit bias, unconscious bias.

The terrifying possibility of turning away a great candidate because you are biased towards them in some way you don’t even know about is why people think giving pure, right-or-wrong technical questions are better.

And they do nothing to protect against bias: when there are 50 syntax questions you ask, it is easy to give hints and passes to the candidates you implicitly prefer and pretend that they were just better. I’ve caught myself doing this. There is no simple way around this: you have to be aware of your biases, constantly conscious of them, and correct for them, or you will screw your company by hiring inferior people.

Look for somebody to work with

The most common way I see startups get the “do I want to work with them?” question is by confusing that question with “do I want to be friends with this person?”

Get that assumption out of your head. Those two are not the same. You can have brilliant, productive professional interactions with someone with whom you have absolutely nothing in common with on a personal level.

Homogeneity is disastrous

Lack of diversity is obviously, mathematically, bad for your company. Instead of hiring for “best for the job” you have accidentally hired for “looks like me”. There is no chance that all the best programmers in the world look the same, so a lack of diversity means only bad things.

But what if I can’t find anybody like this?

The important thing to remember is that hiring a bad person is more expensive and wastes more time than waiting for a good person. It’s tempting to say “at this point, anybody would do” but that’s never, ever true.

The wrong person will not merely fail to do their job, they will make everybody slower at theirs, and unhappy to boot. Don’t hire if you’re not sure about somebody, and if you hire somebody who’s no good, give them as much support and direction as you can afford to get them to turn around, but if you don’t see any improvement be ruthless in letting them go.

This is all very hard

These techniques are tricky to define and tough to follow. But that’s what hiring is like. It’s really hard, and it always takes much longer than you hope it will.

The rules are fuzzy, and there are no acid tests that can be applied. But the payoff to trying harder is a stronger company, better people, a better product, and a happier working life for everyone on the team. Making those things happen is, as a hiring manager, your only job.

TL;DR

  • Many interview techniques test skills that are at best irrelevant to real working life;
  • you want somebody who knows enough to do the job right now;
  • or somebody smart and motivated enough that they can learn the job quickly;
  • you want somebody who keeps getting better at what they do;
  • your interview should be a collaborative conversations, not a combative interrogation;
  • you also want somebody who you will enjoy working with;
  • it’s important to separate “enjoy working with” from “enjoy hanging out with;”
  • don’t hire assholes, no matter how good they are;
  • if your team isn’t diverse, your team is worse than it needed to be;
  • accept that hiring takes a really long time and is really, really hard.

 

Further reading:

Job boards for software engineers (with pricing) https://resources.workable.com/tutorial/post-a-job-on-stackoverflow

Project proposal templates (good one to get ideas) https://www.smartsheet.com/free-project-proposal-templates

To Hire the Best, Professionalize your Interviewing – Hiring.Monster.com https://hiring.monster.com/employer-resources/recruiting-strategies/interviewing-candidates/professional-interviewing/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *