Matthew Forrester

Personal Information

Overview

I have been a software developer since 2001 and have accumulated a wealth of experience from a variety of different projects. I find great enjoyment from both writing great code and finding solutions to real-life business problems.

I have experience of leading projects from inception to completion which has included tasks such as drawing up initial requirements and specifications, technology selection, development, designing and documenting the overall system, planning testing strategies, continuous delivery and release processes.

I consider myself to be a software craftsman and put significant thought into finding elegant simple solutions which can be easily understood and tested. I am always keen to learn new things even when they are far outside of my normal comfort zone and as such am regular attendee at many of the meetups and user groups around London.

Skills

JavaScript: I have used JavaScript to varying degrees throughout my career but in the last few years it has become my major technological focus. My preferred tool-kit is based around Node.JS, ExpressJS, NPM, Mocha, expect.js and Facebook's React.

HTML/CSS: Throughout my career. I strive to keep my HTML semantic both because I believe this improves code quality and helps when writing responsive CSS to enable sites to display well on many different device types.

Test Driven Development: Throughout my career, though previously called Unit Testing. I have used PHPUnit in PHP and Mocha, ESLint and Sinon.JS for JavaScript. I adore doing Test Driven Development and have delivered several projects where tests have been the main development focus, I believe this has greatly inproved the quality of the code that was produced.

RESTful API Design: Experience of RESTful API design using RAML for documentation and mocking with an emphasis on resource selection and navigatability. I also have some exposure to planning for and overcoming some eventual consistency issues that arise from the usage of RESTful patterns with microservices / distributed environments.

Haskell Having invested a lot of my personal free time into learning Haskell I have been recently given the opportunity to use it for my current role.

PHP: Many years experience, however I am now much happier and more expressive in Node.JS

SQL Databases: Experience and usage throughout my career. I have an extremely strong grasp on how to write efficient queries using groups, sub-selects, table aliases etc. I have used a range of databases however the vast majority of this time has been spent using MySQL.

NoSQL Databases (MongoDB / CouchDB / Elasticsearch / Redis): I have smaller amounts of commercial experience with a range of NoSQL databases. I am most familiar with MongoDB having used it for personal projects and at MediaEquals. I Scored 100% on both MongoDB M101 (Developer) and MongoDB M102 (DBA). I have some exposure to CouchDB, Elasticsearch and Redis when they have been used for projects I have been envolved in.

Integration: I have integrated systems via SOAP, XML-RPC, REST, SMS, OAuth (2-Step) Email and other methods.

Version Control: I have used CVS, Subversion, Mercurial and Git and have managed the last three. I prefer to use the GitHub workflow.

Systems Administration: I was using Linux (Debian/Ubuntu and RedHat) before I even started my career and have continued to do so throughout. I have a thorough understanding of TCP/IP networking, the Linux command line and have set up Apache, QMail, DJBDNS, Bind, MySQL, RabbitMQ, Firewalls (Linux and OpenBSD), MongoDB etc. I transitioned MediaEquals from a dedicated host to Amazon AWS using 3xEC2 servers, Load Balancers, RDS, Elasticache and S3. The process of building this configuration was fully documented and automated using Ansible provisioning scripts. More recently I have been using Docker, Docker Compose and am looking at Kubernetes as well as other PaaS services.

Other: I am very increasingly interested in Functional Programming and believe that sometimes (not always) it has very distinct advantages over object orientation. I am a regular attendee FunctionalJS London am currently learning Haskell after a brief journey with Clojure.

Experience

Land Technologies (Senior Developer)

Farringdon, London 09/2015 - Present

Land Technologies are trying to collate and present information for house builders to help them make decisions on possible land purchases / planning applications. The vast majority of my work so far has been planning and developing the systems to collect this information, which is later presented to users in the front end application. As well as this I have introduced linting and test driven development as part of the development process, taken a key role in architecture related decisions, identified speed bottlenecks and taken the lead in system and database administration.

Daily Mail (Senior Developer)

Kensington, London 09/2014 - 09/2015

At Daily Mail I have worked across two teams, firstly in the Content Creator team which develops a CMS for journalists to write the online version of the newspaper. I developed a small RESTful based service for storing / visualizing auto saves as well as integrating it into the rest of the system. The system was planned out and using RAML and developed using TDD principles (Express, Mocha, Elasticsearch, ESLint and Expect.JS).

Currently I am in a team of three developing a business intelligence platform using Haskell, MySQL, RabbitMQ, Etcd and Docker along with some Node.JS for associated services.

Pod Point Ltd (Senior Developer)

London: 04/2014 - 09/2014

Pod Point are selling chargers and services for running electric cars. A lot of the work was spent understanding charger to/from server communication though a RESTful back end was also produced for the Pay As you Go HTML5 mobile app using RAML and TDD (PHPUnit and Codeception). I have also planned provisioning into Amazon AWS using Ansible.

CityHook / Indigo Connect (Developer)

Dublin / London: 01/2014 - 03/2014 (Contract)

CityHook is trying to redefine the the airport transfer business. Their technology stack is based on Node.JS/Express.JS and backed primarily by a CouchDB database. A great deal of the time has been spent so far has been modularizing the existing code base to enable it to be unit testable while working on administration systems for CityHook employees and external customers.

LateCard / MediaEquals (Lead Developer)

Westminster, London: 02/2007 - 04/2008 (Contract), 04/2008 - 12/2013 (Permanent)

MediaEquals is a B2B media trading system designed to support the multiple workflows used by media agencies / publishers including BuyNow, Offer/Negotiation (with full change and cancel processes) and Auctions. It was selected and used successfully to sell all the outdoor media for the 2012 Olympic Games.

During this time I have led the majority of the development, organized releases and processes, configured nightly build systems, provisioned / configured servers (including a recent switch to Amazon AWS) and selected key services for developers such and version control and bug tracking. Outside of the purely technical skills I have had a large amount of input into requirements capture and specifications.

Note: Public website is not under development teams control.

IPC Media (Developer)

Southwalk, London: 11/2006 - 02/2007 (Contract)

This contract was for the re-release of the high traffic CountryLife.co.uk website. It utilised the Symfony framework and many Web2.0 technologies.

Pearson (Developer - Contract)

Westminster, London: - 07/2006 - 11/2006 (Contract)

Working on the Knowledgebox platform which was a Flash based interface communicating with a backend through XML. Most of the work was to analyse the existing system using Java/SAPDB and rewrite it with tests using PHP/MySQL as it was felt that this would be easier to support at customer sites.

Speechmarks.com (Owner / Developer)

Grimsby, N.E. Lincs: 09/2003 - 09/2005, 12/2005 - 07/2006

I sometimes in-between contracts worked with other freelance professionals on alternative projects. These projects have included some eCommerce websites, developing an early ORM/CMS with Hybrid Media and the Youemail platform with Creative Alliance.

Technophobia.co.uk (Developer - Contract)

Sheffield, Yorkshire: 09/2005 - 12/2005

I contracted with Technophobia to aid with development of the Haggle4Me website. My main task was to design, implement and integrate the financial control systems with the credit card payment provider.

Direct X Training (Technical Trainer - Redundant)

Grimsby, N.E. Lincs: 05/2003 - 9/2003

I trained and worked as a Technical Trainer for NVQ candidates doing IT related courses. This included running a workshop, visiting candidates at workplaces to check their progress and helping them achieve their goals.

Creative Alliance (Lead Developer - Contract)

Laceby, N.E. Lincs: 08/2002 - 05/2003

I led a small development team creating the Youemail communication platform which incorporated email, SMS notifications / payment, calendars, forums and contact management. I designed and implemented all back-end systems as well as collaborating on interface design.

QED IT Group (Developer - Company Liquidated)

Letchworth, Hertfordshire: 04/2001 - 07/2002

At QED I worked in a small team developing two Delphi based applications called EMIR and BOSS. I later led an effort to introduce more modern methods into the development process such as Unit Testing and Version Control.

Technicks (Developer)

Market Rasen, Linconshire: 05/2000 - 04/2001

I originally was the only website developer at Technicks but as the development team grew I became Development Team Leader. This role often required me to meet customers and draw up requirements and development plans.

Patents

Author of US Patent US2009/0287610 A1: Negotiation of a package of inventory, taking the form of offers and counter offers between a single major party and a plurality of minor parties.

Education

HND Computing

07/98 - 05/2000: University of Lincolnshire and Humberside 6 Distinctions, 13 Merits and 7 Passes

A Levels

07/96 - 06/98 : Franklin College, Grimsby A-Levels in Computing, Maths and Business

GCSE's

07/94 - 06/96: Lindsey School, Cleethorpes

Hobbies / Free time

The main ways I enjoy spending my free time are:

  • Listening to audio books.
  • Skating / Skateboarding around London with LFNS / Wednesday Night Skate
  • Learning Japanese.
  • Looking at new technologies through books, media and meetups.
  • Cooking
  • Personal Projects.
  • Mountain Biking
  • I have a blog where I write things which I think others will find interesting