What the Nandoca app is made of

Most people probably won’t have thought much about the technologies that go into delivering something like the Nandoca app, and that’s fine. If we’ve done our job right, you shouldn’t ever need to be aware of what’s going on behind the scenes.

We love to share stuff though, and creating opportunities for Nandocas to learn, develop and progress, both within Nando’s and beyond, is one of the things we’re really excited about doing with the app. With that in mind, for those who are interested, here’s a whistle-stop tour of some of the technologies we’re using. We’ve included some links to where you might start if you wanted to pick up some of this stuff yourself. If you have any questions, we’d love to hear from you - you can contact our app team at nandoca@nandos.co.uk.

We’re using React Native to develop the app itself. It’s a JavaScript library developed by Facebook and Instagram. We chose it because it lets us develop simultaneously on Android and iOS, which meant we could quickly get a prototype out to a good proportion of the Nandocas at our trial restaurants.

React Native was new to our team of developers, although we’d all written JavaScript before. It’s been a steep learning curve, but we’ve all enjoyed working with it and we think it was the best decision. It’s quite a new technology, which means it is still changing quite fast, and this has caused us some pain when we’ve needed to upgrade. Lots of people are using it though, and lots of people are also building plugins and add-ons that we can also use.

If you’re interested in exploring React Native, this tutorial might be a good place to start.

Most users won’t see the admin system, but the app would be useless without it and making it has been a big part of the developers’ work. It’s where we manage users’ accounts, import the rotas and write the articles you see in the app. We’re using Phoenix to build it, which is a web framework built on Elixir. We chose Phoenix because it’s a lightweight framework that allowed us to build a simple website quickly, and being built on Elixir makes it very fast and scalable.

Like React Native, Phoenix and Elixir were new to all the developers on the team. Elixir has been very enjoyable to learn, and the more we explore it the more we appreciate how it allows us to write elegant, maintainable code. It’s a functional language and that makes it quite different from the object-oriented languages (like Ruby and Javascript) most of us on the team are more familiar with, even though superficially it looks very similar. Since both Elixir and Phoenix are quite young, there’s not so much discussion online about them as you get with more established languages and frameworks, which can make debugging more difficult, but the official documentation for both is very good, which mostly makes up for that. Even with the overhead of picking up the new language and framework, we’ve been as fast and efficient in building the admin system as we would have been using a more familiar, but more bloated, technology.

There are lots of online Elixir tutorials available, here’s the official one which we found pretty good. For Phoenix, again the official docs are quite helpful, or here’s a nice looking walkthrough that shows you how to make a simple chat app.



There’s a lot that goes on behind the scenes to get the app to you and keep it working, and there have been a lot of technology decisions about how to set this up. We’re still in the early staging of building the app, so we’re constantly re-evaluating these technologies as we progress from prototype, to alpha and beta, and then onto live versions.

We use AWS to host the admin system, and the database that sits behind it. This gives us the flexibility to change the amount of computing power we need at any one time, letting us provide a consistent and secure service without the overhead of purchasing our own servers. We’re using Terraform to describe our AWS infrastructure in code, which helps make our set up consistent and maintainable. If you want to learn what AWS is all about, we’d recommend you create a free account and have a play around with the services available on their free tier, which you can access for 12 months (don’t provide any payment details, just in case).

We use Docker containers for deploying the admin system. This gives us a consistent environment for developing and running the site. Docker is open source and free to download, so you can grab a copy a have a go at firing up your own containers.

We’re currently using Fastlane and HockeyApp to deploy and distribute the app. These have given us a way to make early versions of the app available to a controlled set of trial users. We’re now investigating how to make the app available on the Apple and Android app stores, which will be a better way to distribute when we’ve got a larger user base. App distribution is probably not something you want to get into until you have to - it’s a bit of a pain! But here’s Apple’s app review guidelines in comic book format!



We use Github to store, protect, manage and share all our code. It lets the team of developers work on the same codebase at the same time, review each other’s code and keep track of old versions in case we need to revert anything. Github is a hosting service that uses Git, the most widely used version control system. To use Github, you can create a free account, and here’s a simple getting started guide for Git.

We use Mixpanel and Google Analytics to track the use of the app. This helps us find ways we can improve the app experience. As we scale up, we’re thinking of moving to Segment for tracking, which will allow us more control over how we store and use the data about app usage, and will be more economical for larger numbers of users. Web analytics is a massive subject. The sites we’ve linked above all have a lot of information, and a quick google search will throw up a load of blog posts - here’s one.

We’ve recently implemented Sir Trevor for article creation in the admin system and display in the app (we’d previously been using markup which wasn’t so flexible or user friendly). Sir Trevor is a rich content editor developed for the web by Made by Many with ITV. We had to do a bit of work to get it running with Phoenix and React Native, but Sir Trevor was built to be flexible and platform agnostic, so this wasn’t too painful. The core Sir Trevor library is open source so you can view the code and if you know (or want to learn) any JavaScript, you could get involved in developing it further.


Looking Ahead

As we move from the Alpha version of the Nandoca app to Beta, there are some interesting technical challenges to overcome. At the moment, we’re looking at integrating more closely with Nando’s systems to automate the movement of data. One aspect of this will make importing rotas much more efficient. The work here will be mainly on the admin system and infrastructure; we’ll be provisioning a new AWS service and integrating with it. Another big piece of work will transform the onboarding experience for new users, and to do that we need to integrate with Auth0, which involves considerable reworking of both the app and the admin system.


Written by:

Nandoca app dev team