Tech recruitment works like figure skating competitions

And it sucks. Here is why.

First you must do the arbitrary sport exercises, which have very little to do with actual skating: a lot of jumping, twisted jumping, jumping on one leg, jumping on the other leg, grab a person and throw it in the air, you know, like all these things which do not involve skates at all. Just like your whiteboarding algorithms written with pseudocode. We test athletic abilities in a sport concerned with gliding on ice, just like we test computer science in a trade concerned with programming interpreters. I mean, seriously, most jobs out there in web development do not require programming a computer, it is just scripting an interpreter to program the computer.

Then comes the artistic part. This subjectivity loaded section of the figure skating show constantly has people booing and shouting at judges. It is what we call in recruitment, finding the culture fit. The culture fit hunting is a seduction game, more than an interview. And it is wrong, just as wrong as not understanding “presentation” or “artistic” reasons for which your favorites loose.

That is why I always prefer ice dancing. I don’t even bother to watch the other disciplines. Ice dancing looks very much like, you know, skating. And no, I have no metaphor that transforms ice dancing into technical recruitment.

Too many companies want to hire the “full stack generalist”.

That is fucked up.

Becoming a “full stack generalist ”should be an aim for developers. A good developer, at some point in their professional development, will become a full stack generalist.

First of all a full stack generalist is a weak idea, an ideal state, a unicorn. Do you go and have your heart surgically repaired by a generalist physician or a by specialized surgeon? Do you know of a lawyer who is OK representing in any kind of trial or are there divorce lawyers and criminal law layers and so many other types of lawyers? I am probably the umpteenth idiot using these comparisons. There will be people screaming: it does not apply. But, in the end, seriously, be honest: if you have used for the past year the same tech 80% of your time to give 80% of your output, you are not a generalist; considering you will always be in a team, other than debugging critical production code, being full stack is of very little use.

I think recruitment would become better if people would make up their minds.

Do you want to hire system architects? Ask system architecture questions.

Do you want to hire someone who can help the system architect choose the best algorithms? Ask algorithm questions.

Do you want to hire someone who writes PHP or JS or Ruby or CSS for 80% of the time? Ask damn PHP or JS or Ruby or CSS questions.

Do you want to hire a “polyglot” because your software is a mishmash of technologies? State so in the recruitment phase, don’t enjoy humiliating specialists.

Technical recruitment is lazy.

You know why? Because a lot of candidates are self taught and very, very young and a lot of technical recruiters are self taught and very, very young. Because the salaries are high and companies assume they require “top talent” to get the job done. Really, they don’t. Most startups and corporations do well with average coders. Even Google and Facebook, with their huge scaling issues have plenty of positions where no rock star is required, yet they tend to interview each candidate as if they’d program the launch controller on the Falcon.

The salaries for average and beginner programmers are high because of the freelancing market. It is a mistake to assume it is because companies are fighting over them. Companies fight over top talent, not average WordPress theme cruncher. Sorry, I am a WordPress theme cruncher too, we all are, but some of us are top talent, full stack generalists who happen to crunch WordPress themes, they are not average.

If you learn to code believing companies will fight to get you, you will be in for a really bad surprise. Companies will not give you a job, just because you’ve done your fair share of Treehouse and Udemy. Companies use two strategies to hire. One, they leave it to other developers, wrongly believing that it is good, and most often creating “bro hoods” and sausage parties. Two, they use the same dated procedures that assume “programming” is like plumbing or, at best, engineering, creating teams of code typists. Right after you learned “coding” you don’t qualify in either of these groups: you are not a bro yet and you are too idealistic to program with Java for the rest of your life.

Everybody wants experience, passion, proven track records, A players, outstanding personalities.

This is bullshit.

Most people are average and that applies to programmers too. I have a scale: coders, programmers, developers, architects, innovators. It might be bad, so far it works for me. I believe recruitment should have a very clear picture of what it recruits and allow growth. It has been a while for example since I’ve seen anybody specifically looking for juniors, juniors mind you not graduates.

If you believe that having a person you pay a top salary to slice PSD files is OK, because he or she is a “front end developer”, you are wrong.

If you consider that a senior developer, with 10 years of hands on experience, paid at market level, should spend eight hours a day putting data into Smarty templates, you are wrong.

The plague of boredom leaves hard to conceal scars on your product.

It all starts with understanding two basic things about programming:

  1. just about anybody can eventually program an interpreter
  2. learning how to code is a basic skill just like driving a car is a basic skill

I often think about how hard it was for my father to get a driver’s licence. He had two theoretical tests, a test of driving aptitude, a night and a day exam on the road. Today its about as easy as asking for it: give me the licence, i bought a car. It’s that easy. That is exactly how it will get in time with programming interpreters. There is an amazing effort into building higher and higher level abstractions of coding. People don’t program computers anymore. There are some, highly specialized programmers who work with the machine. We work with a pampered version of it: the interpreter.

One who can reproduce with HTML and CSS a .psd file, blindfolded, while having a foreigner describe in bad English the contents of the .psd file, does not need a computer science degree. It needs to understand the web browser rendering interpreter, that is what HTML and CSS program. The better he understands it, the bigger the seniority level. The more up to date with rendering engines she or he is, the better an asset at hiring time. There.

One who can write with PHP whatever it is required in a specification: an algorithm, a data flow, functionally or object oriented, with minimal security bugs, efficiently, logically and all while implementing best practices, does not need a computer science degree. It needs to understand the PHP interpreter. That is what PHP programs. The better they understand it, the less they whine and bitch on the Internet about it, and ship fast web products that work , because that is what PHP is for. The more up to date with PHP interpreters, alternative or official, he better an asset at hiring time. Easy.

None of the above need to know algorithms by heart. In fact, I would say that the sole purpose of learning things by heart is for quick reaction time. I find that it is better to ask function names in scripting languages and to see if one knows immediately what is built in the interpreter or the SPL, that is of far more help in quick reaction scenarios. For algorithms, you need to take your time anyway. It’s like imagining that if a nuclear power plant explodes, you do a Binary search tree on a whiteboard to find the best plan.

One who writes an interpreter or, say, one who programs hardware controllers, they do indeed need a computer science degree, because they are programming computers. How many of these whiteboarded people program against a compiler? But they need the computer science degree not for knowing things by heart, but because it is required knowledge, if you want to program computers, to understand why and how computers are programmable in the first place. They have another set of problems. A 22 y.o. computer science graduate going into robotics has the same absolute value as a 22 y.o. self taught programmer who developed for the past 4 years Javascript apps and goes into web development. They have different domains of knowledge. The graduate will do sniff at web development and the JS coder will program a robot lost in callback hell.

So, to fix recruitment we need to:

  1. train recruiters into what are the type and levels of the programming trade
  2. stop being superior assholes and look for talent and determination where we least expect it
  3. bring people on board and wait on them to catch up
  4. hunt down exceptional full stack generalists
  5. grill down at the whiteboard those who should actually do anything at the whiteboard after we hire them
  6. let people show what they can do, it is really not important what they CAN’T do, that is simply an elitist bullshit. You ask someone: what can you give? they say: THIS, you value that and offer some money. That is how it works. You don’t go to the market and ask the seller: what color do these oranges NOT have?
  7. train teams in the company on how to do interviews
  8. have procedures, not winging it with random questions that other bored programmers make up for fun
  9. measure recruitment success, recruitment conversion rates, recruitment diversity and inclusiveness
  10. be humans and let others be humans back at us

Can we do it?