Olo’s customer and employee-facing Xamarin apps help restaurant brands deliver faster, more accurate, and more personalized service to their customers, building customer loyalty and improving restaurant operations. With a portfolio of over 150 brands and 25 million users, mobile DevOps is critical to Olo’s mobile strategy, and Xamarin helps the team deliver the highest quality experiences to their global clients.
Today, we’ve invited Greg Shackles, Principal Engineer at Olo and long-time Xamarin community member, to share his experiences with mobile development and his advice for aspiring app developers.
Tell us a little bit about your company and role. What is Olo and who are your customers?
I’m a Principal Engineer at Olo, which means I’m involved in a bit of everything we do.
Think of Olo as the digital layer between the restaurant and the on-demand world. Whether that’s takeout, delivery, or streamlined phone ordering, we integrate directly with the brands’ existing systems, including Point of Sale and loyalty, to bring digital commerce into their existing operations.
We generally work with large multi-location brands, typically over 40 locations. If you’ve used the Five Guys app, called 1-800-CHIPOTLE, or ordered Wingstop online, you’ve used Olo.
Tell us about your app(s).
We publish fully-branded iOS and Android apps for restaurants, enabling their customers to engage directly with their brand, customizing orders exactly how they want, on whichever platform they want, at their own pace, and be assured the restaurant will get it right.
With the apps, customers are able to easily find their closest locations, redeem loyalty rewards, see menus, view recent or favorite orders, order ahead, allowing them to Skip The Line® when they arrive, or even have their order delivered. Our open framework allows customers’ agencies to utilize our API, which we’ve seen with Sweetgreen.
What role does mobile play in your company’s strategy? Has your mobile offering evolved over time?
From the very beginning, and for the last decade, mobile has been the foundation for Olo.
Tired of waiting in long lines for his coffee every morning, our founder and CEO, Noah Glass, saw mobile’s potential to solve this problem and created Olo. In 2005, we launched our feature-phone based text message ordering; remember, this is still a couple of years before the launch of the original iPhone, and mobile remains a cornerstone of our platform to this day.
While we no longer support text message ordering, our customers engage with and accept orders from their customers on a wide variety of platforms including the web, iOS, Android, over the phone, and even Facebook and Twitter chat-based interfaces.
Why did you choose Xamarin?
Any engineer knows that rewriting a platform is not a task to be taken lightly, but choosing to rebuild it using Xamarin was an obvious choice. We were already a .NET and C# shop, so being able to bring some of our existing amazing engineers into the mobile world, leveraging their existing skills, was a huge opportunity. With the new platform in place, we are able to deliver a stable, fully-native experience to our users, while still keeping our engineers happy.
What do you think about when you hear “native app”?
For me, it comes down to apps that fully leverage the native underlying UI frameworks, rather than an abstraction, and deliver the kinds of experiences users are accustomed to and expect from an app on that platform. Native apps need to feel native and to perform as such. They need to be able to use the things that make each platform unique and interesting, and not only build to the lowest common denominator across all of them.
Xamarin provides us with the best of both worlds, exposing direct access to all of the native APIs, while also allowing us to dial in our own abstractions the way we want them.
How much code do you typically share across platforms?
There’s an important qualifier that often gets lost in the discussion: how much code is shared across platforms that should be shared? Sharing code is great, but that doesn’t mean you need to avoid unshared platform-specific code, if it makes your app better on that platform. It’s our job as app developers to write code that gives our users the right experience.
We benefit from large amounts of code sharing at multiple different levels. At the base level, a core portable class library contains the real meat of the application: services, database access, network and API calls, application flow, logic behind each screen, etc. We have a large number of unit tests for everything in this layer, with the ability to run those tests on individual platforms to ensure compatibility.
On top of that, we’ve implemented our shared iOS and Android layers as shared code projects, allowing us to define all the platform-specific pieces needed to drive the app on each platform, agnostic to any particular brand.
For a specific brand’s apps, we have a lot of tooling built around our build and scaffolding pipelines that allow us to generate unique projects.
Describe your development process—how are you using mobile DevOps / CI?
With a platform like ours that maintains so many different apps, automation and CI is crucial. Every commit on every branch builds each project, runs unit tests, and builds the brand-specific apps, ensuring that the entire pipeline remains solid.
We can deploy versions of any brand’s app out to any of our environments via HockeyApp with the click of a button. We have automation in place around app store provisioning, packaging and signing, and also use Xamarin.UITest to automate screenshot generation.
How are you testing your apps? Why is mobile quality important?
Much like automation, testing is critical. We pride ourselves on delivering apps that are not only native and performant, but also incredibly stable. Unlike the web where you can quickly ship a fix and users get it on the next refresh, the barrier to releasing app updates is much higher. It’s crucial to smoke out as much as possible before the app makes it into your users’ hands.
We get a huge amount of wins out of unit testing. Since so much of our apps are driven from that layer, we can write tests that run quickly and test a significant portion of app behavior. Without spinning up a UI, we’re able to test everything from making network calls to defining the app’s flow from screen to screen.
We also love using Xamarin.UITest and Xamarin Test Cloud to make sure things are working correctly at that level too. Unit tests are awesome, but ultimately it’s the end user’s experience that matters.
We’ve gone through some big design changes in recent months, and being able to run our apps in Xamarin Test Cloud to see how different devices handled (or didn’t handle) things was simply invaluable. We were able to quickly and easily catch issues in random Android devices we likely would not have gotten otherwise.
How do you use HockeyApp?
We’re using HockeyApp purely for beta distribution, both internally and externally. For analytics, we’re using a mixture of technologies, ranging from things like Google Analytics and Google Tag Manager to custom homegrown instrumentation that we use to monitor how our apps are behaving in the wild.
My session at Xamarin Evolve 2016 dug into what we’re doing to monitor our apps’ performance in the hands of users in real time. One of the fun things about a platform like Olo is that we’re able to see how a wide range of brands and users interact with our apps, which puts us in a great position to learn and keep improving our flows and overall user experience.
What have your customers and their users said about your apps?
We’re always tracking customer feedback and doing user testing. Overall, the feedback has been overwhelmingly positive. Every time someone leaves an app review for one of our apps, both good and bad, it gets sent to the app team’s room in Slack for all to see.
It’s always a lot of fun when a brand launches with us and their customers go nuts. If you want to see what I mean, head over to Twitter and search “Wingstop app.”
— Ricky Orozco (@RealRickyOrozco) August 9, 2016
What advice do you have for developers who are just starting out or investigating mobile development? Any best resources?
Between blogs, video services like Pluralsight, and the Xamarin site’s awesome documentation, there’s so much content available. This is great, but it can feel overwhelming for a newcomer.
My main piece of advice for new mobile developers is to start small. Don’t start out putting a bunch of abstractions between you and the platforms, such as big MVVM frameworks that add a lot of value, but also a lot of magic. There’s no escaping the fact that platforms like iOS and Android, while they do have many similarities, are ultimately very distinct. To start, spend some time learning the basics of how each operates, and then start diving into some of the abstraction layers once you understand exactly what they’re abstracting.