How code judgement platforms ruin the Engineer’s interview
It is untold since when did most of the software engineer’s interview become LeetCode oriented (or equivalent code judgement platforms). This blog is debate / brainstorm whether we should still employ such platforms as a medium for evaulating candidates.
it is FAIR ???
Supporters mention that by applying a non-human interacted code judgement platform would eliminate any possible human emotions on the candidates resulting a more fair interview.
If that was the initial goal… then it just failed at the first step~ Yes, some code judgement platform provides a scoring sheet / mechanism to rate the submitted code which seems fair. However, if eventually we still need a human (the tech lead responsible for the hiring process) to have a final read of the code, then is this still a fair interview? Is it still eliminating the human emotion factors on the candidate? Simply there is still a human controlling who would win~
this is the best algorithm for resolving the quiz ???
Usually the quiz (for candidates to solve) is created by an experienced software engineer, he/she is also responsible for providing the solution and the scoring sheet (or marking scheme). By then everything is configured within the code judgement platform and ready to be run by candidates.
Again, everything sounds very logical and also emotional-free. However there is a doubt here… the experienced software engineer for sure is a guru on the quiz and its resolution algorithm, but then is it the best? Take an example, most programming languages have “for-loop” support, however in recent years, a new “foreach” approach is also available performing nearly the same functionality. Now the question is… if the scoring sheet ONLY accepts “for-loops” and NOT “foreach” simply because the experienced engineer does not like to use the syntax… is the candidate’s algorithm (using foreach in this case) a BAD one? Hm… so the human emotional factor is back~
Do remember that programming is a process to boost your creativity in order to solve a business problem, there are many ways to achieve the same goal. Hence it does not make sense to train software engineers to think and act in exactly the same way~ If all we need is a factory of the same soldiers, then probably we should just develop Artificial Intelligence and eliminate all engineers’ jobs.
are you a genius or a fool ???
Though it is uncommon, but we probably meet 1 or 2 genius in our work life. Sometimes it is very challenging to understand what a genius is trying to solve in the code. Take an example, we might code normal mathematical operations with the +- / * operators, whilst a genius might be using 1s compliment or bit-shifting to handle such. Again, if the senior engineer who is setting the quiz do not understand the genius’ code… does it mean he/she is a BAD candidate of choice? A big question mark indeed.
PS. The story of Google mentioned that co-founders Larry Page and Sergey Brin willing to sell their PageRank System (the algorithm) to Yahoo! in less than 1million$; however was rejected by Yahoo! The tale tells us that genius perform differently to solve the same business problem and hence if the receiver (in this case, the company hiring) does not appreciate due to it is an unknown algorithm or approach, this would end up in a big loss.
integrity and complexity are the best duo ???
Supporters usually prefer to hire engineers that share a similar mindset in development skills (the technology and algorithm involved). True — it is the most efficient way to build a robust team for devloping systems in a tight time budget for which the team’s integrity is the core element.
Let me share a real world experience on what actually happened… I was working in a small development team to handle a relatively big software development project. LeetCode was employed as the platform for hiring new recruits — more workforce to speed up the development. Within 2 months, we hired 4 developers (junior x 1, senior x 2, architect x 1) each passing the LeetCode at a very high score (the architect nearly scored perfect). The architect was responsible for building frameworks on the system and he included a lot of design patterns which fits with our LeetCode quiz / requirements. There is no doubt his design was flawless; however the implementation had increased a lot of complexities…
The above is a over simplified architecture diagram about the project; interesting point was in case the DAO needed an update on fields, then every corresponding layer above it needed to be updated on the change as well. So it involved 5 layers of code change… for adding a new database column controlled by the DAO. Plus we needed an “integrity” strong team to develope the project, hence everybody needed to follow the blueprint and code at least 5 layers of code performing just a database retrieval action.
The lesson my team learnt — we could hire a leetCode expert and have a very good theoretical design; but the design could be over complex instead of flexible (flexibility was the original goal for a design though). Integrity is also essential but sometimes we need to strike a balance between it and flexibility as well.
do you code like that in your routine tasks ???
Sadly… we study so hard for algorithms and stuff during interviews but in real-life we NEVER even use 1 of them?! If we were still in the academic field, developing super efficient algorithms would be a nice thing. However in the fields, speed and efficiency are the 2 major factors to drive code development. If we could meet an efficient algorithm, that is great~ If we can’t, let’s just code it in the simplest way (not saying that design patterns are worthless but at least trim them down to a suitable degree and not adding overheads)
So again… what is the point to imply code judgment platforms and the approach to hire engineers then???
Though I am muttering so much about the platforms and the approach in engineer recruitment; by today I am still checking leetCode (or equivalent platforms) before I make a switch in the career~ The reason is lots of well known software companies have already adopted this approach. No matter you like it or not, this is the only way to get through the 1st technical interview round.
Gone were the days when a face2face interview is run and let the hiring person really knows the candidate instead of using a cold platform to judge whether the candidate is worthy for the 2nd / 3rd round of interview. Maybe in the coming years, Artificial Intelligence would replace most of us since machines won’t complain about factory-style coding patterns, in sacrafice of creativity which is what humans should foster and nurture.
Side Story — having the platform can make sure everything is fair???
A few years ago, a team in my company is hiring senior software engineer. I take a try and this is what happened:
- gone through 1st round of HR interview without issue (since I am already working in this company)
- 2nd round is leetCode challenge; I perfectly finished the quiz / challenge within 1 hour (official time is 2 hours). All edge cases are resolvable and I don’t see anything done wrong
- being rejected just after 1 day of code submission, without a VALID reason
I requested to know the reason from the HR and the team’s technical lead, as the leetCode challenge is done without an issue (the technical lead also admit that nothing goes wrong and all use cases resolvable by my code). After a month or so, the new hire joined the team. Later on I found out more “traces” on my failure…
- the new hire is a friend of “somebody” in that team
- there are only 3 candidates in total to battle for the position, 1 is out after 1st round of HR interview; hence only me and that new hire left
- as heard (can’t justify how accurate is the information), the new hire didn’t score well in the leetCode challenge; plus the works coded by the new hire was not reaching a certain standard, alas the new hire got promoted recently
even if there were a non emotional code judgment platform, as long as there is a human to make the final decision, suppose nothing could be fair. Then once again… what is the point to pretend “fair” whilst it wasn’t?