Software Engineer Hi there! I'm a software engineer based in London, working remotely, with a passion for pure functional programming.

Quality is pride of workmanship. — W. Edwards Deming

I've been writing code professionally for around 9 years now. If you'd like to see what open source software I work on in my free time, check out my software page via the link at the top.

Programming

My career thus far has been dominated by the web and particularly thereof the frontend. Over time I've naturally gravitated towards pure functional programming and strong, static typing, initially without even realising it! Lately I've been taking an interest in compilers and type theory.

I'm generally most concerned with type safety and correctness. A good type system can be used to encode logical invariants and eradicate certain classes of bugs, but testing still plays an important role as well. I'm a keen proponent of the "functional core, imperative shell" mantra.

Open Source

I am ideologically tied to and have great faith in the open source community. To this end I contribute patches where I can, maintain a modest collection of my own software , and contribute to nixpkgs and the AUR. This is an area I intend to further grow into.

Learning & Teaching

I spend a significant proportion of my free time learning, and routinely host sessions in which I teach colleagues about Haskell among other things. This is a very large part of what drives me on a daily basis.

Workplace

I've been working remotely for most of my career. The flexibility suits me given my self-driven nature.

I run NixOS on both my custom-built desktop and my homelab server, the configurations for which you can find here. The freedom to work within my own technology stack is important to me.

Keywords

I appreciate you may be in a hurry and want to quickly parse this page for a particular keyword, likely a technology. Here follows a non-exhaustive list in no particular order of a bunch of things I know at least a reasonable amount about:

Keywords: Haskell, PureScript, functional programming, compilers, Rust, shell, Linux, TypeScript, React, fp-ts, Node.js, microservices, SQL, Git, CI, WebExtensions, internationalisation

Jobs

Unsplash August 2021 - Present

I'm excited to be working on Unsplash's frontend, leveraging functional programming and the fp-ts ecosystem. I founded intlc, a compiler written in Haskell, enabling the ergonomic and typesafe localisation of Unsplash's frontend from ICU to TypeScript. I've also introduced Nix to our development environment.

Adaptavist December 2018 - June 2021

At Adaptavist I worked on our product's React frontend and its associated Node.js serverless functions, making heavy use of fp-ts, io-ts, newtype-ts, et al. I led the team towards best practices, including refactoring everything into strict TypeScript, incorporating property-based testing and page-level integration testing, and generally emphasing long-term maintainability for developers and reliability for end users.

Oddschecker February 2017 - December 2018

At Oddschecker I spearheaded a greenfield B2B project utilising React and D3 on the frontend and Node.js on the backend, all written in TypeScript. I liaised with product and QA to ensure it met expectations and provided a good UX.

Impero December 2015 - February 2017

My work at Impero was predominantly building new websites from scratch for clients following a design. These would typically be very complex in terms of the requisite CSS. Between projects I worked with just about every permutation of CSS pre- or post-processor. I also occasionally worked with reactive libraries like React and Vue.

Perspective Publishing March 2014 - December 2015

I designed and implemented the frontend of the majority of Perspective's websites, and rewrote the backend of the internal company CMS in PHP leveraging MySQL, converging dozens of legacy systems into a single unified experience. Prior to leaving I lobbied for a change from archaic FTP uploads to a modern version control system.

References available upon request.