Software engineer near London and Southeast England.
Email · Website · LinkedIn · GitHub
Well-practised software engineer with experience building solutions across the banking, insurance, customer loyalty, and law enforcement industries. Real-world expertise building large-scale data platforms, micro-services, analytic algorithms, and real-time communication systems and taking them to production. A keen polygot-programmer who believes code should be written to be understood by humans, and who values simplicity and readability over complexity and obscurity. Hands-on in the design and development of greenfield projects, and also the enhancement, maintenance and support of mature systems.
Core
Scala, Java, Python, Rust, Golang, Kafka, Kafka Streams, Apache Spark, Kubernetes, Helm,
Cassandra, AWS, big data, batch and stream processing, microservices.
AWS
Lamda, S3, EC2, ECR, Kinesis, Data Pipelines, CloudWatch.
Languages and APIs
Scala, Java, Python, Rust, Golang, SQL, Spring, Hibernate, JUnit, Linux.
Databases
Cassandra, Mongo, Oracle, MySQL, SQLite.
Messaging
Kafka, AWS Kinesis, Rabbit MQ, Apache Active MQ, REST.
Build Tools
sbt, Gradle, Maven, Ant, make, Jenkins, Git.
Methodologies
Agile, XP, TDD, BDD.
Fotema, a Photo Gallery for Linux (March 2024—present)
Self-taught Rust and developed a Linux-native photo gallery app for the GNOME desktop environment. Published to Flathub, the app store for Linux.
Rust, SQLite, GTK-RS, Relm4, Uber H3 Geocoding, Flatpak
Backend Software Engineer at J.P. Morgan (September 2024—present)
Java, Kubernetes, Helm.
Software and Platform Engineer at NewDay (July 2022—June 2024)
Design and implementation of a new data streaming platform built in Confluent Cloud and Snowflake. Designed a DBT project for creating and managing data models. Designed and implemented encryption-at-rest for Apache Kafka by integrating with the HashiCorp Vault Transit Security Engine.
Integrated applications into NewDay's observability platform using an Open Telemetry collector deployed to Kubernetes by ArgoCD with metrics and alerts in NewRelic managed by Crossplane.
Scala, Java, Kafka, Kubernetes, Helm, ArgoCD, Crossplane, Terraform, Terragrunt, Crossplane, ArgoCD, DBT, Confluent Cloud, Snowflake.
Scala/Python/Golang/Big Data Software Engineer at NewDay (April 2020—October 2021)
Developed Golang tooling for scrubbing and importing 24 terabytes of CSV data into AWS Athena, allowing NewDay to migrate away from a third-party service and reduce costs by £1.4 million per year.
Solved a batch system's AWS S3 "small files problem" which would turn a 40GB input file into 80,000 very small Parquet files being written to S3. The file processing was redesigned to write to S3 a small number of large Parquet files. File processing time was reduced by two hours allowing NewDay to meet SLAs and storage space was reduced by 10 times.
Designed and implemented an AWS lambda to refresh views in the Dremio data lake engine. The solution reduced processing time and costs for updating views and centralised view configuration into a single location per environment, which gave data engineers and analysts a complete overview of an environment's view requirements.
Designed and implemented a Scala FS2 batch job to process large JSON files and convert to Parquet tables.
Wrote a Golang utility for quickly deleting records from AWS DynamoDB.
Scala, Java, Python, Golang, cats, FS2, AWS Batch, AWS Lambda, Dremio.
Scala Micro-service Engineer at 11:FS Foundry (August 2019—February 2020)
Designed and developed micro-services to support Foundry, a ledger-first API driven banking platform. The platform was built using the Lightbend Lagom micro-services framework, Scala, Cassandra, and Kafka.
Designed and implemented the micro-services to support the expiry of payment card authorisations. The functionality was delivered over two sprints to support the alpha release of a new payment card product.
Led the adoption of the Apache Avro message format for Kafka messages to improve performance and reduce the risk of breaking changes to message formats.
AWS, GCP, Micro-services, Scala, Kubernetes, Kafka, Cassandra, Docker, Helm, Lagom, Avro.
Big Data Engineer at Hive (November 2014—July 2019)
Designed and developed pipelines with Kafka, Kafka Streams, and Apache Spark to implement data science algorithms to deliver customer-facing products derived from Hive thermostat data. Algorithms were packaged as Docker images and deployed with Helm charts to a Kubernetes cluster running in AWS. Processes at a rate of 100,000+ messages per second.
Worked with data scientists to deliver a Kafka Streams application to analyse thermostat state, detect when a customer's heating fails, and notify the customer of that failure. A batch-based Python prototype algorithm was delivered by data scientists, but was unsuitable for real-time failure detection, so I redesigned the algorithm to work as a real-time Kafka Streams application.
Designed and developed a data pipeline to feed smart meter readings into algorithms to deliver energy usage insights to British Gas customers. Applied a random forest, from the Weka machine learning library, to classify customer energy usage.
Developed a processing pipeline tool to convert IoT device protobuf messages from an AWS kinesis stream to daily aggregated Parquet files stored in S3 and queryable from Athena.
AWS, Scala, Spark, Kafka, Kafka Streams, Cassandra, Python, Kubernetes, Helm, Docker.
Java Developer at Post Office (August 2014—November 2014)
Delivered a financial reconciliation engine to reconcile financial transactions across Post Office products, identify transactions that cannot be balanced, and provide a reporting user interface for financial service centre staff to investigate unbalanced transactions.
Java, Spring Batch, Spring Integration, Spring MVC, RabbitMQ, REST, MySQL, and Tomcat.
Java Developer at Monitise (January 2014—July 2014)
Developed the credit card payment user interface and backend for Yaap Shopping, a first of its kind venture between a telecoms company (Telefónica) and a bank (Santander and Caixa). Evaluated metrics monitoring solutions for Monitise to deploy across all their platforms.
Java Developer at Aimia (June 2012—December 2013)
Aimia is a global leader of loyalty management and owner of the Nectar brand of loyalty cards. Delivered a flexible and compelling loyalty platform to allow Aimia to win new business. Developed a batch processing framework (Spring Batch, Mongo DB) for ingesting large files from third-party suppliers. Introduced property-based testing and BDD to drive up code quality.
Java, Spring, Spring Batch, Mongo DB, MySQL, Apache Camel, Rabbit MQ, AWS, REST, asynchronous events, pair programming.
Java Microservice Developer at Bank of America Merrill Lynch (February 2011—May 2012)
Delivered a Global Liquidity Platform that became a solid foundation for rapidly developing novel market- leading sweeping and pooling products, which included Multi-Currency Notional Pooling, Single Currency Notional Pooling, and Physical Cash Concentration.
Java, Spring, Hibernate, idempotency, compensating transactions, parallelism, pair programming.
Java Lead Practitioner at RDF Group (October 2006—January 2011)
RDF Group is a supplier of IT solutions and staff and provided my expertise to the loyalty systems company Aimia, the marine insurance and reinsurance provider Kiln Group, and the bank Northern Rock.
Developed a fault-tolerant and high-performance message switch (C, BEA Tuxedo, and Oracle), which integrated the California Law Enforcement Telecommunications System with state and federal systems.
Lead development of California's "Do Not Call" system.
- 2.1 BSc (Honours) Computer Science
- Software Engineering Higher National Diploma
2024
Java Collections Framework + Generics, Lambdas & Stream API @ Udemy
Scala 3 And Functional Programming Essentials @ Rock The JVM
2020
Building Reusable Code from Scratch with Rust @ Udemy
The Rust Programming Language @ Udemy
Build a TCP Chat App with Go @ Udemy
Complete Guide to Protocol Buffers in Golang/Python/Java @ Udemy
Go: The Complete Developer's Guide @ Udemy
REST API JWT Auth with Golang @ Udemy
Web Development with Golang @ Udemy
gRPC Golang Master Class: Build Modern APIs and Microservices @ Udemy
Learn How to Code Golang @ Udemy
2019
Programming Reactive Systems @ edX
2017
Blockchain for Business—An Introduction to Hyperledger Technologies @ edX
Big Data Analysis with Scala and Spark @ Coursera
2016
Parallel Programming @ Coursera
Retrieving, Processing, and Visualizing Data with Python @ Coursera
2015
Using Databases with Python @ Coursera
Using Python to Access Web Data @ Coursera
Python Data Structures @ Coursera
Principles of Functional Reactive Programming in Scala @ Coursera
2014
Functional Programming Principles in Scala @ Cousera