Purolator is one of Canada’s oldest and biggest courier, freight, and logistics companies. They wanted to build a new feature into their mobile app that makes it possible for their customers to self-generate a shipping label from the comfort of their home/office. They approached Clearbridge Mobile, where I work, to build this feature for them.
Product Design, end to end.
4 months, Oct 2019 - Jan 2020.
Worked as a solo designer with 2 engineers, 1 product owner and 1 senior project manager.
Purolator’s mobile app, for both iOS and Android platforms, lets its customers do a lot of things - track shipment, get an estimate for a new shipment, find drop-off locations, etc. But to send a package, customers had to visit a Purolator post-office. The staff there would assist them by capturing shipment details, generating a shipping label, and ultimately sending off the package to the recipient. Could we build a new feature within the mobile app that lets customers generate shipping labels all by themselves? This way, all the customer required to do was simply drop off the package or schedule its pick up. This new feature is what my team set out to build.
UX Metrics & KPIs
User tasks: completion rate, error rate, time on task, ease of completion.
Satisfaction score, NPS, new customer acquisition cost.
Shipping label refers to a piece of paper that is attached to a package to be shipped. It contains crucial information that guides the courier company about where the package is headed. This information includes the address of the origin and destination along with the contents of the package.
After creating a shipping label and preparing a package, users are given a choice to use any of the following two existing functionlities within the app:
I looked at what Purolator's competitors are doing in this space. Turns out other than UPS, none of them have an in-app create-shipment kind of functionality. I nevertheless kept analyzing them, trying to figure out what was working and what kind of pain-points were felt during various interactions. More importantly, I wanted to understand how other apps were capturing an error-sensitive field like address information.
Given the architecture of the app, the most evident entry-point for the create shipment flow was from the app's hamburger menu, where all other associated functionalities are housed. After many back and forth discussion with the client and the PMs, here's the end-to-end flow that we finalized:
This new feature while being a standalone one, had to still fit cohesively with the rest of the app. So I spent some time understanding the app's system model and identifying opportunities for reusing existing components wherever possible.
One enormous challenge for me was understanding and overcoming technical constraints. One, in particular, was understanding how the address search mechanism works. This meant deciphering the location API that developers were going to use. Ultimately, understanding how the data was being structured, queried, and returned played a key role in designing address form-fields.
Once I had the architecture figured out, I started wireframing. I detailed out all the screens involved in the end-to-end flow. At various points during the process, I would show my team the designs I was most confident about, get their feedback, conduct guerilla tests, and then go back to flesh out another iteration based on what didn't work. In the end every single detail was laid out, and I felt as if I was trying to assemble all these important puzzle pieces together before a concrete picture started forming.
Other than being intuitive enough, the address entry process had to satisfy various technical constraints. After throwing several ideas and flows onto paper, I picked one that I believed was a strong contender. Running quick guerilla tests on it, exposed several problems with it - refer to version 1. So I started refining it. Version 2 performed wonderfully well during the second round of guerilla tests. Ultimately, post feedback from the client, version 2 was further updated into the final version 3, which includes additional functionalities.
Refined version 2: Color-coding the size fields to map with the associated dimensions of the package. This avoids any mismatch between the conceptual model and user's mental model.
The Purolator app was built a long time ago. As a result, the designs lacked a modern look. While making designs for this new feature, I had some liberty to experiment with the designs as long as it stayed within the limits of the company's brand guidelines. So the first thing I did was create a design system around the existing guidelines. I also laid down some form-UI best design practices, which would come in handy for the developers.
End-to-end the Create Shipment & the Shipment History flow is as follows:
As Create Shipment is a new feature, letting users know how to use it is important. Thus, conditions for creating and managing shipping labels are called out upfront.
The user is given a chance to review all the information and make any updates to it if needed, before proceeding to make a payment.
After the successful payment transaction, a shipping label is created. At this stage, the user can do one of the three things:
I had to work under very strict technical constraints. What I realized is that constraints don't necessarily impede creativity, but on the contrary, can provide a lot of focus and direction. I found the most effective approach was to embrace contraints and work together to find counter solutions.
One thing that I learnt early on is that if I spend too much time looking at designs or discussing static pages that means I am making way too many assumptions. A great product works well, it doesn’t just look nice. Many UX issues are often invisible, only to be discovered when one starts using the product. Guerrilla testing at various stages, and inputs from the QA department on early proptotypes helped me a tonne in validating key concepts and moving fast.