Conditional Double Layer Search
How providing multiple search points for content can help users achieve success faster.
“What was that lockbox code again to get into Becky’s house? I need to check on her cat.”
Search functionality is one of the most crucial components to a user’s journey on any application or site.
When a user is given a chance to directly translate the information that exists in their mind to access results, User Experience professionals need to jump on this golden opportunity. We need to create the most effective conditions for success by leveraging the UI. Specifically, this means giving people the ability to search wherever they need to, within separate hierarchies of information.
This means giving users the ability to run a Conditional Double Nested Search; to search or filter across their initial set of results.
Typically, this is most applicable to sites where the data can be an exponential amount of variants in the library (news, media, content) vs. a fixed loop where filtering typically follows set best practices such as clothing (size, color, price, etc.). This doesn’t touch the under the hood work of Searching, which is arguably much more important to task success, but focusing on the real life conditions and flows in which a person might want to search. Let’s dig in.
Real World Application: Recall
Seems a bit obvious right? Let users filter their results. We’ll let’s look at this across actual mental models and user flows, using some popular applications as examples.
iPhone Text Messaging: Global vs. Single Contact Search
As of iOS 15.4.1, iPhone text functionality allows you to run a global search across all of your text messages. Great for finding information that uniquely sticks out - but limits user on searching for information from a specific source.
Users often need to recall information from a specific source. Giving users the ability to search across individual results will allow for a more accurate and successful search experience for the user.
Let’s apply this to some user journeys.
Becky is going on vacation 2 weeks from now! Goo Becky! She wants her friend Laura to come over and check on her cat. Laura agrees and Becky sends her Address and Lockbox code to Laura. Two weeks go by, now it’s time for Laura to go make sure Mittens is healthy.
Laura needs to recall the address and information to access the key for the house. Let’s visualize this.
IF we are lucky, Laura has already saved the address when Becky shared it originally. Possible. But also not likely across all users.
Side note: This is why UX’ers need to account for users re-entering flows under different time constraints and conditions. It’s why we need to support functionality to encourage desired behavior by our audiences but also account for less optimal routes to access information. If Laura doesn’t save the address the first time during her busy day, what’s the easiest way for her to re-access the information?
At the very least, Laura needs to locate the Lockbox code.
So how does Laura solve this problem to save Mittens? Well, with single Global search she can either:
1. Navigate directly to the Contact to the scroll infinitely up through texts until she sees the information that results
2. Run a Global Search across all Contacts
This is where it gets interesting. By only giving users the ability to search across the global measures of data, we’re instantly introducing orders of magnitude of complexity across the user experience and the backend.
What if Becky spells “Lock Box” with two words? Now Laura has results indexing from every automated text message about a box being delivered. What about the string of numbers in the address that can appear in any number of results?
Okay, Laura eventually locates Becky’s lockbox code in her results, feeds Mittens, and saves the day!
But - this one example is easily extrapolated to any piece of information a person needs to recall. What if people need to recall a password their family member sent for Netflix? (Not that anyone does this). What about the name of a restaurant, that friend-of-a-friend’s name who is coming to the BBQ?
And the complexity of the problem scales with the length of time the initial data was received and the uniqueness of that piece of data that impacts search algorithms ability to identify it.
Let’s apply this again, specific to another application: Spotify’s Mobile Experience.
Tom loves Dinosaurs. His favorite podcast, Radiolab, recently did a special on the Dinosaur extinction event. Talking to a fellow Jurassic lover, Tom wants to find and share the episode on his phone.
Tom goes to Spotify, goes to Radiolab results to search for the episode and has the same top two level tasks as options: Global Search or Browse through past episodes for Radiolab.
Tom can search the keywords “Radiolab dinosaur” in the global Spotify search to access the episode, competing with other artists, results, and assuming he inputs the correct keyword combinations, but what about the artist’s page? What if the user’s mental model first thinks Artist then information from that Artist?
The Filter and Sort functions are generalized, so ultimately Tom has to Browse through results to locate the Episode, not knowing how long he’ll have to scroll to find the right information.
EDIT: Since this article was published, Spotify has added a Search bar to artists and podcasts such as “Find in this Show” that enables more targeted searches.
These recall examples don’t touch on the complexities of filtering in real time and how even more critical it is to optimize for task completion while the user is under a time constraint. With attention spans decreasing and task abandonment increasing, users have little time to assess results and re-try searching options.
What if a journalist needs wants to produce an article by end of day about the charitable activities taking place in the war with Ukraine and Russia? Many sites have collections about the war which users can browse- but how do we help people find information within these verticals faster without relying on Global Search only?
Okay, so how might we increase the chances for a more intentional interaction with the user when they want to find specific data?
We need to provide curated, flexible guardrails for users to translate the information in their minds into our database, instead of forcing users to adapt to the restrictions of our flows.
How many times have you used a site with initial search results that are too broad that leaves you testing out different filters or reverting back to the global search to try a more effective keyword pairing? One of the ways that we can accomplish this is presenting the freedom of a Search Experience nested within a layer of results in an application.
“I want to find that piece of information from Becky.”
“I want to find that piece of information that lives within this part of the website.”
If we provide signals in the UI, the user will know that results are limited to only this corpus of data and give them higher levels of confidence to search more effectively within the app. If we consider implications for engineering, we immediately reduce the sheer scale of data our algorithms need to crawl vs. identifying data within a specific vertical.
Ultimately, connecting users to information is an ever evolving process. But we can keep improving if we continue to plan for the real life experiences that people have in our applications, the timespan in which users interact with our tools, and how they think about information as it relates to the world around them.