
Spread is Reasonable's email and SMS marketing platform, allowing clients to send both promotional email/SMS campaigns, as well as transactional email/SMS.
SMTP Relay Service
I was tasked with developing an SMTP Relay Service, to be used as another option for clients to send emails (the previous options being the web user interface and our API service). There was a strict requirement of being able to achieve handling 200 emails/second from the client, which was achieved through some of the following optimizations:
- Multiple worker threads running in-parallel
- Storing the received email to disk before forwarding it to our Postfix servers, to allow the client to finish a particular SMTP transaction without needing to wait for the response from Postfix, as well as keeping server memory consumption low
- Supporting horizontal scaling, so that multiple SMTP Relay Services can run simultaneously, supporting by load-balancing
In addition, background worker threads are responsible for reading the email files from disk and then forwarding to Postfix. Database updates were sent in batches, as well as being atomic due to the nature of having multiple services reading from and writing to the database simultaneously.
Spread Customer Journey
Spread Customer Journeys are a way for user to visually set up an email campaign by creating a dynamic flowchart. It supports creating pre-built Customer Journeys, as well as dynamic Customer Journeys. I designed and built the flowchart interface in Javascript, with Customer Journey verification and saving/updating happening on the backend.
SMS Gateway
I was responsible for developing the webpage GUI (for clients to craft their SMS), as well as the backend SMS Gateway itself.
The SMS Gateway was developed with Web API in ASP.NET (VB). Basic features I developed include SMS throttling (to prevent sending too many SMS requests/second to China Mobile), Hong Kong Do-Not-Call list support (as well as making sure the Do-Not-Call list is up to date) in order to prevent government fines, as well as authenticating the API caller.
Another application I helped develop alongside the SMS Gateway was the "SMS Service" (developed in VB), an always-available Windows Service that calls various APIs (including our SMS Gateway) to send the SMS. It supports sending SMS to Hong Kong, Macau, Taiwan, Mainland China, and various other international markets.