Thomas C. Gray BSc (Hons), Software Engineer

Sheffield, United Kingdom - LinkedIn - GitHub

Currently working remotely with Pure Escapes, helping design and build bespoke luxury holiday booking solutions. I have a strong work history, with great references available on request.

Contract full-stack software engineer based in Sheffield, UK. Working daily in Node & React, with 6+ years of industry experience working in fintech, B2B webapps, streaming & e-commerce.

I have experience with a number of backend technologies (most specifically Express, Hapi and Laravel) and a wide variety of frontend technologies, including React, Vue and Svelte. I pride myself on designing and building software that is robust, maintainable and performant.

I have helped design, implement and deliver backend and frontend systems for a variety of national clients, both as part of a team and as a senior engineer. As necessary, I have also acted in interim product ownership roles.


Skills and Expertise


Live Skillset - Daily Technology Use

  • Backend Technologies
    • Node JS
    • Express
    • Hapi
    • React SSR
  • Frontend Technologies
    • Typescript
    • React JS
    • Redux
    • Styled Components
    • ES6 Javascript
    • CSS Development

Techniques and Environments

  • Agile Workflow
    • SCRUM
    • Refinement & Sprint Planning
    • Story Point Estimating
    • Retrospective
  • OOP
  • RESTful APIs
  • Microservice Architecture
  • ES6 Javascript Standard

Tertiary Skills

  • Webpack & Parcel JS
  • Docker Setup and Usage
  • VCM (Git & SVN)
  • Gulp - Workflow & Asset Management
  • S.O.L.I.D Design Principles
  • Design Pattern Recognition and Implementation

Current Role

Pure Escapes

September 2019 - Present
Senior Full Stack Software Engineer - Contract
pure-escapes.com

Technologies used in role: React, Redux,Typescript, Styled Components, Tailwind, Node, Express

My primary role at Pure Escapes has been to help deliver features and integrations on the company's industry leading bespoke-holiday booking webapp. With this app, travel agents and sales representatives are able to log in, search for resorts and accommodations, and create complex booking arrangements.

These bookings feature bespoke accommodation rates and offers, addons, ground services, travel arrangements and more, resulting in a holiday that is entirely custom tailored to the end user. Each of these individual elements can have their own offers, discounts, and booking rules applied.

These features have been delivered as vertical slices of frontend and backend implementations, working in React and Redux with styled components in Typescript on the frontend. The backend work was delivered in modern Express Node APIs across multiple services, both as the only developer and also as part of a team and pairing.

Rebuild of Travel Agent’s Booking Builder Experience
Together with another developer, I helped to rebuild the travel agent’s booking builder experience to be more performant, easier to maintain, and easier to test.

The booking builder experience was one of the first developed, months before the start of my contract, and was proving to be a point of frustration for the agents using the system - it was slow, often crashed, and difficult to navigate. Furthermore, as a core user journey, these problems were being hit constantly by users of the system.

My colleague and I were able to refactor the whole experience to make proper use of Redux patterns, correct use of React Hooks, and numerous other performance fixes. The end result was a core user journey that was now stable, performant and easier for developers to maintain.

Re-styling the Travel Agent Booking Builder Experience from designs
During the development of the app, we realised that the original designs of the booking builder experience did not account for many options that could occur. For example, all the different types of accommodations, transfers, non-happy paths, etc.

When we received new designs, I was tasked with restyling the entire booking builder experience to match. I completed this redesign using a combination of Styled Components, alongside minor utility CSS classes. I was able to get the webapp to match the design while maintaining the rendering of error scenarios, non happy paths, and extreme data cases.

Designing and Implementing Changes to Offers and Discounts Calculations
I have also done work inside of Pure Escapes backend services and calculators. A primary area of focus was in the “offers” calculator. This is a system that takes offers and discounts, as defined in a spreadsheet, and applies them to bookings. This gives the user feedback on what discounts and price reductions they can and will receive.

The system needs to be extremely performant, as the user requires constant feedback of what discounts they are receiving at the point in time that they change the booking. It also has to be extremely flexible, as offers can take many different shapes (stay X number of nights and get Y free, children travel X% reduced, meal plans are X% reduced during Y date range, etc.)

As this offers calculator was built over time, to support new types of offers as and when required, it became very difficult to maintain and make changes too.

Therefore, another developer and I were tasked with refactoring the offers calculator to be more future proof.

Adding features and improving performance to our administration webapp
As mentioned, Pure Escapes also maintains a secondary webapp, used to perform administrative duties (updating hotel information, offer information, uploading new product rates, etc.)

This webapp is built in React with React Admin serving as the core framework.

I have done a lot of work in this webapp, improving performance and features, working with React Admin components and tooling, plus many custom implementations. React admin makes many redundant requests, and I have been successful in several feature sets to reduce this number down, thus improving performance of the app.

Employment History

BBC TV & Radio

June 2018 - September 2019 (1 year, 3 months)
Software Engineer - Contract
bbc.co.uk

Technologies used in role: Node JS, React JS, Emotion JS, Redux

Working with the discovery team of BBC iPlayer for TVs. Helping design and build a future-proof, maintainable foundation for Home, Channels, Categories, Search and more on BBC iPlayer.

I've had the pleasure to work across a number of teams for the BBC, aiming to deliver new feature sets and engineering excellence to the discovery mechanisms and playback functionality of iPlayer on "big screens" (TVs, game consoles and set-top boxes). I have also had the opportunity to contribute to a number of team-agnostic projects across the TV platform.

Optimising a department wide React component library
At the start of my contract, the TV React shared component library was only in partial use due to its run time speed issues. I was tasked with identifying the cause and seeing if anything could be done to improve the speed.

I was able to identify Styled Components JS as a primary cause, as well as the actual composition of the React components themselves. By re-writing the components to increase render speed, and switching to Emotion JS, we were able to actually start making use of the component library in anger.

Re-architecting “experience” delivery from the server to client
I have led an effort to re-think and re-architect how our API services deliver experiences to the iPlayer client. This approach is making extensive use of React, Emotion JS and Redux on the client, helping get iPlayer to a place more closely resembling a modern SPA.

Initial development of the programme page
One of my first large projects was as one of two developers developing a programme page for iPlayer on TVs. This was one of the first sections of iPlayer to make use of the shared component library, and so was an excellent opportunity to deliver a user experience using modern React standards.

Key developer of the revamped Search experience
I helped develop the brand new Search experience, migrating from an entirely client driven system to one delivered through the SSR solution. Built entirely in React, rendered on the server and assembled in the client, the new Search experience increased Search conversion by 8% for users while delivering an experience that is lighter, faster, and easier to maintain.

Zeavo

September 2017 - June 2018 (10 months)
Web Developer - Salaried Contract
zeavo.com

Technologies used in role: Node JS, Hapi, Ember JS, Bespoke PHP, C# Integration

Designing and developing high-availability, secure, fast enterprise Node APIs for the fin-tech market, as well as designing and implementing multiple frontend solutions for both customer and business level users.

My time at Zeavo was primarily spent working on APIs serving various business needs for multiple clients - specifically, the API powering DebtKit - Zeavo's industry-leading debt management solution.

This work was primarily enhancing DebtKit, Zeavo’s industry-leading debt management platform. The work was in Node 8, using modern frameworks and technologies (Hapi JS, Joi, async/await, Bluebird JS, etc.) plus numerous intergrations with AWS (S3 Storage, State Machine Workflow Engines)

I was the lead developer on numerous features, including bespoke implementations of the JSON API specification (inclusion of related resources, filtering, side-posting), file upload and storage solutions (including integration with AWS S3), design of automation and workflow systems.

I also helped to design and implement numerous front-end feature sets. These were built in either Vue.js, when the feature required integrating with a current PHP frontend, or a standalone Ember JS SPA.

Frontend features were built with full HTML5 and SCSS specifications in mind, and included complex frontend functionality around state management, refreshing data from the server, accessibility concerns and automated testing.

Barbon Insurance Group

March 2016 - September 2017 (1 year 6 months)
Software Engineer - Contract
barbon.com

Worked with RESTul APIs exposing complex insurance and referencing data as well as consumer facing SPAs that consumed that data.

My primary role at Barbon was working on the Homelet branded insurance and referencing platform in a number of projects aimed at revitalising said platform via a stronger technology infrastructure.

I was the lead dev on a project to replace a Symfony 2 monolithic app with an API service, which is now used by thousands of customers annually. I also developed a number of API services aimed at providing easier consumption of read-only insurance data, such as the questions and content that powers SPAs, data on the Barbon insurance products, and information on insurance quotes.

I have also helped develop a number of smaller microservices that are used by multiple frontend web apps throughout the greater Barbon product set, such as postcode address lookups and postcode risk flood and subsidence service lookups.

Finally, I was also a key part of the team at Barbon developing multiple SPA (single page application) webapps for use with the aforementioned APIs. These SPAs were built in React.js with extensive use of 3rd party libraries (via NPM integration) and entirely in the latest ES6 and modern React development practices. Several key SPA features developed by myself are now in use on multiple production SPAs across the Barbon platform.

Evoluted

December 2014 - March 2016 (1 year 4 months)
Web Developer
evoluted.net

Technologies used in role: PHP, CakePHP, MySQL, SASS, Gulp, Bootstrap

As a backend developer at Evoluted, I rapidly developed bespoke websites for a variety of clients, including internal Evoluted systems. This was done using a full LAMP stack, based around CakePHP and Evoluted’s own CMS. I modified and extended our CMS to suit the particular client’s needs, before taking pre-built HTML templates and wiring up the frontend.

I was often required to amend the HTML templates as development work continued, and client requirements evolved - this was doing using the original SASS files, combined with Evoluted’s extensive NPM plugin based workflow.

Sites were often worked on by multiple developers before completion - therefore, a comprehensive system of Git and Vagrant was employed by all developers to ensure workspace and project consistency.

Pryor Marking Technology

March 2014 - December 2014 (9 months)
Software Engineer
pryormarking.com

Employed as a Software Engineer, I worked in C# and the .NET framework on TraceableIT, a marking and traceability software suite. I also designed and developed web apps for internal Pryor use.

On TraceableIT I was responsible for the development of new core features, custom modules of functionality for specific clients and vendors, and integrating new hardware as the hardware became available.

I developed several web apps for internal use at Pryor, including an entirely bespoke project management tool and a web-based tool to assist in the internationalisation of various Pryor assets. Both of these web apps were built with LAMP stacks, using Laravel 4.2 with a Gulp & SASS based frontend.

High Tech Click

June 2013 - March 2014 (10 months & 1 year 6 months on university placement)
Technical Developer
hightechclick.com

I was employed at HTC as a Technical Developer. I worked on a variety of internal and external web apps and sites, all developed in PHP 5.6 using a custom build of Zend Framework 2, Doctrine ORM, Twig templating and LESS styling.

My primary project was as part of a team developing a custom ecommerce platform, designed to handle every aspect of an ecommerce site, from client facing product pages to internal stock management. As part of this team I was responsible for deal and discount systems, asset (banners and ads) CMS management, and I was lead on templating and styling the client-facing frontend.


Education


Sheffield Hallam University

September 2009 - June 2013
shu.ac.uk

Software Engineering
Graduated First Class Honours in June 2013

Modules of Interest Studied

Case Studies in Software Design

Management of IT Projects

Frameworks and Architectures

Database Systems for Software Applications

Web Application Development

Advanced Databases and Client-Server Applications