A software product ecosystem for on-demand delivery that streamlines routine processes and customer communication
Jean Brillant, the founder of Brilliant Move, came to Yalantis to create a software solution for digitizing and optimizing order distribution and customer communication. When she came to us, these activities were based on Excel spreadsheets and phone calls.
Keep reading to learn how we created an ecosystem of mobile and web products that are equally useful for Brilliant Move customers, delivery crews, and managers.
Creating app user flows
We needed to build three distinct products to serve three groups of people: customers, delivery crews, and delivery managers.
The customer app lets users book delivery of heavy and bulky household goods they have purchased from retailers and track delivery right to their door. It also allows users to pay for delivery directly in the app and to track the delivery process on a map. The user flow in the customer app looks like this:
Delivery team app user flow
Here’s the flow for the delivery team once added to the web interface:
Elaborating a delivery-dedicated UX
We created screens with several states to represent all the described user flows:
To create a new delivery order, clients need to take the following steps:
Once all details for a delivery order have been entered, the customer can review order details, correct any mistakes, and proceed to checkout, where they can enter their credit card details to pay for the order.
When an order is submitted, it becomes visible for the delivery crew, who can pick up the items at the store. At the same time, customers can track the delivery until the truck reaches its destination.
All orders are stored in the History section, where they are divided into three groups: Waiting for Pick-up, In Progress, and Completed.
Customers can see all their orders in the Shipment History section. Specific orders can be selected for tracking by simply tapping on them. Tapping takes the customer to the next screen, displaying the delivery route. When the delivery crew is close to the destination, the customer will receive a push notification and the order will be marked as completed once the item(s) reach the destination and a signature is obtained.
Developing the application
The Brilliant Move app was developed for the iOS platform, and below you will find the list of technologies we used.
iOS technology stack
Here are some more solutions we implemented during development:
Core Data, ADVUserDefaults
Communication with Core Data
Component for showing rating
Date and time Picker
Work with Keychain
Navigation and location tracking
Fields for clients signature
To properly handle different screens with different input methods, we developed our own single component with a flexible data source, data validation, and formatting. You can find this component, called YALField, on our GitHub page.
Algorithm for displaying delivery routes on the map
We had to work out the algorithm that would allow us to trace a delivery truck’s movements using data that included start of delivery time, presumed delivery duration, and delivery route calculated based on Google Maps information.
Each route was divided into a certain number of points (each point having its own coordinates). By treating delivery vehicle speed as a constant and knowing the exact number of points on the map, we calculated the frequency with which a map for each delivery should be refreshed.
For example, if the delivery is expected to take 20 minutes and the route has 40 points, the map should be refreshed every 30 seconds to correctly display the change of coordinates. This way, with every page refresh, the pin on the map that indicates the delivery vehicle’s location moves to the next point on the map.
Successful delivery confirmation and offline mode
A delivery team should be able to confirm an item’s delivery. To do that, they have to get their client’s signature and send it to the server. It should be possible to take a signature and complete an order even if there is no internet connection at the moment.
To enable this feature, we added two status fields — one that contains a value on the server and one that contains a local value. A delivery team sees the local delivery status value. If a request to the server by the mobile app to change the status value is successful, the server value is replaced with the local value. If the request fails, then the existing server value remains.
In the app, there is also a background service that monitors the internet connection status. When there is an active internet connection, the server queries the local database looking for delivery orders whose local and server values are different. If any are found, they are synchronized between the phone and the server.
Brilliant MoveSoftware product ecosystem for on-demand delivery