The way the “reply-all” button works in Thunderbird is noticably worse than the way it works in GMail.

The difference might seem trivial, but the GMail version saves me a lot of aggravation, because the following scenario happens at least twice a day:

I hit “reply” and start writing an email. A few sentences in, I discover that the message I’m writing applies to all the people in the original thread, not just the sender. I want to change my “reply” to a “reply all”.

In GMail if I hit “reply all”, it does the right thing: adds the addresses of the other people on the thread to my composition already in progress.

Screenshot of reply-all button in GMail

In Thunderbird (as of version 7.0.1), the Reply and Reply All buttons spawn new windows. If I switch from a “Reply” composition window back to the main window and hit “Reply All”, I get a brand-new composition window. To save what I’ve already written, I have to copy-paste my words from the original window to the new one, then close the first window.

Screenshot of Thunderbird's reply-all button

It’s just a few extra steps, but it’s annoying in a way that disrupts my train of thought, which should be focused on the content of my writing, not the mechanics of sending it.

It would be nice to get the GMail reply-all behavior in Thunderbird. But it would be even nicer if designers everywhere could more consistently embrace the design principle behind the GMail reply-all button. That principle is:

Let me change my mind without having to start over.

We need to recognize that humans change their minds about what they want all the time. If I’m on Step Four and I realize I should have gone right instead of left at Step One, I should not have to re-enter the same information for Steps Two and Three. And yet too many interfaces (I’m thinking multi-stage web forms, “setup wizards”, and the like) still force users to make decisions in an arbitrary sequence dictated by the implementation details of the code.

Doing it right is more work for the programmer, of course. The implementation must be more complex. You can't simplify by throwing away data related to paths not immediately taken. But respecting the reality that users change their minds is more important than cutting corners in your code.