(Cross-posted from http://evilbrainjono.net)

I wrote a Thunderbird add-on to make the email interface I’ve always wanted — one that helps me remember to stay in touch with people I really care about, instead of always distracting me with the newest incoming trivia.

The add-on is called Lovebird and you can download it here.

lovebird screenshot (with fake names)

the names in this screenshot have been changed to protect the innocent

The rest of this post is about the philosophy behind Lovebird and why I designed it the way I did.


It looks like Google has finally pulled the plug on the old GMail UI. There’s no more “revert to the old look temporarily” button, so I guess they’re finally forcing us laggards onto the new theme. I’ve been a mostly happy GMail user since the very early days, but I strongly dislike the new UI.

As far as i can tell, this redesign is just change for the sake of change. I can’t see a single improvement! But I can spot three distinct un-provements *:


A modal dialog box is the software designer making a claim that the software cannot do anything else until the user makes a decision. Upon closer examination, this claim is almost never justified. It’s usually a case of developer arrogance: developers assuming that because they have to care about some edge case in the software control flow, the user should have to care about it too.

There’s a particularly egregious example in Thunderbird 7.0 which I’ve seen a lot of lately because I’ve been composing a lot of emails offline.

I’ll be on the train or something, happily offline, typing an email in Thunderbird for later sending, and suddenly I’m interrupted by this:

Modal dialog box asking whether to retry saving a draft

Email composition, interrupted. Train of thought, destroyed. Input window, blocked. I cannot continue until I’ve processed what the software is asking me and made a decision.

Alright, Thunderbird, what’s the problem? Oh, you couldn’t save my draft to my mail server? Gee, I wonder why. Maybe because I’m not connected to the internet. There’s no reason I would expect you to be able to save a draft right now.

The correct behavior would be for Thunderbird to keep checking, silently, for an internet connection, and to save the draft to the server as soon as a connection becomes available again. But there’s no button for that, so I click “Cancel”.

Warning message telling me that the draft could not be saved

Argh! Another one! What is it this time?

…An error message telling me my draft could not be saved. Thunderbird, I just told you to stop trying to save my draft. Why are you using an error message to report that you’re doing as I told you? That’s not an error, that’s the expected result of the button I just clicked. Why are you telling me anything at all? Why are you putting another dialog box in my way instead of just letting me get back to my email?

Jef Raskin used to call these “Monolog boxes” — they’re like dialog boxes except there’s no dialogue because the software isn’t asking me for any information. It’s just complaining to me and then making me click a button to acknowledge that I heard its complaint.

So that’s a modal dialog box followed by a modal monolog box just to tell me something I already knew, which is that I’m offline so of course drafts can’t be saved. And this pointless ritual recurs every ten minutes or so when Thunderbird tries to save my draft. If I’m composing multiple emails at the same time, I have to dismiss these pointless dialogs for every composition window!

The way to fix this interface is quite simple. There’s no reason to interrupt the user to report on the status of saving the draft. Thunderbird should allow me to keep typing my email while it displays a discreet warning message — off in the corner of the window, perhaps — to the effect of “This draft has not been backed up.” Even that much is arguably unnecessary, because the right thing to do in this case is obvious: back up the draft to my hard drive, and then sync it to my email server when an internet connection becomes available again. This can be done without any user input at all.

When the right thing to do is obvious, software should just quietly do it. It shouldn’t interrupt me to ask my permission or complain about problems.

I don’t usually write about politics here, but there is a terrible Internet censorship bill that the United States congress is threatening to turn into law. Called PROTECTIP in the Senate, and SOPA in the House, it would create a nationwide blacklist of sites that ISPs are required to block at the DNS level. This is intended to be used to fight copyright infringement, but there is no trial required; the site gets blocked just on the say-so of a copyright holder. So it circumvents due process of law and basically opens up every site on the internet to censorship and legal intimidation. It also does away with the safe harbor provisions of the DMCA — making a website responsible for any copyright infringement committed by any of its users — so sites based on user-generated content will be hit especially hard.

Everyone in the United States who cares about Mozilla’s mission of internet freedom should help to oppose the passage of this bill. For the rest of the world, well, unfortunately there’s little you can do directly, even though your website could be blocked from the US under the law.

Several internet organizations declared Wednesday the 16th “American Censorship Day” and used it to launch the counteroffensive. Mozilla put a snippet on our home page with a black censor bar over the Firefox logo to point people at an action page. Our webdev team did a bang-up job of putting that together really fast. Thank you webdev!

Meanwhile, Tumblr alone geneated over 87,000 calls to congress in one day.

I called both senators and my congresswoman on Wednesday and was surprised how fast it was to get through and leave a message with a staffer. They don’t keep you on hold forever like the bank or the telephone company. The staffers will take your message for the congressperson politely and without arguing.

I also wrote a letter that I sent to Senator Boxer, Senator Feinstein, and Congresswoman Eshoo. Here it is; if you like it, please feel free to use it as a basis for your own letter to your senators/congressperson.

Dear [Senator Boxer/Senator Feinstein/Congresswoman Eshoo],
I’m a citizen of California and a professional in the Internet industry. I’m writing to express my alarm and dismay at the “PROTECT IP” act that went through the senate judiciary committee this week, and its House version, “SOPA”. I strongly urge you to either oppose it or to introduce some changes.

I understand the need to enforce copyright law, but the way the bills are currently written, they give too much power to copyright holders and to the Attorney General to ban websites from the Internet without due process of law. I fear these powers will be used for blacklisting and censorship of completely legal and legitimate websites. SOPA/PROTECT IP needs to be modified to ensure that it is only used to go after lawbreakers. Operators of legitimate websites need to have a chance to defend themselves before being blacklisted off the internet.

As I understand the bills, they would empower the Attorney General, at the request of copyright holders, to put websites on a blacklist which all ISPs would be required to block, and to do this without any adversarial hearing.

As an American who believes in free speech, I don’t think our government should be building a national blacklist to block websites from american citizens AT ALL. That’s the sort of thing I would expect to see China or Iran imposing on its citizens, and I would expect the United States of America to be criticizing them for it — not building one of our own!

But if you think that copyright infringement is so serious that we need to resort to building the Great Firewall of America to fight it, then at least give the accused site owners the right to a trial before kicking them off of the internet. Otherwise, if we give the Attorney General the power to unilaterally ban sites without trial, what guarantee do we have that this power will be used only for fighting copyright infringement? It’s a small step from there to political censorship of any foreign sites the U.S. governemnt doesn’t want citizens to see.

The site owner should have the right to a trial before the government censors their site from the internet. The burden of proof needs to be on the accuser and the accused needs a chance to defend themselves in court. That’s the only way we can be sure this power is used only for its intended purpose of enforcing copyright law and doesn’t become a tool of censorship.

Besides free speech issues, as someone who works in the internet industry, I’m alarmed at how much legal risk this bill creates for website owners. PROTECT IP/SOPA would make website owners like me liable for any copyright infringement done by our users. Under PROTECT IP/ SOPA a single file posted to a site by a single user would be enough for an entire internet domain to be blacklisted and all its funding cut off. And all of this just on the word of the copyright owner — they wouldn’t even have to prove in court that their copyright had been violated!

I had been planning to use the Internet to launch a startup company of my own, but how can I do so knowing that my entire company could be wiped off the internet by the actions of a single malicious or ignorant user? There’s no way that Facebook, Twitter, YouTube, Blogger, Wikipedia, or any number of other internet success stories ever could have gotten off the ground under such a law. They relied on the safe harbor provision of the DMCA, which gives sites acting in good faith a chance to comply with the copyright holder’s wishes and remove infringing files before being threatened with legal action. This compromise has worked well for the last 15 years while the Internet has flourished. SOPA/PIPA would end safe harbor and increase the legal risk beyond what small businesses could bear.

Internet businesses are one of the few sectors launching successful startup companies and creating jobs in this grim economic climate, but SOPA/PIPA would shut all that down — or drive entrepreneurs to build their companies overseas.

We can protect the rights of copyright holders while still maintaining a free Internet. SOPA/PIPA must be modified to ensure that it will be used only for fighting copyright infringement and will not be abused for censorship, repression, or harassment of legitimate sites and legal content.

[Senator/Congresswoman], please either add such protections to the bill, or vote against it.

Thank you.

— Jonathan Xia
Palo Alto, California
November 2011

We may be starting to turn the tide. There are hopeful signs. The EFF is cautiously optimistic. The Business Software Alliance, which previously supported the bill, is now backpedaling. And here’s a roundup of progress against SOPA.

But the fight is far from over. The Senate is threatening to bring the PROTECTIP act to the floor on Tuesday. So that’s the next round of the fight. Mozilla’s trying to get everybody to call their senators on Tuesday the 29th (tomorrow). Please sign up here!

The results of the Test Pilot Mobile Heatmap study are now up in a post at the User Research blog. Read it and see how different browsing patterns are on mobile compared to desktop Firefox!

I’ll be in London from Thursday to Monday presenting on HTML 5 game development at the Mozilla Festival.

I’ve been working on an HTML 5 side-scroller, as yet unnamed. The plan is to have the game skeleton pretty solid before my session, and then have participants in the session hack on it, add features to it, and flesh it out. That way the participants can get to work on the fun parts of game development, like creating monsters and power-ups, instead of spending the whole session setting up boilerplate code and debugging their event handlers.

The code for the game is on GitHub and there is a playable version hosted on my site. It uses BrowserID for the login. You can give it a try right now — log in and try making a level with the level editor, or play one of the existing levels and try to beat the best time! If you find bugs, please report them in GitHub. Thanks!

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.

Next Page »