The Wrong Skills

Companies might not be hiring the right people, even if they think they are.

I failed a tech interview today.

When I say fail, I mean truly failed. Of the three questions given in the interview’s coding challenge, I only solved one of them, and I certainly didn’t meet the various performance and operating constraints set by Codility. I earned a mere 13 percent on the exam, effectively barring me from joining the vetted freelance marketplace Toptal. Doh! [1]

You see, when it comes to mathematical or algorithmic questions, I’m a slow thinker. Problems that require me to contort math (such as calculating multiple values while iterating through an array) quickly drain me of energy. While I understand the concepts of algorithms and when to apply them, formulating them on the fly just isn’t one of my strengths (personally, I say that’s why we have Google).

That’s not to say I can’t solve algorithmic problems — given enough time I probably could have solved all three in the challenge. It’s just that solving questions like that is not my strong point. If you asked me to develop a system that was useful to users and made the company money — that I could do.I’m a builder, not a competitive programmer, and my skills reflect that. [2]

What skills does a successful competitive coder need?

A successful competitive coder’s main concern is to solve problems correctly, performantly, and as quickly as possible. Their skills involve deeply understanding many algorithms and data structures, understanding the performance considerations of algorithms and code (down to individual lines, if necessary), and being able to implement efficient algorithms.

What skills does a good software developer need?

A software developer doesn’t need the skills of a competitive programmer to be good at their job. It requires a different set of skills to build products. While there is plenty of debate about what make a good software developer, most don’t overlap with competitive programming skills. A good software developer is able to work well with others. They’re able to quickly learn new technologies and judge the appropriateness of their use. They write maintainable code and design usable, secure systems. They’re able to balance business goals and constraints with technology concerns, making tradeoffs where appropriate. They can constructively criticize as well as accept criticism.

That’s not to say that good software developers never have good competitive programming skills — many of them do. I’m not saying that competitive programming skills aren’t useful for software development. They can be useful in certain contexts (such as dealing with scale). I’m just arguing that most software developers rarely face situations in their work where those skills would be necessary to complete their tasks, and if they do, it’s usually in an untimed context with many more resources available to them. Whatever skills a software developer needs to succeed, most are not skills that a competitive programmer needs to succeed.

I think this is a problem.

Many companies today decide to hire or not hire based on tech interviews involving algorithmic, competitive programming questions. A candidate effectively needs the skills of a competitive programmer to succeed in the typical tech interview’s coding challenges, but many software developers haven’t been working on those skills — they’ve been busy building things and producing value. Their competitive programming skills may have atrophied, and, due to that, may do poorly in these tech interviews despite their knowledge and effectiveness. The skills needed to be a successful competitive programmer share only a small overlap with the skills needed to be a successful software developer.

Companies end up relying on coding challenges as a filter for hiring may be rejecting a lot of candidates who would otherwise excel in the role. Worse still, companies may be unknowingly filling their teams with competitive programmers who haven’t honed the skills needed to be good software developers. Big companies can absorb this cost with larger training runways and teams of specialists, but a startup looking to release their MVP, or a consulting company needing to build their client’s hopes and dreams simply can’t afford it. Companies justifying their use of coding challenges just because “Google does it” might be hiring the wrong people or unnecessary extending the search for qualified candidates — it doesn’t take tremendous algorithmic problem solving skills to create a lot of software.

What’s the solution?

I don’t know. I acknowledge this may be a case of sour grapes, and I might just be ranting about a perfectly working system. It’s being widely used for a reason — companies must be finding a certain level of success with it. However, I think they can do better. Many developers I’ve spoken to share my sentiments. Anecdotal? Maybe. At the very least I think it’s worth discussing.

I believe the tech interview is an industry-wide problem, and it’ll require an industry-wide solution. Some proposed solutions, such as a take-home project or paid pair programming work have been proposed, but they all have their benefits and drawbacks. Even if widely approved, any solution will take time to be adopted by companies.

In the mean time, I’m certainly not looking forward to my next tech interview.

[1] This is somewhat of a hyperbole — Toptal allows you to reapply in a month.
[2] When I interview a candidate’s tech skills, I usually ask them to code a basic function to ensure they can code (non-algorithmic), ask a couple simple questions about data structures, and go into discussing projects and concepts, design, practices, architecture, etc.

Originally published 2016/08/03 at