NOTE: This blog has been moved to

Saturday, March 29, 2008

Anti-Pattern: One at a Time - Google Blogger, Reader and Backpackit

Ok, I really shouldn't use blogger. I mean I get a disdainful look from most other bloggers. How can I have a serious blog on blogger? And at times some of its deficiencies drive me completely nuts. I keep planning to move to WordPress but inertia keeps me using blogger.

But one thing that drives me completely bonkers is the administration of commenting. I recently was spammed like crazy across all my articles. For some reason I stopped getting notification after the new Blogger was released (even though I had the "send me email when I get a comment" option turned on.) Needless to say I have it set so that I have to moderate all comments (unfortunately).

So when I did find out about the spam, I had to go to every article (still not done) and delete the spam one comment at a time.

Here is the process:
  1. Go to blog article and find spam comment
  2. Click on trash can icon to delete
  3. Get taken to another page
  4. Click the "Remove Forever" checkbox
  5. Click the "Delete Comment" button
  6. Click the link to go back to my blog article
  7. Scroll back down and find the next article, repeat steps 2-7 as needed.
This is a classic Anti-Pattern that I call "One at a Time". It's when you force the user to only be able to act on a single object at a time.

Steps 1 & 2:

Steps 3-5:

Step 6:

Now imagine having to do this for 50 spammed comments. Now you can get a feel of how painful the One at a Time Anti-Pattern can be. This also illustrates the Pogo Stick Anti Pattern -- forcing the user to go back and forth through several page levels to accomplish a single task.

This makes my original example in my Anti-Pattern talk look very paltry. I used a very simple example from an early version of backpackit.

Clicking on Lettuce requires the user to wait a second before hitting Tomatoes to avoid a race condition. Now this is a minor nit and only comes into play when you are clicking several to do items in succession. Note in the latest version of backpackit this is not an issue since the time it takes for an item to respond that is is checked is almost zero seconds.

But this does show up in other places with varying degrees of annoyance. Often there is no way to do a bulk operation like delete all items. Here is an example from Google Reader.

In this example from Google Reader, they do provide a way to remove multiple feeds. In my original comments on this interface I missed the bulk remove since the use of the trash can and the unsubscribe button don't match each other well -- leading me to originally miss the bulk remove. Thanks to Dan (comment below) for catching my mistake.


To delete you have to click the trash can icon. For each click you must confirm the delete.

Hopefully you will not have to do this for a bunch of feeds. Your best bet is to export the OPML file and edit the XML directly :-)

There is also a mixture of interaction idioms employed on the same page:
  • Direct In Page Action. 
    • Delete. Action happens immediately when you click on trash can tool. Follows the One at a Time anti-pattern.
    • Rename. Action happens immediately when you click on 'Rename'. Follows the One at a Time anti-pattern.
    • Change Tag (Folder). 'Folder' equals 'Tag'. Unlike the select then tag, this allows you to add or remove a tag by selecting/deselecting the tag/folder from an individual drop down list for each item.
  • Action on Selection. 
    • Tag. Select items with check box then click the function to start the action on the selection with the Drop down (More Actions...). This is is especially confusing since you are led to think the drop down would be a filter since it lists all your tags (and is sandwiched between two filtering mechanisms).
    • Unsubscribe. The Unsubscribe operates on selected items (not to be confused with the visible filtered items).

It's not all bad to mix these idiom styles. I think the use of a trashcan for unsubscribe is what is most confusing.

Even with the bad labeling this is better than Google Blogger which provides me no way to delete except one-at-a-time.

Ok, so I feel a little better after all this ranting. Now I can get back to deleting the spam comments -- One at a Time.

Blogged with Flock


Danston said...

I do think the interactions are poorly labeled in the google reader page but I don't think that the unsubscribe interaction is a "one at a time" anti-pattern. What you call delete and associate with clicking the trashcan, google calls unsubscribe. When you click the trash you unsubscribe from the feed in that row. When you check the checkboxes for multiple rows and click unsubscribe button at the top then you unsubscribe from all the checked feeds. In the same way you can perform bulk operations to change the labels on multiple feeds (as you noted at the end of your entry).

Since the bulk method is provided, I think this is an example of poorly indicating how to interact with the software rather than one of the one at a time anti-pattern.

If I'm telling you something you already knew then I apologize. The thing that made me think you didn't realize this was the talk of editing the exported XML, which doesn't seem necessary.

Thanks for the continuing, useful anti-pattern listing/defining.

Dave Briccetti said...

Hi Bill. Excellent example, yes.

Maybe there's a need for new open source spam-detecting blog-moderating tools that would use a new standard blogging service comment moderation API. Or, for those blog services not offering the API, something that jumps through the One-at-a-Time hoops for you, by scripting the browser through Greasemonkey or something.

Sounds like a fun project, if it doesn't already exist.

Bill Scott said...


Good catch! The use of the trash can for unsubscribe actually confused me.

So yes they do have a batch version as well as the one at a time.

But as you pointed out they have a very poorly labeled interface (and arranged) that made it feel like you only had the one at a time choice.

I will update the article to capture your catch.