I am a passionate, inquisitive software developer who loves delivering customer value and eliminating waste. I like to let my work and experience speak for itself.
Employment
CircleCI
Senior Staff Software Engineer October 2020 onwards
Staff Software Engineer January 2019 to October 2020
- Technical leadership of the team responsible for developing and maintaining the core multi-tenant execution platform
- Balancing directly customer-facing feature development with maintainance of platform infrastructure
- Managing that platform infrastructure running thousands of nodes executing isolated customer workloads
- Handling gradual rollout of frequent changes across a microservice architecture while minimising impact to current customers
- Practiced true continuous deployment of changes from merge to production
- Expanding effectiveness of automated test coverage using more realistic cross-service integration scenarios
- Regular optimisation of deployment pipelines with the goal of sub-5-minute deployments and easy, safe rollbacks
- Led architecture and development of the self-hosted runner offering
- Re-working existing systems to handle ever increasing scale as the company grew to over 3 million daily builds
Ministry of Justice Digital
Senior WebOps Engineer (Contract) January 2017 to July 2018
Within Her Majesty's Prison and Probation Service
- Coaching development teams in operational concerns and architecture
- Helping spread and follow GDS principles for effective user-led service design, in product teams as well as operations
- Designing operational approaches that enable development teams to focus on their specific products
- Leading on the design of infrastructure architecture that requires minimal organisational footprint by making use of SaaS and PaaS whereever feasible
- Helping with software development when needed
- Assisting with architectural design that moves away from large, siloed, slow-moving, monolithic applications and towards smaller interconnected services
- Assisting with transition of legacy on-premise infrastructure into Microsoft Azure
Trading Technologies
Software Engineer (Contract) April 2016 to December 2016
- Building a rich, complex, desktop-like application for the browser
- Using a modern JavaScript stack and demonstrating benefits to colleagues
- Making heavy use of unit-testing, especially in the data layer
- Promoting a more modular and independent approach to the development of the company's applications
- Worked remotely from the UK with colleagues based in Chicago
Department for Work and Pensions
WebOps Engineer (Contract) January 2016 to March 2016
- Managing server and network setup and configuration for the service team
- Introducing use of Puppet and r10k for repeatable automated server configuration
- Helping spread and follow GDS principles for effective user-led service design
- Leading on architectural designs and approaches for the service
- Supporting the team in a move to a more agile and iterative continuous delivery mode
- Implementing server-side logic for citizen facing service and assisting with front-end build
Sky Bet Italia
Software/DevOps Consultant (Contract) April 2015 to December 2015
- Leading system and software architecture for a ground-up build of the betting application and platform
- Leading the implementation and direction of the entirely React-based front-end user-facing application
- Embracing infrastructure-as-code principles with the DevOps team
- Automating all the thingsā¢ via Terraform, Chef and Jenkins
Sky Betting and Gaming (BSkyB)
Software Engineer (Contract) July 2014 to March 2015
- Architected and implemented a React.js & RabbitMQ based real-time UI for use by the internal trading team
- Designed and ran a 10 week Node.js training course for over 20 staff
- Worked in DevOps team doing operational maintainance and systems configuration changes via Chef
- Lead developer for Super6 website and app, reaching #1 in the App store and well over 500k weekly unique players
- Made improvements to continuous delivery flow by reducing build times and build complexity
- Led drive to modernise Node.js use and embrace separate applications using small modules and explicit dependencies
- Upgraded and tested entire codebase to run on PHP 5.5 instead of PHP 5.3
- Expanded use of Vagrant to improve configuration consistency between development and production, as well as new developer ramp-up time
- Introduced a business-friendly dashboard system running Dashing to display on TVs around the office via Raspberry Pis
- Improved performance of backend data pipeline via Node.js optimisation and profiling, as well as reducing workload on MongoDB
BJSS Limited
Software Engineer (Contract)
February 2013 to June 2014
Working on-site with a major UK Broadband Provider
- Adding new features to a legacy codebase
- Pushed for a more collaborative requirements process
- Introduced feature toggles to enable more continuous integration and delivery
- Worked alongside BJSS consultants and in-house employees
- Improvements to stability of continuous integration platform
- Made popular UX improvements to internal admin tooling
Web Loans Processing Ltd
Software Engineering Team Lead October 2012 to January 2013
- Managed a team of 5 developers in a satellite office
- Produced a customer portal & admin system for a pre-paid debit card product
- Maintenance and refinement of existing legacy systems
- Improved fault tolerance, monitoring and environmental configuration handling
- Introduced schema versioning
- Introduced Continuous Integration and expanded use of unit testing
- Improved collaboration between clients and developers
- Shortened iteration cycles to improve feedback loop
- Performed DevOps tasks for product deployment and server configuration
Sky Betting and Gaming (BSkyB)
Lead Software Engineer September 2011 to September 2012
Software Engineer April 2011 to September 2011
- Managed a team of 8 developers and testers
- Worked collaboratively with BA and product owner on requirements
- Built responsive portal for HTML5-based mobile Sky Vegas offering
- Led movement to further modularise front-end javascript using AMD, and began unit testing of front-end javascript code
- Integrated work from 3rd-party suppliers, both and agile and not
- Saw release cycles drop from months to weeks to days to daily
- Part of the project to rebuilt SkyBet.com in-house where previously the entire site was a 3rd party white-label deployment
- Built the back-end data processing pipeline that feeds data from OpenBet to in-house systems, using Node.js and RabbitMQ
- Profiling and monitoring application systems to improve performance
epiGenesys
Senior Developer June 2010 to March 2011
Software Developer June 2009 to June 2010
- A wholly owned University of Sheffield subsidiary company
- Handled all aspects, from client liaison to development to deployment
- Primary product was a flexible clinical trial data capture and reporting system
- Partially responsbile for evaluating and teaching 4th year students about software delivery via Genesys Solutions
Open Source
Reading and understanding other people's code has taught me far more about software development than anything else.
Every production system I've worked on has involved a large amount of open source software in its toolchain and platform. I'm keen to make sure this doesn't become a one-way transaction, and make a point of always contributing bug reports, fixes and improvements to the original authors. Much of this activity can be seen on my GitHub profile.
Education
I hold a First Class Masters Degree with Honours in Computer Science and Mathematics from the University of Sheffield.
Skills
Server Side
- Go
- Clojure
- Node.js
- Automated Testing
- HTTP
- SQL
- AMQP / RabbitMQ
- Redis
- MongoDB
Front-end
- JavaScript
- React.js
- Redux
- Webpack
- Automated Testing
- HTML5 / CSS3
- Responsive Design
Operations
- Terraform
- Continuous Integration
- Git
- Bash Scripting
- GNU/Linux
Agility
- BDD
- TDD
- Scrum
- Kanban
- Continuous Delivery
- Information Radiators
- Collaboration
- User-needs
- Value focus