Day in the life of a Software Engineer in Trains

Ruth Mills
Click Travel Engineering
7 min readNov 25, 2019

by Ruth Mills

Click Travel is shaping the future of business travel with our award-winning corporate travel management and booking platform. Our goal is to reduce the cost and complexity of business travel for everyone involved. But for all the developers in Click, it is more like an advanced technology company. We are all in a department called “ProdEng” — Product and Engineering Team. We build our own cloud-based platform on AWS, and make API connections with lots of 3rd party suppliers which are related to Flights, Hotels, Trains and other business travel bookings.

The Trains team is responsible not only for Rail bookings at Click Travel (including London Travelcards), but also for Airport Parking and Car Hire. We have just completed a new state-of-the-art rail booking system written entirely using AWS serverless technologies (primarily Lambdas written in Node.JS, orchestrated into workflows using Step Functions). This offers a number of advantages over our legacy rail booking service, including greatly improved performance, scalability and fault tolerance, as well as us being able to offer eTickets to our customers. Most other services our team are responsible for are written as AWS Lambda functions in Node.JS, although we also have some Java code using Spring that runs on EC2 instances. We use a variety of frontend frameworks including Angular.JS, React, and most recently Elm.

So, what’s it like to be a software engineer in the Trains team? Let me walk you through a typical day for me:

Before work

I normally wake up around 7.30 am, and feed my Boston Terrier dog and four cats, before grabbing a bowl of cereal and a coffee.

8.30am — 9.45am

One of the biggest advantages of working for Click Travel is that I work remotely from home in Sheffield. This meant that I was able to keep my job when I moved from Shrewsbury to Sheffield last year. I also save a huge amount of time and money by not commuting — as well as the environmental and health benefits. This also gives me a lot more time to pursue hobbies and social life outside of work.

I work from a desk in a corner of my lounge, which is set up with a comfy swivel chair and an IKEA desk lamp with an LED bulb (I’m very keen on saving energy). There’s a stereo in the lounge too — I often work best when listening to music.

Most of our team start the day fairly early — usually around 8.30 am. I usually start my day by saying hi to the team on Slack, and then checking for any support issues that have come through. At Click Travel, we maintain and support the software that we write — so our team has complete ownership of and responsibility for our code. I then have a look at our JIRA board, and make sure that all the tasks I’m working on are moved to the correct status (In Progress, In User Acceptance Test, or In Production), then either carry on with the task I was working on the day before, or pick up a new task if I completed the last one.

9.45am — 10.00am

The music stops playing automatically, and the Mycroft open-source voice assistant in the lounge announces “It’s time for standup”. I join the Zoom video call for our team’s daily standup meeting, where we all check in with each other and ensure that we all have focus for the day ahead, and are all aware of any issues that are blocking us.

10.00am — 10.30am

Today is my two-weekly catch-up with my line manager Chris, where we have a chat about how things are going, and how I can progress my career development. Chris is based in Glasgow, and we both share a passion for life drawing and Doctor Who, and usually spend a couple of minutes chatting about what we’ve been up to outside of work as well.

10.45am — 12pm

Today I’m working on adding a new Lambda function for generating the barcode for eTickets for rail bookings. This is very exciting, as eTickets are something that we haven’t previously been able to offer our customers. We write our Lambda functions in Node.JS with our architecture based on Domain-Driven Design (DDD). My task today is to work on the Domain layer, which contains the core business logic for the barcode generation. I’m very closely following a specification which details in which order all the fields comprising the barcode need to be defined, and how each of them needs to be formatted. I develop using Test-Driven Development (TDD), writing a test case for each new field and watching it fail, before implementing the functionality, re-running the tests, and watching them pass.

12pm — 1pm

Lunch. I start by taking my Boston Terrier, Pixie, for a walk. I’m very lucky to live a couple of minutes away from a park, which is perfect for a lunchtime dog walk. I then have enough time to grab a couple of sandwiches and a drink after I get back home.

1pm — 1.45pm

Every month, we have a session of Lightning Talks, where engineers at Click can prepare a short 5-minute talk on something that interests them — which is often work-related but doesn’t have to be. Today, I am giving a lightning talk on using DMX (Digital Multiplex — a serial protocol for controlling lighting) for controlling disco lights in my conservatory. This includes a live demo of some Moving Head lights, where the position of the lights can be changed dynamically, as well as the colour and brightness, and ending with a short video of a performance art piece that I filmed with a friend in the conservatory a month or so before, where my friend dances in time to some music that I composed, and the lights change colour and reveal a beautiful tree design in UV body paint on her back.

Other lightning talks I’ve done have been on open-source Home Automation using Mycroft and Home Assistant (with a live demo of what happens when someone rings the doorbell at the house, with the music stopping and Mycroft announcing “There’s somebody at the door”), and on AWS Step Functions (how to make them “bomb-proof” with idempotent steps and retries) and AWS DynamoDB Transactions. I’ve also given talks on AWS outside of work at the Birmingham AWS meetup (which we sometimes host at our offices in Alpha Tower), and at the DevOps Battle Royale in Manchester.

1.45pm — 2pm

My colleague Gary has raised a pull request (PR) for new functionality he is working on for eTickets for generating the PDF document for the eTicket. As a team, we always peer-review each other’s code — this is important both for ensuring code quality (as a different pair of eyes is always good at spotting bugs and other issues you might not have thought of), and for sharing knowledge of what the team is working on as a whole.

2pm — 2.45pm

I continue with my work on the eTicket barcode generation. Now, I’m focusing on the Command Service, which will add the eTicket barcodes to the Product Record for the train booking, invoke the Adapter layer to store the updated Product Record to DynamoDB.

2.45pm — 3.15pm

My niece phones up and asks if I will pick her eldest two kids from school, as she is at home with her youngest who is poorly. Another great advantage of working from home (and flexible working in general) is that we are usually able to pop out for emergencies like that if we need to, as long as we make up the time later and let our team know.

3.15pm — 3.30pm

I add some more test coverage to the Command Service for eTicket barcode generation. We are always keen to add as much relevant unit test coverage as possible — covering the handling of error conditions as well as the “happy path”.

3.30pm — 5.30pm

I join a Zoom video call for a design meeting on handling Refunds and Exchanges for rail bookings — this is where a customer can request an automated refund for a train booking, or exchange it for another ticket (if it’s an Advance fare). We discuss the business requirements around Refunds and Exchanges, and how this might be split up into a series of Lambda functions arranged in sequence using a Step Function. We then delve deeper into the behaviour of each individual Lambda function, and how we will persist the data relating to Refunds and Exchanges in our DynamoDB database.

After work

I get ready to head out into the centre of Sheffield for the AWS Sheffield meetup — this is our local AWS meetup where we have guest speakers talking on various topics relating to Amazon Web Services. It’s a lovely walk through the park on the way to the Supertram stop, and then a 10-minute tram ride followed by a walk to Sheffield Hallam University’s computing department, where the meetup is being held. I always like going to meetups, as it’s a great way to keep up to date with the latest technological developments.

Like the sound of this? Come and work with us!

We are looking to expand our Product Engineering team. Find out more about what it’s like to work in Product Engineering from our dedicated careers page and take a look at the Product and Engineering roles we have on offer!

About the Author

I am Ruth Mills, Software Engineer at Click Travel in the Trains team. I have been at Click for just over 2 years, and work remotely from Sheffield. Outside of work, I’m often seen riding steam trains with my partner, playing the flute in church, composing music on synthesizers, geeking out on Raspberry Pi’s/hacking things with a soldering iron, and taking part in a local life drawing group and various other arty activities.

--

--

Ruth Mills
Click Travel Engineering

Software Engineer on the Trains team at Click Travel. Our team develops on AWS in Node.JS and Java to give the smoothest booking experience for our customers.