- Scope Product workshops, UX/UI design, native mobile apps development, frontend, quality assurance
- Timeframes Ongoing since 2017
- Innovation Remote parcel locker opening and MultiLocker
- Technologies Swift, Kotlin, Angular
- Business sector Logistics
- iteo Team 3 x Android developers
2 x iOS developers
3 x Quality Assurance engineers
1 x Scrum Master
1 x UI designer
1 x UX designer
Beginning of collaboration
Kick-off of InPost Mobile project
Version 1 release
The beginning of work on version 2
Version 2 release
Version 2 release
Additional app motive “dark mode”
Version 3 release, Labelfree posting, InPost pointmaps, Huawei AppGallery
A banner with customer service information
Redirecting a parcel to a WebView Parcel Locker
Phone call with a courier and air quality
Quick returns feature with shipment tracking
Ukrainian language support
Voicebot or consultant help
Eco returns feature, parcel lockers map
In-app parcel sharing feature
A lottery with a phone number as a parameter, transferring the configuration from Firebase to BE, adding a marketing banner to the hamburger menu.
Corrections to ECOreturns, improvements of the PUSH notifications delivery, new marketing consents, Synerise SDK for sending pushes, and banner carousel.
Push notifications for Parcel Sharing
Banner carousel management with Synerise, notificationID, Synerise declarative tracking
InPost application creates a true revolution and innovation on the logistics market, allowing a 24/7, quick, convenient, and contactless parcel collection and labelless posting, being a safe alternative for other companies’ services.
Business needs & goals
One of the main business needs was to accelerate the process of package pickup. Especially during holiday seasons, when the number of orders and the demand for lockers is much higher.
Remote locker opening can reduce the lines in front of Parcel Lockers and also it leaves out the verification process (from the perspective of the user, of course) which requires entering or scanning a barcode. during holiday seasons, when the number of orders and the demand for lockers is much higher.
Another important goal was to entirely give up text messages with parcel pickup codes.
This solution was highly ineffective cost-wise (InPost was sending tens of millions text messages monthly!) and also was risky in terms of potential frauds.
Two native apps, for Android and iOS with backend coded in Java.
Kotlin – for Android app, with support for Google Mobile Services (GMS) & Huawei Mobile Services (HMS)
Dagger – libraries included by the Kotlin framework (dependency injection)
RxJava – for asynchronous apps
Retrofit – for easier communication with API
Firebase – receiving push notifications and collecting analytical data
Swift – for an iOS app
SwiftLint – the most important libraries (partial automatization of code review)
Realm – easy to use databases
Firebase, Lottie – graphic animations
Hero – animations between views
Remote Parcel Locker opening
By allowing the users to collect their packages more seamlessly and quickly, InPost can deliver even more parcels every day!
The functionality has been shared with the app’s version 2 release. The process of parcel collection needed to be fully intuitive and similar in both InPost mobile app and Parcel Lockers.
The process of remote parcel locker opening is designed precisely not to interrupt the Client’s system.
The functionality was highly praised by the users, contributing to their everyday convenience.
Effective optimization of the process of picking up the parcels from lockers.
The solution resulted in a larger number of free lockers for other clients that made an order using the InPost services. Usually, when the lockers were overstuffed, the courier had to park in front of the Parcel Locker and it took a couple of hours to hand the packages over to the customers.
With MultiLocker, the effectiveness of the whole system grows, as the delivery person can put a couple of packages ordered by one person in a single locker.
Labelfree parcel posting
Posting parcels using the InPost app is the first service of this kind available on the market. This functionality has been released with the new app’s 3.0.0 version.
The new feature’s goal was to maximally facilitate the process of posting the packages:
- Possibility to post parcels directly from the InPost Mobile app
- Sending the parcels 24/7 not needing to print or stick the label
- Convenient posting process without queues
- BLIK payment option
- Broadening the option of payment and implementing new functionalities for the posting process in the app in the future
Designing application began with Product Workshops
Along with the Client, we thoroughly analyzed the project, established the highest priorities and the order of individual functionalities implementation.
Workshops resulted in preparing the application’s prototype assessed internally by the InPost team.
The next step was creating an MVP – Minimal Viable Product
It included basic, most essential features that needed to be developed in the future.
UX & UI design
After creating the second prototype (based on MVP), we designed the UX to track shipments as well as other side components of the application.
We chose only the ones that fully represented our Client’s business value. Although at this point the structure of the app remained unchanged, we redesigned it according to the company’s brand book, including color consistency and the use of new fonts.
Challenges we faced
Transition between versions 1 and 2 of the InPost app included app stores updates.
Downloading a new version of the app from the store is connected with reading the HTML code. If an app store introduces even a small
change, the app’s functionalities may stop working and the level of
security may drop.
To avoid the risk, we decided to use API needing to implement some
adjustments on the backend side. Version 3 of the app was released in 2020 and introduced InPost Mobile to Huawei App Gallery.
Problems with API required looking for a better solution. We found it developing the version 2 of the app.
In the app’s first version, API has been based on the mocks which simulate the target functionality. After the development, it became clear that it required rebuilding.
We solved it differently in the version 2 of the app. API was ready before the functionalities were made or during development. This way we were able to avoid time delays in the project.
Secure process of verification.
We had to minimise the risk of handing over the parcel to a wrong user.
When a user wants to collect a package remotely, the app sends a request with parcel’s number, pickup code and device location (within a certain range) to the system. If the verification is successful, the session opens up, and if not, the session is rejected.
Length of time for each step of the locker opening process.
The solution suggested by InPost required a demanding process of programming. We had to face all the potential difficulties it came with.
First, we had to calculate the time for each step in milliseconds instead of using time frames. This way the app receives the times, verifies and converts them to the local time, and then passes them between classes that are responsible for locker opening.
Now, the time spent on the screen is added to the current hour. If the locker opening request is confirmed by the app, the next actions are taken by the Parcel Locker.
Each machine has its own computer connected to the InPost system being able to take care of each step and properly send the data.
Solutions we offered
Avoiding client’s system overload.
Firstly, remote Parcel Locker opening was based on sending requests to ask the API about the status of the locker. But it came with a risk.
The requests we sent every second so the system would make sure that the locker door is open. But this solution was highly problematic, especially during so-called “peak” moments, e.g. during holidays when the demand for package delivery rapidly grows. Too many requests per second could cause an overload of the InPost systems bugging or stopping them completely.
We’ve decided that the request should be blocked by InPost until the locker’s status changes (possible options being “open”, “fail” or “timeout”). The whole process is very quick but it requires extending HTTP timeouts. The default time for the whole app is 10 seconds. In this case, we needed to create a separate API configuration so the timeout for one request can take 30 seconds. It was the easiest solution to avoid the system’s overload.
Closing the parcel locker door.
If a package is taken out of the locker and the door are being locked, a user can click the button confirming the operation – then the app sends a request to InPost’s API with a message that the doors are locked. But what if they aren’t?
The fix was quite simple. After clicking the “Parcel taken out” button, the app shows a screen with the “Door closed” announcement. It doesn’t send an API request and goes straight to the summary. This way, a user isn’t blocked on one screen – especially when the door is damaged and can’t be closed.
At this point, after summarizing the process, a user has an option to send a complaint, for example when the package has defects.
Remote Parcel Locker opening shouldn’t work from a random distance.
The solution was fast and simple but it couldn’t allow users to open the locker from their home when their significant other is passing by the Parcel Locker and wants to pick up their package. We needed the app to verify the distance between the person collecting a parcel and the locker.
We wanted to avoid the situation in which the app says that the client is not actually near the locker.
The first tested solution was to drag the last known phone location, but this method wasn’t efficient though. After checking the logs, it appeared that the localization could be determined using data from a couple of minutes earlier which was interpreted by the system as being too far from the Parcel Locker. At this point, the app wouldn’t agree to open the locker remotely.
It’s usually applied in apps that don’t have any navigation requirements and don’t need very detailed data. Unfortunately, tests done by InPost showed that this mode is not enough – it located the device within 100 meters or more and in this case, a user had to be closer than 100 meters.
In the next step, we decided to use the high accuracy mode of
localization which might have required special settings in the device system if the localization accuracy changed. Using this information (technical launch of Intent) will open system dialogue which will allow it to automatically change the localization accuracy.
It is worth remembering that the highest accuracy depends on GPS signals which mean it works best outside. The localization process can take more time when the signal is distracted. In this case, the system will send information (Exception) to the app which will fix the issue (Intent).
Procedure was carried out following the list of the most important functionalities. Testers from iteo and InPost went through each point before releasing subsequent versions of the application.
There were also manual field tests at the Parcel Lockers.
Check our full design case study
The result is a simple, intuitive and modern mobile application for Android and iOS.
InPost application won main prize at Mobile Trends Awards and became the app of the year 2019. It was recognized in the ‘Service’ category also as no 1. The company repeated its success in 2020 as well, winning the main award, 1st place in the ‘Service’ category, and 2nd place in users’ voting.
The app has now over 5M downloads with daily dynamic increase due to huge demand for indirect goods delivery and collection. All versions of the application remained on first positions in Polish Google and Apple stores for a long time.