I'm rebuilding this site right now. So a lot of things may look broken. But what better motivation for me to finish it?
Sonic Drive-In

Check in anytime you like

Designing a customer check in experience for mobile payment and order ahead pickup.


There is a lot of work that I’m proud of from my time (~7 years) at Sonic. Most of it was related to the mobile app. But some the most far-reaching, and most challenging work was related to customer Check In. It started as a change to the original mobile payment process, and evolved into a model that would support mobile ordering and the overall personalized on-lot experience.

When I first started working on the app at Sonic, the mobile payment process was a bit convoluted. You had to type in a 6-digit code displayed on the screen at the end of your order. We watched many users struggle to copy down the code, and operators writing it on receipts for users at the drive thru. It was just too complicated for the value it was providing (which was evident in the user adoption). When we redesigned the app, we knew this process needed to be simplified.

We were able to simplify the payment experience, and extend it to seamlessly support the soon to be built Order Ahead pick-up process – we called the new process Check In.

Comparing the old mobile pay experience and the new check in experience.
[Phone frames added for emphasis and to indicate the passing of time]


We went through a lot of iterations to get to check in, first designing it in the old app, but waiting to release it until a major redesign that would include order ahead.

At Sonic most mobile app customers pull into a drive-in stall to place their order from inside their car. Each stall has a number, but it was mostly there for the carhops to know which car to bring the food to. We decided to build on this existing network of stall numbers to make payment and ordering simpler. Instead of being presented with a randomized 6-digit code at the time of payment (like 2FA), you would now simply check in using a 1 or 2 digit stall number. We used the user’s location in the app to check them in at the correct stall at the correct store. No more double look to copy “384…711.” No more expiring codes. No more carhops running inside to get a new code for you and scribble it on a receipt. This was a trade-off that required users to allow location services, which was a challenge. But we found the overwhelming majority of users accepted that requirement in exchange for the simpler process. This became more challenging when implementing on the web, where users were less committed than our app user base, and less trusting with their location info (we let them search for their location manually if they preferred).

These explorations are from the old app design, as part of a loyalty pilot we were designing.


One of my favorite details about this experience was the personal welcome on the POPS screen (the 24″ menu screen at every stall). When you check in, you are greeted by name, and the profile image you set in the app is shown on the screen. It’s a pretty magical experience when you see your face pop up. In so many user tests that was the clear delight high point – people love to see their name and their picture up in lights. And kids in the back seat love to point it out if they’re in the picture too. This feature didn’t come without its challenges. We had to put filtering in place to prevent people from using inappropriate names or pictures.

Personalization enabled more than just delight for the user, but unlocked tons of potential for new business value. Because the interaction doesn’t have to be scoped only to payment, it meant you could be checked in for your whole order. This expanded the known customer time to the whole visit, rather than the very end after they’d already decided on and placed their order. This allowed for a personalized greeting on the screen when you arrived, personalized suggestions in order, access to rewards and loyalty programs before and during your order, and more data about visit times and interaction with the menu. It expanded payment into personalization, while still simplifying the required interaction for the user.

Comparing the opportunity for a personalized experience in the old payment-only vs. new check-in to pay experience.


The addition of check in also created operational efficiencies. Carhops could now greet customers who used the app by name. They could see the name of the user in the POS and on the receipt, making for a more personal interaction. For regulars at Sonic this is a big part of what makes coming to Sonic special – they get to know their carhops and their carhops know their order ahead of time. This brought the app experience more in line with that personal connection people already loved about Sonic. And customers who ordered ahead saved them the time required to take orders manually, freeing them up to serve other in-person guests or do other tasks. When customers checked in, as their picture popped up on their screen, it alerted the kitchen that “Bradford just arrived at stall #12 with order #123.”


You might be thinking “Why did they call them stalls? That’s kind of a gross word right?” Fair question. This word was already familiar for operators and most customers. In order to roll out this change, we needed operators be on board and easily learn the new system. This wasn’t the only change they had to learn about, and other recent technology rollouts at the restaurant level had made them resistant to anything new. So instead of getting creative and rebranding the stall in the customer facing experience, we opted to keep the existing language in place and build on that. Some customers in new markets were confused, but we were never able to find a clearer name that was worth changing what was already familiar for operators and most customers in core markets where we had the biggest footprint and app usage. Marketing has probably solved this problem by now, but last I remember “Bay” was the internal front-runner and I (and customers we interviewed) hated it.


One big problem with the stall check in approach was trying to apply it to the drive thru line. We tried multiple versions of this but landed on a rotating 2-digit code for each order, similar to the stall number pattern. It was better than a system-wide 6-digit code, but I wish we’d gotten to take this further. A single code for drive thru wouldn’t work if multiple customers were in line at the same time. Bluetooth syncing was possible, but unreliable with interference from car doors and multiple drive thru lines and required drive thru hardware upgrades that couldn’t be mandated (plus varying Bluetooth permission and support across devices). The technology in the drive thru in most locations was more outdated than the stalls, so we didn’t have a lot of flexibility, not to mention the variability in drive thru configurations and hardware. With drive thru usage increasing, especially in new markets, this will be a key area for improvement of the future experience.

Here are some of the diagrams we used to compare the trade-offs and efficiencies offered by the various implementations of check in with operations teams.


One of our initial concepts for check in involved geofencing the store and auto-firing orders into the kitchen when the user got closer. This experience was pretty awesome when it worked, but users and operators (and executives) wanted more predictability in the pickup timing. Inconsistencies in geofence distance and drive times made this approach unsustainable. And Apple’s changes to location permissions made it difficult to convince users to opt into the background location permissions required to make it work well.

Wrap Up

The evolution of check in was one of the most challenging problems I’ve ever worked on. From hardware constraints, to multi-platform software integrations (including varying and antiquated POS systems), to creating operations training materials and processes, it was rewarding to finally get it working, and see my own name and face checking in at a stall to pick up some ice cream. The problem we solved with Check In became even more relevant as COVID shut down most dining establishments, and mobile app usage for contactless ordering and payment skyrocketed, particularly in the fast food space. While many other restaurants were scrambling to enhance their digital ordering solutions, or hacking together their own parking lot pickup options, Sonic was already there. Sonic (being primarily a drive-in and drive-thru restaurant) was uniquely positioned to serve their customers through a mostly contactless service model during the pandemic. They saw record sales, and explosive digital growth during 2020, even as they combatted intense staffing and supply chain shortages. I’m super proud of the work we did to get it where it is now, now supporting hundreds of thousands of digital orders across the country every day, both through the app and the website.


None of this work would have been possible without the leadership and work of Jon Dorch, Sam DuRegger, Walter Colindres, Jason Carrigan, our teams at R/GA, ThoughtWorks, Capsher and many others throughout the process. I designed the initial check in experience for the mobile app in collaboration with our internal Sonic digital team, and collaborated with the design team at R/GA to bring the concept into the new app that is out in the wild today.