Bad Search Can Break a Good App – Real World Example

by Xavier Comments: 0

In my Pluralsight training, Getting Started with Enterprise Search using Apache Solr, one of the things that I make quite a bit of emphasis is on how important search is, yet it is one of the most misunderstood functions of IT and development in general. In this post I will show you an example of how a potentially good app is a pretty bad app mainly because of its search capabilities.

It is so much the case that in Twitter Pluralsight selected this phrase to tweet about the release of my course as you can see here:


But now let’s get to the sample. Here’s the scenario:

Problem: Life is busy. No time to go to the supermarket

Solution: use your grocery store’s web site to purchase your food and it gets delivered home the next day. Charming idea, did not work with Webvan, but it seems to be doing quite well for Amazon and in my home town one of the major supermarkets is doing it in a more controlled way with a good delivery service, all for $10. Not too scalable, but for a MVP it is ok. (Read Lean Startup if you don’t know what MVP is)

It may work or maybe not mainly because of a really bad user experience, but let me get to the point. UX is important! Never forget it!

You get to the app in and they have mainly 4 sections as you can see here


And here is what they are for:
– On the left they have a directory style organized by aisle. Grouping kind of works in my opinion if you are not too sure of what you want, but it is terribly slow and inefficient. They lose cookie points for this.


– Then in the middle they have a section where they display the products. This is very standard so it kind of goes through, however they lose cookie points again for having products without pictures or with very weird stretching. They are a supermarket, and a big one, so I am sure they can send a guy with an iPhone to take a quick picture.


– The cart has a problem which is that they do not actually display the product name, only the description. Who thought of this? Not even something as simple as a tooltip!


And then here is the deal breaker for me: BAD SEARCH! As mentioned in the post, search is one of the most misunderstood functionalities in IT. A lot of people make huge mistakes because search can be done with a database, which it can, but the end results sucks! And it did suck here.

Let me show you this. I want to look for “jabon dial” which means “Dial Soap”. So I just type “Jabon Dial”. Should work, right? It doesn’t! Look at the message: “No results found…”. Also I hate the CAPS. There may be 1 technical reason I can think of but it is pretty dumb.


But why? If you look closely there are 27 types of “Jabon Dial”, type only Dial


The problem lies here:
– The person that implemented this application had no knowledge of how search works, which is normal as search is pretty misunderstood.
– But humans don’t do search like engineers want. Having the user do a search exactly like the engineer wants is just lazy and ineffective.
– So engineers who created this probably went for a simple exact match in a database search
– This is a terrible user experience. I can bet the farm that Amazon would have closed its doors in the 1990s if they had such a bad search

How to fix it? Well, go learn how to use a search engine. And that’s why I created my course, Getting Started With Enterprise Search Using Apache Solr:

The Pluralsight life: course and guest blog post the same day!

by Xavier Comments: 0

Getting Started with Enterprise Search Using Apache Solr

by Xavier Comments: 0

Enterprise search used to be not for the faint of heart or with a thin wallet. However, since the introduction of Apache Solr the name of the game has changed. Solr brings high quality enterprise search to the masses. Don’t leave home without it!

And let me help you get started! My intention is to create a series of posts where I can help you get started with Solr. This process can be easy if tackled with the appropriate resources, but it can be daunting if you chose the wrong ones.

I will start by describing what each module of my training covers, click on the bullet to be taken directly to the post.

  • Why Solr & Enterprise Search?
  • Architecture of an Enterprise Search Application
  • Solr Configuration
  • Content: Schemas, Documents and Indexing
  • Searching & Relevance
  • Making it all Work: Put a UI on It!
  • Final Words

My course is available in Pluralsight: Getting Started with Enterprise Search using Apache Sol. You can watch it here:

Solr training in Pluralsight


Speaker at the Atlassian 2014 Summit

by Xavier Comments: 0

Happy is a good way of describing it. However it goes beyond that. I am grateful that I have been chosen as a speaker in Atlassian’s 2014 Summit!

If you are reading this before the conference you can find me here: Atlassian Summit 2014

Take a quick look:



All these years working hard with Agile and Jira pay off!

Silicon Valley, here I go!

Rescue Time with 0 hours!

by Xavier Comments: 0

Vacations are a way of recharging and resetting your creative process. For the first time I see 0 hours in my weekly summary

Dumb UX mistakes in IIS

by Xavier Comments: 0

This is just a quick rant/question. Does anyone know why you have to type your password twice when setting up the Application Pool Identity in IIS?

It seems an extremely dumb feature as #1 you can copy paste the password or #2 just type it but given you usually include service accounts here with stupidly complicated passwords then why do you have to suffer typing it twice?

Windows “evolves” but the underlying things are exactly the same. Can’t Microsoft spare a little bit of time making Windows more usable and fix little itty bitty things like this one that overall will have a better user experience?

Oh well, who cares about devs anyway!


Determine number of active connections to each database in SQL Server

by Xavier Comments: 0

So I am taking databases offline and I need to find out which ones have active connections to them. People usually do a


However that brings a lot of info that I don’t need. I prefer to use this query so I see the DBs with number of connections!

DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
dbid > 0
dbid, loginame

Brilliant query!

Change owner of a Microsoft SQL Server database

by Xavier Comments: 0

We had a spaghetti of database owners so I decided to get this straightened out. How to do it? Simple!

– Open New Query in SQL Server Management Studio in the database that you want to change the owner
– Run EXEC sp_changedbowner ‘domain\owner’
– Wait for Command(s) completed successfully.

As simple as that!

How to throttle Google Drive

by Xavier Comments: 0

So Google Drive’s price hits rock bottom killing everyone else, $2 for 100GB and $10 for 1TB monthly. Should I stay or should I go?

So I have explained before why Google Drive sucks, but now at this price the name of the game changes. So there were two blockers for me:
– No throttling which dropbox does brilliantly
– No LAN sync

Ok, so Google Drive is still a B product against the competition and can’t do LAN sync. But there is a way to do throttling. Not built in, but it lets me use Google Drive without being shot (kind-a) by IT

Get NetBalancer by SeriousBit. I am not affiliated with them in any way but they have a killer product!

You can throttle your processes

And check this out. This is instant gratification for a geek like me!
Monitor and throttle your bandwidth

It even has a very small gadget plus another one in the task bar just with the ups and downs.

Now only one thing pending, LAN sync! C’mon Google! Make it worth it!

One detail about LAN Sync: Nothing to do at this point. Google Drive is even so dumb that if you copy the files first it does not recognize that they are duplicate and creates copies

Developers: Think about consequences, implications, performance and related

by Xavier Comments: 0

Today I find myself removing a stored proc from our dbml because it is no longer in use. This stored proc updates the document information to be exported.

I check our source code and indeed no one uses it. So I go ahead and remove it. Is that the end of the story? Usually it is, but I decided to use a bit of common sense to find out if this is the last step or no. It wasn’t. Let me explain and get to the moral of the story quickly:

– We have a requirement to export the information of up to several tens of thousands of documents into Excel/Word/XML in a single go.

– We used to need to make sure that the document information is up to date, and given the source is in XML and XPath is rather slow, we built an intermediate SQL Server table to be able to have speedy exports.

– We made a change and now information is always up to date in the intermediate exports table, however the code that CHECKS if the information is up to date was not removed.

– So the info is not updated as it is already up to date, but we are still checking if we should ACTUALLY DO THE UPDATE. The code is still there.

What does this translate into? An unnecessary and performance degrading step. We need to check to determine if thousands of documents are up to date (and twice but this is another story) when they already are. This means there are two queries that we could easily avoid and save time as they add zero value but take several minutes to execute.

Moral of the story: when making a change don’t focus only on the change, focus also on the side effects of a change.

This should be a rule of common sense for all developers.