I thought I understood this comment — by User Experience veteran Don Norman — until a recent project I designed taught me otherwise.
“[…] never solve the problem I am asked to solve. […] Because, invariably, the problem I am asked to solve is not the real, fundamental, root problem.” — Don Norman in The Design of Everyday Things
The ability to narrow down flight search results by hiding undesirable flights was one of the most asked for features on the Hopper app for much of the product’s first year of existence. Preoccupied with product/market fit and validating our core business, we made no progress that first year. But filters were always in the back of our minds.
When we finally shipped the feature, however, we realized that filters weren’t what users wanted at all. They wanted something much more basic: content that was relevant to their unique situation, with the minimal number of steps required to get it. Giving our users what they wanted taught us this lesson the hard way.
Give The Users What They Want
The Hopper app analyzes billions of flight prices every day to predict when to fly and when to buy plane tickets to score the lowest fare.
The app can predict — insanely accurately — if you should buy your tickets now or if you should wait. It does this based on historical prices. If you should wait, you can press a “watch” button and the app will literally watch the flight prices for you. When the price hits its expected “good deal” range, the app will send you a push notification to buy.
Since the early days of Hopper, users wanted more control over what we notified them about. And they were not shy about telling us:
At the time, our price notifications only informed users about the lowest available price. Sometimes, that price could be the result of a low-cost carrier or a bare fare, with lots of added fees. Sometimes, it was because a flight had very long layovers (upwards of 18 hours, at times) or several unnecessary stops.
If a user didn’t want to book these kinds of flights, we were sending them content that was less relevant to them. For example, we could notify a user about a price dropping to $125 for a flight with a long layover. At the same time, the cheapest flight with short layovers could be $250. How disappointing to receive that notification, only to find out the price is $100 more for the kind of trip you’re willing to take.
But the situation is even more complicated. After an analysis by our Data Science team, we learned that the prediction we provide could also vary. For example, we could predict you should wait to buy a flight from Chicago to Las Vegas with stops. But, if you exclude stops, we may tell you to buy now, because these are at a good price range and are going to rise soon.
Regardless, less relevant content meant more noise for our users, less value from our solution, and lower conversion rates. We couldn’t ignore this problem any longer. We had to give the users what they wanted.
Filters are not a new concept. There are countless examples of this in travel and e-commerce.
We decided not to re-invent the wheel and planned for a simple “filters” button in the app. This button would trigger a filters list, where users could apply what they wanted.
Given that our app predicts prices, new filters could have an effect on our data coverage and prediction accuracy. So, we had to be very careful in our implementation.
Some digging taught us that over 80% of filter requests would be addressed with only 3 filters:
- Remove Basic or “Bare” fares from low-cost carriers
- Remove Stops
- Remove long layovers
By focusing on these three filters only, we could provide the same level of prediction accuracy as without filters. This also allowed for a simpler and more focused filter set, which fit our app’s goal of a concise and mobile-first user experience.
We were happy to build something that felt “Hopper” in its simplicity, and to fulfill a major user request. Once we released filters, we sat back, waiting for the love and praise to pour in. Fast Company even wrote about it, using the flattering headline: “Hopper’s new filters make it easier to book the cheapest, most optimal flight.”
To our surprise, what followed was a bit anticlimactic. After letting the dust settle, we found a dismal 2.6% of our total watches had filters applied.
We were a bit confused and disheartened. Were we mislead about the importance of this feature by a small and vocal minority of users? Was our implementation not discoverable enough? We had a large button earlier in the flow, but maybe users expected to apply filters later, on the flight list. We had reduced the size of the CTA on these screens.
But, we also had another data point. We found out that filtered watches had higher conversion rates than unfiltered ones. This was the motivation we needed for another go; this time, to increase adoption.
I Get By With A Little Help From My App
To make sure users weren’t missing the feature completely, we knew we could make the button larger and more prominent in the interface. There was also an opportunity to add custom onboarding for the new feature. But, a more interesting approach came from one of our Product Managers. Instead of making the button to filters easier to find, could we make the filters themselves easier to find?
Hopper is already known for providing tips and suggestions, not just a list of options. Could we make filters a tip and a more integrated part of the interface? To do so, we placed a new card on the prediction screen to suggest filters based off of the user’s unique route. We would use dynamic copy to help them weigh the financial trade-offs of applying the filters.
To apply the suggested filter, the user simply tapped a button, right in thumb’s reach. Instead of going to the filters screen, we automatically applied the filter on tap. If there was another filter worth suggesting, we would display that one next. Tapping it would then apply the new filter too. Every time a filter was applied, we updated the user’s watch with the new settings. No need to enter a menu, no need to scan a list of options.
After releasing the new format, we saw the number of watches with filters go from 2.6% to over 23%! The change resulted in a nearly 10x increase in our conversion rate. That was more like it.
Give The Users What They [Don’t Know They] Want
In product design jargon, one might conclude that what happened here was simple. We improved the discoverability of filters by exposing them, one by one, via a new, hard-to-miss card. We improved the value of filters by showing that nonstop flights or short layover flights were not always more expensive. And, we reduced friction by not forcing users into a new screen, with several more taps to apply filters, but rather by applying them in a single tap.
This is definitely a good product design explanation, with a lot of truth. What we created the second time was simply a better solution.
There is, however, also a more human explanation: People don’t want filters. They don’t want a list of even more options to sort through. People want better, more relevant content and help making difficult trade-offs, in as few steps as possible. Can you blame them?
-Pantelis Korovilas (@pantelisak), Head of Product Design at Hopper
Interested in becoming part of the Hopper Design team? We’re looking for a Mobile Product/UI Designer.