QR at the till: the loyalty app user nobody designs for is the cashier

When we design a loyalty app we draw the customer's screens first, like everyone. But the person who uses the app most is not the customer. It is the cashier, who scans it a hundred times a shift, during the morning rush, with a queue watching. Designing for them is what makes the customer experience work.
One code, scanned once
The customer shows a single membership QR code. The cashier scans it, confirms the receipt, and the points land on the customer's account immediately, with the gain shown on both screens. There is no second step, no "enter the amount", no "which campaign". Anything that needs a decision at the till is a design failure.
Rewards are a second code, not a conversation
When a stamp card completes, the reward appears on the customer's home screen with its own code. At the till it is scanned like the membership code, and the item is handed over. The cashier never has to check a balance, ask a question or remember a rule.
Confirmation on both sides
The customer sees the points arrive on their own screen. The cashier sees a confirmation on theirs. Neither has to trust the other's device, and the small moment of "did it work?" that kills loyalty programs at the counter does not exist.
Design the failures first
A code that will not scan because the screen is cracked. A customer whose phone is at two percent. A network that drops during the rush. Each needs a path that takes seconds and does not require the cashier to explain anything. We designed those paths before the happy path, because they are the ones that happen when the queue is longest.
Training in one sentence
If the scan flow cannot be taught to a new cashier in one sentence on their first shift, it is too complicated. Ours is: scan the code, confirm the receipt. That sentence was the acceptance test for the whole feature.
For other brands
Before you approve any loyalty app design, stand behind the counter in your busiest hour and imagine using it a hundred times. Then cut everything that takes a decision.