Living Zero: Part 1, What It Feels Like

The most important thing about following an Inbox Zero practice is understanding the underlying motivation for doing so. Maintaining an inbox that contains no mail in it to distract you provides a significant change in mental stress. You’ll notice almost immediately a new feeling about the work you are currently doing. You’ll begin to feel more on top of things, and you’ll start to realize that the new feeling you have is the realization of “done”.

When we continue to maintain an inbox with hundreds, thousands, or even fifty messages we are telling our brain, “this is material I still need to review”. In most cases however this is material that we have long read and dealt with, yet we continue to maintain them in our inbox with the hope that if something happens we will have covered ourselves. When we follow an Inbox Zero methodology, and remove all of the clutter from the inbox we also remove the little voice constantly nagging away at us asking, “have I taken care of everything I need to take care of?” With the inbox completely empty there holds little doubt as to what remains to be addressed.

In many cases, some people I’ve talked to use their inbox as a way of controlling their task list. Active tasks remain unread until they are completed, and completed tasks are sorted into a project folder. This of course causes new junk messages, meeting reminders, and new tasks to get tied up with current tasks you are working on and your brain has to stress over what tasks are actually started, which aren’t, and what priority they should be in. The fact is, your email inbox should not be used to maintain your task list (more on this in the next post).

Just as with a post office mailbox, the purpose of it is to act as a temporary storage facility for you to come and get your mail. Once you have received the mail you sort them into junk mail, personal, bills, and the like. But never do you walk back outside to your mailbox and put the items back in for storage. The same rule should apply to your email inbox and it just takes a little mental retraining to get into the habit of keeping this empty.

In part two of this series I’m really going to get things rolling by talking about dealing with incoming email. I’ll be covering prioritization and concepts of how to quickly move through your inbox and get things cleared out. This is the foundation of maintaining a empty inbox, and the way you adapt these upcoming suggestions into your day will dramatically effect how you get work done.

Announcing, “Living Zero”

I’ve been hearing from a lot of friends lately that are just now beginning to look at maintaining an empty inbox throughout their day to day work. Over the last year I have successfully implemented the concept of “Inbox Zero”, and additionally came up with a pretty good organizational plan, some email best practices, and tips to really sticking with maintaining an empty inbox which I have shared to great success with other programmers, designers, and business executives alike. So in an effort to assist all of the recent converts to the “Inbox Zero” concept I will be writing a five part series over the next few weeks covering many of the concepts and daily practices of maintaining an empty, productive, and organized inbox that I have found to be so successful not only for myself but many others as well.

As the sections are released I will continue to append them to this entry to give you a single location you may go to reference in the future. Depending on the demand, I may consider releasing the information in ebook format, with additional tips in the near future. Stay tuned, the first post will be online within a few days.

This series is still under development, and links will be added to the table of contents as the sections are completed. Stay Tuned!

TABLE OF CONTENTS

  1. What It Feels Like
  2. Dealing with Incoming Email
  3. Styles for Organization
  4. Sending Effective Email
  5. Sticking with It (no such thing as partially done)

Easy Text File Conversion on the Mac

Like a lot of other web developers, clients provide me content for their sites/applications in all sorts of formats, and it can get a little crazy. But it turns out that a little terminal utility on the Mac can help the stress of text file conversion.

The utility is called textutil and you can access it by going into your Applications > Utilities > Terminal, running Terminal, and then typing textutil. If you type the command without any arguments you’ll see a fairly strong list of options. Textutil supports conversion of txt, rtf, rtfd, html, doc, docx, odt, wordml, and webarchive formats.

Running textutil isn’t as hard as it looks. For example, I have a lot of clients that send me material in .docx or .odt format. I like to convert them over to .rtf files for quicker review (so Word or OpenOffice doesn’t have to load up). I make sure I’m in the same directory as the file I’m working with of course, and I execute:

textutil -convert rtf -output introduction.rtf introduction.docx

Once that’s done, you’ll notice an .rtf file is now in the same directory containing the original material.

Now the power of textutil doesn’t end there. Sometimes I want to convert a bunch of files and combine them into a single file. To do that I do something like:

textutil -cat rtf -output combined_project.rtf *.docx

Doing this takes all the .docx files in the current directory and combines them into a single .rtf file called combined_project.

If you have to deal with client provided text a lot, take a serious look at textutil – it has some great features hidden within it’s depths (like font resizing).

Making Configuration Files with YAML: Revised

So back in July 2007 I posted a blog on making configuration files with YAML, and I’ve been noticing a lot of readership on the old article. Because it seems that a lot of people are reading it I felt it was important to show how I apply this nowadays.

First I put my config.yml file within the /config/ directory within my Rails application. It looks something like this:

development: &non_production_settings
  :google_analytics:
    :api_key: "[Enter Google ID]"
  :site:
    :title: "[Title]"
    :address: "http://localhost:3000/"

test:
  <<: *non_production_settings

production:
  :google_analytics:
    :api_key: "[Enter Google ID]"
  :site:
    :title: "[Title]"
    :address: "[Address]"

Then, I create a new file called load_config.rb within the /config/initializers directory. You can name the file whatever you want – that’s just what I call it. This is where the actually YAML loading is going to happen – and this is what it looks like:

raw_config = File.read(RAILS_ROOT + "/config/config.yml")
APP_CONFIG = YAML.load(raw_config)[RAILS_ENV]

Now any time I want to all one of these variables I just call it like:

<%= APP_CONFIG[:site][:title] %>

Stop Leading Your Team to The Destination, Give Them The Map

To start 2009 this will be one of the first of many business oriented posts coming to this blog. It’s great to be a technologist, but it’s important we as technologists can do something with our ideas. So I hope to provide some benefit to those of you willing to listen.

The biggest thing every executive needs to run a successful company is a vision – you can’t do crap without a vision of what it looks like. I’m not talking about a 5-year plan, or a 10-year plan… I’m talking about an idea. What do you want to be? Who are you in the realm of all of your competitors? If you don’t know this, why come in the office in the morning? What pushes you to get up everyday? There has got to be something… and that’s the first step – figure out what it is.

Once you’ve got the idea figured out, don’t tell everyone about it by commanding they follow behind you, because people will get lost and it will slow the entire process down.

Think about it for a second. If a group of people in several cars are all trying to get to the same place, but only the person in the front of the line knows how to get there. With every stop sign and stop light, every turn, and every interruption the people in the line have to check where the leader is… and in turn the leader needs to check that everyone is behind him. So instead of commanding, give everyone the map, explain the vision, and explain how they fit into the vision of what’s going on. Then with the map in hand they can get to the destination in their own right. Give your people the freedom to make small course changes on the way, side streets or pit stops, they’ll meet you at the finish line.

Let’s say part of the corporate vision is to provide a superior user experience in all of your software. If you share the map and embed that ideal in your corporate culture you’ll see how people will take charge. Jill in QA will consider it when testing. Bob in design will research the best user experience paradigm in his interface, just as Sam will do the same when programming the front end.

Have a vision, build a culture around the vision, and then let the smart people work.

Professional Goals for 2009

So I’ve seeing a lot of people writing on their blogs about their general goals for the upcoming year. So I thought for the purpose of reminding myself every time I came here I would write mine up as well.

  1. Continue my work/learning Ruby and Rails
  2. Go back to learning C
  3. Learn Objective-C
  4. Continue my business/executive training
  5. Blog more of course
  6. Continue advancing my knowledge of Agile methodologies
  7. See team camaraderie at my day job increase
  8. Really start following TDD/BDD principles

So with that in mind… HAPPY NEW YEAR!

Optimizing the RedCloth Helper

In my previous post I posted several small Rails tips, one of which was a cleaner RedCloth helper. Unfortunately, this helper requires that the textile is parsed each time the page is loaded, and that can get nasty. So it our item is a text field called details, just add a details_html field to your model… then create a private conversion method that you call using a before_filter.

Something like:

before_filter :convert_details

def convert_details
  return if self.details.nil?
  self.details_html = RedCloth.new(self.details).to_html
end 

Then just display details_html in your view instead. This way the textile only gets converted when you save and make changes to it.

Rails Tip Roundup

I’ve been working on a few new projects lately and wanted to share a few little tips I’ve started doing.

Conditional Buttons for Shared Forms

Something that I like to do is use a shared form for both my edit and new views. Doing this however means I need to be friendly to the user interface and make sure the submit button is properly instructional. So for example if I have a Customer model with an instance variable @customer my button would look like this:

<%= f.submit((@customer.new_record? ? "Create" : "Update") + " Customer") %>

With this I’m checking to see if the @customer instance variable belongs to a new record and if so it’s outputs Create, otherwise it’s an Update button.

Cleaner RedCloth Helper

There is the built-in textile helper that comes with Rails, it’s carage return rendering is a bit lame so most people typically upgrade their RedCloth gem and using something like:

<%= RedCloth.new("My copy that requires formatting").to_html =>

I prefer to instead create an application level helper for redcloth (some people might instead overwrite the textile helper here, but I find that can be confusing to some people looking at your code for the first time). My helper looks like this:

def redcloth(str)
   RedCloth.new(str).to_html
end

So now when I want to redcloth something I just call:

<%= redcloth("My copy that requires formatting") %>

Simple Little Permalink

When I have a simple object that I want to create more user-friendly URLs for, I’ll create a basic permalink. In the instance of the same Customer model from tip 1 above, I like to use the customer name as the permalink. To do this of course the name has to be unique so make sure you are validating it’s uniquiness above all. Then I create a permalink column in the database table and write something like this in my model.

def name=(value)
  write_attribute :name, value
  write_attribute :permalink, value.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase
end

def to_param
  permalink
end

This uses the value of the name that is entered, clears it of puncuation, replaces spaces with hyphens and drops the casing. The first line makes sure it still remembers it needs to write the value itself to the name column in the model.

Now it’s still important that you confirm that the permalink is unique too, but I’ll let you do that on your own.

So that’s it – I hope you guys find it useful.

Measuring Customer Loyalty with Programs is Bullshit

I’ve noticed that I have a tendency to prefer CVS as my general drug store. Now, while any prescriptions I need filled are done at Publix, I let CVS handle the generalities. But several years ago CVS did something… they created a loyalty program. At first I didn’t mind so much, they handed me card that I was required to fill out and send it in and with that I would receive “special discounts”. I went home unpacked my purchases and there the form sat for about a week until I got tired of seeing it and threw it away. But every time I go to CVS they try to give me another one. Sometimes if I just said “no, thanks” they would covertly add it into my shopping bag to be discovered once I returned home. I’ve gotten to the point now that I say, “no thank you, I have about 6 of your cards at home and I never bring a single one with me.” Sometimes I would watch as the clerk would simply scan their own cards, a ritual I could tell they had done more then once from people not wishing to jump on the card-carrying program. Some stores held a barcode right on their registers that read, “For customers not wishing to join the program, still wishing to receive the special discounts.” The stores were doing what I often refer to as “Hacking the Interface”, they had something that they knew wasn’t working, that people didn’t want, and they found a way to easily get around the policy.

The bookstore that I once frequented (and was a member of their “discount” customer loyalty program) has changed their direction in the way they wish to represent their business and the products they offer. After a few experiences with this bookseller after their makeover I realized that my discount card didn’t mean much to me if I didn’t like going to the store anymore. I paid $10 a year for that card, but the savings seemed of little value to me when I no longer enjoyed the experience of the store. I have since started shopping at another bookstore and have thrown their discount card away.

It’s About Gradual Engagement

Customer loyalty is a funny thing, something we often confuse with customer satisfaction. But customer loyalty will never be found in a card-carrying membership program or a points system. Often these programs guarantee that I (the customer) will have to maintain my information within your system to win awards that I don’t really care about, want, or that have any weight on my desire to do business with you as a company. They just stand in my way, and are annoying.

What customers want is a long-term engaging experience. Customer loyalty is created by several gradual experiences that cause that customer to continue to want a relationship with your company. Recently I purchased some Dvorak labeled covers for both my laptop and my keyboard at the office. Having not been satisfied by a previous cover I once purchased, I went to Google to find another company. The company I came across had one of the covers I was looking for but nothing for the office. I sent them an email saying what I was looking for and received an email back in about 30 minutes telling me that they were currently developing that product and that it would be available at the end of the month. He said, “Sorry we don’t have it for you now. I’ll send you an email when it’s finished up and we’ll give you free shipping on the order.” Sure enough around the end of the month I received an email from him telling me that they were available with a link to the product. Now the email could have been computer generated, but it was personalized and had his name on it, giving me the satisfaction that this individual emailed me back as promised.

So far I’ve had two great experiences with them. 1) They apologized for not having the product I hoped they would, gave me a discount on shipping when it was going to come in; and 2) Followed through on their promise to notify me when the product was available making it convenient for me to place my order. When I receive the covers, and if they are of the quality I expect – I will most definitely use them again, as the entire experience of my interactions with them have been very personable.

So what I’m trying to say is simple, the experiences you provide will build the loyalty that you are looking for. Don’t put programs in the way of buyers, most of them don’t care and find it a pain to deal with (and a poor experience by always being asked if they have their card). In a business world where things change just as fast as the technology we use to measure them it’s time to throw away our 12 year old copies of The Loyalty Effect and start building a more permanent bridge with customers that want to do business with us… not because they have our card in their wallet, but because they prefer the experience that our company provides and would come to us even while being a member of a competitor’s program.

Thoughts on Simplicity

Of the people who know me well, I think most of them would say that if I were fanatical over anything it would be the basic act of simplicity.  It sounds a bit funny, who would want to make something more difficult, right?  But simplicity is far more difficult then just making something basic (or for that matter mediocre), it’s about a number of things.

Simplicity is about having a strong understanding of the people you are trying to assist in your desire to simplify.  Too often businesses seem to “simplify” processes for their own purpose, while making it much more difficult for their customers.  They don’t think about the benefits of simplification for those people using their products and services.  When was the last time you called the power, cable, or phone company only to be lead through a series of “press 1 now” circles thinking, “wow, this is really helpful to me”?  I can only imagine that you’ve never felt helped, but rather pushed away when reaching such a phone system.

As a programmer, I see simplicity in the foundations of our technologies.  Never have I heard from another developer, “I love this [programming] language, because it takes me so long to figure out how to solve a problem.”  Most of the developers I know select their preferred programming language because it follows a syntax their brain comprehends well and solves a problem effectively.  To them, it’s simple.

As a designer, I am reminded that simplicity is contextual.  Simplicity requires that you not forget your expert customers, allowing complexity when it might be needed.  It’s important that we consider balance in product design and in doing so we reduce the information we share with consumers to the most essential; by either its removal or by simply hiding it until it becomes essential.  Simplicity is partially the elimination of excess, as well as our effective use of emptiness and space to bring focus to the things that are important.  When was the last time you went to a website and didn’t know where to go to find what you were looking for, or spent 15 minutes trying to understand an online registration form?  It is about reducing the confusion and easing the minds of the people interacting with you.

Simplicity is about having a great understanding of the subject matter you are communicating, allowing you to speak of it concisely.  As a presenter and a writer, I find the more I speak or write about something, the less I need to say about it to share my point of vie.  Not that I know less, but simply I have a deeper understanding of the meaning behind the points I’m discussing.  Take the time to dig deeper into your area of expertise, know it from multiple angles.  It might just provide you with insight on how others view what you are communicating.

The next chance you get, think strongly about simplicity.  Whether it’s a new company policy, a new product, or maybe a new form you would like your clients to fill out.  Not just for your benefit, but for your clients, your employees, coworkers, vendors, and your family.  It just might change the way you see the world.