I am a Senior Software Engineer currently working at EVRYTHNG. I have over 5 years experience developing high-quality applications that are robust and scalable. I've also led a number of engineering teams in delivering and designing the architecture for these solutions.
- Designing distributed system architectures
- Fluency with cloud providers particularly the AWS ecosystem
- Databases such as MongoDB, AWS DynamoDB and AWS Redshift
- Producing high-quality code and following software design patterns
- Leading teams of engineers
- Building web front-ends
- Intermediate knowledge of Clojure
- In 2016 I gave a talk at FullStack Conference in London about Controlling the Internet of Things with the Web
- Promoted after one year at EVRYTHNG to Senior Software Engineer
- A data analysis project looking at whether being contacted by a political party during an election campaign meant that they voted for that party's candidate in the 2012 US Presidential election
- Senior Software Engineer at EVRYTHNG
August 2015 – Present
In this role I've been developing and leading many of the Java and Node components EVRYTHNG uses as part of its cloud platform for the Internet of Things (IoT). This has included collaboratively designing the architecture of the company's analytics solution. We were required to build a product that could provide real-time analytics on data that was being received by our platform at a rate of over 10,000 times per minute. To accomplish this we used AWS Kinesis and Apache Spark running on AWS EMR to aggregate the throughput and store the results in DynamoDB. There is an API for customers to query these aggregations served by a Node.js back-end.
Another project I delivered was an ETL architecture that extracted data from EVRYTHNG's MongoDB database and loaded it into AWS Redshift so that it could be analysed more easily by Business Analysts. The tool needed to handle hundreds of millions of documents and deliver them to Redshift rapidly. In order to achieve this I designed a Java application that used Netty and RxJava to send data to AWS Kinesis. Kinesis then put the transformed data into S3 which Redshift could store in its database. This ensured we had a performant system that could achieve high throughput.
During my time at EVRYTHNG I've also helped to enhance various parts of their API and platform such as writing a Two Factor Authentication service in Java, implementing a request rate limiting component in Node.js and enabling our applications to be hosted using Docker. In addition, I led on improvements to the Node.js team such as agreeing on common standards that everyone in the team should follow, increasing our test coverage across our projects and facilitating more knowledge-sharing.
Technologies used: Node.js, Java, Netty, Apache Spark, RxJava, Docker, MongoDB, DynamoDB, AWS ECS, AWS Lambda, AWS Kinesis
- Software Engineer at Axisto Media
December 2013 – August 2015
I was responsible for building and managing a number of Node.js applications that supported Axisto Media's core business of delivering video webcasting tools. This included managing MongoDB and Postgres databases, server deployments and dealing with potential security vulnerabilities. I also developed the front-end of these applications.
After arriving at Axisto I modernised much of the workflow and tooling of the company's applications. I implemented Test-Driven Development on the back-end using tools such as Mocha. On the front-end I introduced Browserify for loading modules, Karma and Mocha for UI testing and Grunt for handling common tasks such as compiling assets for development and production environments.
Technologies used: Node.js, MongoDB, Postgres, AWS EC2, Docker, Backbone.js, CSS3
May 2012 – December 2013
In this role I primarily worked on a project for Honda Europe helping to build the front-end of a large, responsive website that went live in over 20 European countries. For part of this project we used Backbone to develop the more complex and interactive components of the website and followed a TDD approach. I also had the opportunity to lead others when building some of these more challenging components. We used Node.js to support our front-end workflow by running tests and managing front-end assets.
One highlight of this role was our group winning the Interface Development team's "hack sessions" competition in the summer of 2012. Our project was an application displaying LBi staff worldwide using Node.js.
Technologies used: Node.js, Backbone.js, CSS3
- Web Developer at global3digital
October 2011 – May 2012
I built investor relations websites for corporate clients mainly listed on the London Stock Exchange using Drupal. I was responsible for both the back-end and the front-end.
- Web Developer at Bright Sites Consulting
April 2011 – October 2011
I worked with a team of four on building websites for a range of clients which included a DIY company in London, a graphic designer and a lottery company.
N.B. I began teaching myself HTML and CSS in September 2009. From September 2007 until April 2010 I had a number of roles unrelated to web development including: 'Graduate Trainee' at a local council, 'Parliamentary Analyst' with mySociety and 'Web Content Editor' at Her Majesty's Inspectorate of Constabulary.
- University of Sheffield
2004 – 2007
- 2:1 in BA (Hons) History and Politics
- Davenant Foundation School
1996 – 2003
- A-Levels: Psychology (A), History (B), English Language (C)
- AS-Level: Religious Education (D)
- GCSEs: 1 A*, 3 As, 6 Bs