Projects

These are some of the noteworthy projects I've worked on, either because of their significance or novelty.

Kinsta Edge Caching

Kinsta Edge Caching

I was the main member of the development team and product owner for the feature that allowed customers to enable page caching on Cloudflare's network. In tests this increased the speed of sites by up to 40%, but also reduce costs for both the customers and us.

To accomplish this I liaised with the team responsible with developing the GCP & Cloudflare workers, integrating their work with the core website. This included a UI for enabling and configuring the service, and a GraphQL API for queuing actions to Google Cloud's Pub/Sub service. This also included helping to rework how customer site analytics is tracked, since serving from the cache affected this.

As the development owner, I worked with the marketing team to plan the closed beta and launch, including writing and managing the beta feedback, and digesting it for senior management. I was also the subject of a Q&A meeting where the sales & support teams would ask me about the service.

After the release, I was also tasked with writing and monitoring a script that gradually enabled the feature for sites that were compatible, and hadn't opted out of automatic enabling.

Skills:
TypeScript
React
Node
RethinkDB
Redis
Google Pub/Sub
GraphQL
Elasticsearch
Project Ownership
Problem-solving
Requirements Gathering
Documentation Writing
Cross-department Communication

Kinsta Static Site Hosting

This project was part of the company branching out into the Cloud Hosting space. It allows customers to create Static Sites with a simple interface, but hosted on our network renowned for its speed.

Once Edge Caching needed less attention, I joined this project as a contributor. I was later given the project lead role, with the support of the technical lead and previous project lead who brought me up to speed.

As well as help with the development of the UI and API, I was also there for the technical lead to bounce ideas off, discuss requirements with owners of microservices we used, highlight potential security issues, and help test with different Static Site Generators, such as Gatsby and NextJS.

Similar to Edge Caching, I also helped manage the rollout of the release, communicating with other departments and helping to write public documentation & articles for marketing.

Skills:
TypeScript
React
Node
RethinkDB
Redis
GraphQL
GCP
Microservices
Project Ownership
Documentation Writing
Cross-department Communication

Kinsta CDN

My first major project at Kinsta was helping to migrate customers from our previous CDN partner to Cloudflare.

The improved costs also meant that we chose to automatically enable the CDN for sites that didn't opt out, and would benefit from better performance and lower costs. I helped to write, run, and monitor the script that did this.

The system for customer analytics needed a substantial rework to handle the new way it needed to be measured, while supporting the fact that it would be a gradual switchover and would need to handle two different data sources in parallel.
I also needed to help adjust how CDN overage fees are calculated to reflect our improved costs, and add a grace period where fees were waived. The UI also needed updating to reflect changes and add notifications.

This was a legacy system nobody had much knowledge of, so I needed to figure it all out myself.
I documented how everything worked, and later supported a new team that was tasked with owning the feature.

Skills:
TypeScript
React
Node
RethinkDB
Redis
GraphQL
Elasticsearch
Documentation Writing
Legacy Systems
Mentoring

Kinsta's Development Growth Workgroup

As the company was growing, we decided that we needed to move away from a flat hierarchy to one where it was clearer that people were at different stages of their career with different levels of experience. We also wanted to move to a system where we were more transparent about how people could move up the company. The goal was not to have a linear progression up the company, but one that offered alternative pathways to distinct roles, such as a more senior contributor role instead of a technical management role.

The Head of Developer experience picked me and 3 other seasoned developers to help cement the requirements we'd need developers to hit, before they could move up to a new role, and what potential pathways there could be. We chose to use Progression's framework, as it allowed us to store all these different role, skill and pathway definitions. When using the site for appraisals, a team member's progress can be tracked so they have a clear view of what targets they need to progress.

Despite being busy managing other projects, I was considered a key contributor to these definitions, as well as the resident expert in the Progression framework and, as a former team lead, I was a core advisor on how we should use it.

Skills:
Communication
Video Meetings
Planning
Requirements Gathering
Documentation Writing

EducationCity Mobile App

Novabods

Novabods was EducationCity's first sister product - a gamified collection of educational games, aimed at a new market using both a site and hybrid mobile app. It had heavy use of HTML canvas animations, following animations from the art department, and ported over existing games from our main product. Having previously put forward a proposal about Gamification for our main product, after taking a short course on it, I believe that helped inform on the design of the product.

Despite not being senior/lead at the time, I put forward a case for a more future-proof stack that used the skills people already had, which everyone agreed with. I also created the AngularJS skeleton using more structured patterns that were appearing in the more opinionated Angular 2 beta, both because it was better and so everyone learnt that approach when Angular 2+ became available.

Between the start and release of the product I took on several roles, including Senior, Scrum Master/Dev Owner & team leader.

Skills:
PHP
Laravel (Lumen)
TypeScript
Webpack
Angular
CreateJS
HTML Canvas
Mobile Development
Cordova
Xamarin
PhoneGap

EducationCity Online Multiplayer

We had an old multiplayer Flash game with a SmartFoxServer back-end I was given to update and maintain. After that, I was tasked with creating a new one with the latest version of SmartFoxServer which could use Java, rather than ActionScript.

It was a word search game that used a hexagonal grid of various sizes. We wanted the grid to be aware of all the words at generation-time to solve various cases, including; having enough words for the age range, not having inappropriate words, protecting against simple cheats.

With many millions of possible pathways, traversing all pathways took quite some time - approx 12-30s was seen in a similar game with simpler rules. I developed an approach, inspired by Dijkstra's algorithm and the Dict structure, to traverse the grid-space and word-space at the same time during generation, skipping redundant paths and replacing nodes that created a banned word. This took generation down to less than 50ms (5-25ms locally).

The work I did here became the template for future multiplayer games.

Skills:
Java
Flash
Algorithms
Data Structures
Optimization
Socket connections

EducationCity Database Migration

SymmetricDS

The company decided it was time to work on a V2 of its product, and I was given the responsibility of migrating the product database from a fairly messy one to one designed by the architecture team, and they set up a SymmetricDS server for me to work with.

This involved writing transformers in Java that would convert the data in the old databases, into a new database.
It wasn't as straight-forward as renaming and relocating. A lot of data moved to separate tables, values needed converting, & relationships needed changing.

It was a lot of responsibility, but fortunately everything went well.

Skills:
Java
SymmetricDS
SQL