University of Huddersfield, UK
- BSc Software Development & Multimedia (1st Class), 2008
AWS, Apache, Aurora, Docker, EC2, ECS, ELK, Git, Kafka, Kinesis, Leiningen, Linux, Maven, MongoDB, MySQL, Nginx, NixOS, PostgreSQL, RabbitMQ, React, Redis, Riemann, S3, SQLite
A Dynamic, Statically Typed Contradiction
Given at ClojureX, London, Dec 2017 and :clojured, Berlin, Feb 2018. The talk was about Algorithm-W, how static type-checking (of the Hindley-Milner family) works, with an implementation of a Hindley-Milner based type-checker for a growing subset of Clojure. The type-checker included features such as Haskell-like typeclasses and extensible records.
Given at ClojureX, London, Dec 2016 and :clojured, Berlin, Feb 2017. The talk was on the topic of clojure.spec, a data specification DSL for Clojure, and what you can do with it if you're willing to bend the rules a bit.
Developer: GoMore [2017 - 2018]
GoMore is a peer-to-peer transportation startup based in Copenhagen. The product
is a web and mobile app enabling customers to share car journeys, to share their
car by renting it out, and to lease cars that can then be used on the rental
My responsibilities are to lead infrastructure projects as part of the backend team, and building out Clojure APIs as part of the broader product team. The APIs need to handle many versions at once, as this enables the mobile product to move quickly with new or improved features, but existing mobile clients still need to be supported. We can only phase out deprecated versions when they are seeing little to no traffic, and many users cannot upgrade to new clients due to restrictions on the handsets.
Recent infrastructure highlights include a move of the whole product and infrastructure to containers from Elastic Beanstalk, and migrating the main database load to an Aurora cluster. We can now better distribute the load to read heads, and scale the database horizontally relatively quickly.
Developer: uSwitch Ltd. [2015 - 2017]
Looking after the core services running the energy business, including the central comparison engine powering the energy website, along with various data APIs, processing pipelines, and data delivery to different teams. Building out new APIs to support 3rd party integrations for comparison and metadata. Involved quite a bit of scaling and performance work to cope with 10+ times normal load spikes of traffic and similar rates of sign-ups and sales, due to TV promotion of energy switching.
Cross-functional team, involving commercial, operations, financial and software development. The role involved maintenance and development of uSwitch Energy's backend services responsible for the day-to-day operation of the energy business. Negotiating with 3rd parties and commercial around specification and implementation of data exchange. Services involved the integration, delivery and processing of data to and from 3rd parties, product tracking, financial reporting and analysis.
The majority of services were written in Clojure, with some Ruby and a bit of tooling in Go. Data was delivered to different teams via Kafka, Kinesis/Firehose, RabbitMQ, HTTP or FTP as required. The infrastructure was hosted on EC2, mostly using AWS's Elastic Container Service. Logging/monitoring with ELK, Cloudwatch (metrics/alarms) and Sensu (alerting).
Software Developer: Interel Group, Brussels [2008 - 2015]
Responsible for the design, development, and maintenance of all the group's
software infrastructure, including the deployment and automation of key
Applications ranged from internal financial administration and reporting tools, project management tools, internal infrastructure monitoring, and data exporting, to client-facing CMS building and customisation.
The services were deployed on in-house servers, bespoke applications and services were written mainly in Clojure, with some Java. Web apps were build using ClojureScript and React(OM) on the front-end.