Return Valets: Returns made easy
This is an app for a package return service. The user places an order by scanning the return labels on their packages, and the delivery service collects the items from their porch or other designated location, before sending a notification to the user once the items have been dropped off at the carrier's location.
Scope of work
Challenge: Scanning feature
We had a design of a scanning screen that needed to be followed and functionality needed to be performed in a certain way. Although there are several packages we could use and all of them are pretty simple to implement, it seemed none of them could reconcile both necessities.
The biggest challenge was that the scan function fires very very fast, as soon as it captures the barcode, which often results in catching only partial barcode numbers. A similar problem was if scanning was performed on a label that had two barcodes printed very close to each other. As there was no way of delaying the execution of the function, we solved that issue by streaming captured barcode numbers on the UI until the user confirmed the right one.
The user uses a camera on his phone to scan the return label. This label can be a QR code or barcode. The user also sets additional data to complete the order, like pick-up date, time, and location.
To be able to complete the order, the user needs to add a payment method (a valid credit card). After confirming the order on the Summary screen, the user is notified that the order has been successfully created.
Tracking the order
Users can track orders and receive notifications for status changes, including order creation, driver en route, and pickup/delivery updates.
The application currently covers the greater part of the Austin metropolitan area in Texas. This application provides a mailing list users can subscribe to be notified when service will be available in that area.
Technical workshop and groundwork
Our collaborative engagement with the client unfolded through a series of sequential stages, each with its unique purpose and contribution to the overall project: Technical Workshop: This initial phase was marked by intensive interaction between our tech leads and the client. Our main goal was to define the technical structure of the project, establish the appropriate database models, and explore any potential third-party solutions that could streamline the development of the Minimum Viable Product (MVP). This stage was critical for setting the technical groundwork for the project.
Discovery workshop and design phase
Once the technical framework was in place, our expert design team took over. They focused on prioritizing features and formulating the most straightforward user journey. This resulted in users being able to return their packages within a timeframe of less than a minute. Our designers' efforts in this stage were pivotal to ensure the end product's user-friendliness and efficiency. After determining the essential features and optimal user journey, we moved into the design phase. This included creating wireframes, prototypes, and eventually final design assets that would shape the look and feel of the applications.
Development and quality assurance
With the completion of the design phase, our development team came into play. They transformed the design assets into a functional application, implementing the features and user flow determined during the design phase. Following the development stage, the project underwent a rigorous QA process. This involved a systematic examination to ensure the application met the highest quality standards and was free from any bugs or issues.
Our final product encompasses three key components:
Mobile app for customers which enables customers to conveniently create and track their return orders. Its design focuses on simplicity and efficiency.
Mobile app for drivers to manage their pickups. It provides detailed views of their assigned routes and the locations they need to visit.
Admin dashboard which allows administrators to oversee and control various aspects of the service. They can approve drivers, create delivery routes, and manage return orders. This dashboard plays a crucial role in ensuring smooth operation and effective management of the return service.
Challenge: User location
We implemented Google Map APIs combined in a way to minimize pricing for our client and to retrieve the data we need.
Place Autocomplete API takes parameters that limit the area address suggestions are listed for, but it was challenging to make it perfect. An ideal solution would be to list only suggestions for certain postal codes but that wasn’t possible without some kind of hack.
Finally, we compared the postal code gotten from API with our list of allowed postal codes. If it turned out Return Valets provided service on the user's location, the user could continue with creating the order, otherwise, he would be redirected to the screen with a waiting list subscription.
As Flutter framework is a layer above both iOS and Android platforms, we use Android Studio and Vs Code for the majority of coding and Xcode for setting Apple-specific configurations needed for applications to work on the iOS Platform and, of course, to publish builds on AppStore. We use Git for code version control. Also, making the pull requests and doing the code reviews. Maps SDK is used to show the user's location on the map.
Place Autocomplete API provides autosuggestions as the user types his address and we also use Geocoding API results as Return Valets needs the latitude and longitude of the user's address, so it could be shown on the map. The application also needs a postal code number to check if service is provided in this area.
What we learned
During this project we learned a great deal of information about barcode numbers.
Return Valets is a shipment tracking solution that can identify the carrier by barcode number. But that number, however, may have a secret component that isn't displayed anywhere on the label. Return Valets only requires the human-readable portion of the number, and the scanning function from the implemented package in the application provides the whole number. We were confronted with the problem of removing that secret component and we couldn’t rely on courier patterns they used in forming the barcode numbers because they weren't consistent.
Thus, after researching barcode numbers extensively, we settled on developing the most effective RegEx possible to filter barcode numbers before sending them to Return Valets. However, a tiny fraction of otherwise valid tracking numbers will be declined for scanning. But that was also fixed by adding a screen where users could manually enter the barcode number.
This project is written with our Flutter project template.