Take-home Challenge Full-stack Assessment (Chat Server, 2-4 hours)

This is a sample interview question that can be used for a 2-4 hour take-home assessment.
Don't forget! Before you choose the right interview question and rubric, create a Job Kit. A job kit is your chance to really think deeply about who you want to hire, how you want to market the role, and how you want to find world-class talent.
Feel free to create your own take-home interview question and rubric off of the template below!
Create your own takehome assessment off of this template
This take-home is designed to let a full-stack developer showcase their skills. In this example, we are looking to primarily gain signals of their: problem solving and debugging, building a full-stack feature, and database design skills.
Before you start: reflect if these skills are representative of what is important to your role/job description. We highly recommend that you edit this takehome so that is more suitable for your evaluation needs. If you are looking for any specific skills, here are a few examples of how you would remove/add/modify tasks to gain certain signals:
This takehome challenge is designed to take between 2-4 hours.
To create a realistic working environment, where a developer would work on top of an existing code base and not always start from scratch, we recommend providing a starting code. This can either roughly represent the exact tech stack someone would work with on the job, or the option to choose from a couple of options (language, libraries, packages, etc.) so that developers can showcase their skills best with their tech stack of choice.
Below is the problem statement that can be shared with candidates. You can share by one of these options:
In this takehome assessment, we will be fixing a bug, implementing a new feature, and completing a database redesign.
Clone the project and familiarize yourself with the starter code. You can fork this starter code here: https://github.com/hatchways/messenger-starter. There are instructions on how to run the application in the README. Ensure you can run the application before moving on to the next task.
You will be submitting by opening a pull request. Please ensure you create and work on a new branch before you start.
Our starting code has some bugs that need to be investigated and resolved. One issue is that new messages do not appear immediately on the screen. We want new messages to show up instantly in the chat UI for both existing and new conversations. Additionally, messages are shown in the wrong order when the page loads. They should be displayed in chronological order, with the oldest messages at the top and newest messages at the bottom.
Cypress tests are included in the starter code for this ticket (bug-fix-ticket.spec.js). These tests should pass once both bugs are addressed.
Create a new markdown file at the root of the repository called bug-fix.md. Please share in this file the steps you followed to debug this issue. What tools did you use?
We want to keep track of whether the recipient has read each message, and update the front-end UI accordingly. This includes showing the number of unread messages in a conversation. To see the different updates required to show unread messages, refer to this Figma file (Note: The Figma file contains other specs not relevant to this feature).
Create a new markdown file at the root of the repository called read-messages.md. In this file, please explain a couple different ways we could have stored the read status in the database for this feature. What are the benefits and drawbacks of each?
To submit, open a pull request. This pull request should illustrate clearly what changes you made compared to the starting code.
After submitting, review the code and refer to the rubric. Based on that, you can use the results from this assignment in different ways depending on when you use it in the interview process. The usual options are:
Refer back to this rubric when evaluating a candidate to help determine if the signals gathered from the interview match your job requirements.
Correctness
Best Practices
Attention to details
Problem solving & Debugging
Code Organization Readability and Maintainability
Written Communication
Customize categories that would be important to evaluate for each level. For example it might be a higher priority to evaluate for strong written communication in a IC2 compared to IC1.
IC1 (”Junior” Engineer)
IC2 (”Mid” Engineer)
IC3 (”Senior” Engineer)
A follow-up interview is recommended to delve deeper into the candidate's understanding of their submission, particularly for those applying for IC2 and higher positions.
Want more take-home assessment questions and rubrics? Take a look at our free catalogue of assessments that cover full-stack, front-end and back-end roles.