I'm a full-stack software engineer with depth and breadth of experience across front- and back-end platforms. I can help your company quickly build products to a professional standard. I'm currently available for remote freelance work. Please get in touch if you'd like to work together.
SwiftKey Jun 2012—Aug 2014
I had the pleasure of witnessing this successful London-based start-up expand from 30 employees to over 150, and spread over a number of locations worldwide. The company primarily builds an alternative Android keyboard, which predicts what users want to write. Most of my work is confidential, but some 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 saved to 'the cloud' and then synchronised and merged with the language models on their other devices. This scalable and robust system was developed mainly using Clojure, and runs on AWS.
I also had the opportunity to work on some unreleased Android apps, and various internal dashboards showing the real-time status of the server systems.
Formicary May—Oct 2008, Jan 2010—Jun 2012
Senior Systems Engineer
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, and planning and delivering solutions on time. 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.
Freelance Web Development 2004—2012
Notable projects include:
A '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 (short codes). 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.
Imperial College, London 2005—2009
Department of Computing, MEng Computing (2:1)
Third and fourth year courses included: Advanced Databases, Computer Interfacing, Simulation and Modelling, Software Engineering, Distributed Systems, Bioinformatics, Modal and Temporal Logic, Advanced Issues in Object Oriented Programming, Computational Finance, Program Analysis, Parallel Algorithms and Network Security.
I led the second year group project, which involved developing a successful online browser-based space-themed trading game. The third year group project involved sending, receiving and scheduling the transmission of digital TV over a network via multicast.
Final year individual project involved the interpretation and analysis of images to generate lineographic drawings (on an etch-a-sketch).
Server-side (scalable and reliable back-end systems), web-based (accessible and reactive front-end applications), and mobile (native Android and iOS, hybrid).
AWS (EC2, SQS, SES, RDS, CloudFormation, Elastic Beanstalk), MySQL, Cassandra, MongoDB, CouchDB, Redis, RabbitMQ, Vagrant, Android, iOS, Cordova/PhoneGap.