Centriq - Senior Software Engineer
I worked atfor two years, from April 2018 to April 2020, as a senior software engineer focused on the backend services.
Centriq's mission is to help people better use, maintain, and repair their products at home. Organizations spend a lot of resources trying to sell you products but abandon you once the purchase is made. There are a lot of opportunities to improve the post-purchase experience.
When joining the company, I noticed that our deployment process for the backend services was not repeatable and therefore error prone. I implemented a tool in Clojure to automate the deployment of our complete infrastructure to a new AWS environment: creation of the AWS resources, setup of the continuous integration pipeline, setup of the monitoring dashboards...
Developers were also lacking visibility on the state of the backend services. Monitoring and debugging was done by tailing textual log files in production. I created a generic event system (inspired by Cognitect's Ion cast library) to simplify the monitoring code in the services. I integrated this system with CloudWatch and Slack to build a complete solution to alert, monitor, and troubleshoot our production systems. The monitoring of the backend services revealed several issues that we were able to troubleshoot and fix before they impact our customers.
An important cost center of the organization is the management of the content database. We need to continually monitor what products our customers add and find content for it. This process was done manually. I implemented a data ingestion pipeline in Clojure in order to import new content from third-party services and databases, effectively doubling the size of the database with minimal human intervention.
Applications like Centriq require to communicate events to the user on different channels: in-app notifications, mobile push, transactional emails, digest emails. Some events also need to be sent to the operation team through Slacks. When not designed properly, this kind of features can quickly clutter the code and make the application hard to maintain. I designed a uniform event notification system by decoupling the publishing of the application events from the event handlers for each channel.
Theapplication is used and loved by thousands of users. However, those users tend to be super organizers and we were stuck in this niche market that was not sustainable financially. I proposed the introduction of a new product more appropriate for mainstream use. The proposal was approved. I participated to the product design and engineered the backend service to support it. The application, , was shipped to the app store in 3 months.
Our emails were designed in a ad-hoc fashion. Each service was creating their own HTML. It was not possible to keep a constant design across emails or easily change them. I designed a library shared across the services to create emails that were responsive, compatible with most email clients, and following the same visual design.
I also shipped several new key features of the platform that were well received by our customers: daily and weekly digest emails, maintenance tasks and reminders, mobile push notifications, multi-tenancy support for the platform, new partner API.
I initiated several redesigns of some parts of our conceptual model. I wrote the article "Decoupling Requirements" about one of these refactorings.
Unfortunately, the COVID-19 situation made the prospect of raising more capital very unlikely and most of the engineering team has been let go in April 2020.