Elchemy Interview Coding Exercise

What to expect?

We understand that your time is valuable, and in anyone's busy schedule solving these exercises may constitute a fairly substantial chunk of time, so we really appreciate any effort you put in to helping us build a solid team.

What we are looking for?

Keep it simple. Read the requirements and restrictions carefully and focus on solving the problem.

Treat it like production code. That is, develop your software in the same way that you would for any code that is intended to be deployed to production. These may be toy exercises, but we really would like to get an idea of how you build code on a day-to-day basis. Do not try to overdo things by focussing too much on the design aspect. Keep in mind that you will be evaluated mainly on the basis on functionalities.

The Exercise

Your job in this assignment is to build a playlist feature in the application that helps users save music. You are required to implement the following features in the application -

  • Create, delete and list playlists
  • Add and remove tracks to a playlist

We believe this will serve as a good basis for you to show your problem solving skills and describe your reasoning and decisions.

To help you get started we have set up an application that lists some of the tracks from a database and displays them on a page. You can then extend upon this application as you see fit to build your feature.

Instructions

  1. Clone repository
  2. Setup a new private repository with the source code
  3. Create a new python virtual environment with Python 3.6 or higher
  4. Go to the service folder and run pip install -r requirements.txt and run the Django application (python manage.py makemigrations -> python manage.py migrate -> python manage.py runserver)
  5. Go to the client folder and run yarn start. If you do not have yarn installed, please install it now.
  6. If everything goes well, you can check the backend API at localhost:8000 and frontend will be running at localhost:3000, as shown below ->
  7. image
  8. Code
  9. Push your solution to a new branch and reach out to us

Bonus Points

If you want to add extra features or explore something you’re passionate about, we encourage you to do so, but we want to point out that we’re not evaluating you on the amount of time you have to spend on an assignment like this.

If you do want to extend upon the list above, there is more data returned from the API than what's being currently displayed.

Some inspiration on extra features:

  • Reorder tracks in playlist
  • Filter and sorting of tracks
  • Display waveforms
  • Users and permissions

Again, this is not required. We respect that everyone has different amounts of time to put on something like this and we evaluate accordingly.

FAQ

How will I be evaluated?

You bring in your solution and get to walk it through with us. We use this as a starting point to have discussion. We want to understand your reasoning and depth of knowledge. As a rule the discussion is more important than the actual code. Also no one is an expert at everything so this also helps us understand your strengths as well as areas of improvement across the stack.

Some of the things we will look at in the evaluation:

  • Code quality - How you reason about making sure code is readable and maintainable.
  • Performance - How you can identify performance bottlenecks and reason around solving them.
  • System design - How you reason about concepts like reusability, separation of concerns and various abstractions.

In this we also try to understand how you solve problems generally and how you communicate your solutions. Problem solving and communication are both things we value highly.

Why did you pick this stack?

This is the stack that the majority of our platform is written in. We definitely don't require you to be an expert in this stack and we are more interested in your knowledge of building web applications in general.

Can I change things in the existing code?

Yes please! We would love to hear what you think are some of the things that we can do better.

Can I use additional libraries/frameworks?

You're free to use whatever you want. The important thing is that you can explain why you made the decision. We would recommend sticking to the basic stack however (Django + React).

Something is ambiguous, and I don't know what to do?

The first thing is: don't get stuck. We really don't want to trip you up intentionally, we are just attempting to see how you approach problems. That said, there are intentional ambiguities in the specifications, mainly to see how you fill in those gaps, and how you make design choices.

DISCLAIMER: This exercise was shamelessly copied from the Epidemic Sound Assignment with some changes as it was well written and was a quality assignment. It reflected the effort put into the hiring process by the Epidemic Sound team.