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:
- The persona assessing me (I can infer their experience as well as their personal motivations).
- What the organisation is potentially looking for,
- Laziness in the organisation’s recruitment process. Say what you want about “efficiency” in hiring, but this speaks to laziness.
- 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:
- “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”. - 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:
- 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.
- It’s a complete React app. Even with
create-react-app
it still takes time to build one. - I’m new to React and only just [finally] getting into ES2015, so I spent some time with reference material open.
- I’ve never worked with the Jest test framework.
- 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:
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.