Some background

At Wildbit, we believe that the hiring process should reflect the real day-to-day work. We grant our engineers a large degree of trust and autonomy — for many projects, the end goal is clearly stated upfront, but how you arrive at a solution is open so long as it fits into our overall software design practices and architecture paradigms. As such, this exercise is meant to be relatively open-ended.

We strive to deliver software that fits the characteristics of a Twelve-Factor App. This primarily means that we make our best efforts to follow standard software practices when it comes to maintainability, extensibility, efficiency, and scope. Writing the code is definitely a large part of what this role entails, but equally importantly, the ability to demonstrate a pragmatic and thoughtful approach to software design and architecture is also expected.

Goals of this exercise

We want to see your approach to problem solving. We would like you to take this prompt, outline how you would break out the work, and show off some of your coding and architecture skills. Semantics and code correctness will be taken into account to a degree, but overall approach and structure is what we would rather you spend your time on.

We respect your time and the commitment you are making to interview with us, so we ask that you try to time box your effort to the recommended amount. This exercise is not designed to be completed in the recommended time frame. We are assessing for quality and depth of thought, rather than completeness of the prompt. Please get as far as you are able to, and we can discuss where you would want to take it, given more time.

Time frame: 2-3 hours

Language/tools: C# is preferred, but use what you are more comfortable/fluent in. Please include a README, if needed.

The problem

The Postmark product has primarily focused on the delivery of transactional emails. We recently expanded our product offering to support more and different types of messages, specifically processing bulk email. This change in our product requires a number of adjustments to how we currently handle email deliverability, given the increase in overall volume of messages we need to send, as well as the characteristics that differentiate transactional and bulk emails.

For the purposes of this exercise, we would like you to design a basic message routing service that is responsible for intercepting all email send requests, categorizing each according to some business logic, and routing the emails to the appropriate sending pipelines based on that business logic.

Boundaries of this service:

A complete solution to this prompt should include the following: