Pages

Tuesday 1 April 2014

The Guardian

I worked for The Guardian on developing version 3 of their app. It's now available in the Google Play Store, and has over a million downloads to date.

The app was an update of the previous version, rather than a rewrite. My responsibilities fell into three main areas: Analytics and Advertising; Look and Feel; and the Build System.

Analytics and Advertisting


I upgraded the analytics and advert code to use a mixture of the Adobe Marketing Cloud (formerly Omniture) and Google services.

Implementing analytics is always quite a lot of work, particularly on the debugging. I liaised with the in-house tracking team to make sure that the right information was getting through. When there are apps on two different platforms, with entirely different codebases, there needs to be some fettling to ensure they line up correctly.

Look and Feel


Part of the update process was to refresh the app's UI, and also to reflect the new look that was shared with the main Guardian website.

Multicolumn layout displaying a list of stories to read Displaying a single story that can be read

The multicolumn layout, seen in the first screenshot, was something I spent a lot of time on. It was already present, but needed an overhaul to match the updated style. In doing this, I also refactored the classes to take advantage of inheritance and virtual functions to a greater degree than before, and reduced the amount of repeated code.

This screen was a clever design in that the app used a fragment, referenced from the XML layout file, and so it would scale from a basic smartphone through to a top-end tablet. Unfortunately that's not something I can take credit for!

Build System


The development team originally used IntelliJ IDEA, before upgrading to Android Studio. The decision was made so as to support the new build tools, based around Gradle. This is a very powerful system, and integrates support for Maven repositories to download libraries from. That was particularly useful for the Guardian app, which used a number of third party APIs.

Unfortunately the power and flexibility means that Gradle is very complicated. Porting the build system to it involved a significant amount of editing the configuration files. I wasn't solely responsible for this, but was seen as the resident expert.