CV
(
PDF version)
Career History
02/2020 - Present: Babylon Health - Staff Software Engineer
- Lead developer for a testing system for AI medical advice models, allowing clinicians to provide ground-truth data to test against automated systems. System uses Django and React on top of a FHIR-based backend
12/2016 - 02/2020: Oliver Wyman - Senior Developer
LShift was bought by Oliver Wyman, and I moved as part of that. I was working on:
- Leading a team building a new internal deployment platform using Chef, Docker, Rancher, Jenkins, AWS (primarily EC2, but also RDS, Lambda and CloudFormation, mostly generated with Python and Troposphere) and Hyper-V. Target users were a variety of short-term apps needing best-practice infrastructure with minimal effort
- Implementing a GDPR-compliant PII data sharing/audit platform including work with Clojure, Node.js, Vue, Kubernetes, Docker, Jenkins and AWS (ECS), including writing documentation and technical specifications
- Test/devops lead for a financial project including an iOS and Android React Native app, Kotlin/Golang backend, Python and Kubernetes
- Creating a web frontend and scheduling manager for a strategic planning application, using Node.js, Vue.js, Bootstrap, Python, C# and AWS (Elastic Beanstalk, CloudFormation, etc)
- Backend work for another financial client in Java with Spring Boot, AWS and Docker
01/2015 - 11/2016: LShift - Senior Developer
In January 2015, I returned to LShift, restarting the lead/senior role I
had been in priorly, working on a variety of projects, primarily as the lead developer in most cases.
- Work with The Global Alliance for Genomics and Health (GA4GH) on their reference server
- Python – Django and Flask/SQLAlchemy/Alembic
- Clojure and Clojurescript for an internal project
- Constraint satisfaction solving with Optaplanner for automated scheduling
- Exploratory work towards an energy monitoring system running on embedded hardware
- Docker – both writing a report on Docker and networking, as well as use of containers for deployment and testing
- Server build Automation – Salt, Puppet, Fabric, AWS APIs, including use of Zabbix and the ELK stack for monitoring and logging, and CI testing using Vagrant and Teamcity of the server build configurations
- .Net – Both a continuation of the earlier MVC projects (see 2010-2012 period), as well as spearheading newer work
11/2012 - 12/2014: Spotlight - Senior Developer
As a Senior Developer for Spotlight, I was responsible for multiple areas, covering development work,
architectural design and discussion with Product Owners regarding their areas of interest
- Development – MVC 2-4; C#; NHibernate; NUnit; ReadyRoll; Redis; SQL Server; PostgreSQL; SignalR; jQuery
- Build/Deploy automation – Teamcity; Octopus Deploy (responsible for pushing this to be used in Spotlight –
now critical to the build pipeline); MSBuild; Rake/Albacore; FAKE (F# make)
- Server build automation – spearheading Chef development work within Spotlight, including work with Vagrant for
development (both for Windows and Linux machines). Various patches from which have been pushed back upstream. Included
both local VMs and work with EC2/CloudFormation
- Legacy code bases – including Classic ASP (server side Jscript), and Selenium for regression testing of older
systems
- RabbitMQ – design and implementation of a system-wide change notification system using RabbitMQ
03/2010 - 10/2012: LShift - Senior Developer
My work for LShift covered a wide variety of areas, both as part of a team and as the primary client
contact/lead developer for various projects with up to 3-4 developers in a team, using Agile development throughout
- ASP.NET projects - MVC 2 and 3; C#; Entity Framework; NHibernate; NAnt (including work with custom
tasks); automated testing and deployment with Selenium, NUnit, Teamcity, Jenkins and Migrator.Net
- Python/Django on Linux (Debian and RHEL) with jQuery integration
- Java/Swing web services
- Working on the RabbitMQ C client
- Puppet configuration, including writing of custom modules in Ruby
04/2008 - 02/2010: Imperial College London - Research Associate in Body and Visual Sensor Networks
My primary focus was in embedded systems development for networked, battery powered devices
- Small devices (~3cm3 - “body sensors”) attached to and monitoring people. 2KB of RAM, using TinyOS
- Working on various sport-related applications; built virtual “orientation sensor” out of multiple raw
sensors
- Large devices (~50cm3 - “vision sensors”) with a full embedded Linux system and camera module
- Built a generalised software development platform and applications for the devices
- Created userspace middleware for easy development (C API and Python bindings) ; Kernel development (primarily
driver debugging and extending); Documentation and tutorials for end users
09/2003 - 01/2008: Delft University of Technology - PhD in Wireless Sensor Networks
Thesis focused on the nature of abstraction in sensor networks - examining how this causes problems through the
various layers of the software stack, and showing how rethinking the way in which we approach the problems (using
techniques derived from the relationship between linguistics and how it is related to how we think about ideas) can
provide better solutions to the difficulties faced in sensor networks, with evidence from my implementations
of novel protocols both in simulation and for node hardware.
- Published novel, peer-reviewed work on a variety of areas in Wireless Sensor Networks, including Localisation,
Routing, Time Synchronisation and Aggregation techniques
- Major work with MAC protocols and work at all levels of the sensor node radio stack
- Extensive work with implementations of protocols for TinyOS, including building low-level systems for two
different hardware platforms (ATMega128- and MSP430-based), and helping to create node hardware testbeds
- Responsible for the mentoring of a student during his MSc thesis work with MAC protocols
- Coursework supervisor for the course “Introduction to High Performance Computing”
Publications
See
full list
Software Engineering Skills
Expert C (20+ years experience) and Python (15+ years) programmer. Other languages known include C#, Clojure,
Java, Javascript, Kotlin, Ruby and Rust. Expert level experience with Linux systems, particularly with Debian-derived
and embedded systems. Worked with Kubernetes, Rancher and Dokku, as well as various custom Docker management systems.
Have two apps on the Android store (one written in Kotlin, the other in Java).
Other activities
I was involved with the Gnome project as part of the BugSquad, aiding in bug triage work. I have been responsible
for
closing over 11,000 bugs
(mainly due to duplicate reports), and have contributed patches to over a dozen
separate pieces of software within the project. I've also contributed back accepted patches for a wide variety of
other open-source projects from dbus to freetype, network-manager to packagekit, and some of my work is now in the
Linux kernel.