πŸ‘¨β€πŸ’» Joe Freeman

I'm a generalist software engineer with experience across server, web and mobile platforms. I quickly build products to a professional standard. I'm reliable, work efficiently, communicate effectively, and take pride in my work.

hello@joef.uk

Experience

Genpax

Engineering Manager, May 2022—present

Genpax is building a game-changing pathogen analysis platform - radically increasing the utility, scalability, and speed with which whole genome sequencing (WGS) data delivers infection control solutions for human and animal healthcare worldwide. The company has developed unique solutions to address the challenges, and I'm leading a team to provide access to these solutions in a fully scalable system.

genpax.co

Optimal Labs

Software Engineer, Aug 2020—May 2022

Optimal is deploying fully autonomous greenhouses worldwide. I joined the company as a software engineer in a small team of modelling/control engineers, taking over previously outsourced work.

Notable achievements are:

  • Modernising and simplifying architecture to prioritise ease of development and speed of experimentation
  • Redesign and development of the user interface to facilitate observation of greenhouse state and evaluating performance of control/prediction processes
  • Reliable hosting of multi-stage, compuationally expensive optimisation processes
  • Development of interfaces with 3rd-party control hardware and external APIs
  • Mentoring the rest of the team in software engineering principles, and working with other team members to design components
  • Design and development of critical monitoring processes
  • Developing an understanding of model predictive control (MPC) techniques and plant science

optimal.ag

HireHand

Lead Engineer, Jan 2016—Aug 2020

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.

www.hirehand.co.uk

Self-employed

Freelance Software Engineer, Aug 2014—Jan 2016

Highlights include:

An LA-based fashion/e-commerce startup

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.

An online comic drawing app

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.

An Android app for estate agent management

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.

A mobile app for map annotation

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.

SwiftKey

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:

  • Working on the server-side of personalisation, where language models are generated for users based on the content they have previously created on various online services, such as Gmail, Facebook and Twitter. This involved improving the reliability and scalability of the existing system by modernising the architecture to run on AWS and implementing auto-scaling. I also setup continuous deployment, worked with third-party APIs and added new features.
  • Designing and developing the back-up and sync system, which allows users' language models to be incrementally saved to 'the cloud' and then synchronised and merged with the language models on their other devices. This scalable and robust system was developed in Clojure, and runs on AWS. It also involved developing patents which have been successfully granted internationally.

I also worked on some unreleased Android apps, and various internal dashboards showing the real-time status of the server systems.

www.swiftkey.com

Formicary

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:

  • A browser-based chat client, written using the Ext JS framework. The server component provides an abstraction over the underlying chat protocol so that the chat system itself can be swapped with ease (at the time, supported platforms were Microsoft OCS/Lync, and Parlano MindAlign). Messages are delivered reliably to the browser in real-time. The multi-threaded system is secure, horizontally scalable and resilient – it’s currently in use by top-tier banks, among other clients.
  • A BlackBerry chat client, building upon the existing infrastructure provided by the browser-based client, with the addition of a mobile 'broker' server component responsible for communicating with the mobile device. The main challenge was to come up with a way to reduce the data transmitted such that both latency and operational costs are reduced.
  • An emulator for a legacy chat system. This was a bespoke project that satisfied the requirements of several clients. It emulates a subset of the behaviour of a legacy chat system and hence provides the ability to re-route commands and events to and from an alternative chat system using a separate protocol.

www.formicary.net, www.mindlinksoft.com

Self-employed

Freelance Web Developer, 2004—2010

Notable projects include:

  • The UK 'short code' management system

    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.

  • A document management/authoring/versioning system

    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.

  • An event promotion and booking system

    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.

  • A content management system

    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.

Education

Imperial College, London

2005—2009

Department of Computing, MEng Computing (2:1)

Skills

Platforms

Server-side (scalable and reliable back-end systems), web-based (accessible and responsive front-end applications, SPAs), and mobile (native, hybrid).

Languages

Elixir/Erlang, Python, Clojure, Ruby, JavaScript/TypeScript (React/Next.js, Tailwind/Blueprint, Node, etc.), C#/.NET, Java, PHP.

Technologies

AWS, GCP, PostgreSQL, MySQL, Redis, OTP, RabbitMQ, GraphQL, Pandas, Jupyter, Docker, Android, iOS.