Avoiding Email and Twitter Overload

I recently watched Randy Pausch’s lecture on time management (1 hour). It’s a good reminder of things to consider when dealing with people and simultaneously trying to accomplish great things. Inspired, here are some of my communication management hacks.

Generally, I subscribe to Paul Graham’s Maker’s Schedule, Manager’s Schedule. I attempt to identify large blocks of uninterrupted time using the fold calendar and then avoid interruptions while I get stuff done.

Sometimes I’m not looking to get that much done, so I disregard these concepts. But they have served me well in times of need.

Communication notification philosophy

Basically, turn off real-time automatic notifications of communication while leaving some channel for messages of critical importance.

I like Tim Ferriss’s adage of “sometimes you need to let small bad things happen to get large good things done.”

Email is simply not the correct medium for anything time-sensitive because it is asynchronous. You should not expect a response in less than three days to email you send, and you should not need to respond to emails in less than a day. No email should be important enough to warrant blocking the most important thing you should be doing. If the concern truly is pressing, the person will just have to call you. Set the communication guidelines clearly, and help others understand how you can best be reached.

Get rid of real-time updates. Email notifications on your computer are low-hanging fruit. So are instant messaging status notifications. How often do you care that someone from high school just came back from idle?

Even in this new age of always-connected mobile phones, you can opt out. Turn off email notifications. This might seem extreme, but I have noticed that it is significantly less distracting, and I haven’t been burned by it yet. Thanks to Keith Marcum for the tip.

As a corollary to this, use automation when you actually do care about something. Assuming you turned off automated notifications, you’d be in the dark otherwise. Set your IM client to alert you when the person you need to chat with becomes available so that you don’t check it constantly and you can focus on other things in the meantime.

Expecting an important email from a client? Is every email from the client important? Set up your email client to display special alerts when emails matching a certain sender or domain are received.

Use folders and tags to segment your inbox. If you subscribe to mailing lists or get emails that you know will have a low likelihood of usefulness, relegate them to a folder outside of your inbox. This saves the mental effort of triaging. For example, I may or may not have a special folder for emails sent to “all employees” from a few people that are prone to send these types of emails. I can generally check these messages once a day or every other day without significant harm.

What I’m trying to say here is that the default is rarely defensible. If you have an objection to the things that I’ve said here, consider whether you can somehow get around that objection by using tools to help you sort through the information you are getting. I’ve already provided examples for client emails.

Email management philosophy

Much has been written about email management, and I am reluctant to repeat it. So I will say what works for me and add that I don’t see email as a problem. I think I have mitigated the problems, or perhaps I don’t get the volume of email that others do. I’m sure there are environments where the tips I use are not helpful, but for my style of working, they seem to work.

Every time you want to look at email, ask yourself, “why am I here?”. Write it down beforehand if you have to. Then stick ruthlessly to this goal. Check for specific email, by all means, but check it only on your terms. You have a choice–will you allow a random email to knock you off-balance and take you out of the zone? You can do a quick scan for important emails, and condition yourself to check the rest only daily.

I am starting to feel that checking first thing in the morning is counterproductive. Use your energy and focus on the hardest problem you have instead. Try waiting on email until later in the day when you need a break. If you need to find an email but don’t want to be tempted to check your email, try this handy script.

Twitter philosophy

I use Twitter to keep track of people I know, interests, and hear about things are going on in the world. For this reason, I’ve significantly reduced reading normal news articles. Sometimes I worry that I am selecting my own biases, but this is a topic for another time.

So generally Twitter falls in the maybe useful, definitely non-urgent bucket. I generally try to scan it on down times that are bounded. For example, if I know that there are five minutes until a meeting, then I feel safe checking this. I know that I won’t waste more time than that.

I favorite tweets that are interesting or that contain links that I want to later read at length. My feed reader includes the feed of my favorites, so when I’m in the mood to read longer articles, I see the things that I favorited. This helps reduce the amount of things that slip through the cracks when I’m reading on the phone, because I read Google Reader on a laptop, where it’s easier to read articles, and when I have devoted my full attention to this.

And you?

What are your communication hacks? A chat bot for responding to your ex-girlfriend? Did you watch the lecture I linked to above and find any useful tips I didn’t list here? Was this article helpful? Let me know in the comments below!

No such file to load when running Ruby 1.9.2 on Ubuntu

I have an existing Rails repo that is trying to run Ruby 1.9.2. I attempted to check out the code and get things running, but had a small problem.

$ rake spec
(in ...)
rake aborted!
no such file to load -- net/https. Try running apt-get install libopenssl-ruby
(See full trace by running task with --trace)

Although I tried sudo apt-get installing the various libopenssl-ruby and libopenssl-dev and whatnot, I kept getting the same error message.

I found this blog post that helped me out a bunch.

Ruby Pretty-Print XML

It’s fairly easy to do with some Rails libraries, although it’s different from the way that most people have suggested online due to Rails 3 changing the way that some things are laid out. If you want to use IRB or something else to pretty-print XML with Ruby, try the following:

require 'rubygems'
require 'ap'
include ActiveModel::Serializers::Xml

raw = File.read(filename)
parsed = Hash.from_xml(raw)
ap parsed

The ap is the awesome-print gem. It prints out the resultant structure in an easy-to-read format. I like the output of ap better than pp, and I like using RoR’s from_xml better than, say, REXML, Nokogiri, or XmlSimple. For the first two, you basically have to roll your own pretty-printer (from what I understand). XmlSimple works, but the output seems to be a bit funky (too many arrays for keys, etc.)

Check out my latest pretty-print script, which also does HTML and JSON real pretty-like: https://github.com/panozzaj/conf/blob/master/common/bin/pretty

Ruby Shebang RVM

If you’re wondering what the right shebang line is when you’re using RVM, it’s:

#!/usr/bin/env ruby

For searchers, it’s also called a hashbang, hashpling, pound bang, or crunchbang.

Getting Objective Resource Working with SDK 4.2

I cloned Objective Resource from the yfactorial ObjectiveResource github repository, initialized the git submodules, and tried building it under the SDK for 4.2.

I ran into two problems when trying to build. First, it complained about not knowing where the SDK was. To remedy this, I went to Project -> Edit Project Settings -> Build -> Base SDK, and changed it to latest. It was originally looking for the 3.0 SDK, which wasn’t installed on my machine.

Next, it complained with the following errors:

: error: CFBundleIdentifier ‘com.yourcompany.objective_resource’ contains illegal character ’: invalid bundle identifier 'com.yourcompany.objectiveresource’

I fixed this by following the instructions for 'com.yourcompany.App_Name’ contains illegal character ’_’. Basically go to Project -> Edit Active Target -> Properties and change identifier from …identifier} to …rfc1034identifier}

Hope this helps someone out!