With the current market place in high demand for software developers, one would think that recruiters and employers want to send flowers and chocolate to developers. But I find that many corporations employ a different strategy. They send automated messages prepared with a ZIP file attachment of instructions for a code assignment. I often get these assignments sent to me even before a first interview which is a clue that the assignments have been transformed from being a tool for case-by-case introspection and assessment to being a 1st level filter for weeding out candidates on a massive scale.
As a software developer, I have been trained to do good and work hard. It’s time to slay the dragon and fight a battle for the benefit of us all, employers and employees alike. Therefore, I would like to elaborate on a few key arguments against the practice of code assignments.
- The morals of this setup are questionable.
- Completing all assignments sent to me is not feasible.
- The whole ordeal is actually counterproductive.
Each assignment without an exception make bold statements about the time it will take to complete it. In my experience, all of them make the claim that the time expense will be anything between 2 to 4 hours. This couldn’t be more wrong.
Any experienced developer can attest that at least a few hours will be spent setting up the project; writing build scripts, configuration files, defining modules/namespaces, dependencies, documentation et cetera. Then when your time budget is already depleted, the big task left is to interpret the requirements and adhere to them through the production of software; APIs, implementations, tests and hopefully even benchmarks to evaluate the performance of your solution. Repeat all of this one or two times until you are happy with the result.
I have in the past done a few of these assignments. At best I spent “only” a weekend. At worst I spent a whole week on a single assignment – which to this day I regret because that is time wasted I will never get back.
As a professional developer, I can not count all the software tasks I have performed to this day. All of my colleagues and managers agree in union with me that even the smallest of software tasks is at best 1 or 2 hours work. I would like to make the statement that the median time cost will be counted in one or two days of full-time work.
It is easy for the employer to send his assignments to hundreds of software developers knocking on the door. This translates to thousands of unpaid software hours taken out from the community.
The unfair time equation is not the only moral dilemma.
First, I can’t help to feel that despite my seniority and utmost highest respect for my craftsmanship, an assumption is made that I lack understanding or is not capable and therefore I must prove myself by happily working for the employer even before an official proposal has been made.
I have also seen how one or two developers on the employer’s team take great pride in adhering to high code standards and they will tear apart assignment solutions finding all the flaws. Maybe the solution had an undocumented method. Maybe a method did not use the algorithm the team discovered on Wikipedia when putting together the task. In fact, requirements not even listed by the instructions might magically become what rejects the solution. Pleads from the candidate that he deliberately made the solution as simple as possible to focus on key aspects is not taken in for consideration. Damage was already done.
Later that same afternoon, same developers commit code into the company’s repository that break every standard in the world. They have their excuses, of course. Legitimate or not. But holding outside developers accountable to a much larger extent than what is practiced on the inside is a form of elitism.
I must ask, where is the moral in this one-sided process?
Behold! I do see two possible solutions to the problem. First, the employer can reimburse me monetarily. Secondly, the employer can accept and complete the code challenge I send to them because evaluating each other’s software competence is a two-way street. I have yet to find an employer who accepted any one of my proposals.
Given the amount of assignments sent to me and the fact that each one represents quite a hefty piece of work, it is not possible for me to complete them. Even if I carefully cherry-pick which ones to throw myself into, I could easily spend every minute of my precious free time doing these challenges.
As a very passionate developer, I am always working on my own personal projects. Time wasted give me mental health issues. I have learned a long time ago that in order for me to be happy and to become proficient as a developer, I must invest my time carefully and with a sportsman’s discipline focus on reading and exploring new concepts in computer science. I am sorry, but I hate feeling miserable and I have zero time to waste.
What is the average software company looking for? A lot of ads out there will list every buzzword they can scope up. Some HR-departments will find and list misspelled buzzwords that are not even used in the organization. But, software-centric organizations whose success depends on the quality of their software engineers know that their technology stack is just as unique as their organization and software product(s). These stacks are not static. They change over time.
No matter how many languages or tools the ad enumerate, the person making employment decisions has long learned that a candidate’s 400 years of big corporation experience has less value than someone with the ability to pick up a new language and become productive without insisting on getting sent away to month-long training camps with paid dinners.
The point I am trying to make is that even though we are all advertising for a unicorn, we know that the unicorn does not exist and further more, a unicorn is not really what we are looking for in the first place. The qualities we are looking for is simply put it hard to test on a piece of paper.
I do not think code challenges are completely useless. I know first hand that code is like a painting. It does say a whole lot about the author! I have been on both sides of the table more than once and I like to think that I can separate between wannabes and gurus just by looking at someone’s code style and overall architecture. This does not require much code at all. But it does require open and explorative assignments that can be made very small in scope.
Code challenges adapted for the real world is far from being the norm in practice today. I have been asked to solve strictly mathematical problems slash puzzles using any language I want to. One assignment seemed to be a download of a psychology test. I was wasting time picking my favorite colors.
Bottom line is that a guru recognizes a guru instantly. We all share an unspoken bond. A desire to seek the truth, be honest and effective. It will not take a guru more than 5-10 minutes to properly assess a candidate over a live-coding/interview session using Skype. What is required is an employer willing to invest time and it requires of the employer’s developers to come out from the shadows.
I think most employers can attest that a successfully solved code challenge does not guarantee anything. Only time can tell if the candidate turned out to become a star member of the team. Also, I know by experience that it is likely not all members of the star team was recruited using a code challenge. The down side with a code challenge is that the recruitment process risk weeding out all the good candidates who already have full-time jobs and no time to waste. All for a very questionable benefit.
As an employer, you have all the right in this world to assert or reject my self-acclaimed credentials. With all the frauds going on in our line of work, you should take time and care to investigate whoever seek your paycheck. But let’s keep it real here. You have my GitHub link and you have access to a great deal of public code I have written. You can spend all day reading and evaluating my code. Furthermore, I would love to walk you through the code, architecture and solutions I employed in my most recent and private projects such as spending three years writing a complete live chat solution or the last two years I spent writing a financial app for generating and testing investment strategies. How’s that for a code challenge?
An employer may want to pursue the route of a programming task and hire the person with the least suckiest solution. I wholeheartedly respect this decision. I myself do not care much about the paycheck. I am looking for a software company that shares my values and can provide me with an environment for growth. I do not expect to be babysat and I want to believe that my future employer has all the in-house capabilities and desire needed to evaluate me without paper exercises.