Hello!

We are Software Engineers Andrew Dowson and Sam Nightingale, and we joined Rentalcars.com as part of the 2016 graduate scheme. Since starting on the scheme, we have gone on to work on a variety of projects in different teams within the business, but when we started out we were completely new to the world of software development!

This blog post is our way of recording the first few weeks of our journey, which we hope has many miles still to go…

Weeks 1 & 2 – An introduction to Rentalcars.com
Our induction to Rentalcars.com started with a two-week schedule which included introductions to each of the engineering product groups, including their ways of working and which aspects of the code base they are responsible for. This was a valuable opportunity for us to learn about the environment we were heading into, and to ask any questions we had about life here.

In addition to these sessions, there were talks with some of the Leadership Team, in which they explained the vision and targets of the business as a whole. There were also some ‘free’ periods during this fortnight where we were free to work on our own learning and development. Each of us had a mentor within the company we could go to for insight on how to best use this time.

This combination of sessions allowed us to bond as a group and develop our skills, as well as becoming more familiar with the structure of Rentalcars.com. It also helped us begin to understand the vision of where the company is going in the future.

Each product group had a representative who was able to give a high-level explanation of the responsibilities of their team, the challenges they faced and the approaches used to overcome them. This gave an important insight into the structure of the teams, along with a solid understanding of the system architecture. These sessions also provided a snapshot of the various technologies currently used, and those which the company is looking to adopt in the future.

Weeks 3 & 4 – Boot camp
Once this initial fortnight was completed, we took part in a two-week boot camp prior to being introduced to our product groups. This boot camp was designed to help us understand the practices within the business, as well as encouraging communication between the graduates. It was an opportunity to further our understanding of certain practices such as agile methodology and version control, and develop our teamwork and group planning skills.

We were split into three separate teams, each containing one apprentice alongside the graduates, with a separate project for each team to work on. Our team consisted of three people: the two of us and an apprentice called Joe Benyon. It was clear from the outset that each of the teams had been tasked with a project which had a genuine use case which would provide value to the business.

Our group was tasked with creating a visual representation of live booking data from Rentalcars.com. The initial plan was for this to be displayed as a point on the Earth showing a pick-up location for each booking. The details of the implementation were left to us, allowing us creative control and ownership of the project. We soon learned that this was a project which had been suggested by the CEO of Rentalcars.com, Ian Brown, which provided an added incentive to make a success of the project.

Introduction to agile
In our approach to the project, we were to use agile methodology, which is a set of principles advocating adaptive planning and continuous delivery and improvement. Product groups at Rentalcars.com use agile development when working on live projects, so this was a chance for us to learn about the benefits it can bring to a team and how we could adapt and use it to optimise our productivity.

We used a daily stand-up to communicate our progress and outline our aims for the day ahead. This helped ensure all team members understood which aspects of the project were currently being worked on, and were able to assist with any issues which had arisen.

In keeping with the agile way of working, our project was broken down into story points early on. This involved creating a main objective (the ‘epic’), and then separating out the required tasks into ‘user stories’. This breakdown ensured that as a team we were focused and had clear criteria for each milestone in the project.

One of the Software Engineering Managers, Rob Blythe, acted as Product Owner for our project. This role included facilitating team discussions on breaking down the project to ensure realistic but productive goals, at the same time as ensuring we prioritised requirements correctly.

Having story points gave us a clear structure for the project’s completion, and helped us make sure we were always working on useful functionality. Without this, we might have found it harder to create the desired outcome in an efficient manner.

Tracking & integration
Throughout the project we used Git version control, which is a tool to track changes within the project files and coordinate work among a group of people working on separate machines (or even in separate locations). GitLab was our chosen manager for our repository. Using Git allowed each of us to work on separate areas of the project when necessary, and let everyone maintain an up-to-date version of the code. Any changes on one machine could be pushed to the master branch of the Git repository, which other team members could use to update their local version of the project.

We also made use of Bamboo, which provides continuous integration for software projects. Bamboo is a tool for deployment which automates sections of the release process. This allowed us to specify a structure for building the project, and to automate the testing procedure to ensure that any new changes had not caused issues within the existing code base.

Both Git and Bamboo are integral to teams within Rentalcars.com, allowing groups of developers to work seamlessly on a project – and, in some teams, enabling continuous integration of checked-in code.

Preventing errors
We knew that in a production environment, it’s always important to minimise the potential for errors and ensure that code is of the highest possible standard. In preparation for our roles within the company, we needed to be sure we were meeting the standards which would be expected of us in the future.

To help us to achieve this, we often used pair programming during the project. This involved one person sitting at the computer ‘driving’ the development, and the other providing feedback and ideas, as well as pointing out potential bugs and checking the quality of the code produced. The pairs regularly switched roles to ensure a balanced workload within the team.

Plotting a journey
With a thorough understanding of the project aim, a number of stories in the backlog, and a plan of how to implement the product, we were able to start tackling the project in earnest.

Development started on the server side of the application, with the implementation of MaxMind. MaxMind is a third-party tool that converts an IP address to a latitude and longitude coordinate (lat-long), which can be used to plot a rough location of the customer on the globe. The functionality was unit tested to ensure confidence in the code, as well as ensuring that all edge cases could be dealt with. It also helped us to get into the habit of writing unit tests for all the code we write.

Following the user stories we had created, the next step was to pull events (bookings) from the Rentalcars.com event bus, to retrieve the information required to plot our points. The data retrieved was kept to a minimum and consisted of the IP address, pick-up location ID and drop-off location ID. Once this was accomplished, the MaxMind functionality was used to pass in the IP address and create a Data Access Object (DAO) to retrieve the lat-long of each location ID.

With this, we now had enough data to plot points to record the customer’s journey from their rough booking location to the pick-up location, and then on to the drop-off location, in the case of one-way bookings. To get this data to a browser from the server, a WebSocket Protocol was used. This allowed the server to send the data in messages which could be parsed (read) by the browser and then used on the globe display.

Visualisation
With the server side almost complete, we decided to visualise a single point on a globe as an initial task for our front end (display). We started by researching various 2D and 3D models of the earth that could be adapted for our purposes. The final decision was to use the WebGL Globe by Chrome Experiments as it is an open platform, which is visually appealing and allows for customisation. In addition to this, we would use three.js, a JavaScript library, to create our points on the globe. Together, these two technologies would later enable us to display the customer’s booking journey.

Once we had settled on the WebGL globe design and implemented a basic model, we hard coded a single point to show up on the globe, to ensure the lat-long coordinates matched correctly. We used the location of the Rentalcars.com offices in Manchester, as a point we could easily identify. Following on from this, we attempted to connect the server side to pull through IP addresses from live bookings, and display these on the globe.

This was assisted by another of the Software Engineering Managers, Richard Holt, who provided support for our back-end development throughout the project. Once we had a point successfully displayed from the IP address, we used the Rentalcars.com database to retrieve the lat-long of the rental counter for the booking, and then display this alongside the customer location.

Having successfully retrieved the locations to display, we decided that the most visually appealing display would be a curve running from one point to the other across the globe. We set to work using the three.js ‘spline’ to produce this curve, initially with a coloured line which faded to white as it neared the pick-up location. Once we were happy with the connection between the locations, the booking data was connected through the web socket to show live data. For one-way bookings, we implemented a second curve which would run from the pick-up to the drop-off.

Once the globe was pulling through live data, we rapidly found that the curves covered the globe up over time, and as there was no feature to remove the lines our volume soon overwhelmed the display. To overcome this, we had to implement a feature to display only the 200 most recent bookings on the globe, ensuring the volume of data available remained informative but individual bookings could still be discerned.

The final stage of development was to improve the method of displaying the direction of travel, so that the booking location and pick-up location could be separately identified. This was achieved by adding a moving image (a ball of light) to the curve to show a customer ‘travelling’ to their pick-up location.

Presenting to Rentalcars.com CEO
As the project neared completion, we had the opportunity to present our work to Ian Brown, as he was very keen to see the globe and help out in any way possible. It was also an opportunity to discuss any requirements that there might be if the globe were to be displayed in the Rentalcars.com offices.

Before the presentation, we developed a method to use URL parameters to allow us to easily change some attributes of the globe. This enabled us to quickly show different design options and the capabilities of the globe display without the need to recompile and run the code. These attributes included zoom variance, speed of rotation, and the addition of the ball of light showing direction of movement.

For the presentation, we first gave Ian a background of the project, a high-level view of the technologies used, key decisions made along the way, and the skills and practices that we picked up working on the project. From here, we presented the basic variant of the globe with the bookings coming in and the ball of light image showing the direction of travel.

Ian’s reaction to the globe was very positive, and he gave us useful feedback and constructive input on the ways he felt we could improve it. This included adding in a title to explain what was actually shown on the globe, and discussing where it would be best to place a display for the globe. It was decided that the place which would bring the most benefit would be in the entrance area to the offices, so our visitors could see it too.

The next step…
Following the presentation to Ian, the boot camp finished and the graduates were assigned to separate teams within the business, which meant reduced opportunity for group development on the Globe project. Fortunately, there was a hack day at the end of October, which we decided to utilise to complete the outstanding tasks.

Rentalcars.com holds a ‘hack day’ every three months, for any staff who wish to get involved. The premise is to allow time for groups to work on any project ideas they may have which could benefit the business. It’s an opportunity to work on projects which may be cutting edge or utilise a technology not currently implemented within the business, as well as exploring new ideas for a product and ways to improve our processes. This day provided the ideal opportunity for us to complete the final touches to the project and get input and reaction from other groups participating in the hack.

Once we had completed these tweaks, and shared them with Ian and other members of the Leadership Team, the application was set up on production servers, with Bamboo providing continuous integration and deployment. This meant that the URL we had set up could be accessed to view live booking data. During the hack day, the idea of using the Rentalcars.com logo moving along the curve instead of a ball of light had been mentioned. It’s an idea which was implemented on the final display.

The globe on display
Once Ian had provided his approval, we were able to place the Rentalcars.com Booking Globe on a screen in the foyer of 35 Fountain Street, where it is now displaying live booking data 24 hours a day.

Through working on this project, we have gained valuable skills and experience which will help us thrive in our current and future roles. The opportunity to familiarise ourselves with agile methodology while working on a real project helped us better adapt to life within our product groups, and to contribute from an early stage in discussions and planning sessions.

The chance to showcase our work to the CEO, and the fact that it arose so early in our careers at Rentalcars.com, helped us improve our presentation skills. Overall, the project was a great success, not only in what we produced but also in the enjoyment we had in learning about the business, developing our skills and getting to know our colleagues.

Glad to be here!
The opportunity for the graduates to spend time working together as a group before splitting into teams enabled us to feel at home at Rentalcars.com from day one. This provided us with the platform to hit the ground running once we started working on live projects. It also led us to develop friendships which will last for the whole of our careers at Rentalcars.com… in other words, for what we hope will be a long time!