You are a software engineer/developer/programmer, and you applied for a position. You got the call, and they want you to do a take-home assignment that will showcase your skills and the way you tackle problems.
If you want your assignment to stand out from all the other candidates, you got to the right place.
I’m Elia, and I’m a senior software engineer. Lately, I’m reviewing a lot of candidates and their assignments. I also interviewed for many places and submitted quite a lot of them myself.
During my interviews, I collected some tips for anyone who wants to take their assignments to the next level.
In this article, I will talk about 4 topics that will help you perfect your assignment:
1. Preparation, planning, and understanding of your project.
2. Implementation, selection of the right libraries, and frameworks for your project.
3. Testing, making sure everything you build is functional and bugless.
4. Going the extra mile.
I’m basically more Node, Javascript / Typescript, Full-stack app oriented, but I’ll try to be as much Generic as possible so everyone will benefit from this article.
Let’s start …
Preparation
First, you need to read your assignment PDF/doc several times, understand all of the functional requirements. Make sure you don’t miss any part.
In this part, I usually take notes, writing questions or points where I need clarifications, maybe even draw the components, just to visualize the whole system.
Once you understand the task, I recommend finding a similar solution online and finding out how they implemented it, what libraries and databases they are using. It will open up your mind to more possibilities that will help you in your decisions.
Understanding each solution’s weaknesses and strengths will give you a lot to talk about in your interview.
It is essential to ask your reviewer some questions. Often, the assignments are a bit vague, and there is a place for you to decide upon some assumptions that needed to be taken. I’ll give an example.
Let’s say one of your requirements is to create a user login. You should ask yourself some questions, e.g.:
- Should it be persisted to a DB?
- If yes, can it be In memory? what type of DB should I use?
- If no, can I use hard-coded values? Should I save it to a file?
- Should it be secured? How should I save the credentials? Should I use JWT?
Getting those clarifications from your interviewer might save you a lot of time.
I reviewed some assignments that used DB with Secured token and many configurations to make it running, and it was not needed at all. It was also evident that the time spent on those things lead to other important features not work well. Time is crucial here. You don’t have too much of it.
Implementation
After you gathered the information you need to start implementing your assignment, I would recommend spending some time choosing what libraries and frameworks you want to use.
Most of the time, you’ll probably have 2–3 choices of the most popular libraries for each functional requirement that you’ll need to implement.
Pick the one that suits your needs. If you have one library that you are familiar with, I’ll go with it. It will save you some time and effort learning how to use and integrate with it.
Write down any pros/cons of each library you are choosing. Be prepared to be asked, “why did you pick this library over that one.” show them that you think of every decision you make and not just copy and paste some random GitHub examples.
Don’t implement everything by yourself. If you can think about it, there are probably tens of libraries already doing this, and much more (probably also better). Try to focus on the main project and not building everything by yourself.
Now you know what and how you are going to implement, search for best practices for each language, library, and framework that you are going to use, find examples and go to their docs, see what folder structure will be right for you, naming conventions, folder structure, etc.…
It is also important to be consistent with your code, make it uniform as much as you can.
Those things will show that you are well organized, and your code will be more familiar and comfortable to read by the ones who will review it.
Testing your code
Testing your code is essential. Start with testing your app’s primary usage, then try cases like null, undefined, empty objects, errors, authentication, and whatever you can think can break your app. Let your friends test it and get some input from them. I’m sure they will discover some things you didn’t.
Once you did that, you should start writing your crystal-clear Readme file.
Delete all of the caches and modules that you installed and start a fresh copy of your app. make sure that your Readme provides everything that is needed to run your app that includes:
installation, usage, environment vars, secrets, both for your client and server (if you have them).
I will also strongly recommend you deploy your app to some free hosting service like Netlify/GitHub pages/AWS/Firebase.
I saw many problems with some candidates’ implementations, missing environment variables, and using locally installed DBs, libs, and tools.
All of those will lead to the point where your reviewer will not be able to test your code. Deploying it will make sure that nothing is missing.
Going the extra mile
If you got this far, you are probably good to go, and your assignment is ready to be reviewed. Creating your own template out of this code will help you with your next interviews. It will save you a lot of time for future assignments as you will probably use some of the libraries and language you used for this assignment. I created one template myself and used it quite a lot for tasks and personal projects.
Here is a link for my template (React, Node.js).
You can add many things to your project that will grant you extra points and impress your reviewers.
I’ll give you a list of some enhancements to your project, I guess some of them will have to be implemented, and some are just extra things that you should implement if you got the time.
- Unit/Integration tests (will also add quality and structure to your code).
- Client-side validation.
- Serve-side validation.
- Proper error handling (server + client)- you must implement it at a basic level.
- Component library (Material UI, ANT Design, etc.…)
- Responsive design will showcase your frontend skills.
- Monorepos- I would recommend using a monorepos structure since it will be easier to build and run the app from a single point with fewer instructions.
- ORMs
- Environment variables- a must-have for servers (if needed).
- Typescript, in case of Javascript usage.
If you don’t have enough time to add those extra features, you can always talk about it with your reviewer during the interview and explain that if you had more time, you would add this and that…
I hope that you’ll get the best out of your assignment and nail this interview.
Best of luck, Thanks for reading.