Auto Trader Engineering Blog

  • How we halved page load times using Tree Shaking and Ahead Of Time Compilation

    In March 2017 we released a new homepage for our trade users using a new client side technology framework utilising a Component based Angular 2 structure. Currently, measurements of our users’ page load speed tell us that 75% of users see a fully loaded page in under five seconds with 50% loading the page in three seconds, but it hasn’t always been this way. Initial measurements using Google Chrome’s Lighthouse performance benchmarking tool saw page load times of ~19 seconds on mobile devices on 3G and 10 seconds on a desktop broadband connection. Using Lighthouse as a benchmark we set out to reduce page load times for mobile devices on 3G to under 10 seconds.

    Read more…

  • ReactRiot!

    On the weekend 24-25th June, three developers from Auto Trader (Leon Pelech, David Carter and myself) participated in the first ReactRiot hackathon. It was a two-day event with teams competing from all over the globe.

    Read more…

  • Monitorama Portland Conference

    Four of us were lucky enough recently to visit Portland Oregon to attend Monitorama, a conference geared towards (mostly) Open Source monitoring and related topics. This post is about what our key takeaways were, and the new themes we observed. I had previously attended an as yet unrepeated Monitorama EU in Berlin in 2013 and had found it to be a wonderfully inspiring set of talks.

    Read more…

  • Postmortem on the application outage on Fri 26th May

    On Friday 26th May, we experienced a major service outage for 75 minutes around one of our core products, VDS (Vehicle Data System). The result of this was some applications not being able to return vehicle-specific data.

    Read more…

  • Data Modelling for MongoDB

    This is the second of a two-part post looking at how your data model affects MongoDB’s performance. This post describes how we arrived at a problematic data model, some of the changes we made to improve it and describes what we learned along the way.

    Read more…

  • Investigating Query Performance in MongoDB

    This is the first of a two-part post looking at how your data model affects MongoDB’s performance. This post describes a performance issue with one of our applications and how we came to the decision that our document model was ultimately the cause.

    Read more…

  • Using AssertJ

    When writing tests we aim to use Descriptive and Meaningful Phrases (DAMP). This also reduces the time needed to understand the intent of the test. Making assertions read like the sentences we see every day is one way to achieve this. AssertJ provides a comprehensive set of fluent assertions for Java.

    Read more…

  • Developing Your Career

    Many development managers dread that one day one of their staff in a regular catch up will ask “What do I have to do to get promoted?”. This is daft really, because having staff that are motivated to develop themselves is a critical part of a high performing team. Of course, such a question could really be referring to a desire to be recognised—perhaps they don’t feel their title reflects their progress so far. Perhaps they are not satisfied with their salary. Or perhaps they are simply asking where their manager feels they should be concentrating their efforts to learn. This post is about what we have done recently at Auto Trader to help development managers work through this question with their staff.

    Read more…

  • Let's have a conversation

    At the Auto Trader Hack day last year we built a prototype skill to read back stats for a retailer’s stock via Alexa Voice Service API using the Amazon Echo Dot. We wanted the user to be able to ask for information about a vehicle, but also take some sort of action after finding out information. The initial goal was to find out how we could do this and understand what sort of challenges and limitations that we might present. This is my perspective of the journey before the hack and how we got to showcasing the prototype.

    Read more…

  • Using syntax trees for text mining

    So far, machine learning techniques such as data cleansing, frequency mapping and clustering have allowed us to peek at the topics behind a huge quantity of calls from our customers. We’ve been able to show statistics on what our customers think from unsupervised learning. But what if we could employ a deeper understanding of the meaning of the text itself in our text mining?

    Read more…

  • Text mining our customer calls

    At Auto Trader, our support staff receive up to 15,000 calls every two months. It’s a huge operation to co-ordinate everyone involved and get an objective measurement for how we’re doing, and what is making our customers tick this week. Currently, support managers go through a subset of recorded text from the calls we receive, manually classifying the emails in order to understand the volume of calls relating to each topic and identify changes needed to our products or our training. A few months ago, we formed a working group with a few other developers from around Auto Trader to see if we could solve the issue of text mining our calls for an objective and measurable understanding of our customers.

    Read more…

  • Recommendation Engine Hack

    Here's what we learned on the hackathon when we developed a fully functioning recommendation engine for vehicle adverts.

    Read more…

  • Meaningful Code Using Types

    Crafting meaningful code is vital to the long term success of a project. Here I'll discuss how we can use types to help us to acheive this goal. I'll also go through a few helpful IntelliJ refactors that help introduce our types.

    Read more…

  • Configurable custom dimensions for AngularJS apps

    As part of the work on one of our new AngularJS apps we had to look at how we were going to integrate Google Analytics page and event tracking. One of the key points to cover was that it had to be configurable by a range of users across the business. Often config like this would be held in a spreadsheet and converted by hand by the development team into code. Keen to avoid this we tried to come up with a JSON based config that would be both human readable and directly used by the analytics module. The config ended up being split into three main parts; describing custom dimensions, pages, and global events.

    Read more…

  • Stubbr - a NodeJS HTTP stubbing server

    When it comes to writing integration tests, constructing a test sandbox that abstracts away every HTTP service dependency lets us concentrate on testing the interactions within our own app in isolation. I’ve found mock http servers to be an invaluable tool for achieving this; this post is to discuss the mock http server that we created to serve this need in a greenfield AngularJS app integration tested with the NodeJS-based Protractor test framework.

    Read more…

  • Auto Trader Engineering Blog

    When you think about Auto Trader you probably immediately think about automotive sales—perhaps even a now out-of-print magazine with a technology function separate to the rest of the business. It’s true that selling cars is the focus of our customers, and we have been helping them do that since 1996. However, with up to 70 million page impressions a day it’s technology—not cars—that is the core of our organisation. Technology is at the heart of every decision we make and the strategy we steer by. For this reason it is critical that our engineers are at the heart of the business rather than serving in a siloed technology team. The automotive market is changing and Auto Trader needs to innovate and evolve to achieve its goal of being the most admired digital business in the UK.

    Read more…