Back to overview

An App to Schedule River Pilot's Voyages

To transport cargo from the sea to central Europe by river, shipping companies have to engage the services of river pilots. Historically, shipping companies use a third party booker to hire pilots. The goal of this project is to build an app that enables direct communication between the shipping company and the pilots, and which allows pilots to avoid large booking fees.
The project seemed straightforward at first, but talking to the pilots quickly revealed how unpredictable their profession is! From initially vague voyage times to last minute cancellations, there are plenty of challenges to design for.
Duration: September 2022 - Now
My role: I am the only designer on this project, but I've been working closely with a developer from the start.

Process Overview

1 | Research
How does the booking process work?
1.1 Interview
1.2 Observations
1.3 Analysis
Bookings are highly uncertain, and pilots manage the fair allocation of bookings among themselves.
2 | Wireframes
How can we combine allocating new bookings and managing one's own?
2.1 Task Flows
2.2 Info Architecture
2.3 Wireframes
Focus on each pilot's own bookings, and provide a separate planning page.
3 | Iterate
How can the design be improved based how pilots interact with it?
3.1 Prototype
3.2 User Testing
3.3 Results
...in progress!
4 | UI Design
...Coming up next

User Research

This project involves two types of users:
• Agents from a shipping company that owns a handful of ships
• A group of around 5 river pilots
From the initial project requirements, I thought the communication between the two would go something like this:
My initial understanding of the project
Pilots indicate when they're available, then the agents at the shipping company use this information to select pilots when booking requests - which the pilots accept or decline.
I wanted to conduct user research to confirm this process, but ended up discovering it's more complex.

1.1 Interview

I like starting user research with user interviews. It's a quick way to build a basic understanding of users' tasks and needs, which you can then strengthen with different methods.
I prepared a set of questions around the general topics I wanted to discuss with the pilots: what the steps of the process were, and what they needed at each step. Because the booking process seemed straightforward I was most interested in what could go wrong: what problems do they have with bookings? How do they solve them?
The most important thing I learned from the interviews was that it's the pilots and not the shipping agents that decide which pilot gets a new booking.

1.2 Observations

During the interview I learned that the pilots are currently using a WhatsApp group to communicate with the shipping company agents. They let me join this group so I could observe their planning directly.
Most of the messages in the group follow the pattern you can see here on the left. They describe a return voyage: Upriver - unload - and back down river.
As you can see some of the times can be vague. For example this ship will leave in the "LPM" - late afternoon.
Updated times and dates are sent continuously in the group chat in the days and even hours preceding the voyage.

1.3 Analysis

I like using Miro to sort the insights I gather during user research. Using digital post-its I can easily re-order insights to give them structure. I  can also easily use the color of post-its to distinguish between types of insight. Here for example, green post-its contain explicit feature requests.
In this case I organized the insights along the pilots' user journey - from recording availability to sending in invoices.
Post-its with insights organized along the user journey
The two main insights from the research are:
1. Contrary to my initial belief, pilot are not chosen by the shipping agents. Instead, it's the pilots themselves who assign pilots to bookings
2. Booking requests are both uncertain and unpredictable. Bookings time change continuously, and bookings can be cancelled last minute, or spontaneously extended.

Wireframes

2.1 Task Flows

Based on the user research I mapped out all the tasks that pilots would have to perform in a booking system. I created tasks flows at two levels: a high-level flow for each the main stages of pilot bookings, and detailed flows for each action.
The high-level flow of sending out booking requests
The detailed flow of allocating a booking request to a pilot

2.2 Information Architecture

Creating the task flows also helped define a hierarchy of tasks: which tasks would pilots have to carry out most often? Which are most crucial?
Three tasks have almost equal importance:
1. Managing the user's individual bookings (accepting requests, finding updates, recording times, sending invoices)
2. Recording the user's availability
3. Allocating new bookings to pilots
I chose to use these tasks as the top-level of the information hierarchy.
Structure of pages and functionality
I found it impossible to define the information hierarchy without thinking about the wireframes. While I present them here one after the other, it was much more a back-and-forth process.

2.3 Wireframes

I've tried drawing wireframes on my iPad, but somehow nothing beats the freedom of quickly sketching on pen an paper.
Pen and Paper sketching to explore wireframes
The main design choice I wanted to explore was how to separate between all the bookings of all the pilots, and just those bookings belonging to the users.
The pilots plan to take turns being responsible for allocating new bookings to others. I didn't want to define a hard 'planner' role, so all pilots should have access to an overview of all bookings and the ability to allocate new ones.
Showing all bookings in one view was too cluttered for a mobile-first solution. I also assumed that pilots would only be interested in their own bookings most of the time, so it made more sense to separate the overview into a separate page.
I also explored different navigation models, including hamburger menus, tabs, bottom menus and mode switches. I settled on a bottom menu because it gives equal importance and discoverability to the key tasks I identified earlier.

Iterating

3.1 Interactive Prototype

I wanted to check with the pilots that I was on the right track with met designs, so I decided to test the wireframes with them. I built an interactive prototype in Figma to test that I had both the correct content, and that my interactions made sense to the pilots.

3.2 User Testing

I returned once more to my task flow hierarchy to create set of representative tasks that covered the most important functionality. These tasks were:
• Accept a new booking request
• Find the new departure time of your next trip
• Send an invoice for yesterday’s trip
• Record your availability
• Assign a new booking to a pilot
I tested my designs with two pilots over zoom. I sent them a link to the prototype and asked them to share their screen, and talk me through what they were seeing and thinking. After they completed the tasks we talked more generally about what they thought of the app so far, and what parts were most valuable to them.
Remote testing is unpredictable! At the start of the second session it turned out that the pilot didn't have a microphone on his computer. Some quick emails later, we combined screen sharing over zoom with a face-time call.

3.3 Results

The user testing was very informative, and it would take too long to go over everything I learned, so I will present one finding here.
Below you can see the intended interactions for the task "You have an appointment on Feb 9th and so aren't available to work. Block that day in the app."
The 'update availability' button is meant as a signifier - it points out to users that this is where you edit your availability. The testing showed that this is indeed needed at first.
However, the result of tapping the button confused user. In the first version it caused a mode-switch where you could then tap on dates. It seems users expected it to open an event creation dialogue in stead.
Later, in a second availability task, users tried tapping directly on dates to update their availability (without switching mode first).
In conclusion, novice users need the availability button to discover the functionality. However, an event-creation dialogue is amore appropriate effect of the button than a mode change.
Expert users can use a shortcut by directly tapping on the date they want to edit.

Next Steps

I'm currently making some significant changes to the wireframes, so I plan to test them with the pilots once more. Up next is the UI design for the app.
Would you like to know more?
Send me a message on LinkedIn or contact me by email