Friday, October 5, 2007

A Better VOIP Client

I dislike phones. Not so much the phones themselves, but their interface. The basic interface, a bunch of numbers and some special keys, is bad enough, but when this interface is extended it's always a mess. I don't think I've ever seen two phones with the same mechanism for programming the speed dial buttons and the conferencing features are always hopelessly arcane. Even something as simple as putting someone on/off hold can be ridiculously complicated.

This is one of the reasons I prefer VOIP service to POTS service. I use a service called MyPhoneCompany.com (bad marketing - reasonable service) because they allow me to pay minimal $ for "softphone only" plan. Not having to have a clunky piece of legacy, single-purpose audio signaling technology taking up space on my already overcrowded desk is a big plus for me. Wherever my laptop goes so does my "phone", which is perfect because I seldom call people unless I'm using my laptop and, if I weren't, I'd be using my cell phone.

But there's a problem to all this. For reasons that I can't comprehend, most VOIP clients go to great pains to try and look like physical phones. The number buttons are the primary interface element and the mute, conference, etc. elements look like the kind of tiny buttons you see on a cell phone. Meanwhile the crucial features like contacts and call history are buried beneath layers of menus. This is just stupid and misguided (I know that Skype, Yahoo, and other IM clients that provide voice service are an exception, but I'm talking primarily about SIP clients here). I want a VOIP client that exploits the fact that it is a computer application with access to all the GUI wizardry provided by a modern OS.

Here's what a VOIP client should look like (it's also what an IM client should look like, but let's not go there):

1.) It should integrate with my contacts database (whether that is Outlook, Thunderbird, Palm Desktop, whatever) so completely that it should almost seem like an extension of that system. I don't ever want to enter names and phone numbers into the VOIP application and have them stranded there. It would even be okay if the VOIP app didn't allow me to enter contact information, but instead forced me to use my PIM client (though it would be nice to, on those occasions when I manually dial a number, to easily record that number into my contacts).

2.) You need to be able to access "the number buttons", but they are not the most important element of the interface. A numeric keypad should be off to the side and out of the way. Handy when you need it, but not taking up too much space or attention.

3.) The most important element of the phone is my contacts. I want to see my contacts as a "tag cloud". The tags are placed on individual phone numbers but the phone numbers should have meaningful names like "Smith, Bob (home)" (the same way del.icio.us *tags* URLs but what you *see* is the "site name" or whatever label you have slapped on the entry). Clicking on a tag brings up a list of all the entries labeled with that tag. Clicking on an entry dials the number for that entry. Simple, right?

4.) I want the tags to be partially managed by me and partially managed by the VOIP app. For example, there should be an app-managed tag named "mostCalled". This should contain the 10 or so contacts that I call the most often as tracked by the app. Other automatic tags would be the letters a-z correlated against first letter of the persons last name or the name of the company, etc. For example, clicking on the "a" tag would show me a list of entries like "Adams, Michael (home)", "Adams, Michael (cell)", "American Airlines", etc. There could be other app-managed tags that might be useful like "recentCalls", but you get the idea. The other tags should be managed by me pretty much the same way I manage tags for del.icio.us.

5.) Obviously I should be able to search my contacts. The contacts/VOIP integration should include launching the VOIP app when I click on a phone number in the PIM app.

6.) Conferencing in another number to an existing call should be implemented with a context menu selection off an that entry; find an entry, bring up the context menu, select "conference" and they're called and added.

7.) All other features and functions (hold, mute, record, etc.) should be implemented the way you would any normal, modern GUI (menus, toolbars, ribbons, etc.)

If anyone implements something like this, please let me know and I'll help test it.