Backend for high-traffic mobile app managing shopping and deliveries of grocery products integrated with external APIs.
Visuality's code was audited externally and found to be well written. They worked with the frontend team to ensure the algorithm could implement the required frontend features. Their team worked fast, often completing tasks ahead of schedule, and displaying a talent for development.
The Client came to us with an idea for a mobile application for grocery shopping within the area of Asian Peninsula. In that case we got a great advantage of hosting the Product Workshop in our office in Warsaw. The client was very well prepared for the workshops. They brought a comprehensive mind map of the application’s features they would like to have and presented to us their protype. Having seen it and learning the specifics of online shopping and deliveries in their area, we got really excited. It looked that their product might be the next big thing there! Pretty soon it turned out that their appetite is too big for the MVP. So during the workshops we had to extract the core functionalities that would allow to launch the app fairly soon. Two days of intensive workshops enabled us to understand in-depth the business model and the specificity of online marketing in their region. The remaining two days of the workshop were held at our mobile partner’s office. They covered the design and user experience matters.
To build this product, we cooperated with our mobile partner. While we were building the backend logic exposed via APIs, our mobile team was implementing relevant iOS and Android apps. It was clear that both teams' work must be perfectly synchronized. We managed to do this by using a scaled Scrum Nexus framework. We worked as two Scrum teams. Two-week long sprints gave us an appropriate pace of work on the backend, enabling the mobile team to integrate the works. To have the cooperation and integration work done smoothly, we incorporated Nexus Daily Scrum meetings - short (timeboxed to 15 minutes) everyday meetings with the other team. As both teams had the same goal - providing tangible outcomes at the end of the sprint, those meetings helped us to identify and resolve integration issues immediately.
The application had to be simple for the users. A customer launches the app on phone, picks a store and browses its products. While browsing, products can be added to the cart. When done, the customer proceeds to checkout, sets the delivery time, pays for the order and waits for the delivery. As Simple as that! But a lot is going on under the hood. In each store there's a grocer. The grocer is using another app than customer. The grocer is responsible for collecting the order items, paying at the store's cash register and dispatching the shopping bags to the driver for delivery. The ordered items usually include fresh vegetables, dairy, meat and fish - goods that require special handling. And mind the temperatures in the region. Customer, grocer, driver, delivery - all these must work seamlessly. And it's not happening by accident.
The most notable challenges we faced during the development included the business and application logic behind replacements. Replacements was a feature that allowed the customer to pick alternative products instead of their first choice or enabled the grocer to call the customer and offer a replacement product when the the one they wanted is out of stock. Because the customer paid for the order before it was collected by the grocer, we had to be very careful with different edge scenarios for the order price calculation. Other issues to sort out were: How many orders a grocer can collect within a given time-frame? How much time a driver will need to deliver the order? When will the driver be able to pick up the next order for the delivery? Thanks to close cooperation with the client we were able to quickly tune our algorithms to make the app work like clockwork.
The main goal of the administration panel was to provide lots of functionalities that allowed for handling the back-office operations. Operations included: customer, grocer and order management; product catalog importing and in-app editing; managing delivery slots, fees and areas; reporting, dispute resolution and refunds. The app was bilingual. So we had to make it convenient to use for the data entry workers. Once we knew what's to be there, the decision was easy. No blows and whistles. We used a plain Bootstrap to get the administration panel done quickly, make it easily extendable and functional on any device.
For handling the grocery deliveries we decided to go with Onfleet. It was used for the management of the fleet of delivery trucks. It enabled them to establish their crew of drivers who used their own cars. Every home in the region has its own electronic ID that can be treated as the main identifier of the address. The client had an excellent idea to make use of it. We integrated the app with Finder to get the accurate coordinates and addresses. That was a great help for the drivers to deliver timely.
We used Unique Payment Gateway for handling payments in the app. Thanks to that it was possible to provide payments with via Visa, Maestro, private banks and cash. At the time of the development it was just an emerging payment platform. We were the early adopters and feedback providers for some of their features such as refunds and partial payments.