Last year, I wrote some blogs explaining how the hiring process for Software Developers is bad.
- Recruiting Graduates #1: Discussing how to make a good test
- Recruiting Graduates 2#: The Job Advert
- Recruiting Graduates 3#: The Questions
- Recruiting Graduates #4: The Applicants
- Recruiting Graduates #5: The Induction
General Summary Of Why The Software Developer Hiring Process Is Bad
When I was involved in trying to come up with something better, I was frustrated because I didn’t have the answers, but I felt everyone else involved didn’t understand my concerns.
I hate the way Tech Interviews and tests currently are, but I think it’s hard to come up with something as a replacement. When researching example questions, I see lots of questions along the lines of “who invented Object Oriented Programming?“, and I think “I don’t care“.
Then there’s loads of aspects that you would just Google if you didn’t know it e.g. memory usage of each type.
Or you may get questions like “what is wrong with this code?“, but if you actually pasted that code in Visual Studio and try and build it, you would see the error. Or in the case it is valid but not advisable; Code Analysis would flag it. Some of these can be trick questions like mathematical logic where the order of execution is ambiguous, but Code Analysis would definitely flag to tell you to add brackets, so it’s silly having these as a question.
Then I hate all the generic Fizzbuzz stuff (check if a number is divisible by 3 or 5, or even both). These are just so cliché that people could just learn from memory anyway.
Also, what do these graduates we are targeting actually know? back in my day, I knew Java but I was terrible and didn’t know how to test properly, or even debug. So there’s no point testing them on that either.
Stupid Questions From The Internet
During our meetings, I asked the team how they were coming up with the interview questions, and they said they were just Googling for C# Interview questions. This is problematic because applicants may have read and learnt from these very sites, but also many sites had terrible questions, which were sometimes incorrect.
I came across this website:
https://www.includehelp.com/mcq/is-the-use-of-return-statement-necessary-in-every-function-in-csharp.aspx
95. Is the use of return statement necessary in every function in C#? Yes No Answer: A) Yes Explanation: Yes, the use of return statement is necessary in every function in C#.
I think some programming languages may differentiate between “methods” and “functions” where “functions” always return something. But in C# you just call them “methods” which can either return something, or be defined as “void”. So this is just incorrect.
99. Which is the first line of a C# program? using System; using system; using Namespace; namespace MyApplication Answer: A) using System;
If you create a blank class, “using System;” is the first line, but A) you could remove it B) the order of using statements matter C) in modern C# you could move it to a “global namespace”. I also asked the question of “who are we targeting?” because everyone was coming up with C# specific questions. My colleagues told me the universities we were targeting were primarily coding using Python! So we were writing the wrong test, or targetting the wrong people.
The Performance Review
In my recent performance review, my manager Colin stated:
“You were given an opportunity to lead on defining our interview process, but have not shown much interest in it. Ultimately someone else led it, creating the interview pack, redefining interview questions and leading live interviews, which I think is a missed opportunity to shine.”
Colin
I argued that: although I didn’t have a huge impact on the end result, it would have been a bigger mess had I not pushed back on some of the questions. Although it seems some of the interviewers still asked questions I said weren’t suitable.
We ended up coming up with a terrible process that some candidates dropped out of, and the ones that went through with the interview struggled and we were left with the decision to gamble based on what little we saw.
The Best Hire
One of the best hires we made was someone I didn’t interview, but I looked at the interviewer’s notes, and he didn’t exactly look like a strong hire.
- Implemented the basic application to consume webapi and just printed the values based on some predefined values
- No unit testcases were written
- application is simple
- Inheritance – simple explanation
- polymorphism – no idea
- interface – not good explanation
- purpose of inheritance – No idea
- Print the numbers and its occurrences – Not completed, but after showing the hints he completed
- Print the number from 1 to 100 using Recursion – Completed
- print the numbers based on divisible values – Completed
- Logical, cut the cakes into 8 pieces with 3 cuts – Completed
- Candidate lacks on syntactically at some areas, but has some logical solving skills and good attitude on approaching things
When I stated to Colin that it “wasn’t a great batch of hiring”, Colin said out of the people we did interview, we ended up hiring around a third of them – which he said was above the normal hiring rate. I said that it was only above the hiring rate because we hired people that should have failed. Then later, he quoted the numbers “15 interviewed. 4 hired” (more like a quarter then). But there were loads of applicants rejected before the interview stage, and others dropped out along the way.
Intermission: Bantz from Twitter
The Polymorphism question
The Polymorphism question that was asked on some of the interviews was basically “do you know the types of polymorphism?”
I didn’t even understand the question, and I probably have 10 years of experience.
I was only thinking about the usual polymorphism where you can refer to derived types as the base type:
IAnimal animal = new Dog();
animal= new Cat();
To check if I wasn’t going mad, I asked some of my colleagues. Here is how they responded:
“not sure i do, no. Inheritance and Composition, are they right?”
Dean (Senior Developer around 10 years experience)
Like covariance and contravariance? But I don’t think I could put it into words. I guess you have real polymorphism and fake…virtual functions have a virtual function table that map overridden functions from base classes. But a lot of polymorphism is just the compiler being intuitive and going “you’re not crazy” it can be treated as that type.
Adam (Software Architect)
Types? an interface can be implemented many times. A method can have the same sig but different parameter types etc
Rob (Senior Developer around 20 years experience)
According to https://www.bmc.com/blogs/polymorphism-programming/, there’s Runtime, Compile Time, Overloading, and Casting. So if very experienced developers can’t explain the concept, then why are we using the question to target Graduate developers?
Conclusion
It annoyed me that Colin stated “have not shown much interest in it”. I was trying to make sure we had well-defined objectives on the exact type of developer we were hiring. Everyone else just started copying questions for the internet without considering the knowledge and experience of the people we were targeting. I didn’t have the solution of how to make a good software development hiring process, but I really wanted to make sure we got close – but I just didn’t have any support from everyone else that was involved.


