Or at least as they are currently implemented. (Rambling rant alert!)
Almost every IM client on the planet has the concept of a group. You create a group, give it a name, and populate it with your contacts. At first glance, this is useful.
Having used IM clients since the latter years of AIM's domination, I have consistently struggled with the best way to group my contacts. To this day I have no solution. Why?
Because the group model is inherently broken in that every major IM client out there allows one group per contact. This assumes that each person I know has exactly one type of relationship to me. A contact cannot be a friend, coworker, family member, and developer. You must pick one.
This problem is exacerbated by multi-protocol clients. Not through any specific fault of their own, but when they support connecting to many different services, you suddenly wind up with an overwhelming number of groups with no coherent purpose. If you didn't name your groups exactly the same, or you used a different grouping paradigm, you are SOL and must merge the groups somehow. This becomes an impossible mess when the service on the other end (Facebook, for example) allows contacts to be in multiple groups. Which group they wind up in on your IM client may as well be random, and may not even be the same each time you connect. (*Edit: Since writing this I have discovered that the XMPP server operated by Facebook does actually indicate to clients when contacts are in more than one group. Pidgin honors this.*)
What we need is a cross-service "tagging" mechanism that lets me say "this person is a coworker at X company, and worked with me on Y open-source project." Then, whether I am looking for coworkers at X or codevelopers on Y, this person shows up. Rules could be established so that "coworker at X company" membership implies "coworker" membership. This may at first glance seem like nested groups, but it is very different. It is completely free-form, and allows me to model my contact structure after how I interact with people in real life. Not some bizarre mutually-exclusive set of too-shallow or too-specific relationships.
Multi-protocol clients should then support tag equivalency, so that service-mandated groups can be rolled into a differently-named tag. Or ignore one account's groups entirely, with everyone being rolled into one tag, with the possibility of local memorization of extra tags.
But the way things stand now, having groups at all is actually a hindrance to my communication. "Did I put that person in friends or coworkers? Or are they still in the service-specific default friends/buddies/oxygen-converters group?"
In lieu of a real solution to this problem, I want to disable groups entirely. Except... whoops... Pidgin doesn't even let me do that.
I welcome everyone's thoughts on this issue.