Friday, January 21, 2011

fighting inbox clutter

For my current client, I'm spending an inordinate amount of time reading e-mail just to keep up with what's going on in the project--inordinate, I think, because I've never gotten this much mail in any other work environment. This e-mail comes from a culture of copying everyone on the most trivial messages; another is the habit to send e-mails instead of stopping by someone's desk, calling, or sending an IM--all of which are superior in most contexts because they're synchronous. As I've mentioned on Twitter (@adhondt), I've tried sending no messages--but there are definitely situations that e-mail and its asynchronous communication is better--for example, for sending and accepting meeting invites. Yet whenever I respond to an e-mail, I find it spawns more e-mail--someone inevitably responds to my message--so I've decided the most effective way to fight inbox clutter is to send fewer notes. It's been hard for me to remember, sometimes, not to reply to messages someone sends me--so I've configured some Outlook macros to remind me. I also added a line to my signature:
* Fight inbox clutter. The total number of messages I sent today (instead of closing the loop with a visit, a phone call, or an IM) is indicated at the end of the subject line as (sent / quota). 
My quota, admittedly a constant in the code, is 10 messages/invites per day--and though there are days I exceed it, I think it's my average.  I've also made this a public quest, explaining to people each time I follow up synchronously to an e-mail, that I'm stopping by because I think a conversation is a quicker way to resolve the issue than to respond with another e-mail.
We're using Outlook 2007, so I set up this VBA macro to remind me about my quotas. Tell me if you use it!

'About: D. André Dhondt, 
Dim WithEvents loadedMail As MailItem

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Cancel = canAvoidEmail()
End Sub

Private Function canAvoidEmail() As Boolean
    Dim areYouSure As String
    areYouSure = "You've already sent " & countSentMessages() & " messages today. " & _
        "Are you sure a visit, a call, or an IM wouldn't resolve this? Click OK to send."
    canAvoidEmail = (MsgBox(areYouSure, vbOKCancel) = vbCancel)
End Function

Private Function countSentMessages() As Integer
 Dim sent As Outlook.MAPIFolder

 Set sent = GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail)
 countSentMessages = sent.Items.Restrict("[SentOn] > '" & Format(Date, "ddddd h:nn AMPM") & "'").Count
End Function

Private Sub Application_ItemLoad(ByVal Item As Object)
  If TypeName(Item) = "MailItem" Then
    Set loadedMail = Item
  End If
End Sub

Private Sub loadedMail_Open(Cancel As Boolean)
  If loadedMail.sent = False Then
    loadedMail.Subject = loadedMail.Subject & " (" & 1 + countSentMessages & "/10)*"
  End If
End Sub