Elchemy Interview Coding Exercise - Contact CRM Assignment

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

You have to build up a simple customer contact CRM application. You have the freedom to implement the design of things on your completely.

The major required functionalities of the application are:

  • User Login and Registration - Also include user verification through email functionality(if can be done quickly)
  • Customer Information Screen - View/Add/Delete/Update Customer information(Name, email, phone, address, GST No., frequency of automated reminder)
  • CRM Screen - For each of the customer, a contact screen has to be made where the user can see the history of past communications. He can add the communications made with timestamp information, conversation information. Also there should be a functionality to directly send mail to the customer from the app itself(fetch the email of the user automatically from database)

Framework

You are free to use any framework of your choice for Frontend, Backend and DB purposes. The purpose of this assignment is not to judge your familiarity with a particular framework but to understand your though process and how you approach problem solving.

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.