We see our Android app as an amazing opportunity to make an impact.
The reality is that most Android apps are clunky, poorly designed and slow. We want to defy these apparent standards and craft a beautiful product that elegantly flows from start to finish; nothing short of the very best user experience on the market.
Our Android app is native and is being built in-house as part of an integrated product and engineering team.
As we grow we shall relentlessly focus on making the user journey smoother whilst aiming to remove customer anxiety points throughout the purchase funnel.
Beyond that we shall start developing components as part of our data science programme, specifically clustering sentimental photos into events, filtering out content that is unsuitable for printing and then composing them into finished products. The goal is to create curated products completely automatically without the requirement of any user input or action.
This will involve the design and development of features that will allow users to tag content such as faces as well as implement (with the help of our new data science team) client-side machine learning models such as semantic learning to identify the topic of a photobook, for example, and then select an appropriate theme.
Kotlin was a major step forward in code clarity and reliability, we now write all new code in the language.
Our Android team is always trying to find new ways to use Kotlin to increase the quality and efficiency of our code — it’s safer, quicker to read and write, and more fun than Java!
Kotlin currently makes up >80% of our codebase.
Protocol Buffers were a new concept to us when we started the project in 2018, but they have been a fundamental improvement in our network stack. In fact, we’ve reduced API transmission overhead by 70%. Win.
We use Realm as a persistence layer and Retrofit for our network layer. Both of these are cleanly abstracted away behind a Repository-layer.
We're big fans of reactive programming (RxJava), Android Architecture Components and Dagger for dependency injection.
Other areas we focus intently on are memory and resource management — they aren’t the glamorous bits, but we're dealing with lots of high resolution photos that need to be accessed quickly and resource use will need to be optimised further still as we increase data processing on the device. The more we can do here, the better for our customer’s privacy and latency too.
The design of the app is based on our own flavour of Material Design with muted App Bar colours to allow the user's content to be the star of the show.
As time goes on we want to include more of the fluid animations that are integral to the Material Design guidelines as not only do they have a wonderful appearance they can be very useful in helping users discover gesture based features and see how their actions directly impact the related content on the screen.
We will also be looking to make use of ARCore, with the creation of 3D models for all of our products to help customers visualise what they will get before they buy it.