Size Matters


The other day I mentioned that I have around 1400 people in my Jabber roster (that's a Buddy List [tm] for you non-Jabberites, but I prefer not to use that term since it's been trademarked by AOL). So one of those many people IM'd me overnight, asking how I (and the IM server, and the Jabber clients I use) manage all those contacts.

First the server. Well, no problems there. Since I am one of the server admins, I can tell you that our trusty ejabberd deployment does experience a CPU usage spike when I log in, i.e., while my Jabber client slurps down my roster. But other than that ejabberd simply chugs along happily, processing all the inbound presence information I receive.

But not all Jabber clients are quite so happy. The "stpeter roster test" is somewhat legendary as a hurdle to pass in optimizing roster processing and presentation. I've tested clients that took three or four minutes to render my roster (and that's not counting presence information)! But after some optimization, most of those clients have gotten the time down under one minute.

As to my personal IM habits, I use a lot of roster groups. One group in particular is a kind of catch-all, and it contains probably 600 people (but folks that I don't contact often, if ever). Typically I wait for people to IM me (hey, I'm interrupt-driven). But when I need to IM someone and they're not in one of my smaller roster groups, then I need to find that person fast (i.e., before I get interrupted!); thankfully, some clients (e.g., Spark) make that task easy by enabling me to essentially search my roster via Ctrl-F or somesuch keystroke. In a client like Adium or iChat I'll disable the groups view and scroll through the entire roster, but that's not necessarily very efficient.

Managing multiple simultaneous chats (both one-to-one and multi-user) can also be difficult. I'm somewhat agnostic about tabbed chats in one window vs. multiple windows. Adium uses tabs and iChat uses multiple windows, and I can handle either approach. It's all about proper placement of the window or windows on my desktop -- I typically have quite a few applications open at once (Firefox with 10+ tabs, Thunderbird with my (still empty!) inbox and one or two draft emails, four or five terminal windows, calendar, a PDF viewer, etc.) and my chat and groupchat windows go toward the bottom left of the screen, where I can keep an eye on them for new messages. Seems to work for me.

Another challenge is reading through the flood of offline messages and presence subscription requests that I typically receive when I log in after 8 or 10 or 12 hours offline (don't even think about what happens when I return from vacation -- I try not to take those ;-). Some clients present one window for each chat or subscription request, which is sub-optimal if you have received 20 offline messages and three or four subscription requests, let me tell you. I have not found a client that handles this with aplomb (perhaps because until recently the major IM services have not supported offline messages).

I don't claim that my IM profile is typical. Few people have more than 100 people in their rosters, and vanishingly few have more than 500; 1400 is almost unheard of (let alone the ~3200 I used to have!). And I doubt that such heavy IM use will ever become typical (though I do think that people will tend to have more contacts as IM becomes more popular). So you client developers might not want to read too much into my feature requests. :-) But do feel free to ping me if you'd like me to subject your client to the "stpeter roster test"...

Peter Saint-Andre > Journal