The essential skills of a developer
I was recently approached by a manager working in a large (more than a thousand employees) company. Aside his management job, he was also actively contributing to the hiring interviews. He have read the series of articles I wrote on the subject back in 2014 (part 1, part 2, part 3 and part 4), and listened to my theories about the obsession for technologies and the lack of understanding of the skills that matter the most, but found that there was something substantial missing. The discussion that followed between us is worth sharing.
My vision of the hiring process was that hiring interviews for software development positions overemphasize technologies. A usual three hours interview happens this way: a bunch of generic stupid questions for a start, such as “where do you see yourself in five years?” or “what are your strong and weak points?” followed by technical questions which can be more or less specific, such as “In which case would you use JSON over XML? Why?” followed in turn by exercises. At the same time, the interview lacks completely the assessment of the necessary skills of a developer—the ability to work in a team, the ability to communicate effectively, the willingness to learn, the ability to learn fast, including outside the comfort zone, the ability to understand people from other domains and professions. A few traits are necessary as well, such as the discipline, the respect of others, etc.
The manager finds my vision clearly idealistic. All those skills are indeed necessary for an ideal team in an ideal company working on an ideal project. In reality, nobody cares about those skills, and they have absolutely no relevance to the productivity of a developer.
The ability to work in a team? Come on! Those are just a bunch of guys working on their respective tickets. If they are able to talk to each other, it's nice. If they don't, it wouldn't matter much, since managers micro-manage anyway.
Communication skills? Who cares! Nobody has time to read anything in an average company. Nor listen. And why would I listen to another colleague, especially when his opinion differs from mine? With people from Twitter generation replacing step by step older generations, communication remains only in a form of a Twitter post. Even if you make an effort writing something, most persons won't make an effort to read it, moreover to understand it correctly.
Our discussion continued on other points, but I suppose you get the picture. An average employee don't need those skills, and some of them would even be an issue of making a person an outsider, his culture being fundamentally different from what is accepted in the industry.
Then what are the skills that actually matter? If we look at what is being measured in an average company, it appears that punctuality is the only thing that matters. Of course, to retain your position and possibly get a promotion, you should be strong at politics—in the case of developers, it's not about being “strong” but rather the least bad at—and sometimes look skillful. This is a vague idea of making sure that if promotion is available, the manager chooses you, and not someone else from the team. In practice, this could be ensured by different means, including the iterative process of creating a problem and solving it.
On average, unless you are good at politics, you also need to give an impression that you do your job. Sometimes, this means that you need to actually accomplish some tasks, for instance to deliver features. While you don't need them to be bug free and you don't need to do it fast, you still need, at a given moment, to deliver the thing. This, in turn, means that you have to cope with the aggressive environment where everything is designed to prevent you from releasing anything: constant noise, phone calls, people walking near your desk, talking to your colleagues sitting nearby, wrong working schedule, wrong lighting, inappropriate hardware, wrongly configured thermostat. So we're back at hiring someone who can work under stress, with the sole difference that here, we intentionally designed an environment which prevents any form of intellectual work, and won't change that anytime in the future.
Putting hypocrisy aside, a job posting should be described as this:
We're looking for a person who is able to work in a crappy environment. You'll share your desk with a smelly guy—he still takes a bath once per month—at your left and a salesperson with hearing impairment at your right. Working in our main office is as pleasant as going to a beach—at least the temperature is comparable, because we can't use air conditioning, since one of our guys starts coughing a lot (without air conditioning, he coughs as well, since he's nearly always sick). Just for you, we recently ordered a PC with Intel Celeron—be glad, a few folks here still work on a Pentium 4.
You'll be working on our flagship product which is already late (that's why we hire you). You'll be the lead developer (that's probably why you got a Celeron), and you'll be working with four Indian guys (they don't speak English, but it doesn't matter, since our broadband connection makes Skype communication with India really fun!)
The last thing: you should absolutely be able to deliver the product two months ago. Don't lose our trust.
Such honest job posting means that, indeed, the only criteria which matter for a candidate is, once again, politics and the ability to release anything despite the context.
Then why wouldn't we see more emphasis on that during the interviews? It's simply because it requires that the companies stop lying to themselves. Such company would need to face its own problems, and work to solve them. The both steps, however, are tremendously difficult, and it's much easier to pretend that everything goes well and that we are looking for highly motivated and highly skilled individuals. Then, it really doesn't matter what should be emphasized during the interviews—the skills which would matter for a company which strives producing high quality software, or the technical skills. Not surprising that most human resources chose the latest: it is much easier to pretend to know how to measure technical skills than the actual skills: “I spent five years working with Java” sounds better than “I spent five years being respectful.” It is essentially the same thing, but it sounds different.
While I find this vision extremely pessimistic, I can't reject the fact that this translates well enough the software development ecosystem I study for years. I'm just sad looking at the people who may be able to do great things if they were permitted to do them, and wondering what a corporation which would care about the employees could achieve in terms of product quality and individual productivity of developers.