Giving our users a better search experience
Here at Follow Up Boss, we have a small development team that works hard to ship value to our users quickly (btw we are hiring). We often have to make decisions on how to best solve a problem. Sometimes that means investing the time to build a service or feature from scratch and other times it means leveraging third party tools and services to solve the problem quickly. We recently found ourselves making such a decision while working on search for our new, upcoming version of Follow Up Boss.
The goal is to provide our users with a great search experience. It is something that is used everyday by our users and we want that to be a pleasant experience. What makes for a great search experience? It needs to be simple and seamless, allowing the user to find what they are looking for quickly without getting in the way. For us, this translates to some of the following requirements:
- Has to be fast (100ms or less for search response time)
- Has to provide relevant results
- Auto completion with results on the first keystroke
- A UI that displays the most useful bits of information for our users
- Handle typos, encoded characters, and other tricky morphological and syntactical issues.
Selecting the search solution
Having had experience building search implementations with Sphinx, Solr, and Elasticsearch in the past, the first thought was to see which of these tools would best suit our needs at Follow Up Boss and begin working on implementing search with that tool. We knew that while the initial setup may not be very difficult, there would likely be a significant amount of time spent in the mid to long term fine-tuning index schemas and query handling (such as handling typos), adjusting ranking, and general maintenance (system administration duties and tool updates).
We were initially leaning toward implementing Elasticsearch ourselves, but after some discussion, we decided we shouldn’t limit ourselves to building and maintaining the search ourselves, but rather look at what options we have with third party search solutions. In that effort, we looked at Algolia, Bonsai, Found, Qbox, Amazon CloudSearch, and Amazon Elasticsearch Service.
We know when choosing a third party service it is important to consider several factors. Reliability is a common one, but some other key factors to consider are who owns the service, how good is the customer support, and is the service or product you intend to use the focus for that company. These questions are important as it isn’t as rare as one may think that a company is bought out by a company with different values, shut down, or changes their product focus.
At Follow Up Boss, we’ve experienced first hand large third party services who provide critical services providing poor customer service (days before responding or not at all is completely unacceptable) or shifting their focus and the service that was at the forefront is now on the back burner and degrades.
This has a costly long term impact which makes it important to choose third party providers carefully. No matter how careful you are and how great the third party service is be sure to keep these things in mind when integrating with that service. If their service goes down or degrades, your system should be able to cope with that.
At Follow Up Boss, we leverage Amazon Web Services, so when we were looking at third party search solutions there was some interest in mitigating some of the search service management to something like Amazon Elasticsearch Service, or using some other similar hosted Elasticsearch. For us this would help in mitigating some work, but not to the degree we were hoping for. In the end, our top pick was Algolia.
Benefits of Algolia
Algolia not only had the appeal of taking away a lot of development time on our part, but we came to the realization that we have a pretty common search use case and Algolia does a great job of creating a fast, wonderful experience for those use cases.
When we started demoing Algolia, we were happy to see fast index and search speeds (~40ms round trip). Their API made things really easy for us and they handle typos, diacritics and other syntactic issues straight out of the box. We even found a simple approach to restricting results based on user roles using their API key hashing to enforce query conditions.
We did some more research into their Service Level Agreement, Backups, and Security and were happy with what we saw. Last but not least, we appreciate that the focus for Algolia is providing great search experiences, which aligned more with our initial goal for our users. It is apparent from their open source offerings like instantsearch.js that they do not just stop with their API and hosting, but that they care a great deal about the search experience as well. Other third party services for search seemed more concerned about supported features and management of search nodes, and while that is important, it is not the core concern and focus we have for our users.
We have released our autocomplete search with Algolia in our beta and it has been great. We are happy with our choice in Algolia and hope that it will continue to stay that way for a long time to come.
The development team at Follow Up Boss makes a point of ensuring the way we integrate with third party services is done in a robust way. The last thing we want is for a third party service to go down and our site to become unusable. In the case of Algolia, when we need to update a record within an index, we do that in a separate process, so that when our users save information about a lead, it will never be waiting for Algolia’s API for that to be done or to receive a response. We also provide for a fallback search, so that if Algolia is down, our users still have a way to search for leads.
Often the gamble with choosing a third party service instead of building it yourself, is that you hope to pay in exchange for saving a lot of development and maintenance time and cost. You get to reap the benefits of people whose main concern is a particular product or service. What can become a nightmare is when that service is unreliable, with downtime every week, or doesn’t provide enough flexibility and control. When this happens, you often are left with having to switch to another provider or building it yourself, which is often going to be more of an effort at a later stage.
Sometimes, it is useful to leverage third party services simply to be able to get a feature in front of your customers quickly, so that you can get feedback and make sure it is something that brings them value and what, if anything, needs to change. This can save a lot of upfront cost of building it yourself only to discover that it doesn’t provide value to your customers.
We also need to remind ourselves that the end user is not going to care if we built our search from scratch or leveraged a service like Algolia, what they care about is that the search experience with Follow Up Boss is great. If we can find ways to give that to our users sooner rather than later, it is a win-win.