Hi, I'm James
I'm a human driven by curiosity, innovation, and the search for hard problems.
From the first line of code I ever wrote, I became immediately enthralled with the creativity, power, and freedom of programming. Since then I have made it my goal to provide meaningful contributions and value wherever I go. I have helped to bring innovative projects to life, mentored other software engineers, and made friends for life with some inspiring and brilliant individuals across all kinds of fields.
I am a software engineer because it lies at the intersection of knowledge and application, but I also find endless fascination in all kinds of domains: from 3D graphics to astrophysics; programming, rock climbing, and a compulsion to read every book I've ever laid eyes on. I even grew up in a house with an observatory in the back garden, culminating in a deep, lifelong obsession with space. I've attended the European Astrofest every year for the last 12 years (pandemic years aside) and love it every time. I have yet to find a topic that I can't immerse myself in and find joy in.
Creating, solving, and learning is at the heart of everything I do. If you are making a difference by facing big challenges then I hope we can work together!
Professional Experience
-
Venture Harbour::April 2020 -> Current
Software Engineer
- Rust
- Typescript
- Go
- Postgres
- Prisma
- GraphQL
- Terraform
- Pulumi
- GCP
- Kubernetes
- Docker
- Node
- React
- NextJS
- Github Actions
- Google Cloud Tasks
- Tokio
- Tonic
- gRPC
- protobuf
A core developer solving difficult challenges and making cool things.
The entire business model of Venture Harbour is to build ambitious products. I am currently one of the core developers helping to bring to life a suite of such ambitious things.
My primary contribution has been helping to plan, design, and implement from the ground up a SaaS tool for tracking marketing activity. Its scope is enormous, and I like to think I have been instrumental in putting together something that genuinely adds value to people's days.
I have found particular joy in working with the Postgres/Prisma/Nexus backend, producing robust, well-documented components and APIs that do their jobs flawlessly. I have worked on a huge variety of interesting challenges: time-series forecasting, seasonal trend decomposition, utilities for breaking down data grouped by time, and a novel approach for feature detection in data sets. The list really does go on. I picked the things that sounded coolest on paper, but I've been involved heavily with every aspect of app development across all parts of the stack.
In addition to primary project work, the way the company is structured leaves lots of room for proof-of-concept and greenfield side projects that have the potential to become full-blown products. I have used this to expand my skillset by producing things such as: a high-performance, concurrent website crawler that can run heuristic checks against content in Rust (using tokio), and a tonic gRPC based microservice that can ingest large amounts of time series data and insert it into a postgres + timescaleDB database.
I have also led in a few other softer areas too. I have helped to level up the engineering team in terms of documentation, PR reviews, and code craft. I have also been able to bring a lot of other benefits to the team - partcularly in code craft. Instilling the importance of good documentation, getting everyone stricter with type safety and raising everyone's game in code review. I hope that going forward, everyone I have worked with at Venture Harbour is a better programmer for us having been able to work together.
-
Diffblue::August 2019 -> April 2020
Java Engineer
- Java
- Kotlin
- Maven
- Gradle
- Java Swing
- IntelliJ SDK
- Amazon Codebuild CI
- Agile Scrum
- Sentry
Core developer for the main product front-end system via a complex IntelliJ IDEA plugin.
I got to work as part of a team developing an IntelliJ IDEA plugin that acted as the main point of integration and user interaction for the entire business product suite.
This work included the integration of lots of independent and complex standalone tools, but also the development of an effective UX system, and management of the settings, configurations, and auxiliary services required for the tool to be effective.
There were many moving parts to this project, but I was able to take responsiblity for several complex areas. My main contributions included:
- The exception handling chain across the entire pipeline pattern design
- The calculation of code coverage and post-execution code coverage deltas
- The user notification system
- User code context based on the IDEA PSI interface
- User behavioural analytics via Countly
- User crash reporting via Sentry
- Persistent components that check for user plugin versions and display context-dependent information
-
Diffblue::May 2019 -> August 2019
Golang Engineer
- Go
- AWS
- Lambda
- Cognito
- API Gateway
- Terraform
- GCP
- Gitlab
- Travis CI
- SES
- S3
- JVM
Part of a polyglot team producing serverless solutions to business problems.
I worked as part of a small team of "mad scientist"-type engineers who were tasked with producing new SaaS-style products to fill a niche in the business product suite. Golang and AWS made up the main components of our tech stack and were used extensively to produce an entirely serverless, database-less, browser-based product that demonstrated the company's capabilities.
I was personally responsible for the management and maintenance of the Cognito user pool, the automated interactions with sign-ups, and the verification & validation of user JSON Web Keys.
I also got to work with the team on producing a stripped-down version of the Java Virtual Machine that was able to be loaded into an AWS Lambda and used to compile Java source code serverlessly. It was pretty cool!
Another project saw me responsible for the assignment, distribution, and allocation of so-called "compute units" in an experimental product that distributed the high computational workload of the main product over an arbitrary number of real machines via daemons communicating through the gossip protocol.
-
Diffblue::September 2018 -> May 2019
Support Engineer
- Python
- GCP Compute
- Kubernetes
- Java
- Agile Kanban
- JUnit
- Maven
- Client Support
- Git
I had originally worked at Diffblue as an admin assistant, but I found myself enraptured by the work they were doing. I had been teaching myself to program for the last year, and after offering my elite rubber duck services to a frustrated engineering manager, I was able to impress enough people that I was offered a technical role. Ask me about it! It's my best anecdote.
As a Support Engineer, I was responsible for providing developer support and the creation and maintenance of internal tools.
I got the opportunity to work with a team of engineers that helped to diagnose performance bottlenecks, bugs, and CI/CD issues, as well as design and build tools that other developers in the company could use to assess the performance of the core product.
I was personally responsible for the so-called "check script", a very involved python script that analysed an entire java project by parsing its structure and bytecode and presented the user with a detailed breakdown of the internals and testability of their project.
I also got to be involved with some tasks that were unique to this role: I got to go on-premise with customers to assist in the deployment of the product, debugging any issues they had. I even got to deliver a technical sales pitch once!
Other Shenanigans
-
Mergecoin
- Vercel Serverless
- Microservices
- Go
- Just lots of Go
A hackathon with friends producing the ultimate satire-as-code project.
What happens when a group of programmers locks themselves in an Airbnb for two days on the Isle of Wight? Apparently, they produce the most distracting, but probably secretly genius project going. Mergecoin is the result of this adventure.
Mergecoin is an app that connects to repos on Github and helps to gamify the development experience by rewarding PR authors and reviewers with entirely arbitrary "coins" based on how valuable their contributions were.
The "coins" don't really have any value, but we found that their introduction actually led to improved productivity as we began to try to outdo each other in providing the most meaningful contributions to codebases.
I took the lead in developing the system by which contributions to code were parsed and assigned value. It was written entirely in Go, and deployed through Vercel's Serverless functions utility. The system was written using a variant of the strategy pattern, allowing a developer to switch out and write new value-assigning algorithms with as little resistance as possible.
Mergecoin is actually still in use today, being used on my current employer's GitHub repos. People are still amassing coins to this day! The Golang component I wrote for Mergecoin has never crashed or gone down in its life. I'm pretty proud of that fact!
-
Collapse
- Rust
An in-progress Rust crate for simulating the formation of Stars
It started out of sheer curiosity on both sides of the domain: stellar synthesis, and Rust. I wanted to learn about both so I did the most stereotypical programmer thing and started writing a library about it.
And now my head is filled with all sorts of unusable information! Such as what the 'Jeans Mass' of a molecular cloud is and what the Boltzmann constant actually is.
But in teaching myself to use Rust to a good level, I also learned lots of useful things about programming in general. Such as the importance of thread safety and how to avoid race conditions (the compiler is crazy good at keeping you in check), and how to design powerful abstractions that make your life easier.
It also taught me the value of patience. Finally getting the green light from the compiler is a massive rush!
-
Explorations in Embedded Programming
- Rust
- Embassy
- embedded_hal
Explorations in plugging a gap in my knowledge
I have done a large amount of work in the web ecosystem, and a non-trivial amount of recreational systems programming. However embedded programming has for a long while felt like a black-box. In order to rememdy this, i've been doing a lot of exploratory work with microcontrollers and Rust after finally getting my hands on some RP2040 boards from the Pi Hut with some extra peripherals to boot.
I've been having a lot of fun learning to reason about the RP2040 HAL in tandem with finally learning some introductory electronics to tie it all together. So far i've been trying to write drivers for various peripherals I have that don't currently have support in the embassy ecosystem. I'm excited to start putting some of these learnings to use and building larger projects within the realm of physical computing.
-
Ochre
- Supabase
- PostgreSQL
- TimescaleDB
- Typescript
An experimental mini-project for OKR tracking
It's not deployed yet, but I found myself interested in getting to grips with learning Supabase by putting together an app that handles tracking and analysis of large amounts of time-series data in as painless a way as I could think.
Next, I'd like to investigate attaching procedural languages to Postgres. It is supposedly possible to load R into a Postgres database with PL/R so you can run complex data analysis in the database itself to provide a strong layer of abstraction over data transformations. This would be a powerful thing to know!
What am I reading right now? Not joking, I really do triple down on books
-
Donna Tartt
The Secret History
- Fiction
Under the influence of their charismatic classics professor, a group of clever, eccentric misfits at an elite New England college discover a way of thinking and living that is a world away from the humdrum existence of their contemporaries. But when they go beyond the boundaries of normal morality they slip gradually from obsession to corruption and betrayal, and at last—inexorably—into evil.
-
Douglas Hofstadter
Gödel, Escher, Bach: an Eternal Golden Braid
- Nonfiction
Douglas Hofstadter's book is concerned directly with the nature of “maps” or links between formal systems. However, according to Hofstadter, the formal system that underlies all mental activity transcends the system that supports it. If life can grow out of the formal chemical substrate of the cell, if consciousness can emerge out of a formal system of firing neurons, then so too will computers attain human intelligence. Gödel, Escher, Bach is a wonderful exploration of fascinating ideas at the heart of cognitive science: meaning, reduction, recursion, and much more.
-
Aristotle
The Nicomachean Ethics
- Philosophy
‘One swallow does not make a summer; neither does one day. Similarly neither can one day, or a brief space of time, make a man blessed and happy’