The two dominant metaphors for exploring information are searching and browsing. Search is great when you have a clear intention behind what you’re looking for, and the information is well structured. The “clear intention” often involves spending money, and that’s why Google is a $200 billion company.
But I’ve always had a soft spot for browsing. When browsing, your intention is often a more diffuse desire for entertainment. The information can be unstructured, like images and videos. Search is serious, browse is fun.
In particular, I find browsing an interesting problem when your set of content is so large as to essentially be infinite. I’ll go into more detail on aspects of browsing infinite content, but first here are some concepts that guide how I approach browsing.
Content is the set of items available for browsing. On Netflix, it’s the movie library. On Facebook, it’s all the posts that are visible to you.
A filter is a subset of the content. Common filters include:
- Text searches
- Categories matching
- Recommendations (or other relevancy filtering)
- Date ranges
Once you apply a filter, you need to sort the results. Now things get a little more interesting, based on how you sort:
- Alphabetically — rarely the right choice. Even in the case of searching text, you’re better off sorting by relevancy (which any decent text indexing tool like solr will provide).
- Most popular — good in that you’re showing high-quality results, but bad in that the “most popular” view doesn’t change often. If a user is likely to look at this slice of content regularly, you need to shake it up. Some sites solve the problem of stale results by combining a “most popular” sort with a “content added in past week” filter.
- Most recent — opposite trade off from “more popular”. You get dynamic results, but their quality is low. Works well if timeliness is important and the user has other ways of pruning the content for quality (like your Twitter feed).
- Recently popular — I personally like to blend popularity and recency. The easiest way to blend these two metrics is to discount the popularity of each piece of content by its age like so: , where k is a constant that modulates how drastically popularity falls off with age. It’s inherently subjective, so you’ll need to dial it in.
- Random — rarely seen, but can be a great choice if the novelty is the most important factor in the user experience.
Now that we’ve filtered and sorted, there are interesting and underappreciated choices involved in how to display the content.
- Fixed number per page or infinite scroll? Infinite scroll has become fashionable in the past couple years, but it’s not without drawbacks. As you add more elements to the page, it becomes heavier and less responsive. An even bigger issue with infinite scroll is state is lost when a user clicks to view details on something, and then clicks back.
- What meta data to show? It’s easy to scan information in the browse page, so all the stakeholders involved in the project will likely argue for their piece to get on the browse page. But you also don’t want a cluttered look.
One thing I’ve learned from watching users interact with web sites is the vast majority of them (like 95%) never change default values. This is so important, I’ll say it again: your users will not change default values.
So while you could present lots of choices on how to filter and sort and view, the only one that matters is the default.
As I mentioned earlier, I find some of these choices around browsing interesting in domains where there is so much content as to be essentially infinite, and when the user is just seeking novelty.
Here are a couple examples:
- An endless flow of videos, which serves random moments from the top 1000 YouTube videos of all time. It’s instantly engaging — no need to think about what you want to watch.
- A social way to browse pictures. I got these pictures from Reddit, which is one of my favorite sites. But I often get frustrated browsing pictures on Reddit, because their “recently popular” sort doesn’t change enough. I wanted an interface with a simple “NEXT” button to give me a fix whenever I click.