Lead Engineer, Jan 2016—present
HireHand is an on-demand staffing platform which matches workers to temporary work in the hospitality industry. I joined the company in its infancy when the concept was being validated by the founder using a spreadsheet, and incrementally built up a platform that is now centered around a matching algorithm and an automated invitation process. Jobs are offered to self-employed workers through a chat-based app, and it’s common for jobs to be filled with a high-scoring match in minutes (and sometimes seconds) of being submitted by the client, without any internal interaction required.
I initially built a Ruby on Rails website and then later replaced the Active Record model with a backend application built in Elixir. The backend is implemented using the Event Sourcing pattern. A microservice-like architecture is used, with state held in in-memory ETS tables and local Sqlite databases. Queries through the GraphQL API are fast and allow complex matching to take place in milliseconds. The app that the workers use to interact with the platform is built using React Native (for iOS and Android) and is centered around a chat interface.
The invitation process attempts to make a trade-off between filling a job quickly (especially in the case of a last-minute job or a worker dropping out) and trying to make the best match. Factors considered in the matching include ratings given by businesses, and availability, reliability, utilisation and responsiveness of the workers. The aim is to strike a balance between giving the businesses the workers they want (based on ratings and preference for continuity), and maximising utilisation of workers so that they get the work they want.
Freelance Software Engineer, Aug 2014—Jan 2016
I worked as a remote contractor for Tradesy in a team building internal tools. This involved developing tools to support the logistics team, and some basic data analysis to direct operational decisions.
I built ComicDrop - a touch-optimised web application for drawing comics using a shared pool of user-submitted 'stickers'. The application is aimed at helping teachers to engage children in schools, and has been piloted with a few organisations in New York. The app is built using Node, React and MongoDB, and deployed to AWS.
I took over this native Android application, built for teams of estate agents to manage properties and their leads together. I modernised and refactored the codebase while adding new features and fixing outstanding issues. The application includes dashboards to track performance, and data is synchronised between users via a separate server component.
I worked in a team to finish off this mobile application which allows users of an environmental analysis service to annotate a map with notes, photos, videos and audio clips and then synchronise the data to and from a corresponding desktop app. The app was built using PhoneGap/Cordova with AngularJS and the Ionic Framework to target both Android and iOS devices.
Software Engineer, Jun 2012—Aug 2014
I joined this successful London-based start-up as it expanded from 30 employees to over 150, which has since been acquired by Microsoft. The company builds an alternative on-screen keyboard for mobile devices, which predicts what users want to write. Highlights include:
I also worked on some unreleased Android apps, and various internal dashboards showing the real-time status of the server systems.
Senior Systems Engineer, May—Oct 2008, Jan 2010—Jun 2012
I was initially employed for a six-month placement, and then worked full-time from early 2010. I was a key member of an agile engineering team, responsible for making architectural decisions. Significant projects I worked on include:
Freelance Web Developer, 2004—2010
Notable projects include:
This site, jointly owned by the major UK phone networks, provides a way for about eight hundred users to reserve and manage over forty thousand phone numbers (the 5-digit short codes used for SMS-based services). The system is written using a PHP web framework that I wrote and open-sourced. The back-end of the system allows a handful of administrators to efficiently indicate which numbers are reserved or restricted for a particular service and operator, and react to requests from users for new reservations. A log of actions taken by users and administrators are recorded. Account and user details can be browsed, searched and updated. A number of import and export tools are available, and customised statistics reports can be generated.
This site was developed for use internally by the client, and replaces a previous workflow involving the sending of Word documents between a number of authors before manually distributing to clients. The new system divides the content up into parts, sections and sub-sections and adds support for attaching assets, so that authors can make changes independently. All changes are recorded, and old revisions can be viewed when required. The document can then be published (creating a snapshot of the content) and made available to clients, who login to the system to browse or download the content.
This site was developed for a top-tier university's graduate department, who have since re-sold the system to a number of other universities. It provides a way to manage a number of graduate events, and have users book places for the events. Attendance is then monitored, with warnings flagged against students who repeatedly missed events they had booked. The system is also used to run promotional e-mail campaigns to notify relevant students of upcoming events.
The content management system was developed for a freelance client to be re-used for a number of different high-profile sites. The system was designed to be modular so that extra components could be added on a per-client basis – these components included simple news and events managers, a component for providing flight schedules, and a component for managing online advertising campaigns. Additionally, a plug-in system was developed for providing dynamic elements to the public-facing site (often in conjunction with back-end components). Pages can be arranged hierarchically, with the option to draft and review changes before publishing them.
Department of Computing, MEng Computing (2:1)
Server-side (scalable and reliable back-end systems), web-based (accessible and responsive front-end applications, SPAs), and mobile (native, hybrid).
AWS (EC2, SQS, RDS, CloudFormation, CodePipeline, etc.), PostgreSQL, MySQL, Cassandra, MongoDB, CouchDB, Redis, RabbitMQ, TensorFlow, Jupyter, Docker, Android, iOS. Interest: AI/ML, blockchain.