Full Text Search refuses to be a black box

Once upon a time, before Google pwn3d internet search, there were several competing definitions for full text search. Altavista more or less gave you results matching the exact strings you gave it, but in a crazy order that made it painful to use. Excite (my favorite back then) used a dictionary to achieve stemming and synonym matches: searching for ‘dogs’ would also match documents that contained ‘canines’ or ‘dog’. Then Google blew them all away, and established a dominant set of expectations for how text search behaves.

I forgot about this, which is why I’m frustrated by the almost ridiculous complexity of the major server-side text search engines available right now. But it makes sense, once you learn what the options are.
Continue reading “Full Text Search refuses to be a black box”


I have a text file full of links and notes extracted from about a month of reading everything posted to the 2 dozen Ruby, Rails, Postgres, and web tech blogs that I subscribe to via RSS. There’s so much going on in Ruby and Rails in particular, especially when it comes to convenient shortcuts that save you work, that there’s something new and cool and slightly revolutionary on a daily basis that you could use to make your app prettier.

So I’ve been in a state of analysis paralysis for about a week.

I was trying so hard to be clever and state of the art that I forgot to get something working.
Continue reading “Prefactoring”

Choosing Your Battles in Software Architecture

When you’re starting a software project, you have to make some technology choices. You have to pick a technology stack, but you also have to pick the tools that your team will use to manage code, track issues, write specs, and collaborate over long distances, among other things.

Some of these things are more important than others, but they all matter. If the majority of the team is using PowerBooks but the UI specs are all done in Visio, that’s going to be annoying. If you’re working on something involving trade secrets (or national security), using AIM is probably a bad choice. But whether you do page wireframe drawings in PowerPoint or OmniGraffle on those PowerBooks, or whether you use IRC or Jabber over a secure connection for collaboration, is less important.
Continue reading “Choosing Your Battles in Software Architecture”