Experience
Oct. 2022 - Present
Senior Software Engineer Beamery Remote
- Led migration of internal tooling from multiple CLIs to a single ReactJS web UI. Overhauled a dormant project with dependency upgrades. Added OpenTelemetry-based observability surfaced using Grafana. Co-authored an internal RFC proposing architectural simplifications and efficiency gains for related upstream services.
- Subsequently selected to lead UI development on a new business-critical product. Responsible for project setup, technology choices, documentation, system architecture, operational ownership and feature delivery.
- Drove process improvements that increased team velocity through a reduction in non-essential meetings and adoption of asynchronous pre-refinement activities. Defined a collaborative process with product and design to identify and resolve technical unknowns before they could block delivery.
- Mentored multiple engineers in front-end development to reduce development bottlenecks and minimise knowledge siloing.
May 2016 - Sep. 2022
Part-Time:
Oct 2018 - Sep 2022
Software Engineer Findmypast Dundee
- Helped drive the migration of user account data and functionality from an ASP.NET/MS-SQL monolith to an Elixir/PostgreSQL microservice with zero downtime and 6 weeks ahead of schedule
- Designed, implemented and optimised a novel family tree layout algorithm in NodeJS supporting performant layout of 10,000 node trees in ancestral and descendant directions simultaneously thereby outperforming competing products. The algorithm underpins the ReactJS family-tree application within the wider family history product.
- Investigated network performance at the container, node and VM layers of an on-premises
Kubernetes cluster using eBPF and perf
resulting in issues with DNS caching being identified while affirming normal patterns of
softirq
processing following a NIC upgrade
Jun. 2020 - Sep. 2020
Internship
Research Intern BBC Remote
- Researched improvements to low-latency live-streaming performance by enabling communication of server-side transport state via a novel HTTP header to a client-side dash.js video player
- Deployed an OpenResty server as a transparent proxy that generates and prepends the header to responses from an upstream CDN server
- Implemented a throughput estimator in dash.js to parse the contents of the HTTP header and estimate throughput based on the congestion window, MSS and RTT
- Documented the project results in an internally published report. The approach was refined and expanded to support QUIC in the course of my PhD.
Feb. 2016 - Apr. 2016
Software Engineer Etellect Glasgow
- Co-led integration of PayPal into an ASP.NET/MS-SQL e-commerce platform used by multiple SME clients across Scotland
Jul. 2015 - Jan. 2016
Graduate Software Engineer Verint Inchinnan
- Delivered an integration of consumer forums with a CRM product
Education
Sep. 2018 - Sep. 2024
PhD Computer Science University of St Andrews
Supervisors: Marwan Fayed (Primary), Saleem Bhatti (Secondary)
Thesis: Collaborative Feedback Controls for Transport and Application Layers in Dynamic Adaptive Streaming over HTTP (DASH)
- Conducted a statistical analysis of data transfer during slow-start to avoid issues due to nesting the congestion avoidance and ABR algorithm control loops
- Implemented a system allowing a modified dash.js player to enable pacing at the server-side using a a combination of: 1) an HTTP server implemented in Rust, 2) a custom congestion control module with Reno AIMD, and 3) a modified Linux kernel
- Explored using server-side transport-state to improve low-latency live-streaming performance in a dash.js player modified to handle TCP or QUIC metrics
- Deployed a patched version of Nginx with QUIC support provided by Quiche to enable surfacing of transport-state without the use of OpenResty or Lua
Awards
- Brendan Murphy Memorial Prize, 2019: Awarded for the best presentation by a young researcher at the Next Generation Networks Multi-Service Networks workshop
Sep. 2011 - Jun. 2016
BSc Software Engineering University of Stirling
First Class (Honours)
Dissertation: Development of a Linux Driver for the Microsoft Xbox 360 Wired Controller
- Implemented a Linux kernel USB device driver for the Microsoft Xbox 360 Wired game controller including support for LED and vibration features
- Conducted a statistical analysis of performance against extant solutions using number of clock cycles to avoid issues with time-based measurement of kernel-space driver software
Awards
- Computing Science Honours Project Prize, 2015
- Computing Science Third Year Prize, 2014
- Computing Science Second Year Prize, 2013
Technical Skills
- Languages
- JavaScript, TypeScript, Rust, Elixir, Python, SQL (PostgreSQL), HTML, CSS, C
- Libraries
-
-
JavaScript
- NodeJS
- React
- Next.js
- Tanstack Query
- Prisma
- Jest
- Playwright
-
Rust
- Actix
- Tokio
- Hyper
- Log
- LazyStatic
- Tracing
- Serde
-
Python
- Jupyter
- Matplotlib
- NumPy
- SciPy
-
JavaScript
- Tooling
- Nginx, Kubernetes, OpenTelemetry, Prometheus, AlertManager, Grafana, Ansible, Vault, GitHub Actions
Interests
- Football
- I have been a devotee of football since childhood. I am a diehard fan and former season ticket holder of Leicester City. Sadly I am now reduced to following them from afar. I delight in learning more of the global history of the game. Most recently I have been reading about the evolution of Argentinian football across the twentieth century.
- Programming
- Writing code has been my main hobby since beginning my undergraduate degree. I enjoy problem solving and the structure programming brings to that pursuit. I was treasurer and then president of Stirling University Computer Club. In second year I led development of an on-campus route finder for Android. I now work primarily in TypeScript. I enjoy the safety provided by type annotations when trying to ensure program correctness.