- BSc Software Development & Multimedia (1st Class), 2008
Bash, CSS, Clojure, ClojureScript, Elm, HTML, Haskell, Idris, Java, Javascript, Python, Ruby, SQL, Scheme
AWS, Apache, Aurora, Docker, EC2, ECS, ELK, Git, Kafka, Kinesis, Leiningen, Linux, Maven, MongoDB, MySQL, Nginx, NixOS, PostgreSQL, RabbitMQ, React, Redis, Riemann, S3, SQLite
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.
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
platform.
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.
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).
Responsible for the design, development, and maintenance of all the group's
software infrastructure, including the deployment and automation of key
Linux-based services.
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.