Three rounds starting with CEO for cultural fit / product interest (30 min).
Afterwards gave technical take home challenge
github.com/matter-app/take-home-exercise-backend (3-4 hours of coding)
Second round: Zoom with CTO (2 hours)
Introductions, background, live coding exercises
Third round: interviews with team (6 hours 30 mins)
- Head of Design
- Back-End Team
- Marketing & Content Team
- Design Team
- Front-End Team
- CEO Wrap-up
Take home challenge is a simple GraphQL implementation, in order to pass you
need to implement GraphQL resolvers/mutations and add test coverage for the
project. They are looking to see how you would normally ship to production with
this challenge.
Live coding exercise with CTO emphasizes implementing javascript functions,
discussing closures (make sure you can recite the proper definition), and
implementing a polyfill for Array.prototype.map(), pretty straightforward.
System design problem with Back-End Team: Talk through the design of a public
API that returns a unique ID and ensure that all values returned by the API are
unique over a period of 30 years. The API needs to be able to handle 1 billion
requests per second (1 request per nanosecond) with <= 200ms response
times. Ensure you ask questions to further specify requirements for
service-level agreement, the exercise relies on the CAP theorem concepts. You
will need to talk through how a distributed solution can be built to handle
these requirements and how to partition the problem space and value space across
nodes. The value space comes out to 9.4608×10¹⁷ so a standard GUID will work.
Additionally describe how to handle node restarts while still providing truly
unique values for every response. This can be done by assigning unique values to
nodes and appending those values to the responses returned from the nodes to
partition the value space. Restarts can be tracked by some counter variable on
the node itself that's incremented and appended to the unique node ID.
System design problem with Front-End Team: Talk through how you would handle new
requirements for the given take home exercise. Adding comments to tickets,
adding likes to comments, adding any number of reactions to comments and
connecting the prospect of what particular users of this system have interacted
with tickets/comments and how that would be represented on the front-end. From a
GraphQL perspective this exercise is simple in that you will be defining
typedefs/mutations for new entities and the front-end will be doing most of the
work in defining the queries. This was admitted during the interview to be
a poorly formed exercise from a GraphQL perspective as most of the work would be
on implementing front-end queries so hopefully they revise this portion of the
interview loop.
Overall the team emphasizes cross-collaboration so make sure you emphasize that
aspect in all of your interactions. During the final wrap-up I was asked again
about my current compensation and I stated again that I was not comfortable
giving any specific numbers but I was open to all offers and flexible.
Unfortunately the CEO became flustered at this point and mentioned that he
"hated doing this aspect of the job and just wanted to get back to
designing/developing the product". Understandable but that response certainly
caught me off-guard since hiring great candidates for their growing company
should be a top priority in the eyes of any startup CEO for ensuring success.
Chalk it up to lack of experience in the role? I'm not sure if being vague in my
salary requirements would have hurt my chances at an offer. Otherwise the rest
of the process was enjoyable and I connected very well with people from various
different roles within the company and performed well in the technical portions
but ultimately was dropped after the final round.