Coding Challenges and Technical Tests When Applying for Jobs

Today, someone I’ve never met, whose name I don’t know, rated and told me I’m not a good software developer.

It wasn’t someone on Twitter or social media. It wasn’t an industry expert.

No, it was feedback I received from coding challenge I did for a job application.

As a general rule I refuse all technical tests and code challenges (even if it means not being able to apply for a job).
I’m not sure why I took this challenge. I guess I let my better judgement slip.

Coding tests in job applications have their place, but having been on both sides of the table (and I’ve never made some do a test) they’re more for assessing entry level developers than people nearing 2 decades of in-the-trenches experience.

 

In this post I want to share my thoughts on the process I went though by using the actual test, sharing my solution and the exact feedback I gave the recruiter I went through.

I’m not name dropping the particular company that required the test. But, their requirements are in a public GitHub repository.
I don’t know the department, team or people I was applying for (there’s a warning sign for you) so I can’t name drop individuals.
I also didn’t sign a waiver with the company against sharing my experience.

To be clear: This is not an attack on any one person or the organisation. I’ve been through almost exactly this instance multiple other times in the past.
This instance simply provides a perfect example to share.

 

One final thing: this was for just a 4 month contact. I’ve done a lot of contracting over the years and have never been asked to perform a code challenge.

This whole situation says a number of things to me about:

  1. The persona assessing me (I can infer their experience as well as their personal motivations).
  2. What the organisation is potentially looking for,
  3. Laziness in the organisation’s recruitment process. Say what you want about “efficiency” in hiring, but this speaks to laziness.
  4. Recruiters are still not doing their job in terms of understanding their industry; understanding the people they represent; educating their hiring clients.

 

The Code Challenge Requirements

The complete requirements of the code challenge were provided via a link to a public GitHub repository at https://github.com/medibank-digital/coding. I’ve also included it below.

 

# Medibank Coding Challenge

## Overview

A web service has been setup at the following URL: 
-	https://gist.githubusercontent.com/medibank-digital/a1fc81a93200a7b9d5f8b7eae0fac6f8/raw/de10a4fcf717e6c431e88c965072c784808fd6b2/people.json

## Requirements
You need to:
- Write some code to consume the json hosted on the above web service.
- Output a list of all the cats in alphabetical order under a heading of the gender of their owner.
- Output must be presentable on a web browser.
- Submissions will only be accepted via GitHub or Bitbucket.

Please note:
- It can be written in any language you like.
- Use any libraries/frameworks/SDKs you choose.
- Use industry best practices.
- Use the code to showcase your skill and what you value in a software application.

## Example

```
Male

Angel
Molly
Tigger


Female

Gizmo
Jasper
Notes

```

2 things immediately came to mind:

  1. Use industry best practices” is a MASSIVE alarm bell for me.
    For 2 reasons:
    a) there is no such thing as “industry best practice” in software development. Developers like to use that phrase but in reality it doesn’t exist and we all know it.
    b) What it really says is “some person wants you to write the specific style of code and architecture that they think is best, and we’re not going to tell you what it is”.
  2. There’s no guidance in terms of what they are looking for.
    Do I need to create a full app?
    Can I create just a helper?
    Are there code standards they’re looking for (and what are they)?
    Are they interested in UI design?
    What if I’ve written it in a language they don’t use?
    What if I wrote it in a language they couldn’t compile and run (they did say “It can be written in any language you like”)?
    Ultimately: how does this represent what they are looking for in the work the candidate will do on the job?
    And what the fuck is the actual goal of this test anyway?

 

The people.json file contained the following:

[
  {
    "name": "Bob",
    "gender": "Male",
    "age": 23,
    "pets": [{"name": "Garfield", "type": "Cat"}, {"name": "Fido", "type": "Dog"}]
  },
  {"name": "Jennifer", "gender": "Female", "age": 18, "pets": [{"name": "Garfield", "type": "Cat"}]},
  {"name": "Steve", "gender": "Male", "age": 45, "pets": null},
  {
    "name": "Fred",
    "gender": "Male",
    "age": 40,
    "pets": [
      {"name": "Tom", "type": "Cat"},
      {"name": "Max", "type": "Cat"},
      {"name": "Sam", "type": "Dog"},
      {"name": "Jim", "type": "Cat"}
    ]
  },
  {"name": "Samantha", "gender": "Female", "age": 40, "pets": [{"name": "Tabby", "type": "Cat"}]},
  {
    "name": "Alice",
    "gender": "Female",
    "age": 64,
    "pets": [{"name": "Simba", "type": "Cat"}, {"name": "Nemo", "type": "Fish"}]
  }
]

 

My Solution

I completed my solution in using React (it was good to practice for something I’m currently learning) and I published it to a public GitHub repository at https://github.com/jsnelders/medibank-coding-challenge.

All up it took me about 4-ish hours. I actually started it while watching TV the night I received the request and finished it the next morning between other tasks. In all I think it was about 4 hours of my time.

Now, that may seem like a lot of time for a simple task like this, and I’m sure there are better programmers than me that can spit it out in half the time or less, but consider the following:

  1. I had to guess at the “hidden” agenda and requirements they were assessing me against. So, I have to spend a bit of time trying to get inside their heads.
  2. It’s a complete React app. Even with create-react-app it still takes time to build one.
  3. I’m new to React and only just [finally] getting into ES2015, so I spent some time with reference material open.
  4. I’ve never worked with the Jest test framework.
  5. I’m an OG developer trying to keep up with “modern” ways of development. In this case, converting my old school (by which I mean more than 5 years) approach to programming JavaScript and use ES2015 approaches. Which, is no more “correct” or “better” than the old way.

 

The Feedback

The feedback I received via the recruiter is exactly as follows:

Here is some further feedback for you.

Positive

    • Used ES6 filter method for sorting list
    • Used config file for url

Negative

    • Didn’t break up React components (one for entire app)
    • Very long methods instead of breaking logic up into smaller chunks
    • Could have used constants for JSON response types instead of repeating string literals throughout class
    • Many of the ‘let’s could have been ‘const’
    • Had a unit test but when try to execute it had a syntax error, so couldn’t execute
    • Inconsistent and Unconventional naming conventions (didn’t use service, utility, some declared with lower case others, while other upper case)

 

To which I replied:

 

Thanks [name],
This is exactly the sort of feedback I was expecting.
I’m all for constructive feedback, but to be honest this is not constructive. If anything it’s nitpicking and disrespectful of candidates because we have to invest at least half a day of our time and can’t even get a reasonable response.
I’ve included in my own thoughts in red beside the feedback. You don’t need to pass it on – it’s for you do understand how a candidate can see this situation.
I just want to reiterate what I mentioned on the phone from a candidate’s point of view:
* A company can’t throw such “small” tests like this at developers without giving at least some context of what they’re looking for. That’s a hostile action, and leaves a candidate unsure of what to focus on and how far to go. How I would approach in a larger enterprise software project is very different to a small “toy” case like this.
* It’s unreasonable to expect candidates to invest hours of their time (ie. a test like this takes a minimum 2-4 hours) and not discuss the results. The comments provided are “not” feedback – they’re just someone’s opinion without explanation.
So it makes me as a candidate ask: Is this how they operate as a team and treat developers? Is their work style and priority to pick on coding style or solve business problems? Would I go into that team and worry every day that all my code reviews are going to be picked on, without standards given, and how would I feel?
Those are the serious questions that come to mind when I apply for a job and (without an interview) have my ability as an experienced developer scrutinised and “picked on” by someone I’ve never met, based on criteria I haven’t been told.
It is honestly an experience that does not leave me feeling good, especially considering we work in an industry where most us – even the best and most famous – still talk about feeling “imposter syndrome” after 20+ years.
Apologies – I don’t want this to sound like a rant, but I do like to give an honest point of view on the testing process to recruiters whenever I can, especially having sat on both sides of the hiring table.
Cheers,
Jason

 

And my responses to the Positive and Negative Feedback:

 

Positive

    • Used ES6 filter method for sorting list [I only did this because I exepcted that’s what they were looking for. A loop is still a perfectly reasonable option too.]
    • Used config file for url

Negative

    • Didn’t break up React components (one for entire app) [Not required on an application of suck low complexity. This should have been stated as something they were looking for.]
    • Very long methods instead of breaking logic up into smaller chunks [Which method are they referring to. I’ve checked all my code and I just can’t see a function I would think necessitates chunking or shortening.]
    • Could have used constants for JSON response types instead of repeating string literals throughout class [Not even sure exactly which code this referring to? If I was to guess, then I’d say I understand their thinking but don’t think it’s reasonable without pre-defining it as a coding standard they use (what I did was “not” unreasonable and would cause not maintenance problems).]
    • Many of the ‘let’s could have been ‘const’ [I’ll concede this “to a very small degree”, bit this is really low-level nitpicking. Both are perfectly valid, and no dev who’s been working front-end web more than 5 years would even consider this a problem.]
    • Had a unit test but when try to execute it had a syntax error, so couldn’t execute [Fair enough. I must have renamed a function and not re-run the test. And technically, it’s not a “synatx” error.]
    • Inconsistent and Unconventional naming conventions (didn’t use service, utility, some declared with lower case others, while other upper case) [I totally disagree (and just saying this one line is not enough feedback). In fact, I used conventions I’ve just learnt that are taught by one of the industry leading teachers of React! And they didn’t set any expected conventions (there is no single one in our industry).]

 

My Thoughts

I’m an very experienced developer. No boasting – that’s just how it is. Almost 20 years in the industry. Many roles. Over 8 languages and variants. I’ve worked with countless different tools, technologies, platforms, patterns, and code from probably hundreds of other developers.

I’m also still a programming software developer after almost 2 decades on the jobs. The number of people with more than 15 years in the industry who can say that is a dwindling number.
I’ve done everything from code Excel to website interfaces, setup and manage deployments to debug production issues, hire and manage staff to run a business.

What that means is I’ve seen and experienced a lot, in an industry that has no certification and governing bodies, and the only thing I can tell you is: there’s no right or wrong way to do things – just someone’s opinion.

All that said, I’m an “average” programmer.I know that. I get shit done and solve business problems – that’s my job. I’ve been through the school of hard knocks more than once in life. And this not the first time I’ve received feedback like this on a coding challenge (most times I never received feedback).

Even so, it’s still a kick to the stomach to be criticised like this, from someone I’ve never met, without a chance for discussion, which is what you would reasonably expect in an actual workplace.

I’ve had exactly one decent technical test in my career as an interviewee. It was about 10-15 lines of  JavaScript printed on a piece of paper. Handed to me during the interview and I was asked to describe how it worked. Speak it out aloud. No right or wrong answers. And we discussed it as we went. 5 minutes taking across a table. I missed something and we discussed it.

That’s how you test someone.