How to outperform your competition in take-home coding challenges
Like it or not, your hiring process will most of the time involve take-home coding challenges. You can either perform poorly in it or excel. With the steps in this guide, you can surely outclass your competition in any take-home coding challenge. Follow on to find out how:
What are take-home coding challenges?
A take-home coding challenge is a mini project or a small task that your prospective employer gives you to do for assessing your technical skills and knowledge. You are given a task of generally moderate complexity and that can be finished over a weekend or a similar amount of time.
There are other ways to assess your technical skills in place of take-home coding challenges. One of them is a timed coding challenge on HackerRank or similar websites.
In my opinion, another effective alternative to a take-home coding challenge is pair-programming on a task.
Coding side-by-side (or virtually) on the same task can give much better insight into the thought process. It also presents more opportunities to make the process more collaborative and less scary.
You, me, and many other software engineers have done one or more of these take-home coding challenges in their search for a new role or their first role. Let’s look further at how you can outrival your competition:
What is being assessed?
With a take-home coding challenge the main thing that is being assessed is if you can write code as per the company’s levels and standards. Because you are given ample amounts of time, you are expected to provide a decent quality of output.
On top of it, the decisions you are implying in the form of code is also being evaluated. You are also being analyzed on how well have you followed the instructions.
If a take-home coding challenge clearly instructs you not to use an external library and you still use it. It is pretty sure that you will fail it and not proceed to the next step.
Another aspect implicitly being assessed is your written communication ability. How you write a clear and concise readme will also play a vital role to move you forward in the hiring process. So think about these things before submitting your solution. Make a small checklist of the steps below, that will definitely help you.
Time to go to the steps that will help you outshine your competitor in take-home coding challenges.
Steps to outclass your competition in take-home coding challenges
Now it is time to know the steps you can take to excel in take-home coding challenges leaving your competition far behind.
Limit the scope and time investment
It is important to know what to do for a take-home coding challenge. It is crucial to determine what not to do for the challenge. You have to be realistic and practical.
Set aside a definite amount of time to complete the task. Then analyze what can be done in that time limit. Similarly, make a list of things that cannot be done and/or can be done better for your take-home coding challenge.
Limiting the scope gives you the leverage to perform very well in the things you decide to do. This is where you can blow away your competition.
Other candidates will try to do lots of things. This equates to learning multiple things within the deadline of the take-home coding challenges.
That will most likely result in low-quality output or late delivery. This is one of the most important things you must have that early advantage over your competition.
Plan and do step-by-step pull requests
By this point, you know what to do and how much time you have allotted for the take-home coding challenge. The next logical step is to plan. Break down the whole task into smaller parts. If you can, put an approximate time on each task it would be great. First, solve the problem, then write the code. Break the task into smaller parts to make it easier to plan then execute.
Once the take-home coding challenge is broken down into smaller chunks, start with a basic readme. Then open a pull request for it.
After that, start coding and make sure to commit logically. As soon as things are working make a commit. It also enables coming back if you mess up anything going forward.
Below is an example of the pull requests I made for a coding challenge:
Keep your pull request small. Work as if you are working in a team and review your own pull requests. Step by step PRs and logical commits will help you outdo your competition. This tells the evaluators a clear story of how you reached the solution.
Write automated tests
Generally speaking, a take-home coding challenge won't specifically ask you to write tests. I would recommend investing a bit more time and write tests.
If you can write automated unit tests first using a TDD approach. If you write tests after code that's fine too. The main point is to have automated tests and know the test's code coverage on the take-home coding challenge.
The focus must be on writing clean and meaningful tests. This will automatically shape up your code to be much more readable and maintainable.
If you sprinkle up some CI/CD goodness on top of tests, it will give you some extra brownie points.
Also explore other forms of automated testing like mutant testing or some integration/end to end tests, if you have time. This will help outperform your competition. It will also indicate to the evaluators that you know your craft well.
Similar to the above point, using Docker can give you another advantage while doing the take-home coding challenge. Docker's popularity has exploded in the last few years. It has also changed the way we software engineers work.
With docker for the development environment, you can easily use the needed version of the language/framework for the take-home coding challenge.
It will also make it far easier to try and test your solution for the evaluators. If they try to run the solution on their machines you will get a better chance to be advance to the next step.
A dockerized app not only makes it a breeze to deploy, it also gives you an edge as some of your competition will not bother to use it. You could easily deploy your web application to say Google Cloud Run if you dockerized it. With a working URL, your final output will have more chances of being checked and commented on by the evaluators.
Write a killer readme
Last but not least, having a stellar readme makes a big difference. As software engineers, we are usually good at our technical skills. Conversely, we don't generally excel in communication. This is where writing a clear and well-structured readme plays a crucial role.
You will want to know how to structure a readme, below is part of a readme I wrote up for a take-home coding challenge.
The readme format below is tried and tested as I was called in for an interview. This worked very well.
You can read the full readme to get an idea of what to write in a readme, how to structure it, and how to write it. I think the “Decisions and Tradeoffs” section was one of the most important sections of the readme.
Some other things to be very mindful of:
- Don’t make the evaluator think and search, make the main parts of the coding challenge obvious and linked in the readme.
- Explain how you came to the solution, brief your thought process
- Be clear of the scope you covered, as you are not expected to do everything in the given amount of time
- Always mention decisions and tradeoffs you took to complete the take-home coding challenge
- Also, be clear about things that could have been done better, but it was not done due to reasons like time availability.
Even as an evaluator of take-home coding challenges, I have seen many candidates write up a poor readme or they don’t include it at all. It just decreases your chances of getting a fair review. That results in friction for you moving forward to the next step of the hiring process.
Bottom line: write a killer readme and blow your competition away :).
Needless to say, you absolutely must read the take-home coding challenge description at least twice. This will help you understand the problem space and what the evaluators are expecting from you.
Another ultra-important thing is don’t mess up the basics. For instance, name your variables appropriate to the context don’t name then a, b or i, and j. The same goes for your function names.
I have been on both sides of the table, a candidate as well as an evaluator of take-home coding challenges. You will need to balance things well so that your application moves forward smoothly.
“A user interface is like a joke. If you have to explain it, it’s not that good”. — Martin Leblanc
Without doubts, the same things can be said for code, if you need to explain your code to someone you are not making it simple enough. This becomes paramount as the evaluator will check the code without you on the side so be mindful of this too.
I hope these steps and tips will help you ace your next take-home coding challenge, best of luck!