Cognitect - Software Consultant
I worked atfor 3.5 years from October 2013 to March 2017 as a software consultant on Clojure and Datomic projects.
Clojure AWS SDK
I lead the initial design and implementation of the. Rich Hickey provided the initial vision and design guidance.
The surface area of the AWS APIs is large and the AWS teams decided to generate the SDK implementations from a collection of JSON descriptions. We use the same description to generate the Clojure libraries.
Most of the time, Clojure developers can reuse Java libraries as is. However, the AWS Java SDK creates a lot of custom classes for each service generating a lot of accidental complexity for the user of the library. One of the reason to create the aws-api library was to replace those custom classes by simple data. We also wanted to create an async first library.
As distributed software systems grow, the cost of integration testing skyrockets. The number of integrations do not grow linearly. One of the largest e-commerce platforms in the US contacted us to propose a solution to this problem for their backend services.
As part of a team of two developers, I built the front-end and back-end of a simulation testing suite. The purpose of simulation testing is to (1) model the user's behavior on the website, (2) generate test scenarios against the system's endpoints, (3) run the scenarios, and (4) validate the responses and states of the system during the execution of the scenarios. The application was built in Clojure and Datomic with the Simulant library.
A particularly difficult part of the problem was to design a user interface that provides as much information as possible on the test results. In a single screen, the user was able to inspect all the scenarios executed for a given test run and which ones failed (left part of the screenshot below). The failures were shown directly on a representation of the HTTP request and response from the service (right panel in the screenshot) so the user could report a bug with all the necessary information.
Database Replication System
As part of a team of two developers, I built a real-time database replication system in Clojure on AWS (DynamoDB, S3) for one of the biggest hotel chain in the United States. The service processes a constant stream of room rates and availability updates represented as XML documents. The updates were processed and stored into DynamoDB tables. All updates were accumulated in a log stored in S3 for recovery purpose.