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 0 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.
In my current position at Adaptavist, in the ScriptRunner Cloud team, I've been pioneering a number of frontend and serverless initiatives. These range from refactoring everything into strict, functional TypeScript, to encouraging us towards better testing practices, introducing property-based testing and page-level integration testing. A major redesign of a parser core to our business is currently planned, to which end I've written a greenlit prototype in Haskell in the style of a recursive descent parser.
I care deeply about writing business logic and applications more broadly in the safest, most maintainable manner possible. I leverage the type system to encode logical invariants and eradicate certain classes of bugs. I write testable code and write good tests for that code, emphasising quality of tests over chasing potentially worse-than-useless coverage targets. Whilst it can be taken to an extreme, I do believe's there's truth in the idea of "self-documenting code". Where that isn't possible, I write concise, helpful documentation, planning for the long-term. I use tooling like Git effectively, including leaving a semantically meaningful, atomic commit log behind.
My career thus far has been dominated by the web and particularly thereof the frontend. Early on in my career I specialised somewhat in CSS, though I've since heavily shifted towards programming itself so to speak. I've retained that hard-fought understanding of CSS. I've been writing and utilising APIs throughout, be they more traditional or in the form of microservices. I can comfortably interact with the DOM manually but would sooner reach for a reactive abstraction.
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 maintain some AUR packages. This is an area I intend to further grow into.
Learning & Teaching
I spend a significant proportion of my free time learning, and I enjoy sharing that knowledge with others; I routinely pair with colleagues and help them through challenges. This is a very large part of what drives me on a daily basis.
I've been working permanently remotely since 2018. The flexibility suits me given my self-driven nature.
I've built my own computer and run NixOS on it. This is the machine on which I do all my work, professional and personal, and everything else; there is a meaningful productivity gain for me here both in the power of the hardware and the configurability of the software.
Sometimes my cat likes to join me when I'm programming. He is an invaluable source of inspiration and unintended keystrokes.
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, pure functional programming, Rust, CLI, shell, Linux, TypeScript, React, fp-ts, Node.js, testing, microservices, AWS Lambda, CSS-in-JS, HTML, CSS (incl/ preprocessors), SQL, Git, CI, WebExtensions
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, an ICU-to-TypeScript compiler written in Haskell, enabling the ergonomic and typesafe localisation of Unsplash's frontend. I've also introduced Nix to our developement 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 lead 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 perennial 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 satisfied requirements and did so in good condition.
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.