NOTE: This blog has been moved to http://www.looksgoodworkswell.com

Wednesday, July 16, 2008

Upcoming O'Reilly Book - Designing Web Interfaces: Principles and Patterns for Rich Interactions

Update: Designing Web Interfaces: Principles and Patterns for Rich Interactions is now available on Amazon for pre-order. Planned release is December/January timeframe.


Since about February Theresa Neil & I have been actively writing a new book for O'Reilly.

This is part of a group of books O'Reilly is publishing around Design. Designing Interfaces is an excellent book on Design Patterns by Jenifer Tidwell. Designing Gestural Interfaces will be coming out soon by Dan Saffer. Jenifer's book did an amazing job of cataloging desktop and web design patterns. Dan's book focuses on all of the new and upcoming interactions around gesture based interfaces.

Designing Web Interfaces: Principles and Patterns for Rich Interactions focuses strictly on a set of six principles for designing Web applications to be highly interactive.

The six principles are:
  1. Make it Direct
  2. Keep it Lightweight
  3. Stay on the Page
  4. Provide an Invitation
  5. Use Transitions
  6. Be Reactive
The principles are illustrated by a series of design patterns called out in various chapters shown here in a table of contents.

Principle One: Make it Direct
  • Chapter 1. In Page Editing
  • Chapter 2. Drag and Drop
  • Chapter 3. Direct Selection
Principle Two: Keep it Lightweight
  • Chapter 4. In-Context Tools
Principle Three: Stay on the Page
  • Chapter 5. Overlays
  • Chapter 6. Inlays
  • Chapter 7. Virtual Pages
  • Chapter 8. Workflow
Principle Four: Provide an Invitation
  • Chapter 9. Static Invitations
  • Chapter 10. Interactive Invitations
Principle Five: Use Transitions
  • Chapter 11. Transition Patterns
  • Chapter 12. Purpose of Transitions
Principle Six: React Immediately
  • Chapter 13. Lookup
  • Chapter 14. Status
Appendix: Design Patterns

I have finished the first draft of the book and am now working my way back through the book. Hopefully it will start technical reviews in a couple of weeks. No definite word on when the book will be on the bookshelf -- but I will update as we nail down that date.

I am also setting up a companion site, http://designingwebinterfaces.com. Currently this is just parked with a generic placeholder.

Wednesday, June 25, 2008

Velocity Conference '08 Notes

Velocity Conference was great!

Takeaway
I think the greatest takeaway is how seriously the Firefox and IE8 team are taking client performance. In particular, the work of Steve Souders, the Yahoo! performance team, others who are writing about Ajax performance is the playlist for what to optimize. As Eric Lawrence of Microsoft said to Steve, "Our mission is to make your book on performance be out of date."

This is a very different picture from a few years back.

I still find it very disappointing that the Safari team is always absent at these discussions. I realize that Safari is kicking butt in performance (I will post examples from our round trip stats to show that) but it really is important that they are approachable by the community. But this seems to be the way of Apple unfortunately.

Some Great Talks
There were a lot of good talks, but here are the ones that stood out to me (I did miss both mornings).
Some Great Announcements/Tools
My talk is also available for download.

Already looking forward to Velocity '09.


Blogged with the Flock Browser

Sunday, June 22, 2008

Friday, June 20, 2008

Announcing: Jiffy Firebug Extension for Viewing Client Side Performance Data

In the previous article I discussed our full cycle tracing mechanism we built at Netflix.

Firebug Extension: First Attempt
When I was trying to explain the capabilities of this system to others in the organization, I started doodling in Apple Keynote to see if I could create a single diagram that captured all of the timings and what was really happening during a full cycle trace. This is where the diagram I used in the previous article came from. Here is the diagram:

roundtrip-blog-capture-alltimes.png (by billwscott)

This got me thinking. What if I could create a tool that would take the timings from the web page and render it with real time data. The obvious solution was to build this as a Firebug extension. Here is what the tool ended up looking like once it was plugged into Firebug:

roundtrip-firebug.png (by billwscott)

The nice thing about this visualization is that it clearly puts the timings in context. You can see the Response overlapping with the Page rendering (which is a good thing). You get a clear picture of how the measurements fit together.

Currently, this is not available outside of Netflix. There is some code cleanup, upgrade to FF3/Firebug 1.2 needed as well as it is tied to the type of metrics I described previously. If others think it is useful I will try to burn some cycles, make the data source more generic and get it out for public use.

Jiffy Firebug Extension

However, I was showing this to Steve Souders (in relation to the Velocity panel) and he mentioned that one of the other panel members, Scott Ruthfield of Whitepages.com and his team were building an open source metrics and instrumentation tool for Web pages called Jiffy.

In the words of Scott:
Thus we built Jiffy—an end-to-end system for instrumenting your web pages, capturing client-side timings for any event that you determine, and storing and reporting on those timings. You run Jiffy yourself, so you aren’t dependent on the performance characteristics, inflexibility, or costs of third-party hosted services.
Steve suggested adapting what I had done with the current Neflix Firebug extension for use with Jiffy.

I quickly realized that since the focus of Jiffy was for measuring on the client page (as well as a way to log measurements) that I needed a more generic way to view the data. I decided to model this new measurement panel slightly after the Firebug Net panel.

The result is the Jiffy Firebug Extension.

Jiffy Firebug Extension

Today I am making this extension available to the public under a simple Creative Commons License. Simply put, this adds a new panel to firebug that provides a nice way to view timing measures either in a collapsed or timeline view. It's also flexible. You can wire it to other libraries besides Jiffy if so desired.

You can learn all about the extension and read more about the Jiffy library at my Jiffy Extension site or go directly to the Jiffy-Web google group.

Blogged with the Flock Browser

Measuring User Experience Performance

One of the projects my team at Netflix is busy with is improving the end-user performance experience. Anyone that reads my blog regularly knows that I am a champion for great user experiences. Often the performance angle is not included in discussions of the user experience. But as we all know the best design can be crippled by sluggish execution, waiting a long time for a page to be fully interactive or feedback that does not come in a timely manner.

Timing "from Click to Done" - Full Cycle Experience

User performance experience focuses on what is the full cycle time from when the user requests a page or invokes an action till a new page is ready for interaction or the action has completed. Most sites have various ways of tracing parts of the performance puzzle. Often backend instrumentation is inserted to time backend services. But a lot of sites don't have a complete picture of just how much time is the user spending from the time they click it till the time they get it back (done).

To address this issue at Netflix, one of the first things I initiated after joining Netflix was the creation of full cycle tracers. Kim Trott (on my team) took the idea, ran with it, fleshed it out and turned it into reality.

The idea of tracing the full cycle time is to:
  • Capture the start time
  • Capture various points of interest
  • Capture the end time
  • Log the results

Capture the Start Time ("from Click")
To get a full cycle time we need to capture the point in time the user makes a request.

At Neflix we use the following stack of technologies: Java, JSP, Struts2, Tiles2, HTML, CSS and Javascript. Within the normal HTTP request/response cycle our requests are handled via Java servlets (eventually routing through to JSP for Web pages).

roundtrip-blog-capture-starttime.png (by billwscott)

Unload Event
The most logical place to measure the start of a request ("from Click") is on the originating page (see A in figure above). The straighforward approach is to add a timing capture to the unload event (or onbeforeunload). More than one technique exist for persisting this measurement, but the most common way is to write the timing information (like URL, user agent, start time, etc.) to a cookie.

However, there is a downside to this methodology. If the user navigates to your home page from elsewhere (e.g., from a google search), then there will be no "start time" captured since the unload event never happened on your site. So we need a more consistent "start time".

Start of Servlet Response
We address this by providing an alternate start time. We instrument a time capture at the very earliest point in the servlet that handles the request at the beginning of the response (see B in figure above). This guarantees that we will always have a start time. While it does miss the time it takes to handle the request, it ends up capturing the important part of the round trip time -- from response generation outward.

There are a number of ways to save this information so that it can be passed along through the response cycle to finally be logged. You can write out a server-side cookie. You can generate JSON objects that get embedded in the page. You could even pass along parameters in the URL (though this would not be desirable for a number of reasons). The point is you will need a way to persist the data until it gets out to the generated page for logging.

Note that the absolute time captured here is in server clock time and not client clock time. There is no guarantee these values will be in sync. We will discuss how we handle this later.

Capture Intereresting Points Along the Way
After capturing the start point there are a few other standard points of time we would like to capture.

roundtrip-blog-capture-tweentimes.png (by billwscott)

Two points of interest are captured on the servlet side:
  • When we begin generating the HTML for the page (C)
  • When we end generating the HTML for the page (E)
Two points of interest are captured on the client side:
  • When start rendering the HTML for the page (D)
  • When we end processing the HTML for the page (F)
C & E deal with page generation. D & F deal with page rendering.

In D, we emit a scriptlet immediately after emitting the <HEAD> tag that saves new Date()).getTime() into a Javascript object on the page.

In F, we emit a scriplet immediately after emitting the </BODY> tag that saves new Date()).getTime() into a Javascript object on the page.

When the page starts rendering the HEAD it will execute D and store the time stamp. When the BODY finishes rendering, it will execute F and store the time stamp.

Capture End Time ("to Done")
Once F is finished however, this does mean that the page is completely rendered. In parallel, the browser has been loading CSS, Javascript, requesting images and rendering the page. But the page is not ready for the user to interact with (typically) until the onload event is finished for the page (see G in diagram below).

roundtrip-blog-capture-endtime.png (by billwscott)

We attempt to insert our instrumentation as the very last item to be handled in the onload event for the page.

Logging the Captured Times
Here is a diagram that shows the various time points we capture (8) and the measures we derive (5).

roundtrip-blog-capture-alltimes.png (by billwscott)

The five measurements are:
  • Elapsed client request time (G-A). Full cycle time. The total time it took to request the page, receive the response and render the page. Not available if the referring page is not a Netflix page. This is not available for all measurements.
  • Elapsed server response (E-B). How much time was spent generating the server response.
  • Elapsed client render (G-D). How much time it took the client to render the page (and get the server response). Since we stream our response to the client, there's no way to differentiate how much of the client rendering time was spent getting the response from the server vs. rendering the page. The browser will start to render the page as it receives the content from the server.
  • Elapsed server plus client (C-B) + (G-D). Total time to render; full time to generate the response and render it client-side. This is the key measure we use as it includes the most reliable start time (that we can capture all the time). It is the summation of the client render time (G-D) and the elapsed server response (C-B). By taking the deltas on the client and the server separately we can safely add their values together to get a total time (even though they are captured in different server clock times). The caveat is there can be some gap between the time C emits the HEAD tag and the corresponding Javascript time stamp and the time D starts rendering. In practice we have found this time to be sufficiently small on the whole so have kept to this simple approach.
  • Elapsed  client render after body (G-F). This gives us an idea of how much additional time is needed to get the page fully loaded after rendering the body.
At this point we can gather up the five values (persisted so far via server-side and client-side cookies or some other methodology) and write these out to a server log. This could be done via an Ajax call, using beacons, an HTTP request with a NO-CONTENT response or some other mechanism. The back end service caches up results and writes them to a database for later analysis.

The Benefit of Measuring
We could have chosen to implement all the yslow performance suggestions without measuring anything. Most likely they would all be wins for us. But by putting a full user experience performance tracing mechanism in place we can be confident that enhancements, features, or even attempts at performance improvement did not negatively affect site performance.

Recently we fielded a different variation of our star ratings widget. While it cut the number of HTTP requests in half for large Queue pages (a good thing) it actually degraded performance. Having real time performance data let us narrow down on the culprit. This feedback loops is an excellent learning tool for performance. With our significant customer base, large number of daily page hits we can get a really reliable read on the performance our users are experiencing. As a side note, the median is the best way to summarize our measurements as it nicely takes care of the outliers (think of the widely varying bandwidths, different browser performance profiles that can all affect measurements.)

In future articles
  • Discuss what has worked and not worked.
  • Discuss an internal firebug extension I wrote to visualize this data for our developers.
  • Compare Safari vs Firefox vs IE -- the results are really interesting.
  • Announce a new Firebug Extension that helps visualize performance page data.
Hear More About this at the Velocity Conference
As I mentioned in my previous article I will be giving a 15 minute talk on Improving Netflix Performance at the Velocity Conference. I will cover some of this material as well as other information in that talk.

Credit
Thanks to my excellent UI Engineering team at Netflix, in particular the hard work of Kim Trott. Thanks also to the yslow team for giving us some concrete ideas on improving site performance.
Blogged with the Flock Browser

Velocity Conference 2008

My friend Steve Souders (Mr. yslow and author of High Performance Web Sites) is chairing the upcoming Velocity Conference in Burlingame, CA. It's happening on Mon-Tues, June 23-24.

I will be on the Measuring Performance panel with Steve Souders, Earnest Mueller (National Instrument), Ryan Breen (Gomez) and Scott Ruthfield (Whitepages). We'll be talking about what it means to measure performance for Web pages, why it is important, how to do it, various types of methods of measuring and the unique challenges around measuring Web 2.0 applications.

I will also be doing a quick talk in the afternoon on Improving Netflix Performance. The talk is only 15 minutes but I will be sharing our experience with implementing yslow, building a round trip tracer tool and some other cool stats & tools that we will be sharing. Look for a followup blog article on some of this information.

Hope to see you there.

Blogged with the Flock Browser

Thursday, May 15, 2008

Everything Good You Needed to Know About Javascript*

(*and even the bad parts)

At Yahoo! I had the privilege of working directly with Doug Crockford and got to review a book he was writing at the time, Javascript The Good Parts.

This book is different than most other Javascript books. It just focuses on the language itself and not the browser DOM. It reveals both gems and warts. And it does it in a simple straightforward manner. It reminds me of the classic The C Programming Language book that I cut my teeth on.

This is a must for your bookshelf.


You can get JavaScript: The Good Parts at Amazon.

Everything You Ever Wanted to Know About Forms*

(*but were afraid to ask)
My good friend and former Yahoo! colleague, Luke Wroblewski, has just published a most excellent book called Web Form Design.

Forms are everywhere. And when something is so ubiquitous, it tends to get absorbed into the back of our consciousness. Luke takes the lowly form and shines a spotlight on form usability. This book is full of best practices, tons of examples and lots of great insight from a dozen or so other leading web practitioners.

And hey. I can get you a 10% discount. Just go to Rosenfield Media and apply the code BSCOTT. Just enter it on the last page of checkout. You will save 10% and get a great book.

Wednesday, April 30, 2008

Omnigraffle Wireframe Stencil for the iPhone

Theresa Neil has recently been designing an iPhone application. In the process she created a wireframe stencil for OmniGraffle to make her life easier. Thought I would pass along.

OmniGraffle iPhone Wireframe Stencil

You can find the stencil at Graffletopia

Update: Now on her blog.

Tuesday, April 29, 2008

Netflix Jobs - Two Positions Open (4/29/08)

Update: Both positions have been filled.


Sr. Web UI Engineer


At Netflix I have an immediate opening on my team. This is an exciting opportunity to ply your amazing web development/engineering talents to one of the most recognized brands on the Web! In this position you would join an absolutely amazing team of Web UI engineers at an exciting time in Netflix history.

We are currently refactoring the entire Web UI layer. As a team member you would be responsible for specific areas of the site and participate in moving our site to latest Web standards (think unobtrusive javascript, layered semantic markup, hijax, etc.), working to improve client performance (think yslow and beyond) and working to realize lots of new approaches to our interface.

Over the last few months we also have been growing the design team and our team works very closely with both product management & design to create cutting edge solutions.

Here is the job
. Don't hesitate to contact me if you are interested. Email me at: b DOT scott _AT_ yahoo dot COM.

Sr. Software Engineer -- Open APIs
Michael Hart, our Director of Open APIs and Community is looking for an Open APIs Sr. Software Engineer. This is an incredible role. Netflix is in the midst of opening up a suite of developer APIs and you can help make this happen. Get in now and shape the way developers all over hack and mashup Netflix!

If you are interested drop me a note at the email I referenced above.

--
Bill

Wednesday, April 02, 2008

Anti-Pattern: Idiot Boxes - Yahoo! Photos

In Alan Cooper's About Face 3 book he states a simple principle:

Don't stop the proceedings with idiocy.

In the context of flow he describes the scenario:

One form of excise is so prevalent that it deserves special attention. In the previous chapter, we introduced the concept of flow, whereby a person enters a highly productive mental state by working in harmony with her tools. ... Interrupting a user's flow for no good reason is stopping the proceedings with idiocy and is one of the most disruptive forms of excise.

I call this the Idiot Box Anti-Pattern.

One of the clearest examples of this was with the Yahoo! Photos 3.0 product (which has been replaced by flickr).

yphotos-idiot-01.png

What follows are two idiot boxes. The first asks the user if they really meant to carefully select three photos, drag them carefully over the album and drop them there? :-D

yphotos-idiot-02.png

The second one tells them that the system really put the photos where you dragged them to.

yphotos-idiot-03.png

Now feedback is good. But only in carefully measured doses. This is overkill. But simply removing the idiot boxes leaves you with an interface that has no feedback. What we need is more nuanced feedback during a few of the drag and drop interesting moments.

The first moment is when dragging over a valid target (the photo album). A simple highlighting of the album (there are many options, this is just the simplest) on drag over would let you know you are successfully targeting the album and that it is receptive to photos being dropped there.

The second is immediately after the photos are dropped into the album. A simple feedback would be to always show the number of photos in the album. Once the drop occurs update the tally beside the album and perhaps temporarily spotlight the change area.

yphotos-idiot-illust-before.png
On the drop there is no feedback in context. Instead two back-to-back idiot boxes are displayed

yphotos-idiot-illust-after.png
A revised design uses highlighting, running tally and spotlighting (fade technique) to give appropriate feedback

Using an interesting moments grid is a nice way to think about every possible place you can engage the user. Just in time feedback, in context is a powerful way to engage a user and eliminate heavy-handed approaches -- like idiot boxes.
Blogged with the Flock Browser

Sunday, March 30, 2008

Anti-Pattern: Pogo Stick - Google Blogger vs. Backpackit

In my previous article I ranted about Google Blogger. Let me rant some more :-)

Besides being a good example of the One at a Time Anti-Pattern it is also a good example of the Pogo Stick Anti-Pattern (I first heard this term from Jared Spool). I define it as:

Requiring the user to go down a level or two, perform an operation, come back to the top and then have to go back down again. The name comes from hopping up and down through the site.

In the Google Blogger example I described the process of deleting comments requiring a multi-step process:

blogger-pogo-stick-illust.png
Pogo Sticking in Google Blogger

It takes three page refreshes to complete the operation and return to where you started.

Compare this to the way you can delete in Backpackit.

backpackit-delete-illust.png
Backpackit provides an in page one step delete

What to do about delete confirmation?
  1. Don't provide one. If the item is trivial (like an item in a list) you can just let the user delete it without bothering them with an idiot box (pointless confirmation).
  2. Provide one. In Google Reader they use the standard Alert mechanism. This is less than desirable since depending on the operating system the confirmation can appear far away from the deleted item. On the Mac, the alert slides out under the title bar which forces the user to move the mouse far away from the delete operation. Another approach is to provide a lightweight overlay (with a DIV or iFrame) to confirm the delete. They can appear quickly and in context with the operation.
  3. Provide an Undo. Google does this in several of its products. In Google Mail if you delete a mail message you get a chance to undo the delete.

gmail-undo-delete-illust.png
Deleting mail messages can be undone in Google Mail

This is a clever way to present a one-time undo by tying it to status messaging (along with contextual help).

By using a direct In Page Action pattern, the Pogo Stick Anti-Pattern can often be eliminated.

Blogged with the Flock Browser

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.

greader-one-at-a-time.png

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

Tuesday, February 26, 2008

Pattern: Refining Search

Theresa Neil has another great post this time on The Ultra Rich Search Experience.

She finishes up the article with a stab at redesigning the carmax.com search example more as a true car finder using a pattern I tend to call Refining Search. Others have called it a Faceted Search. Theresa describes it as an Ultra Rich Search. The best example of this is in kayak.com and roost.com (which has an absolutely superb house finding tool).

  
Theresa applied a real-time, iterative filter refinement ala roost.com

Where this type of patterns is really useful is when there is a large body of items that have clear facets (like size, color, brand, flight time, price, #bedrooms, texture, etc.). The mistake that most people make when implementing a refining search is not following some simple rules:

Refine in real-time
Clicking a bunch of check boxes or changing text parameters and then having to scroll down and find the Submit button is a ridiculous exercise to put the user through. The user is in an exploration flow. Don't break their flow with needless hunting for the submit button. What is the purpose? Hunting for product or hunting for your interface elements?

This is the ebay model. While it does a good utilitarian job of refinement... it is painful to experience.


eBay requires you to hit the submit and get a refresh to see next iteration

Avoid one-at-a-time experience
Some choose to avoid real-time filtering since it can be noisy to continue to refresh the display on each click (I talk about this as an Anti-Pattern, called One-At-A-Time-- forcing users to wait for updates on each click.) This is easily resolved by waiting to trigger the search until the user has not clicked for some small amount of time. With this mechanism you can click, click, click, pause... then search instead of click...search..click...search...click...search. We employed this technique on Yahoo! for Teachers.


In Y! Teachers you can click multiple filters without a reload. Waits for activity to stop.

Keep it smooth
Use Ajax or other in-page remote scripting to smooth out the load. Don't refresh the page! You will break the user's flow. The page will probably bounce back to the top. It will suck. Don't do it! Use a simple progress animation overlayed lightly on the content area to direct their attention to where the results will be.

Make the filters easy to Tweak
Try to avoid making the user type in values. Use sliders where it makes sense. The problem with sliders is the granularity of control and dexterity it requires to manipulate them. But if the values are large (like house prices) or there may be confusion about how to input the data (like using comma or not or whether to include the last 3 zeroes on house prices) a slider can avoid the ambiguity.

Make the filter controls easy to manipulate
Using simple check box on/off is the simplest approach to binary filters. You can visually treat them to make them not so busy... but keeping it looking like a checkbox is good since it is easy to understand.


Roost provides nice filters that are easy to work with

Keep the Context
Watch out for too many collapsible areas. Don't use accordions. Nobody wants to have to open an close each area one at a time to do filtering. And you need to see the full context to know how you have it filtered.


Y! Autos Car Finders uses large, klunky collapsible areas partly to hide a very large set of filters

Make it easy undo filtering
Just an undo all filters is a nice way to start a search over.


Roost has a simple reset

Provide a way to save & compare items for later
Being able to select items that get found, save them for comparison later is powerful for product choices. Roost lets you "highlight" properties. It remembers all hightlighted properties and at any time you can choose to view only those you have saved in this manner.

Blogged with Flock

Anti-Patterns: Talk at eBig 2008

Had a great time last night giving a talk at eBig, forum for Web Devs & Designers in Emeryville. Nice attendance. Lively discussion and great Q&A afterwards. You can find a PDF version of the talk online.




I continue to refine this talk on anti-patterns. The next time I present this is at Jared Spool's Web App Summit 2008 in Coronado Island, CA.




Blogged with Flock

Tuesday, January 29, 2008

Design Paradigms for Lots of Data

Theresa Neil (longtime friend, co-conspirator on Open Rico, Sabre UX team and various other projects) has posted her first blog :-) Yes folks there are still a number of really smart people who don't take the time to blog.

Anyway she has a very nice post about two design paradigms for navigating through lots of data.
  • The Seek Paradigm: Have the user ask for what they want.
  • The Show Paradigm: Display everything up front, and let the user explore and organize it.
The first is usually more prevalent on the web. The latter usually more prevalent on desktop or deeper web applications. Theresa lists 10 different patterns illustrating Seek and Show.

Friday, January 25, 2008

Really Super Cool Job Opening @ Netflix

Update: Position is filled.

We are looking for the following engineer:
This is a research opportunity on a small team trying to build the next generation of the Netflix user experience. The team is comprised of a designer, a UI engineer, a product manager and you. You’ll be working quickly to prototype and research user interaction models for new platforms for the Netflix service. At Netflix we intend to get our electronic movie delivery service to every screen hooked up to the internet. Many of those screens will require a very different site experience, and you will be part of this small team crafting that experience here at Netflix.

To this challenge you’ll bring strong Java, server and scalable systems development. You will need to help move our server architecture forward to allow for us to leverage existing personalization technology on brand new platforms. As the only software engineer on this team, you will be driving the server architecture powering this user interaction research.

Also, we need a really awesome analyst for tearing into all of our A/B testing data. You would be working with our Sr. Analyst, Lisa Mesh.

If you know of anyone that fits either of these jobs please contact me: b dot scott at yahoo dot com.

Friday, January 18, 2008

More New Jobs at Netflix

Update: Positions have been filled.


Nancy Mott recently joined Netflix to head up the design team. She is in the process of expanding the team. Netflix is in the midst of a lot of exciting new directions for the site that you can be on the ground floor creating.

Here are the jobs currently open:

Senior User Interface Designer

Senior Interactive Designer

Senior Visual Concept Designer

And in the world of web services, we snagged Michael Hart as Director of Community Engineering (formerly of MSN/Web Services). He is building open APIs so we need someone who is skilled at creating public developer APIs. If that is you then this job is for you:

Senior Software Engineer—Community Systems (Developer APIs)

All four positions will have a significant impact on Netflix going forward. If you are interested contact me at: b DOT scott AT yahoo DOT com.

Friday, January 11, 2008

Anti-Pattern: Chart Junk - Virtual Pizza Pie Chart - High Tech Chartjunk

Another anti-pattern we should consider relates to how we use visualizations or present charts.

Edward Tufte calls the clutter that often obscures charts or visualizations chartjunk.

Usually it's meaningless colors or styles that hinder rather than help clarify the actual meaning of the chart. But what happens when chartjunk meets high-tech? It gets even more useless. During the CNN coverage for the Iowa Caucus, Anderson Cooper introduced "The Magic Pie Chart". This has got to be one of the silliest abuses of technology I have seen in a long, long time. I can't wait to see what the networks come up with for the 2008 General Election.



What I love is how the technology completely takes over. It pops out and looks like it could hurt someone. Then it obscures the rest of the panelists. And finally Anderson is so enamored with trying to keep it from bursting again that he is using all his brain cycles to keep the 3D virtual pie chart on that silly piece of cardboard.

Here is a more traditional example of chartjunk from Tufte's site.

Tuesday, December 11, 2007

Anti-Pattern: Missed Moments - Roger's Chocolates

Anti-Pattern: Missed Moments

Recently Tim O'Reilly pointed out the nice Ajax interface that Roger's Chocolate employs. While I think it is pretty cool it does exhibit a common anti-pattern.

As Tim points out "to build a custom assortment of your favorite flavors, you first place an order for the standard assortment, then click on items to take them out of the box, and choose from a list to put others in."



Once you know that process it is indeed fairly easy to customize a box. The problem, however, is that it is not immediately obvious that is the process. Here is how you remove candy from the box (clicking on the 4th candy on the top row will delete it).


And now to add a new candy in it's place you need to click on one of the candy links on the left
The anti-pattern in operation is Missed Moments.
Missed Moments -- Not providing feedback throughout an interaction. Missed moments will confuse the user about what to do during an interaction.

In this example we have two actions we would like to cue the user to do. First, how to remove a piece of candy and second, how to add a new piece of candy in it's place. The current interface tries to do it through help text (a sign that there are no other cues to how to customize your box):
We know that users rarely read instructional text, so a better way to handle this is to provide some timely cues. We can do this through the use of invitational patterns -- inviting the user to perform an action at the moment the action is available.

For delete we can provide a type of invitational pattern, the In-context Tool. In-context tools provide actions near the object being hovered over (the focus of the current action). In this example, when the user hovers over a piece of candy we can show a Delete action represented by a delete icon in context. Here is one way this might be represented:

Compared to just the cursor changing:
Another obvious improvement is to place an invitational message in the empty area once the candy has been removed.

Here are some things I don't like about this. And some alternate suggestions.
  • When you hover over the links they show up in the candy slot but don't stick till you click. Hover actions on links are usually confusing (another anti-pattern, Linkitus)
  • Referencing another interface element way to the left in the nav list is problematic due to related elements being so far apart. The rules of proximity argue for it to be close by for the action.
  • You could just use drag and drop of the flavors. Ideally it would be the candy items you would drag over into the box. But drag/drop is not highly discoverable.
Pulling it Together
Another approach that pulls proximity, invitations and in-context tools together would be to provide the choice for a new flavor like this:

Other ideas for improvement?

Sunday, December 02, 2007

Events This Week - Dec. 2nd

Attending & Speaking at Web Builder 2.0 this week in Las Vegas, NV (Dec. 3-4).

Later in the week I will be one of the judges for the PhizzPop Design Challenge (sponsored by Microsoft) down in Los Angeles, CA. That will be Thurs night, Dec. 6.

I also did a podcast with Jared Spool (UIE.com) on Friday. It was about the upcoming Web App Summit 2008 in Coronada Island, CA where I will be giving a talk on "When Designers Get Too Clever: Avoiding the Traps of Bad Design". We chatted about Yahoo!, Netflix, Patterns, Anti-Patterns, Yahoo! Teachers and so on. Always a blast to chat with Jared. Should show up here when the podcast is live.

Look me up if our plans intersect.

Friday, November 30, 2007

Anti-Pattern: Misguided Misdirection - DirecTV

Ok, so I moved to the bay area a couple of years back. I am from Dallas. So with the cowboys doing such an incredible job and the local teams being so horrible I decided to watch some "good football". So I added the NFL Ticket to my DirecTV. As a "bonus" they give you NFL SuperCast. Its a way to watch football online when you are traveling, etc.

So after logging in to the DirecTV site and digging around in the left nav I found the SuperFan (also called SuperCast :-) Login link. Here is the page presented to me:
Apart for the confusing use of "SuperFan" and "SuperCast" here was my thought process:
  • I am logged in (A)
  • It recognizes me as a Registered DTV customer (B)
  • But wait, it is asking me if I am registered (C)
    • Does that mean I am not registered with the SuperFan service? Because it surely knows I am registered (since I am logged in)
    • Am I a Sunday Ticket SuperFan subscriber? Heck, I am logged in-- you don't know? Yes of course I am.
    • Hmmm... maybe I need to "Register" my DTV account with the SuperFan service? (D)
  • Its also asking me if I am even a DirectTV customer. Huh?
At this point I clicked "REGISTER" (thinking I need to register with the SuperFan service).
Did you catch the error message?

You are currently logged in or we are recognizing someone else that has been using this computer. At the top of the page you can either log out or let us know if we are recognizing you or not.

Huh?

Ok, so my problem is I was reading too much in the first page.

Notice the message "Not a DirecTV customer" (E) and the "Order Now" (F).

Even though I am logged in (and thus registered) and have SuperCast/SuperFan the rest of the page does not know if I am registered, if I have SuperCast or even if I have DirectTV!
This is an example of the Anti-Pattern: Misguided Misdirection. It happens when a page has misleading cues, calls to actions, etc. leading the user to do the wrong thing. Notice the large call to actions on the page are "REGISTER" and "ORDER NOW". In reality since I am logged in and a SuperCast member and a DirecTV customer, I don't need all the advertising pleas to get me registered and to buy DirectTV.

What is even more frustrating is after calling the customer support line I suggested they put a note in for the web team to fix this incorrect messaging. I got a "cold shoulder" response and it was obvious that DirecTV did not have a process for this to happen nor did the customer support person care in the least that this page creates a lot of unnecessary calls to their call center.

At Netflix we try to listen carefully to our call center. One recent example was our reps telling us (in a focus group) that they were getting frequent calls with users not being able to find the Member Login link when they come to the Netflix site logged out. The fix? Real simple. Enlarge the "Member Login" link and change the background making this easier to find. The good news-- It worked!

Anti-Patterns: Talk at Web Builders 2007

Earlier this year I started giving talks on Anti-Patterns for Interaction Design.

What are anti-patterns?
Anti-patterns, also called pitfalls, are classes of commonly-reinvented bad solutions to problems. They are studied as a category so they can be avoided in the future, and so instances of them may be recognized when investigating non-working systems. The term originates in computer science, apparently inspired by the Gang of Four's book Design Patterns, which displayed examples of high-quality programming methods. - Wikipedia, Anti-Pattern.

I think of Anti-Patterns as pitfalls with a pithy name.

Like the software anti-pattern counterparts, the following anti-patterns are common pitfalls to avoid when designing interactions.

In the weeks months years :-) to come I will discuss a number of these anti-patterns with real-world examples.

If you are at Web Builder 2.0 in Las Vegas, NV next week I will be giving the Anti-Patterns talk there as well as my Designing the Rich Web Experience Talk (Principles & Patterns).










Wednesday, October 17, 2007

We are Hiring

Ok, so I am still new at Netflix. But thought it might be interesting to write up my first impressions.

Sean Kane, my predecessor did a really great job of helping me understand the culture so there have been no surprises. No surprises, but a good bit of delight.

Here are some of the ways I would sum up what I have seen so far.

Treated Like Adults
This is a really important cultural trait. It starts with salary. You choose the mix of $ to equity and have the flexibility to switch it around from year to year. We pay extremely well (hey we even brag about it on the site). But it goes beyond that. It works it's way into HR, recruiting and all the other parts of the company that in other places tend to be out of sync. We don't make a bunch of rules. The HR policy manual is extremely small.

Transparency
There is an amazing amount of transparency of how the business is run as well as successes and failures. This makes it a great place to learn and thrive.

Blend of Science & Art
Truly it is consumer science here. A lot of experimenting and analysis. It is very intriguing to work at a place that really gets the importance of a great interface as well as balances it with the realities of business.

And did I mention that we have some of the most incredible work policies and pay anywhere in the country? And we are doing very well?

Ok, so we are hiring!

I am looking to fill two positions immediately on my team.

Sr. Staff UI Engineer
This is a senior position in which you will work closely with me and my team of engineers to improve, architect and code integral solutions that impact the whole site. This is a really key role that will take our site to the next level from a web development best practices, performance and infrastructure perspective.


Senior User Interface Engineer – Customer Service
This is a new position that we are opening up this week. In this role you will help re-design and engineer a new web based customer support center. We will put the same care in this site that we do with the main Netflix site. Many of the ideas, solutions may find there way into the general Netflix site as well. If you love building great web applications then please give me a ping.

Other Positions in Other Teams
Adrian Cockcroft, former Sun Distinguished Engineer and eBay research labs member is just one of the luminaries here at Netflix. Adrian has two immediate openings on his team.

Creative Director.
Yes, we are looking for a talented creative director to work directly with with our VP of Product Management, Gibson Biddle, on taking design for Netflix to a whole new level. Up for the challenge? Let me know.

Sr. Marketing Graphic Designer
Barry Enderwick is looking for a talented graphic designer to work in his team. Barry's team creates the brand, the advertising, the badges, the printed material, etc. If you are a graphic designer this is an awesome opportunity to work on one of the most recognized brands in America.

For all of these positions, feel free to email me. You can reach me at b dot scott at yahoo dot com.

Thursday, October 04, 2007

Netflix Here I Come!

Over the last 2+ years I have had the honor and pleasure of working for one of the greatest companies on the planet and with some of the greatest designers & engineers on the planet.

Yahoo! has been a great place for me. I learned a lot. Feel like I contributed a lot. I have had an honored position as a mouthpiece (a genuine one) for Yahoo!

Now its time to move on to the next challenge.

I am excited to announce that I will be joining Netflix as the Director of UI Engineering. Netflix is one of the most amazing companies to work for. And I think the most exciting days are ahead for Netflix. The challenge of digital delivery is something that I think they (we) are ready for.

I am succeeding the excellent Sean Kane who is in stealth mode, co-founding a new startup. I wish Sean amazing success and am looking forward to applying my talents and energies to the world of movies!

MIMA - Jason Freid

Finally got to hear Jason Fried (37 Signals) in person.

I know that Jason is controversial and his stance on team size, ways of working are controversial and cannot (I believe) be applied in every situation.

Its a lot like Extreme Programming. Back at Sabre I lead two engineering teams and we were doing full on XP, agile methodology. As long as it was not treated like a religion but was a set of principles to inform your work I found it to be really useful.

Onto the talk. Jason had some great points. Lots of things that I agree with.

Keep your team small
  • Forces you to focus on what's important
  • Clearer communication comes for free
  • "Communication usually fails except by accident"
Collaboration is about communication, not control
  • Keep your team apart. Interruption is not collaboration. Interruption is the enemy of productivity.
  • Encourage alone time
  • Stay away from each other as much as possible
  • Communicate more passively, less actively.
Meetings are toxic
  • Usually a symptom of a problem, not a solution. Mentioned a business leader in Brazil who advocates that all meetings are optional.
  • Meetings convey an abysmally small amount of information per minute
  • Require thorough preparation that people rarely do
  • Tend to procreate
Instead make tiny decisions
  • Decisions are progress
  • Progress is great for morale
So I am a realist. Organizations do grow in size. So you have to work hard at keeping teams small. And we should avoid meetings wherever possible. However (and Jason talks about this) you need to communicate with each other in ways that are least disruptive. Meetings do have to happen (Jason is not saying never have a meeting... just they are very infrequent and really are more working sessions).

In different teams I have led I have instituted things like "No Meeting Days". No one is allowed to call a meeting on those days. Or "Work from Home Days". They were all designed to give designers & engineers "flow time". Time to get into the flow of what they are doing and stay there.

If you can have a few hours of non-interrupted productivity it is amazing what you can accomplish. I have had people remark at my crazy "weekend projects". What happens is I get off by myself, no interruptions, no IM, no email and just get into the flow of what I am working on. That zone is the same thing a runner feels with they get that "glow", the groove of running.

Jason talked about the power of REM sleep and compared it to REM Work. Uninterrupted flow. What is interesting is I have over the last few years biased toward open office arrangements. I am beginning to rethink this. Why? Its too easy to interrupt your co-workers with trivial stuff that doesn't demand immediate attention. And verbal communication can be very redundant and time consuming.

A couple of months back I was trying to get a lot of stuff done. So instead of checking email every 15 minutes (!) I decided to check once in the morning and once in the afternoon. Man, I cannot tell you how it changed my day. The ability to get into some work without interruption was exhilarating.

If nothing else, Jason's talk was a wonderful reset for me to think how I manage and remember my number one priority is to make those that work for me successful, productive, motivated and appreciated.

My MIMA Talk

For the folks at MIMA (or others interested), the latest version of my talk Designing for the Rich Web Experience is available for download.

Thanks for all the wonderful comments and discussion afterwards.

I also gave this talk at Yahoo last week. Look for it on the YUI Theatre in a few weeks.

MIMA - Lee Rainie - Internet Usage

I attended and spoke at the MIMA (Minnesota Interactive Marketing Association) Conference yesterday.

The conference had around 700 attendees with backgrounds in design, marketing and advertising. I was really impressed with the conference and came away with some nice nuggets.

First up was Lee Rainie. Lee is the founding Director of the Pew Internet & American Life Project. They study in detail the impact of the internet on American families. Lee's talk was jam-packed with stats. The podcast will be available next week as well as the slides which I will post then.

First, some basic stats.

Internet Usage:
  • 72% adults
  • 93% high schoolers
  • 98% college students (with margin of error could be 100%)
Broadband has reached almost 50% homes in U.S.
  • 55% of online teens have created their own profile
  • 51% of young adult internet users have uploaded photos to the internet
  • 26% teens remix stuff they find on the web as posts, blogs, etc.
  • 9% of adults
From their research they break down internet users into 10 types (unfortunately I am missing some of the percentage breakdowns). The big surprise is that the low tech crowd is 49% of the population! And only 8% are technophiles!

High End Group

Omnivores - 8%
Late 20's. The gadget lover crowd. Own an iphone (probably live in the bay area :-). Photo & video freaks. Wireless. Lots of students & racially diverse. Broadband 90%.

Connectors - 7%
Late 30's. Email & IM primarily. Really into technology but messaging is critical. Skewed toward women & upscale African American.

Lackluster Veterans
40'ish. Broadband 77%. Tech is necessary for them, but not exciting. The like the experience of being off the grid. Often rather watch TV than youtube.

Productivity Enhancers - 8%
40'ish. Broadband 71%. Flipside of lackluster. Use for productivity. Skewed toward english speaking latinos.

Middle Group

Mobile Centric - 10%
Skewed toward African Americans & Latinos. Not early adopters. Phone texters. Photo takers.

Connected but Hassled
Mid 40s. Female dominant. Worries about information overload. Tech is not fun!

Low End Group

Inexperienced Experimenters - 8%
Enthusiastic, but very inexperienced. Not tech savvy at all. Easily confused by the technology & blames themselves.

Light But Satisfied - 15%
Prefer Traditional Media. Mid 50s.

Indifferent - 11%
Broadband - 12%. Lifetyle choice is to NOT be online and be proud about it.

Off the Network.
Mid 60s. Female dominant. Diverse Race. Poorest Group. Broadband - 0%

To find out what type you are, take the quiz at the their site.

The last nuggets was Lee's take on 10 ways the internet changes the life of people it touches.
  • Volume of Information. Long tail expands
  • Velocity of Information. Smart mobs, wisdom of crowds, bottom up intelligence (think google search, social networks)
  • Venues of Intersecting. Place shifting, time shifting, having "absence presence" (e.g., physically there but chatting with someone else over the internet)
  • Venturing for Information. Search strategies change, expectations of what you can find out changes.
  • Vigilance for Information. Attention is truncated. Continuous Partial Attention and elongated attention (deep dives for information). Result is "expert amateurs". Someone goes home from Dr. and researches medical condition and sometimes can know more than the Dr. did about the specific condition and latest treatments.
  • Valence (relevance) of Information. Being Digital. The Daily Me. The Daily Us. People become alienated in social & information bubbles of their choosing.
  • Vetting of Information. Becomes more social. Credibility tests change as people ping their networks.
  • Viewing of Information. Information is disaggregated. Becomes more horizontal. New reading strategies to digest information. Coping mechanisms.
  • Voting & Ventilating. Tagging, rating, commenting. Collective intelligence emerges.
  • inVention of information & Visibility of new creators. The read/write web. Everyone can publish. More people become "famous".

Anti-Patterns: Talk

Recently, I have been giving a new talk on Anti-Patterns.

current set of anti patterns

Sometimes it is most instructive to look at design patterns in reverse-- as a set of anti-patterns. In this talk, I am exploring the common mistakes that designers & developers make when attempting to craft a rich web experience. There are a bunch of counter-examples from consumer facing web sites (both inside & outside of Yahoo!) as well as from enterprise web applications.

The anti-patterns explored are:
  • meandering way
  • borg idiom
  • tiny targets
  • hover and cover
  • pogo stick navigation
  • novel notions
  • metaphor mismatch
  • double duty
  • linkitus
  • windows aplenty
  • animation gone wild
  • misguided misdirections
  • missed moments
  • one at a time
  • non-symmetrical actions
Venues for the talk so far have been at:
Enjoy.