Interview assignment for backend engineers
This project is designed to help you understand what working at Chords is like, with a realistic set of problems that are relevant to our product. It also affords us some common ground to discuss candidates.
The guidelines are relatively open-ended. We want you to use the time to showcase your passions, skills, and experience.
You will create a server with a database connection that is robust and self-healing in the face of failures.
These are just a few of the things you will use during the project:
Tool | Purpose |
---|---|
GitHub | Source code storage and version control |
hapi | Node.js framework for creating web servers |
Inert and/or Vision | Render pages on the server |
You choose the database. Some reasonable options are RethinkDB, PostgreSQL, CockroachDB, and Firebase. However, you can use any database you want, as long as you can explain why it is appropriate and how it helps make the system robust.
You will create an API service, using hapi and other tools, to provide data for the Chords frontend. At a minimum, there must be an API endpoint that returns a JSON list of fans and artists, with data for user profile pages (e.g. name, age, location). You may decide what the data looks like from scratch.
Importantly, this service must be extremely resilient to various kinds of failure: network outages, unexpected server reboots, developer mistakes, deployment issues, etc. It must also automatically recover from these situations where reasonable.
Host the service on your favorite cloud provider (e.g. now.sh, AWS, or similar). You can use a tool like Localtunnel to share a local instance for demo purposes, which is useful in case you have any questions early on.
If you want to demonstrate some other skills, here are a few ideas to improve the app.
- Provide other API routes that might be useful for music streaming, saving/updating data, etc.
- Make a programmatic API client that could be used to build a frontend GUI
- Write tests with AVA or similar test frameworks
- Use other tools from the hapi ecosystem (e.g. lout generates route documentation)
- Enforce high-quality code style by using XO and Tidy
- Create a new repository.
- Do the assignment work.
- Commit your work:
git commit -am 'Add some things'
- Push commits to GitHub:
git push origin master
- Send us the link to your repository.
We highly encourage you to reach out to us with questions. We do not expect everyone to be familiar with every facet of the assignment. This is a collaborative effort and discussing it may lead you to new, innovative approaches that we have not considered.
We would love to hear your thoughts about this assignment, both before and after completing it. We embrace change and aim to continually improve.
Copyright © Noirdoor. All rights reserved.