Building a faster delivery app for elmenus couriers

A self-directed exploration, done while working part-time at elmenus, into an in-house fleet app for their delivery couriers, tackling confirmation overload, low-spec devices, and GPS accuracy along the way.

elmenus courier app on a phone beside the elmenus brand screen

Shipped

Seeing it in the real world

After a few months from this work, I placed my own order through elmenus. When it showed up, the courier at my door was carrying the elmenus Fleet delivery bag and running the app I’d designed. Genuinely good feeling, seeing it out in the world in someone’s hands.

elmenus courier carrying the branded delivery bag, December 2019
elmenus delivery bag on the road, December 2019
elmenus courier with delivery bag, January 2020

ROLE

Product Designer

PRODUCT

Elmenus Mobile app

MY PART

Market research,UX, UI design

Overview

Scoping the problem and the challenge

About elmenus

Elmenus is a food discovery platform that helps people in Egypt decide what to eat and order it. Over 7 years it grew into the country’s leading food discovery platform, reaching over a million users a month with information on more than 8,000 restaurants, and has taken online orders since September 2018.

The challenge

Build a fleet and delivery app for elmenus’ own couriers, an in-house app in the spirit of UberEats or Deliveroo, so elmenus could complete its delivery ecosystem and serve its Cairo user base with a full dining experience end to end.

How this project came about.

I was working part-time at elmenus to help improve their app. This particular exploration, researching, designing, and taking a courier-side fleet app to high fidelity, was self-directed within that role rather than an assigned brief, and I sat down with elmenus’ actual product manager and delivery fleet manager to ground the direction. Properly understanding drivers also calls for dedicated UX researchers and a research budget, which I didn’t have, so rather than reinvent the wheel, my call was to lean on observation: reading reviews on platforms already running at scale instead of running my own moderated studies.

Process

Running research, definition, design and testing as a loop

I’m a big believer in user-centered design, so I set a few steps to guide the work: understand the problem and challenge first, then iterate and validate before calling anything final.

Design process for the elmenus courier app

Part 01

Mapping the ecosystem, then observing 3 competitor apps

Mapped the three-sided marketplace behind every order and read how riders talk about three competing delivery apps.

Every order moves through three actors who never see each other’s screens: the customer placing the order, the restaurant preparing it, and the courier who is the only one physically present at both ends of the trip. Any friction in the courier’s tools shows up as a slower, less reliable delivery for the other two.

Customer

our customers are the trigger of the process, they are using our app to order thousands of orders per day 24/7 days and we do our best and provide a usable process in the app in order to make their experience as frictionless as possible.

Restaurant

The main partners of elmenus. We provide tools and services that make their experience as frictionless as possible. They are receiving the order via elmenus Merchant tablet and start preparing the meals and update the status of it continuously.

Drivers - Main persona

who are also the partners of elmenus, they are the main persona here, So I need to create an experience that fits their need to receive, Approve, and deliver the order with no mistake and without frustration.

Context

Naming who, how and where before the challenge

There is so much missing data about the context, And it is better to understand the context on where/when/how the app will be used to define the challenge and the clearly needs.

Who: Only the verified driver by the agency (third-party), Most of them have experience in food delivery, working on shift bases most probably with UberEats - and others have no experience.

How: Using only cheap android phones and most probably with 3g coverage.

Where: The app will be used while riding to different pick-up and delivery locations on their motorbikes in order to get more accurate instructions and to be able to update the status.

Who

Only verified drivers brought on through a third-party agency. Most have food-delivery experience, working shifts, most likely with UberEats; some have none.

How

Real employees get blocked or repeatedly asked to re-verify their identity: frustration, lost time, help-desk tickets.

Where

On a motorbike, riding between pickup and delivery locations, needing accurate instructions and the ability to update status on the move.

Discover and understanding the user

Choosing observation over research I couldn’t afford

Properly discovering and understanding users takes more resources, UX researchers and a suitable budget, and I didn’t have either. There was no need to reinvent the wheel, though: plenty of platforms were already up and running at scale, so my decision was to go with Observation.

1. Gathering user feedback

Plenty of food-delivery apps around the world had already solved parts of this problem well, so I went online to read how riders described the strengths and weaknesses of three of them.

Deliveroo Rider.

Reviews flagged battery drain from constant tracking. Riders called the app simple to use overall

DoorDash Driver

Reviews cited order glitches and dropped connectivity. Complaints about the app being slow to load on order pickup.

Fleet by Postmates

Notification and phone-number-change issues reported often. Riders wanted an easier way to reach support from the app

Courier feedback gathered during discovery research

How to use Doordash, UberEats & Deliveroo apps step by step

2. Training videos on YouTube

YouTube had plenty of onboarding and training videos for courier apps like Deliveroo, DoorDash, and Ubereats. Watching them helped me empathize more with the user flow, and understand more of the context, challenges, and needs users might have.

3. Collaborate with PM and delivery fleet manager

After the reviews and training videos, it was time to collaborate. I sat down with the product manager and the delivery fleet manager, who’d previously managed a fleet at another delivery company. I’m a believer in pairing the product designer with the product manager: the PM represents the business, so the company’s goals matter as much as the user’s needs. A unified design-only perspective sounds good in theory, but it doesn’t hold up in real life. You need more than one perspective to solve the problem and satisfy both the users and the company.

Part 02

Tracing delivery delays back to 4 root causes

After a lot of discussions and going through the user reviews, various contextual situations, and interviewed the fleet manager, I assume the following are some of the pain points I can tackle in order to elevate the end-to-end user experience.

Too many confirmations

it was obvious there are too many confirmations required from the driver ( arrived at the restaurant, Picked up the item, on my way, etc ), there is a call to action for every single movement that the driver makes. It was a very frustrating thing for the driver especially when he drives.

An old device with low GB Ram and perform on low-speed networks

the main persona - a shift bases driver - have low incomes and for the sake of technology limited and the weak infrastructure of telecoms network in the country, We assume the driver will use the cheap android device and 3g connections for most of the time.

Geographic distribution

Our solution will be based on time-shifts and order bonuses. So we need to make sure that the driver is in the right place and ready to receive orders.

GPS accuracy

a cheap device will give you a cheap GPS chip which will reflect on the accuracy, So we need to reduce the use of CTA based on GPS locations and switch to be automatic ( Set a radius or range might be a solution ).

Walking the order-to-delivery journey step by step

The goal of creating the user journey is to understand how to operate the app in order to accept and complete the jobs, I split up the experience into six stages/parts, each one of them has its own requirements and challenges. The flow starting with opening the app and waiting inside the hotspot in your area:

Courier journey flow from order request to delivery

1

Accept job

Driver taps

Accepting the incoming request for a new order through some sort of alerting view having some summary info about the order.

2

Arrived at Restaurant

Automatic

For the sake of reducing the performed call to action, we need to make it an automated process by drawing a radius circle on the google map around the restaurant location, and when the driver being into this circle, the server will get a confirmation that the driver in the restaurant or at least near of it.

3

Pick-up The Food

Driver taps

The restaurant be prepped the meal and packed to make it ready for pick-up and the driver arrives at the restaurant and pick-up the meal, A confirmation flow will be performed in this stage. Also, he will need to capture pic from the receipt.

4

Out For Delivery

Driver taps

A confirmation action will be performed in this stage by the driver to show the customer info ( Name, Address, and Phone number ).

5

Arrived at Customer Location

Automatic

For the sake of reducing the performed call to action, we need to make it an automated process by drawing a radius circle on the google map around the customer location, and when the driver being into this circle, the server will get a confirmation that the driver in the customer or at least near of it.

6

Deliver the package

Driver taps

A confirmation will be performed by the driver to inform the server that the order has been delivered.

Part 03

Ideating with the PM and fleet manager

Sat down with the product manager and delivery fleet manager to turn the two biggest pain points into solution directions.

Brainstorming with the product manager and the delivery fleet manager gave me a chance to explore ways to fix the pain points directly, rather than design against them in isolation.

Too many confirmations

Reduce the confirmation taps by making arrival automatic: draw a radius around the restaurant location, and once the driver’s GPS enters it, the server logs the confirmation on its own.

Geographic distribution:

Since the model runs on time-shifts and order bonuses, a driver needs to be in the right place to receive jobs. A heat map became the solution: a courier only shows online and eligible for orders while inside the heat map’s range.

Decision

Apply the same radius-based logic to both problems: an automatic geofence at the restaurant for confirmations, and a heat map range for driver eligibility.

Apply the same radius-based logic to both problems: an automatic geofence at the restaurant for confirmations, and a heat map range for driver eligibility.

Trade-off

Automatic confirmation cuts the tap count drivers were frustrated by, but it now depends on GPS accuracy holding up on the cheap devices most drivers use.

Automatic confirmation cuts the tap count drivers were frustrated by, but it now depends on GPS accuracy holding up on the cheap devices most drivers use.

Wireframing the map-first active-job screen

After I had a better understanding of user behavior and the process, I have listed some key features of the app in order to create high-fidelity wireframes. Wireframes gave me some ideas on how things would look like and made my work for visual design easier.

Main wireframe of the courier app

Status Indicator & other info

This is designed to give the rider a quick indicator of his status online/offline and how many jobs/deliveries he did in the day.

Swipe CTA

swipe button is among the most important, It gives the driver the access to accept the job and start his journey.

Summary Card

display essential information to drivers like the restaurant details, estimated fare, estimated time duration to help them make decisions.

Restaurant location and radius

the idea is to draw a radius circle on the google map around the restaurant location, and when the driver being in this circle, the server will get a confirmation that the driver is in the restaurant or at least near it. No more CTA

Early wireframes of the courier app screens

Part 04

Designing the flow a courier runs on every trip

Took the wireframes to a light, glanceable interface built for one-handed use mid-ride. With the structure validated, I moved into high fidelity, keeping the palette light and the map as the dominant surface on every screen, since a driver checks it more than anything else in the app.

Splash and login screens of the courier app

#1 Splash & Login Screens

Incoming order request and restaurant pick-up screens

#2 Incoming Request & Pick-up

Food drop-off screens with the customer's location and order details

#3 Drop-off the food

Order history, profile and menu screens

#4 Order History, Profile & Menu

Measure success & Validation

How I validated it

A solution isn’t worth much if I don’t know whether it worked, so I ran usability testing on the high-fidelity prototypes: giving people defined task scenarios and measuring KPIs like task completion time and task success rate. The results themselves are confidential, so I can’t share the numbers here, only the method.

What I’d do next.

Widen usability testing to drivers on the lowest-spec devices in the field, since that’s where GPS accuracy and network speed matter most, and validate the automatic-confirmation triggers against real geofence performance rather than assumptions.

We got a new investment

Loading post…

Seeing it in the real world

After a few months from this work, I placed my own order through elmenus. When it showed up, the courier at my door was carrying the elmenus Fleet delivery bag and running the app I’d designed. Genuinely good feeling, seeing it out in the world in someone’s hands.

elmenus courier carrying the branded delivery bag, December 2019
elmenus branded delivery bag in use, December 2019
elmenus delivery bag on the road, December 2019
elmenus courier with delivery bag, January 2020
elmenus delivery bag seen on the street, January 2020

Conclusion

This was a genuinely fun project to work on, and working with the elmenus team was a great experience, especially the collaboration and communication. I’m happy to walk through the research or any of the trade-offs in more depth.

Good design starts with a conversation.

Amsterdam, Netherlands

© 2026 Mohamed Samy

Good design starts with a conversation.

Amsterdam, Netherlands

© 2026 Mohamed Samy

Good design starts with a conversation.

Amsterdam, Netherlands

© 2026 Mohamed Samy