Background
Team Foundation Server is a great ALM tool. However, the search experience wasn't really great. I mean,
WIQL is awesome, but it only applies to work items. Although it's a powerful query language (with the incredible
ASOF operator), the user experience is far from best.
When we talk about search, we're likely to think of Google. I must admit I use it daily - it's one of the tools in my programmer's toolbox. And since when I began using Windows Desktop Search (then MSN Desktop Search), I felt like the power of Google had been brought to my desktop (well, sort of. :-) ).
Anyway, I always wanted to leverage the simplicity of Google's user experience and the convenience of Windows Desktop Search to provide a full-text search for TFS.
Windows Desktop Search Protocol Handler
That was my first idea: create a WDS protocol handler, in order to index locally my work items and search them from the WDS UI. Much to my disappointment, I was told
I couldn't develop a protocol handler using C#. Although I can program in C++, I neither have the skills nor the will to develop a protocol handler in C++. I'd better forget about it - or wait for the day when Microsoft fixes the "don't use .NET for OS extensions" issue.
Noah's "Search Work Items" VS Add-in
Then
Noah Coad developed and published his
"Search Work Items" add-in. It's a great tool, for it greatly simplifies the process of searching the work item store. But it doesn't offer that "Google-like" experience - it's actually a wrapper around WIQL. Noah mentioned he would eventually add support for traditional search engine notation and the ability to search for specific fields. When I saw those items in his "wish-list", I decided to contribute. The problem was "how?"
Lucene.net
I remembered I had used
Lucene.net in a few projects before, and that it offered everything I needed to provide a Google-like experience:
- Full-text indexing, for great performance;
- Query parser, for traditional search engine notation in queries;
- Ability to search for specific fields;
- Great performance and scalability;
- 100% managed code, so I could use it in C#.
Originally the idea was to develop a indexer and contribute it to Noah's project, as an alternative and a complement to the WIQL-based search. When I was almost done, someone asked in a certain mailing list: "Is it possible to do full-text search against the Source Control repository?"
In that very moment this project was born. :-)