James Barnett

Summary

I'm a backend engineer in the Department for Work and Pensions. Currently building services with Java, but have worked with Scala, Node.js, and Python in the past.

Development Approach

I favour dependency injection to simplify testing and aim to build services with an architecture that ideally separates business logic from external service interactions. Where applicable, I try to keep classes immutable and prefer relying on the type system and compiler to find errors early. With that said, I work as part of a team and adapt to the way they work, proposing changes I think could be valuable for feedback.

Key Technologies

Java (8 and onwards), Scala 2, Python, JavaScript, Spring Boot, Finatra, Slick, Postgres, MongoDB, MySQL, AWS Aurora, AWS RDS, Kafka, RESTful APIs, Terraform, Docker, Git, Mockito, JUnit

Experience

Department for Work and Pensions

Senior Software Engineer - April 2021 to Present

Backend engineer helping develop the Universal Credit system. Working with microservices as separate modules within a monorepo. Collaborated with other disciplines (content design, business analysts, delivery manager, product manager, and others) and provided technical input to help plan and develop features.

Services were written with a Java 21 backend, with mustache templates used for the presentation layer. RESTful APIs were provided for synchronous inter-service communication, with Kafka for message handling and MongoDB for persistence. Worked with a weekly release cycle. Scale was a constant consideration given the millions of Universal Credit claimants, with regular performance and regression testing. Due to the sensitive and personal nature of the data, care and caution was taken when storing and logging data, and obfuscation used when debugging incidents using preview environments.

Also took on line management responsibilities, helped mentor junior engineers, and interview candidates.

Kobalt Music

Senior Software Engineer - August 2019 to April 2021

Backend engineer on the Chain of Title team - determining what royalties should be paid to various interested parties. Web service was built using Spring Boot, and Spring Cloud Streams with the Kafka Streams Binder for the async interface. Terraform was used to build infrastructure, with resource tagging to help determine costs. AWS Lambda was used, alongside Data Migration Service and Step Functions to handle a daily migration job. An Oracle database was our source of truth, with data migrated to AWS RDS MySQL and Aurora Postgres. Used CircleCI for continuous delivery, with code going from Pull Request, triggering tests, a Docker build and push, then deploy to ECS using AWS Fargate. Request tracing and montioring was provided through DataDog APM.

Initially was on the Sync team - providing an interface to allow users to easily and quickly search for music to provide third parties. Backend was written with Scala using Akka HTTP, using ElasticSearch to store documents for search. Used BitBucket as a repository store, with Bamboo for continuous delivery.

Schibsted

Senior Software Engineer - July 2018 to August 2019
Software Engineer - June 2015 to July 2018

Backend engineer in Ads APIs Team working on greenfield projects. Built ad booking, selling, reporting and forecasting service APIs. Services were written in Scala using Finatra and Slick, with Aurora Postgres for persistence. Involved in technical design and discussions when developing features, communicating with dependent systems both internal and external to the organisation. CloudFormation templates were used to managing infrastructure, with services being built into AMI images and deployed onto EC2. Docker used for integration tests, TeamCity for continuous delivery, where approved pull requests could be merged, and deployed through the environments after automated rounds of tests had passed. Product support was provided through DataDog metrics, which could then trigger PagerDuty alerts.

Yahoo

Graduate Software Engineer - September 2014 to June 2015
Technical Intern - June 2013 to September 2013

Backend engineer in Mobile and Emerging Products. Working on transitioning the REST API for the fantasy football app from an older PHP system, to a newer Java-based one using internal frameworks. Alongside this, assisted on a node.js middleware project that allowed clients to be transitioned endpoint at a time from the old backend to the new one, with performance monitoring and checking for response correctness.

During a summer internship, I provided a dashboard visualisation for projects going through the continuous delivery pipeline to be displayed on an office monitor. User story information was collected from a Rally API, and the Jenkins API to show pipeline progress. Frontend used YUI3 and D3.js for graphs and visualisations, with node.js and the express framework for a simple backend.

Personal Projects

Food Website

Simple website listing favourite food locations in London. Written using Rust with Axum for the backend, and handlebars for frontend templating. Still in early stages, but hosted using K3S on a Raspberry Pi, with plans for CloudNativePG for persistence.

Wedding Website

Simple website to allow guests to RSVP to a wedding built on Next.js, using MongoDB as a datastore. Typescript for the API side code and react component properties. React frontend for simple RSVP form functionality - adding guests, list food allergies, e.t.c. GitHub actions was used for a small CD pipeline that built a docker image, uploaded to a DigitalOcean repository, and deployed to a Kubernetes cluster. Since the event has passed, migrated to static hosting on GitHub pages, without RSVP functionality.

Education

MEng Computer Science - First Class Honours

University of Southampton - August 2014

A Levels - AAAB in Maths, Chemistry, Computing and Biology

Whitgift School - July 2010