I’m Bob Hiler. I’ve been helping Andrew with Mixergy for over a year. And search has been a problem for that entire time.
Nobody can find anything. And we have the email complaints to prove it.
Site Search: The Problem That’s Surprisingly Hard to Solve
The worst part is that everybody thinks improving Mixergy’s search is so easy. It’s frustrating when you’re struggling with a problem, and most people don’t even think it’s that hard of a problem.
We get a fair amount of emails like this:
Can you make search work on your site!? I just want a search box and a button. Why complicate things?
Happily, with the help of Swiftype, we finally think we’ve licked the search problem on Mixergy! Please kick the tires on our new search box in the sidebar to the right.
Start typing a search… Do you see the auto-suggestions? :-)
Our Journey To Fix Search On Mixergy
I was originally planning to end this post here. I also thought about writing a long list of reasons why fixing search on Mixergy has been such a hard problem, and then explaining how our new solution fixes those issues.
But that’s not what Mixergy’s about. Mixergy is about folks telling the world the real story of what happened.
So here’s the real story. I’ll start at the beginning.
Attempted Solution #1: WordPress Search
When Mixergy first launched, the site used WordPress’ native search function.
It’s not exactly WordPress’ fault, but WordPress’ native search functionality falls far short of the gold standard set by Google. In particular, Google lists search results by relevance. So the most relevant posts appear first on Google.
In contrast, WordPress’ native search lists search results from most recent to oldest. So if the most recent post mentions “facebook” once in passing, that post will appear first when a user searches for “facebook”.
Sadly, Google has spoiled users to expect the most relevant posts first… So Andrew got a lot of email complaints about how Mixergy’s WordPress search sucked.
Attempted Solution #2: Site Search by Lijit
Then Mixergy added Lijit’s site search in July 2010.
Lijit is very similar to a Google Custom Search Engine. You set up an account, add the search box to your site, and voila! People can search your site! Both sites make money by adding ads to your search results.
Unfortunately, Lijit only searches public posts. And on February 15, 2011, Andrew started publishing Mixergy Premium Courses that were only available to logged-in Mixergy Premium members. Andrew didn’t want these new Courses to be indexed by Lijit (or Google). So the love affair with Lijit was about to end.
Attempted Solution #3: “Search Everything” Search for Premium Courses
Right around this time, I got to know Andrew and started helping out. Once Andrew started publishing an unsearchable Course every week, Mixergy faced an ever-growing search problem. We started getting an increasing number of complaints from frustrated searchers.
In January 2012, Andrew forwarded me an email from a reader suggesting we use a plugin to add search for Premium courses (thanks Mo Alkady!). Andrew asked me:
Bob, can we try testing this plugin for searching premium courses only?
I was thinking we’d use it to search the courses only.
I ended up using this WordPress plugin, which let us search on the posts in the “Course” category.
This solution helped, but like fighting a mythical Hydra, chopping off the head of one of our problems resulted in two new problems.
First, users just couldn’t understand that this search box only searched Premium Courses. We tried every UX hack we could think of. We only put the “premium course search” text box on the Mixergy Premium page. We also made the text box say “Search Premium Courses Only.”
But nothing we did worked. Google has apparently trained the world to see a search box and think “oh, that’s a magic box that will help me find anything I want.” And no UX tweaks we did could overcome that expectation in the user’s mind.
The second problem is that WordPress and its MySQL database suck at searches. Specifically the MySQL database doesn’t have an “index” for WordPress blog posts. So every time somebody searched on Mixergy’s premium courses, the server would have to scan the entire database. The server couldn’t just look in an index.
So even occasional searches of Mixergy’s premium courses would tax the server. And searches were very slow.
I’m sure somebody smarter than me could solve this problem by adding the right “index” to our database. But it’s not easy to get a database to return Google-quality results when people search for keywords.
So we just limped along. We endured the occasional server slowdowns caused by these searches. And we just hoped that any frustrated users would email us to ask for help.
Attempted Solution #4: Indexing Mixergy in OUR BRAINS!
Believe me, plenty of people have emailed us about their search problems!
Sometimes, the search is pretty oblique, like this one:
[Can you please help me find an] interview with a UK inventor who licenses his products ideas. He was the guy which I think created his own currency (something like that) and licensed gadget/gimmick products out.
Our solution to answer these questions was to leverage the amazing powers of the human brain! And not just one brain: Andrew, Arie and Andrea here at Mixergy have essentially memorized all the interviews and courses, and use their brain as an index. To their credit, they have promptly responded to each and every one of those “please help me find this” questions.
Looking back at our sent emails makes me wince at how much time this took. Here’s Andrew responding to one question: “It took me 30 minutes, but I found it!”
So painful. We had to do something…
Attempted Solution #5: Search by Interviewee Name and Company
The only problem was that improving search seemed impossible. We had tried a bunch of hacks for a year and hadn’t achieved a breakthrough.
At this point, I had no hope that we could ever have a magical search box That Just Works. It just seemed too hard and beyond my paltry skills. So I thought about how we might lower our standards to achieve something less than a breakthrough. I am not a proud man.
Andrew had mentioned that some users just wanted to see a searchable directory of interviews and courses that showed (1) the name of the interviewee and (2) the interviewee’s company.
Maybe just doing that would be enough? So I tried to figure out how to achieve that lowered goal. I added two new Custom Fields to a bunch of posts that specified who was interviewed, and what company they worked at. I then wrote code that searched on these personal and company names. It was pretty slick!
But Andrew then came back at me with a valid point: what if users searched on a topic? So I tried another UX hack. At the bottom of each search results page, I added a link “Retry this search on Google”. I figured if there were no results, people would see the link and try the search again.
But like all the other UX hacks, it wasn’t enough. Andrew and I both thought this search experience sucked, because it didn’t search Premium Courses. And this solution would require somebody to manually add guest and company names to over 900 Mixergy Interviews, Courses, and Cheat Sheets.
Who wants to work hard to achieve mediocrity?
Searching For A Breakthrough
I realized that all our dirty UX hacks weren’t cutting it.
But that implied that the only way we could achieve a breakthrough was by actually creating a single search box that automagically searched all Interviews, Courses, and Cheat Sheets on Mixergy on any arbitrary keyword, all without overloading our servers. That seemed impossible!
But I got to thinking. I’d never actually tried to achieve the impossible. I had only tried to hack my way to mediocrity.
It was then that I remembered a post I’d read on Hacker News linking to a TechCrunch article about a new search startup. The name of the post was Swiftype (YC W12) Builds Site Search That Doesn’t Suck.
That sounded promising!
Attempted Solution #6: Swiftype Search
It was Friday night and I was tired. But I was desperate enough to sign up for Swiftype before I stopped working (it’s free during their public beta).
I found Swiftype’s WordPress plugin. I installed it and pressed a button that “synced” all our posts and pages into Swiftype.
I had a basic search up and running within five minutes! And even out of the box, Swiftype (like Google) ordered search results in order of “relevance”. And because the heavy lifting for the search occured on Swiftype’s servers, our server didn’t overheat.
I was also happily surprised to get a personal email from a Swiftype co-founder that very night:
Just wanted to drop you a line as I noticed you had checked out Swiftype for Mixergy. We are big fans of the content you guys produce. In fact, I just listened to the interview with Emmett earlier today. We would be really excited to have you on board, so please let us know if there is anything we can do to help!
Founder – Swiftype
I played around Swiftype over that weekend. I had always been frustrated that I couldn’t “theme” Lijit or a Google Custom Search Engine search results. In particular, I wanted to add an icon to each search listing to indicate whether it was a free Interview or Cheat Sheet, or a premium Course. Swiftype lets you use WordPress to style the results however you want, which blew me away.
Over the last two weeks, I also worked with Quin to add a few features. In particular, I wanted to be able to filter search results by category, so users could see only Interviews, only Courses or only Cheat Sheets. This would help them find things like “that course about ad buying”. You can also click on the “sort by date” button to see the most recent results instead of the most relevant results.
Finally, because of Swiftype’s “sync” feature, the private content of Mixergy’s Premium Courses was searchable, without us having to expose that content for the world to see.
I’m excited! We have actually created a magic box that will help people find anything they want!
And that’s the story!
If this post was a Cheat Sheet, the first “tactic” would be that if you want search that doesn’t suck, you’d be a fool not to sign up for Swiftype.
But hopefully, you also enjoyed hearing about our long journey as we tried to cure the pain that we and our customers felt. :-)