Context
On-demand delivery involves three groups whose needs have almost nothing in common. The courier works on the move, often one-handed, on an unreliable mobile network. The customer wants to know where the order is without phoning. The restaurant has to accept, prepare and track orders without leaving their station. Making those three uses coexist on one set of data is the heart of the problem, well before any interface question.
The problem
Without a unified platform, coordination runs on calls and messages. Everyone builds their own version of an order's state, and those versions drift apart.
- The customer calls back because they have no visibility on progress
- The restaurant chases the courier, who is driving
- A cancelled order keeps being prepared
- No usable record once the day is over
The solution
One application backbone, and three interfaces each cut for its own use. A single order model is authoritative, and every state change is pushed to connected clients.
- Courier app: job list, routing, one-gesture status change, proof of delivery
- Customer app: ordering, payment, position tracking and estimated arrival time
- Restaurant back office: catalogue, stock, order acceptance and tracking
- State changes pushed over WebSocket rather than periodic polling
- A single order model, with explicit state transitions
My role
I carried the whole chain: the data model and its state transitions, the API, the three interfaces, the database and deployment. The most structuring piece was defining an order's states and the permitted transitions between them, because the three interfaces follow from that.
Constraints
- Unreliable mobile network: the courier app has to tolerate cuts and resume without losing actions
- Position tracking frequent enough to be useful, without draining the phone battery
- State consistency across three clients connected at once
- Online payment, with the security requirements that come with it
- Load spikes concentrated on meal times
Outcome
The platform replaces phone coordination with a shared state. All three parties read the same information at the same moment, and order history becomes usable.
- Customer-side tracking removes the main reason for inbound calls
- The restaurant manages its own catalogue and stock, with no technical involvement
- Every order leaves a complete trail, from basket to proof of delivery
Outcomes are described by the capability delivered. No commercial performance metric is claimed here: usage figures belong to the client, and I do not publish numbers I cannot substantiate.