<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0"><id>tag:blogger.com,1999:blog-11599526</id><updated>2008-08-14T17:03:38.989-07:00</updated><title type="text">Looks Good Works Well</title><link rel="alternate" type="text/html" href="http://looksgoodworkswell.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default?start-index=26&amp;max-results=25&amp;redirect=false" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/posts/default" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>104</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><geo:lat>37.405989</geo:lat><geo:long>-121.847755</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by/2.0/" /><link rel="self" href="http://feeds.feedburner.com/LooksGoodWorksWell" type="application/atom+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><entry><id>tag:blogger.com,1999:blog-11599526.post-8943138421330858964</id><published>2008-08-12T15:45:00.000-07:00</published><updated>2008-08-12T15:56:45.798-07:00</updated><title type="text">Still Hiring</title><content type="html">My new T-Shirt from &lt;a href="http://zazzle.com"&gt;Zazzle&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a style="display: inline;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jobs.netflix.com/DetailFlix.asp?flix2250"&gt;&lt;img style="margin: 0pt 0pt 10px 0px; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_LbtMODLD-xA/SKISyj-7lAI/AAAAAAAAABI/6zoGyUJtZOY/s320/tshirt-front.png" alt="" id="BLOGGER_PHOTO_ID_5233766376819889154" border="1" /&gt;&lt;/a&gt;&lt;a style="display: inline;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://jobs.netflix.com/DetailFlix.asp?flix2250"&gt;&lt;img style="margin: 0pt 10px 0px; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_LbtMODLD-xA/SKIS-cH5tCI/AAAAAAAAABQ/jWpUb85KXUY/s320/tshirt-back.png" alt="" id="BLOGGER_PHOTO_ID_5233766580868461602" border="1" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="clear: both;"&gt;Interested?&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/363344833/still-hiring.html" title="Still Hiring" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=8943138421330858964" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/8943138421330858964/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/8943138421330858964" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/8943138421330858964" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/08/still-hiring.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-9183971577955819651</id><published>2008-07-16T14:07:00.000-07:00</published><updated>2008-07-16T14:38:35.183-07:00</updated><title type="text">New Job Opportunities</title><content type="html">&lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix2250"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Netflix - Sr. Web UI Engineer&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;I recently filled a position for Sr. Web UI Engineer that &lt;a href="http://looksgoodworkswell.blogspot.com/2008/04/netflix-jobs-two-positions-open-42908.html"&gt;I blogged about before&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But hey, we are hiring again. The description is the basically the same as the last position. You can &lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix2250"&gt;read all about it on the Netflix Jobs site&lt;/a&gt; or &lt;a href="http://www.linkedin.com/jobs?viewJob=&amp;amp;jobId=577559"&gt;apply for the position on the LinkedIn posting&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And while we are on the subject of jobs let me mention a few other opportunities.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Netflix - Design Team Positions&lt;/span&gt;&lt;br /&gt;Nancy Mott (design lead) has 4 openings on her team. Lots of new ideas brewing in the design team. Come be a part of this exciting team.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix2211"&gt;Senior User Interface Designer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix2207"&gt;Senior Interaction Designer &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix2206"&gt;Senior Visual Concept Designer &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix2238"&gt;Interactive Design Project Manager &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Slideshare Opportunity - Web Developer&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;And finally, my good friends &lt;a href="http://www.jonathanboutelle.com/"&gt;Jonathan Boutelle&lt;/a&gt; &amp;amp; &lt;a href="http://rashmisinha.com/"&gt;Rashmi Sinha&lt;/a&gt; have an immediate need at &lt;a href="http://slideshare.net/"&gt;Slideshare&lt;/a&gt; (in SF). In the words of Jonathan:&lt;br /&gt;&lt;blockquote&gt; Friends,&lt;br /&gt;&lt;br /&gt;As many of you know, SlideShare has been growing like crazy lately! We closed a funding round two months ago and have opened up a snazzy new office in the SOMA neighborhood of SF.&lt;br /&gt;&lt;br /&gt;I'm looking for a great web developer to join our merry band: someone who's good at straight-up app development and is fairly handy on the back-end as well. We're a Ruby and Python shop, but language is no bar if an engineer has what it takes otherwise. This job is located in either our San Francisco office or our New Delhi office.&lt;br /&gt;&lt;br /&gt;Let me know if you or somebody you know is interested. We're offering a referral award of $1500 if you refer somebody we hire for this position. &lt;/blockquote&gt;You can contact Jonathan at jon AT slideshare DOT net.</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/337451173/new-job-opportunities.html" title="New Job Opportunities" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=9183971577955819651" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/9183971577955819651/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/9183971577955819651" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/9183971577955819651" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/07/new-job-opportunities.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-5983175388531690538</id><published>2008-07-16T10:00:00.000-07:00</published><updated>2008-07-16T10:03:41.716-07:00</updated><title type="text">Anti-Pattern: Animation Gone Wild - Borders.com</title><content type="html">Borders.com just announced the &lt;a href="http://www.borders.com/online/store/MediaView_newborders"&gt;new Borders.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I ambled over curious if there were any new Ajax style interactions. And what did I find? A classic example of the anti-pattern Animation Gone Wild. This is when you employ gratuitous animation that adds no value either in communication or engagement.&lt;br /&gt;&lt;br /&gt;Here is a screencast of it in action.&lt;br /&gt;&lt;br /&gt;&lt;object type="application/x-shockwave-flash" data="http://www.flickr.com/apps/video/stewart.swf?v=55430" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" height="233" width="400"&gt; &lt;param name="flashvars" value="intl_lang=en-us&amp;amp;photo_secret=d0513bc3a9&amp;amp;photo_id=2673866921"&gt; &lt;param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=55430"&gt; &lt;param name="bgcolor" value="#000000"&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=55430" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&amp;amp;photo_secret=d0513bc3a9&amp;amp;photo_id=2673866921" height="233" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Instead of popping up the book, music, dvd information quickly we are required to watch the talent of the developer to sloooowly animate the box into place. Come on folks, we can do better than this!&lt;br /&gt;&lt;br /&gt;There is no need to see utility objects like this animate into place.&lt;br /&gt;&lt;br /&gt;Here is the general rule. Try your feature without animation. Is the meaning clear? If so then don't add ANY animation. If it is not, try adding a quick animation. Did that get it? Then stop there.&lt;br /&gt;&lt;br /&gt;Save animation for when you need it. Animation is good for at least seven reasons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Maintain context while changing views. &lt;a href="http://billwscott.com/carousel/carousel_ajax_load.html"&gt;Carousels&lt;/a&gt; are a good example of this. The scroll animation helps the user maintain context as they move through information.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Explain what just happened. The Apple store &lt;a href="http://store.apple.com/us/configure/MB402LL/A?mco=NzQ3Njk0"&gt;Customize your Mac&lt;/a&gt; uses this to highlight price changes while configuring a Mac for purchase.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Show relationships between objects. The &lt;a href="http://www.appleinsider.com/articles/04/10/06/apple_receives_patent_for_genie_dock_effect.html"&gt;Mac Genie&lt;/a&gt; effect when closing or opening windows. It is fast enough and it ties the iconified window to the dock.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Focus attention. Backpackit's &lt;a href="http://ajaxpatterns.org/archive/One-Second_Spotlight.php"&gt;Spotlight&lt;/a&gt; technique focuses attention on the change that happened.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Improve perceived performance. &lt;a href="http://www.webappers.com/progressBar/"&gt;Progress Bars&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create an illusion of virtual space. &lt;a href="http://myyblog.com/blog/2007/10/11/improved-personal-assistant/"&gt;Yahoo! Home page's personal assistant&lt;/a&gt; (Tabs animate open).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Engagement. Mini-Cooper site, &lt;a href="http://www.miniusa.com/?#/learn/FACTS_FEATURES_SPECS/colors-s"&gt;configure your car&lt;/a&gt;. The animation is fun.&lt;/li&gt;&lt;/ul&gt;BTW, I go into detail on animation in my upcoming O'Reilly Book, &lt;a href="http://looksgoodworkswell.blogspot.com/2008/07/upcoming-oreilly-book-designing-web.html"&gt;Designing Web Interfaces&lt;/a&gt;.</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/337246271/anti-pattern-animation-gone-wild.html" title="Anti-Pattern: Animation Gone Wild - Borders.com" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=5983175388531690538" title="5 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/5983175388531690538/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/5983175388531690538" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/5983175388531690538" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/07/anti-pattern-animation-gone-wild.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-8838793426420155024</id><published>2008-07-16T09:27:00.000-07:00</published><updated>2008-07-16T09:59:46.581-07:00</updated><title type="text">Upcoming O'Reilly Book - Designing Web Interfaces: Principles and Patterns for Rich Interactions</title><content type="html">Since about February &lt;a href="http://designgenie.org/"&gt;Theresa Neil&lt;/a&gt; &amp;amp; I have been actively writing a new book for O'Reilly.&lt;br /&gt;&lt;br /&gt;This is part of a group of books O'Reilly is publishing around Design. &lt;a href="http://designinginterfaces.com/"&gt;Designing Interfaces&lt;/a&gt; is an excellent book on Design Patterns by Jenifer Tidwell. &lt;a href="http://www.designinggesturalinterfaces.com/"&gt;Designing Gestural Interfaces&lt;/a&gt; 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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Designing Web Interfaces: Principles and Patterns for Rich Interactions&lt;/span&gt; focuses strictly on a set of six principles for designing Web applications to be highly interactive.&lt;br /&gt;&lt;br /&gt;The six principles are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Make it Direct&lt;/li&gt;&lt;li&gt;Keep it Lightweight&lt;/li&gt;&lt;li&gt;Stay on the Page&lt;/li&gt;&lt;li&gt;Provide an Invitation&lt;/li&gt;&lt;li&gt;Use Transitions&lt;/li&gt;&lt;li&gt;Be Reactive&lt;/li&gt;&lt;/ol&gt;The principles are illustrated by a series of design patterns called out in various chapters shown here in a table of contents.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Principle One: Make it Direct&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Chapter 1. In Page Editing&lt;/li&gt;&lt;li&gt;Chapter 2. Drag and Drop&lt;/li&gt;&lt;li&gt;Chapter 3. Direct Selection&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Principle Two: Keep it Lightweight&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Chapter 4. In-Context Tools&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Principle Three: Stay on the Page&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Chapter 5. Overlays&lt;/li&gt;&lt;li&gt;Chapter 6. Inlays&lt;/li&gt;&lt;li&gt;Chapter 7. Virtual Pages&lt;/li&gt;&lt;li&gt;Chapter 8. Workflow&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Principle Four: Provide an Invitation&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Chapter 9. Static Invitations&lt;/li&gt;&lt;li&gt;Chapter 10. Interactive Invitations&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Principle Five: Use Transitions&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Chapter 11. Transition Patterns&lt;/li&gt;&lt;li&gt;Chapter 12. Purpose of Transitions&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Principle Six: Be Reactive&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Chapter 13. Lookup&lt;/li&gt;&lt;li&gt;Chapter 14. Status&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Appendix: Design Patterns&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;I am also setting up a companion site, &lt;a href="http://designingwebinterfaces.com"&gt;http://designingwebinterfaces.com&lt;/a&gt;. Currently this is just parked with a generic placeholder.</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/337246272/upcoming-oreilly-book-designing-web.html" title="Upcoming O'Reilly Book - Designing Web Interfaces: Principles and Patterns for Rich Interactions" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=8838793426420155024" title="5 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/8838793426420155024/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/8838793426420155024" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/8838793426420155024" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/07/upcoming-oreilly-book-designing-web.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-4439916378400673452</id><published>2008-06-25T19:22:00.001-07:00</published><updated>2008-06-25T19:29:04.657-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="jiffy" /><category scheme="http://www.blogger.com/atom/ns#" term="yslow" /><category scheme="http://www.blogger.com/atom/ns#" term="velocity" /><category scheme="http://www.blogger.com/atom/ns#" term="velocity08" /><category scheme="http://www.blogger.com/atom/ns#" term="velocityconf08" /><title type="text">Velocity Conference '08 Notes</title><content type="html">&lt;a href="http://en.oreilly.com/velocity2008/public/content/home"&gt;Velocity Conference&lt;/a&gt; was great!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Takeaway&lt;/span&gt;&lt;br /&gt;I think the greatest takeaway is how seriously the Firefox and IE8 team are taking client performance. In particular, the work of &lt;a href="http://stevesouders.com/"&gt;Steve Souders&lt;/a&gt;, the &lt;a href="http://developer.yahoo.com/performance/"&gt;Yahoo! performance team&lt;/a&gt;, &lt;a href="http://www.julienlecomte.net/blog/2008/06/50/"&gt;others&lt;/a&gt; who are writing about Ajax performance is the playlist for what to optimize. As &lt;a href="http://en.oreilly.com/velocity2008/public/schedule/speaker/5039"&gt;Eric Lawrence&lt;/a&gt; of Microsoft said to Steve, "Our mission is to make your book on performance be out of date."&lt;br /&gt;&lt;br /&gt;This is a very different picture from a few years back.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;a href="http://en.oreilly.com/velocity2008/public/schedule/proceedings"&gt;Some Great Talks&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;There were a lot of good talks, but here are the ones that stood out to me (I did miss both mornings).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/asset/attachment/3105"&gt;Building Faster Pages in Firefox and Internet Explorer&lt;/a&gt; - This is not the same presentation as was presented &amp;amp; Mozilla's is missing, hopefully they will post their slides.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/asset/attachment/3128"&gt;Even Faster Web Sites&lt;/a&gt; - This is the start of Steve's next book on Web Site performance.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/asset/attachment/1956"&gt;High Performance Ajax Applications&lt;/a&gt; - Julien's in depth look at tuning the world of DHTML.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/asset/attachment/3104"&gt;Hotmail's Performance Tuning Best Practices&lt;/a&gt; - This has some great material. Great lessons learned takeaways. A favorite for me.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/schedule/detail/3290"&gt;IE 8 What's Coming&lt;/a&gt; - Takeaway... its not Javascript engine that is slowing things down... it is rendering and layout.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/asset/attachment/3162"&gt;Image Optimization: How Many of These 7 Mistakes Are You Making&lt;/a&gt; - Crush those PNGs and more.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/asset/attachment/3106"&gt;Lessons Learned in Live Search Moving to and then Away from Ajax&lt;/a&gt; - Eric Shurman is a great speaker and full of experience. Great lessons here.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Some Great Announcements/Tools&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/asset/attachment/3096"&gt;Keynote Systems Launches KITE&lt;/a&gt; - Performance Analysis Tool (Free)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/asset/attachment/3092"&gt;Jiffy: Open Source Performance Measurement and Instrumentation&lt;/a&gt; - Scott &amp;amp; Whitepage's team announcing Jiffy. See also &lt;a href="http://billwscott.com/jiffyext/"&gt;my firebug tool&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.oreilly.com/velocity2008/public/asset/attachment/3087"&gt;AOL Page Test&lt;/a&gt; - Kind of like a yslow. It runs stand alone as well as from a URL. But it generates network graphs, etc. Looks nice.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://looksgoodworkswell.blogspot.com/2008/06/velocity-conference-improving-netflix.html"&gt;My talk&lt;/a&gt; is also available &lt;a href="http://en.oreilly.com/velocity2008/public/asset/attachment/3113"&gt;for download&lt;/a&gt;. &lt;div&gt;&lt;br /&gt;Already looking forward to Velocity '09.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/320170188/velocity-conference-notes.html" title="Velocity Conference &amp;#39;08 Notes" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=4439916378400673452" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/4439916378400673452/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/4439916378400673452" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/4439916378400673452" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/06/velocity-conference-notes.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-7339455651265822611</id><published>2008-06-22T13:50:00.000-07:00</published><updated>2008-06-25T19:25:38.712-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="presentations" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="yslow" /><category scheme="http://www.blogger.com/atom/ns#" term="velocity" /><category scheme="http://www.blogger.com/atom/ns#" term="ajax" /><category scheme="http://www.blogger.com/atom/ns#" term="velocity08" /><category scheme="http://www.blogger.com/atom/ns#" term="netflix" /><category scheme="http://www.blogger.com/atom/ns#" term="velocityconf08" /><category scheme="http://www.blogger.com/atom/ns#" term="conferences" /><title type="text">Velocity Conference: Improving Netflix Performance Presentation</title><content type="html">My quick talk on Improving Netflix Performance Experience from June 23 at the &lt;a href="http://en.oreilly.com/velocity2008/public/content/home"&gt;Velocity Conference&lt;/a&gt; is available here:&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_480436"&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=improvingnetflixexperience-1214168005312431-8"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=improvingnetflixexperience-1214168005312431-8" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/billwscott/improving-netflix-performance-experience?src=embed" title="View Improving Netflix Performance Experience on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload?src=embed"&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/318665316/velocity-conference-improving-netflix.html" title="Velocity Conference: Improving Netflix Performance Presentation" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=7339455651265822611" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/7339455651265822611/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/7339455651265822611" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/7339455651265822611" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/06/velocity-conference-improving-netflix.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-588333001184574377</id><published>2008-06-20T22:49:00.001-07:00</published><updated>2008-06-25T19:25:38.714-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="extension" /><category scheme="http://www.blogger.com/atom/ns#" term="jiffy" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="yslow" /><category scheme="http://www.blogger.com/atom/ns#" term="velocity08" /><category scheme="http://www.blogger.com/atom/ns#" term="velocityconf08" /><category scheme="http://www.blogger.com/atom/ns#" term="jiffyweb" /><category scheme="http://www.blogger.com/atom/ns#" term="firebug" /><category scheme="http://www.blogger.com/atom/ns#" term="conferences" /><title type="text">Announcing: Jiffy Firebug Extension for Viewing Client Side Performance Data</title><content type="html">In the &lt;a href="http://looksgoodworkswell.blogspot.com/2008/06/measuring-user-experience-performance.html"&gt;previous article&lt;/a&gt; I discussed our full cycle tracing mechanism we built at Netflix.&lt;br /&gt;&lt;br /&gt;&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;Firebug Extension: First Attempt&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2595821783/" title="roundtrip-blog-capture-alltimes.png (by billwscott)"&gt;&lt;img src="http://farm4.static.flickr.com/3109/2595821783_6d425a634a.jpg" title="roundtrip-blog-capture-alltimes.png (by billwscott)" alt="roundtrip-blog-capture-alltimes.png (by billwscott)" width="250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://getfirebug.com/"&gt;Firebug&lt;/a&gt; extension. Here is what the tool ended up looking like once it was plugged into Firebug:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2597183452/" title="roundtrip-firebug.png (by billwscott)"&gt;&lt;img src="http://farm4.static.flickr.com/3256/2597183452_35d8100e8c.jpg" title="roundtrip-firebug.png (by billwscott)" alt="roundtrip-firebug.png (by billwscott)" width="350" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Currently, this is not available outside of &lt;a href="http://netflix.com/"&gt;Netflix&lt;/a&gt;. 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.&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;&lt;br /&gt;Jiffy Firebug Extension&lt;/font&gt;&lt;br /&gt;However, I was showing this to Steve Souders (in relation to the Velocity panel) and he mentioned that one of the other panel members, &lt;a href="http://www.linkedin.com/in/scottruthfield"&gt;Scott Ruthfield&lt;/a&gt; of &lt;a href="http://whitepages.com/"&gt;Whitepages.com&lt;/a&gt; and his team were building an open source metrics and instrumentation tool for Web pages called Jiffy. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://radar.oreilly.com/archives/2008/06/jiffy-eucalyptus-launch-velocity.html"&gt;In the words of Scott&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;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.&lt;br /&gt;&lt;/blockquote&gt;Steve suggested adapting what I had done with the current Neflix Firebug extension for use with Jiffy.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;The result is the &lt;a href="http://billwscott.com/jiffyext/"&gt;Jiffy Firebug Extension&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://billwscott.com/jiffyext/"&gt;&lt;img src="http://billwscott.com/jiffyext/images/jiffy-duration.png" alt="Jiffy Firebug Extension" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Today I am making &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7613"&gt;this extension&lt;/a&gt; available to the public under a simple &lt;a href="http://creativecommons.org/licenses/by/3.0/us/"&gt;Creative Commons License&lt;/a&gt;. 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.&lt;br /&gt;&lt;br /&gt;You can learn all about the extension and read more about the Jiffy library at my &lt;a href="http://billwscott.com/jiffyext/"&gt;Jiffy Extension site&lt;/a&gt; or go directly to the &lt;a href="http://groups.google.com/group/jiffy-web?lnk=srg"&gt;Jiffy-Web google group&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/316708959/announcing-jiffy-firebug-extension-for.html" title="Announcing: Jiffy Firebug Extension for Viewing Client Side Performance Data" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=588333001184574377" title="4 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/588333001184574377/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/588333001184574377" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/588333001184574377" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/06/announcing-jiffy-firebug-extension-for.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-2665086965256194782</id><published>2008-06-20T17:46:00.001-07:00</published><updated>2008-06-25T19:25:38.716-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="yslow" /><category scheme="http://www.blogger.com/atom/ns#" term="velocity" /><category scheme="http://www.blogger.com/atom/ns#" term="velocity08" /><category scheme="http://www.blogger.com/atom/ns#" term="netflix" /><category scheme="http://www.blogger.com/atom/ns#" term="velocityconf08" /><category scheme="http://www.blogger.com/atom/ns#" term="conferences" /><title type="text">Measuring User Experience Performance</title><content type="html">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.&lt;br /&gt;&lt;font size="4"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Timing "from Click to Done" - Full Cycle Experience&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;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 &lt;span style="font-weight: bold;"&gt;they click it till the time they get it&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;back (done)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;The idea of tracing the full cycle time is to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Capture the start time&lt;/li&gt;&lt;li&gt;Capture various points of interest&lt;/li&gt;&lt;li&gt;Capture the end time&lt;/li&gt;&lt;li&gt;Log the results&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;Capture the Start Time ("from Click")&lt;/font&gt;&lt;br /&gt;To get a full cycle time we need to capture the point in time the user makes a request. &lt;br /&gt;&lt;br /&gt;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). &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2596587622/" title="roundtrip-blog-capture-starttime.png (by billwscott)"&gt;&lt;img src="http://farm4.static.flickr.com/3173/2596587622_38683b4e34.jpg" title="roundtrip-blog-capture-starttime.png (by billwscott)" alt="roundtrip-blog-capture-starttime.png (by billwscott)" height="236" width="420" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Unload Event &lt;/span&gt;&lt;br /&gt;The most logical place to measure the start of a request ("from Click") is on the originating page (see &lt;span style="font-weight: bold;"&gt;A&lt;/span&gt; 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. &lt;br /&gt;&lt;br /&gt;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".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Start of Servlet Response &lt;/span&gt;&lt;br /&gt;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 &lt;span style="font-weight: bold;"&gt;B&lt;/span&gt; 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;Capture Intereresting Points Along the Way&lt;/font&gt;&lt;br /&gt;After capturing the start point there are a few other standard points of time we would like to capture.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2596604434/" title="roundtrip-blog-capture-tweentimes.png (by billwscott)"&gt;&lt;img src="http://farm4.static.flickr.com/3059/2596604434_fd38ba245a.jpg" title="roundtrip-blog-capture-tweentimes.png (by billwscott)" alt="roundtrip-blog-capture-tweentimes.png (by billwscott)" height="245" width="420" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Two points of interest are captured on the servlet side:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When we begin generating the HTML for the page (&lt;span style="font-weight: bold;"&gt;C&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;When we end generating the HTML for the page (&lt;span style="font-weight: bold;"&gt;E&lt;/span&gt;)&lt;/li&gt;&lt;/ul&gt;Two points of interest are captured on the client side:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When start rendering the HTML for the page (&lt;span style="font-weight: bold;"&gt;D&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;When we end processing the HTML for the page (&lt;span style="font-weight: bold;"&gt;F&lt;/span&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;C&lt;/span&gt; &amp;amp; &lt;span style="font-weight: bold;"&gt;E&lt;/span&gt; deal with page generation. &lt;span style="font-weight: bold;"&gt;D&lt;/span&gt; &amp;amp; &lt;span style="font-weight: bold;"&gt;F&lt;/span&gt; deal with page rendering.&lt;br /&gt;&lt;br /&gt;In &lt;span style="font-weight: bold;"&gt;D&lt;/span&gt;, we emit a scriptlet immediately after emitting the &amp;lt;HEAD&amp;gt; tag that saves &lt;span style="font-family: Courier;"&gt;new Date()).getTime()&lt;/span&gt; into a Javascript object on the page.&lt;br /&gt;&lt;br /&gt;In &lt;span style="font-weight: bold;"&gt;F&lt;/span&gt;, we emit a scriplet immediately after emitting the &amp;lt;/BODY&amp;gt; tag that saves &lt;span style="font-family: Courier;"&gt;new Date()).getTime()&lt;/span&gt; into a Javascript object on the page.&lt;br /&gt;&lt;br /&gt;When the page starts rendering the HEAD it will execute &lt;span style="font-weight: bold;"&gt;D&lt;/span&gt; and store the time stamp. When the BODY finishes rendering, it will execute &lt;span style="font-weight: bold;"&gt;F &lt;/span&gt;and store the time stamp.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;Capture End Time ("to Done")&lt;/font&gt;&lt;br /&gt;Once &lt;span style="font-weight: bold;"&gt;F&lt;/span&gt; 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 &lt;span style="font-weight: bold;"&gt;onload&lt;/span&gt; event is finished for the page (see &lt;span style="font-weight: bold;"&gt;G &lt;/span&gt;in diagram below). &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2596664048/" title="roundtrip-blog-capture-endtime.png (by billwscott)"&gt;&lt;img src="http://farm4.static.flickr.com/3170/2596664048_32e3c7a55b.jpg" title="roundtrip-blog-capture-endtime.png (by billwscott)" alt="roundtrip-blog-capture-endtime.png (by billwscott)" height="278" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We attempt to insert our instrumentation as the very last item to be handled in the onload event for the page.&lt;br /&gt;&lt;br /&gt;&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;Logging the Captured Times&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;Here is a diagram that shows the various time points we capture (8) and the measures we derive (5).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2595821783/" title="roundtrip-blog-capture-alltimes.png (by billwscott)"&gt;&lt;img src="http://farm4.static.flickr.com/3109/2595821783_6d425a634a.jpg" title="roundtrip-blog-capture-alltimes.png (by billwscott)" alt="roundtrip-blog-capture-alltimes.png (by billwscott)" height="352" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The five measurements are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Elapsed client request time&lt;/span&gt; (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.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Elapsed server response&lt;/span&gt; (E-B). How much time was spent generating the server response.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Elapsed client render&lt;/span&gt; (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.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Elapsed server plus client&lt;/span&gt; (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.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Elapsed&amp;nbsp; client render after body&lt;/span&gt; (G-F). This gives us an idea of how much additional time is needed to get the page fully loaded after rendering the body.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;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 &lt;a href="http://en.wikipedia.org/wiki/Web_bug"&gt;beacons&lt;/a&gt;, an &lt;a href="http://www.sitepoint.com/print/no-refresh-links"&gt;HTTP request with a NO-CONTENT &lt;/a&gt;response or some other mechanism. The back end service caches up results and writes them to a database for later analysis.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;The Benefit of Measuring&lt;/font&gt;&lt;br /&gt;We could have chosen to implement all the yslow &lt;a href="http://developer.yahoo.com/performance/index.html#rules"&gt;performance suggestions&lt;/a&gt; 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.&lt;br /&gt;&lt;br /&gt;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 &lt;span style="font-weight: bold;"&gt;median&lt;/span&gt; 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.)&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;In future articles &lt;/font&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Discuss what has worked and not worked.&lt;/li&gt;&lt;li&gt;Discuss an internal firebug extension I wrote to visualize this data for our developers.&lt;/li&gt;&lt;li&gt;Compare Safari vs Firefox vs IE -- the results are really interesting.&lt;/li&gt;&lt;li&gt;Announce a new Firebug Extension that helps visualize performance page data.&lt;/li&gt;&lt;/ul&gt;&lt;font style="font-weight: bold;" size="4"&gt;Hear More About this at the Velocity Conference&lt;/font&gt;&lt;br /&gt;As I mentioned in my previous article I will be giving a 15 minute talk on &lt;a href="http://en.oreilly.com/velocity2008/public/schedule/detail/3632"&gt;Improving Netflix Performance&lt;/a&gt; at the &lt;a href="http://en.oreilly.com/velocity2008/public/content/home"&gt;Velocity Conference&lt;/a&gt;. I will cover some of this material as well as other information in that talk.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;Credit&lt;/font&gt;&lt;br /&gt;Thanks to my excellent UI Engineering team at Netflix, in particular the hard work of Kim Trott. Thanks also to the &lt;a href="http://developer.yahoo.com/yslow/"&gt;yslow&lt;/a&gt; team for giving us some concrete ideas on improving site performance.&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/316578880/measuring-user-experience-performance.html" title="Measuring User Experience Performance" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=2665086965256194782" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/2665086965256194782/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/2665086965256194782" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/2665086965256194782" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/06/measuring-user-experience-performance.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-7377019968296826306</id><published>2008-06-20T14:13:00.001-07:00</published><updated>2008-06-25T19:25:38.718-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="velocity" /><category scheme="http://www.blogger.com/atom/ns#" term="velocity08" /><category scheme="http://www.blogger.com/atom/ns#" term="velocityconf08" /><category scheme="http://www.blogger.com/atom/ns#" term="conferences" /><title type="text">Velocity Conference 2008</title><content type="html">&lt;a href="http://en.oreilly.com/velocity2008/public/content/home"&gt;&lt;img src="http://static.flickr.com/3184/2595543825_97868b7414_m.jpg" align="left" /&gt;&lt;/a&gt;My friend &lt;a href="http://stevesouders.com/"&gt;Steve Souders&lt;/a&gt; (Mr. yslow and author of &lt;a href="http://www.amazon.com/gp/product/www.amazon.com?ie=UTF8&amp;amp;tag=looksgoodwork-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=www.amazon.com"&gt;High Performance Web Sites&lt;/a&gt;) is chairing the upcoming &lt;a href="http://en.oreilly.com/velocity2008/public/content/home"&gt;Velocity Conference&lt;/a&gt; in Burlingame, CA. It's happening on Mon-Tues, June 23-24. &lt;br /&gt;&lt;br /&gt;I will be on the &lt;a href="http://en.oreilly.com/velocity2008/public/schedule/detail/3639"&gt;Measuring Performance panel&lt;/a&gt; with Steve Souders, Earnest Mueller (National Instrument), &lt;a href="http://www.ajaxperformance.com/"&gt;Ryan Breen&lt;/a&gt; (Gomez) and &lt;a href="http://www.linkedin.com/in/scottruthfield"&gt;Scott Ruthfield&lt;/a&gt; (&lt;a href="http://whitepages.com/"&gt;Whitepages&lt;/a&gt;). 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.&lt;br /&gt;&lt;br /&gt;I will also be doing a quick talk in the afternoon on &lt;a href="http://en.oreilly.com/velocity2008/public/schedule/detail/3632"&gt;Improving Netflix Performance&lt;/a&gt;. 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 &amp;amp; tools that we will be sharing. Look for a followup blog article on some of this information.&lt;br /&gt;&lt;br /&gt;Hope to see you there.&lt;br /&gt;&lt;br /&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/316475529/velocity-conference-2008.html" title="Velocity Conference 2008" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=7377019968296826306" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/7377019968296826306/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/7377019968296826306" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/7377019968296826306" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/06/velocity-conference-2008.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-6491819716283583753</id><published>2008-05-15T10:45:00.001-07:00</published><updated>2008-06-22T13:44:51.819-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title type="text">Everything Good You Needed to Know About Javascript*</title><content type="html">(*and even the bad parts)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.assoc-amazon.com/e/ir?t=looksgoodwork-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596517742"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px;" src="http://ecx.images-amazon.com/images/I/51UHglbU2UL._SS500_.jpg" alt="" border="0" /&gt;&lt;/a&gt;At Yahoo! I had the privilege of working directly with &lt;a href="http://crockford.com"&gt;Doug Crockford&lt;/a&gt; and got to review a book he was writing at the time, Javascript The Good Parts.&lt;br /&gt;&lt;br /&gt;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 &lt;a href="http://www.amazon.com/gp/product/0876925964?ie=UTF8&amp;tag=looksgoodwork-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0876925964"&gt;The C Programming Language&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=looksgoodwork-20&amp;l=as2&amp;o=1&amp;a=0876925964" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; book that I cut my teeth on.&lt;br /&gt;&lt;br /&gt;This is a must for your bookshelf. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can get &lt;a href="http://www.amazon.com/gp/product/0596517742?ie=UTF8&amp;amp;tag=looksgoodwork-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596517742"&gt;JavaScript: The Good Parts&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=looksgoodwork-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596517742" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt; at Amazon.</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/291126876/everything-good-you-needed-to-know.html" title="Everything Good You Needed to Know About Javascript*" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=6491819716283583753" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/6491819716283583753/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/6491819716283583753" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/6491819716283583753" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/05/everything-good-you-needed-to-know.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-215216769592203447</id><published>2008-05-15T10:13:00.000-07:00</published><updated>2008-05-15T10:43:30.104-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="recommendations" /><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="reference" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="books" /><category scheme="http://www.blogger.com/atom/ns#" term="userexperience" /><category scheme="http://www.blogger.com/atom/ns#" term="user_experience" /><title type="text">Everything You Ever Wanted to Know About Forms*</title><content type="html">(*but were afraid to ask)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.rosenfeldmedia.com/books/webforms/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 260px;" src="http://www.rosenfeldmedia.com/i/covers/webforms-lg.gif" alt="" border="0" /&gt;&lt;/a&gt;My good friend and former Yahoo! colleague, &lt;a href="http://lukew.com/"&gt;Luke Wroblewski&lt;/a&gt;, has just published a most excellent book called &lt;a href="http://www.rosenfeldmedia.com/books/webforms/"&gt;Web Form Design&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;And hey. I can get you a 10% discount. Just go to &lt;a href="http://www.rosenfeldmedia.com/books/webforms/"&gt;Rosenfield Media&lt;/a&gt; and apply the code &lt;span style="font-weight: bold;"&gt;BSCOTT&lt;/span&gt;. Just enter it on the last page of checkout. You will save 10% and get a great book.</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/291077253/everything-you-ever-wanted-to-know.html" title="Everything You Ever Wanted to Know About Forms*" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=215216769592203447" title="4 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/215216769592203447/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/215216769592203447" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/215216769592203447" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/05/everything-you-ever-wanted-to-know.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-2630156977116397275</id><published>2008-04-30T09:37:00.001-07:00</published><updated>2008-05-01T23:27:28.930-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="productivity" /><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="wireframing" /><category scheme="http://www.blogger.com/atom/ns#" term="userexperience" /><category scheme="http://www.blogger.com/atom/ns#" term="prototyping" /><category scheme="http://www.blogger.com/atom/ns#" term="coolstuff" /><category scheme="http://www.blogger.com/atom/ns#" term="user_experience" /><title type="text">Omnigraffle Wireframe Stencil for the iPhone</title><content type="html">&lt;a href="http://designgenie.org"&gt;Theresa Neil&lt;/a&gt; has recently been designing an iPhone application. In the process she created a &lt;a href="http://www.graffletopia.com/stencils/358"&gt;wireframe stencil for OmniGraffle&lt;/a&gt; to make her life easier. Thought I would pass along.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.graffletopia.com/stencils/358"&gt;&lt;img src="http://www.graffletopia.com/images/stencils/358.png" alt="OmniGraffle iPhone Wireframe Stencil" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can find &lt;a href="http://www.graffletopia.com/stencils/358"&gt;the stencil&lt;/a&gt; at &lt;a href="http://www.graffletopia.com/"&gt;Graffletopia&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update: Now on &lt;/span&gt;&lt;a href="http://theresaneil.wordpress.com/2008/04/30/wire-frames-for-iphone-web-application-design/"&gt;her blog&lt;/a&gt;.</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/280907499/omnigraffle-wireframe-stencil-for.html" title="Omnigraffle Wireframe Stencil for the iPhone" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=2630156977116397275" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/2630156977116397275/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/2630156977116397275" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/2630156977116397275" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/04/omnigraffle-wireframe-stencil-for.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-2594697911486750597</id><published>2008-04-29T09:27:00.000-07:00</published><updated>2008-06-22T13:43:58.300-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jobposting" /><category scheme="http://www.blogger.com/atom/ns#" term="netflix" /><title type="text">Netflix Jobs - Two Positions Open (4/29/08)</title><content type="html">&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Update: Both positions have been filled.&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strike&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Sr. Web UI Engineer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;At Netflix I have an &lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix2118"&gt;immediate opening on my team&lt;/a&gt;. 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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Over the last few months we also have been growing the design team and our team works very closely with both product management &amp;amp; design to create cutting edge solutions.&lt;br /&gt;&lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix2118"&gt;&lt;br /&gt;Here is the job&lt;/a&gt;. Don't hesitate to contact me if you are interested. Email me at: b DOT scott _AT_ yahoo dot COM.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Sr. Software Engineer -- Open APIs&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Michael Hart, our Director of Open APIs and Community is looking for an &lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix2044"&gt;Open APIs Sr. Software Engineer&lt;/a&gt;. 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!&lt;br /&gt;&lt;br /&gt;If you are interested drop me a note at the email I referenced above.&lt;br /&gt;&lt;/strike&gt;&lt;br /&gt;--&lt;br /&gt;Bill</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/280199428/netflix-jobs-two-positions-open-42908.html" title="Netflix Jobs - Two Positions Open (4/29/08)" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=2594697911486750597" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/2594697911486750597/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/2594697911486750597" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/2594697911486750597" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/04/netflix-jobs-two-positions-open-42908.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-5946300590329298775</id><published>2008-04-02T17:17:00.001-07:00</published><updated>2008-04-02T20:37:11.235-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="antipatterns" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="userexperience" /><title type="text">Anti-Pattern: Idiot Boxes - Yahoo! Photos</title><content type="html">In Alan Cooper's &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;location=http%3A%2F%2Fwww.amazon.com%2FAbout-Face-Essentials-Interaction-Design%2Fdp%2F0470084111%3Fie%3DUTF8%26s%3Dbooks%26qid%3D1207181728%26sr%3D8-1&amp;amp;tag=looksgoodwork-20&amp;amp;linkCode=ur2&amp;amp;camp=1789&amp;amp;creative=9325"&gt;About Face 3&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=looksgoodwork-20&amp;amp;l=ur2&amp;amp;o=1" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt; book he states a simple principle:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Don't stop the proceedings with idiocy.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;In the context of flow he describes the scenario:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;I call this the &lt;span style="font-weight: bold;"&gt;Idiot Box&lt;/span&gt; Anti-Pattern.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;One of the clearest examples of this was with the Yahoo! Photos 3.0 product (which has been replaced by flickr).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2382329049/" title="yphotos-idiot-01.png by billwscott, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3296/2382329049_f977efdd12.jpg" alt="yphotos-idiot-01.png" height="340" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;What follows are two idiot boxes. The first asks the user if they really meant to &lt;span style="font-style: italic;"&gt;carefully select three photos, drag them carefully over the album and drop them there? :-D&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2383170660/" title="yphotos-idiot-02.png by billwscott, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2011/2383170660_382c3e9170_o.png" alt="yphotos-idiot-02.png" height="205" width="287" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The second one tells them that the system really put the photos where you dragged them to.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2382342809/" title="yphotos-idiot-03.png by billwscott, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3162/2382342809_e077f32ee8_o.png" alt="yphotos-idiot-03.png" height="99" width="363" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now &lt;a href="http://looksgoodworkswell.blogspot.com/2005/12/distracting-or-narrowing-looking.html"&gt;feedback&lt;/a&gt; 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 &lt;a href="http://looksgoodworkswell.blogspot.com/2005/12/storyboarding-interesting-moments.html"&gt;interesting moments&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;The first moment is when &lt;span style="font-style: italic;"&gt;dragging over a valid target&lt;/span&gt; (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.&lt;br /&gt;&lt;br /&gt;The second is immediately &lt;span style="font-style: italic;"&gt;after the photos are dropped into the album&lt;/span&gt;. 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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2383295315/" title="yphotos-idiot-illust-before.png by billwscott, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2195/2383295315_667d1d8e67.jpg" alt="yphotos-idiot-illust-before.png" height="91" width="497" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font size="2"&gt;&lt;span style="font-style: italic;"&gt;On the drop there is no feedback in context. Instead two back-to-back idiot boxes are displayed&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2383297825/" title="yphotos-idiot-illust-after.png by billwscott, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2022/2383297825_29c2891110_o.png" alt="yphotos-idiot-illust-after.png" height="94" width="662" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;A revised design uses highlighting, running tally and spotlighting (fade technique) to give appropriate feedback&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;&lt;br style="font-style: italic;" /&gt;Using an &lt;a href="http://looksgoodworkswell.blogspot.com/2005/12/storyboarding-interesting-moments.html"&gt;interesting moments grid&lt;/a&gt; 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 &lt;span style="font-style: italic;"&gt;idiot boxes&lt;/span&gt;.&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/262993713/anti-pattern-idiot-boxes-yahoo-photos.html" title="Anti-Pattern: Idiot Boxes - Yahoo! Photos" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=5946300590329298775" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/5946300590329298775/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/5946300590329298775" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/5946300590329298775" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/04/anti-pattern-idiot-boxes-yahoo-photos.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-2461373603088046668</id><published>2008-03-30T16:57:00.001-07:00</published><updated>2008-03-30T23:13:13.027-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="antipatterns" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="user_experience" /><title type="text">Anti-Pattern: Pogo Stick - Google Blogger vs. Backpackit</title><content type="html">In my previous article I ranted about Google &lt;a href="http://blogger.com/"&gt;Blogger&lt;/a&gt;. Let me rant some more :-)&lt;br /&gt;&lt;br /&gt;Besides being a good example of the &lt;a href="http://looksgoodworkswell.blogspot.com/2008/03/anti-pattern-one-at-time-google-blogger.html"&gt;One at a Time&lt;/a&gt; Anti-Pattern it is also a good example of the Pogo Stick Anti-Pattern (I first heard this term from &lt;a href="http://www.uie.com/"&gt;Jared Spool&lt;/a&gt;). I define it as:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;In the Google Blogger example I described the process of deleting comments requiring a multi-step process:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2375653142/" title="blogger-pogo-stick-illust.png by billwscott, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2298/2375653142_093cea8635_o.png" alt="blogger-pogo-stick-illust.png" height="164" width="563" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font size="1"&gt;&lt;span style="font-style: italic;"&gt;Pogo Sticking in Google Blogger&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;It takes three page refreshes to complete the operation and return to where you started.&lt;br /&gt;&lt;br /&gt;Compare this to the way you can delete in &lt;a href="http://www.backpackit.com/"&gt;Backpackit&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2374864771/" title="backpackit-delete-illust.png by billwscott, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2194/2374864771_ef66653bd6_o.png" alt="backpackit-delete-illust.png" height="548" width="350" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font size="1"&gt;&lt;span style="font-style: italic;"&gt;Backpackit provides an in page one step delete&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;What to do about delete confirmation? &lt;br /&gt;&lt;ol&gt;&lt;li&gt;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 &lt;span style="font-style: italic;"&gt;idiot box&lt;/span&gt; (pointless confirmation).&lt;/li&gt;&lt;li&gt;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.&lt;/li&gt;&lt;li&gt;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.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2374913325/" title="gmail-undo-delete-illust.png by billwscott, on Flickr"&gt;&lt;img src="http://farm3.static.flickr.com/2033/2374913325_6526ab474a_o.png" alt="gmail-undo-delete-illust.png" height="230" width="426" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;font size="1"&gt;&lt;span style="font-style: italic;"&gt;Deleting mail messages can be undone in Google Mail&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;This is a clever way to present a one-time undo by tying it to status messaging (along with contextual help).&lt;br /&gt;&lt;br /&gt;By using a direct In Page Action pattern, the Pogo Stick Anti-Pattern can often be eliminated.&lt;br /&gt;&lt;br /&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/260958389/anti-pattern-pogo-stick-google-blogger.html" title="Anti-Pattern: Pogo Stick - Google Blogger vs. Backpackit" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=2461373603088046668" title="5 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/2461373603088046668/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/2461373603088046668" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/2461373603088046668" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/03/anti-pattern-pogo-stick-google-blogger.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-99241944498631916</id><published>2008-03-29T22:23:00.001-07:00</published><updated>2008-03-30T23:13:13.028-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="antipatterns" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="user_experience" /><title type="text">Anti-Pattern: One at a Time - Google Blogger, Reader and Backpackit</title><content type="html">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.&lt;br /&gt;&lt;br /&gt;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).&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Here is the process:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to blog article and find spam comment&lt;/li&gt;&lt;li&gt;Click on trash can icon to delete&lt;/li&gt;&lt;li&gt;Get taken to another page&lt;/li&gt;&lt;li&gt;Click the "Remove Forever" checkbox&lt;br /&gt;  &lt;/li&gt;&lt;li&gt;Click the "Delete Comment" button&lt;/li&gt;&lt;li&gt;Click the link to go back to my blog article&lt;/li&gt;&lt;li&gt;Scroll back down and find the next article, repeat steps 2-7 as needed.&lt;/li&gt;&lt;/ol&gt; 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. &lt;br /&gt;&lt;br /&gt;Steps 1 &amp;amp; 2:&lt;br /&gt;&lt;a title="blogger-oneatatime-01.png" href="http://www.flickr.com/photos/64549790@N00/2373231498/"&gt;&lt;img src="http://static.flickr.com/3261/2373231498_67e0e57ff0_m.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Steps 3-5:&lt;br /&gt;&lt;a title="blogger-oneatatime-02.png" href="http://www.flickr.com/photos/64549790@N00/2373235338/"&gt;&lt;img src="http://static.flickr.com/2046/2373235338_7a1f654db7_m.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 6:&lt;br /&gt;&lt;a title="blogger-oneatatime-03.png" href="http://www.flickr.com/photos/64549790@N00/2373244588/"&gt;&lt;img src="http://static.flickr.com/2006/2373244588_a1e5fef19e_m.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;a title="backpackit-one-at-a-time.png" href="http://www.flickr.com/photos/64549790@N00/2372319279/"&gt;&lt;img src="http://static.flickr.com/2384/2372319279_251dc71429_m.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;But this does show up in other places with varying degrees of annoyance. &lt;strike&gt;Often there is no way to do a bulk operation like delete all items. Here is an example from Google Reader.&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;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.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/thescottclan/2372337527/" title="greader-one-at-a-time.png by billwscott, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3135/2372337527_815ba0caf4.jpg" alt="greader-one-at-a-time.png" height="218" width="500" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To delete you have to click the trash can icon. For each click you must confirm the delete.&lt;br /&gt;&lt;br /&gt;&lt;a title="greader-one-at-a-time-confirm.png" href="http://www.flickr.com/photos/64549790@N00/2373182608/"&gt;&lt;img src="http://static.flickr.com/3022/2373182608_8fa4e82935_m.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strike&gt;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 :-)&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;There is also a mixture of interaction idioms employed on the same page:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Direct In Page Action.&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Delete. Action happens immediately when you click on trash can tool. Follows the One at a Time anti-pattern.&lt;/li&gt;&lt;li&gt;Rename. Action happens immediately when you click on 'Rename'. Follows the One at a Time anti-pattern.&lt;/li&gt;&lt;li&gt;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.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Action on Selection.&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;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).&lt;/li&gt;&lt;li&gt;Unsubscribe. The Unsubscribe operates on selected items (not to be confused with the visible filtered items).&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;It's not all bad to mix these idiom styles. I think the use of a trashcan for unsubscribe is what is most confusing.&lt;br /&gt;&lt;br /&gt;Even with the bad labeling this is better than Google Blogger which provides me no way to delete except one-at-a-time.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;p style="text-align: right; font-size: 8px"&gt;Blogged with &lt;a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new"&gt;Flock&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/260568107/anti-pattern-one-at-time-google-blogger.html" title="Anti-Pattern: One at a Time - Google Blogger, Reader and Backpackit" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=99241944498631916" title="3 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/99241944498631916/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/99241944498631916" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/99241944498631916" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/03/anti-pattern-one-at-time-google-blogger.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-7392970328719450894</id><published>2008-02-26T15:26:00.001-08:00</published><updated>2008-03-30T23:13:13.028-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="user_experience" /><title type="text">Pattern: Refining Search</title><content type="html">&lt;a href="http://designgenie.org/"&gt;Theresa Neil&lt;/a&gt; has another &lt;a href="http://theresaneil.wordpress.com/2008/02/23/the-ultra-rich-search-experience/"&gt;great post this time on The Ultra Rich Search Experience&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;She finishes up the article with a stab at redesigning the &lt;a href="http://carmax.com/"&gt;carmax.com&lt;/a&gt; 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).&lt;br /&gt;&lt;br /&gt;&lt;a title="carmax-original.png" href="http://theresaneil.wordpress.com/2008/02/23/the-ultra-rich-search-experience/"&gt;&lt;img src="http://static.flickr.com/3274/2294576736_cf3bee7c22_m.jpg" border="0" /&gt;&amp;nbsp;&amp;nbsp; &lt;img src="http://theresaneil.files.wordpress.com/2008/02/carmax-search-results.png" style="width: 244px; height: 209px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Theresa applied a real-time, iterative filter refinement ala &lt;/span&gt;&lt;a href="http://roost.com/"&gt;roost.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;Refine in real-time&lt;/font&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;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?&lt;br /&gt;&lt;br /&gt;This is the ebay model. While it does a good utilitarian job of refinement... it is painful to experience.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7kGv7MUDst8&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/7kGv7MUDst8&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;eBay requires you to hit the submit and get a refresh to see next iteration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;Avoid &lt;a href="http://looksgoodworkswell.blogspot.com/2008/03/anti-pattern-one-at-time-google-blogger.html"&gt;one-at-a-time&lt;/a&gt; experience&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/0oCum8m5AD0&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/0oCum8m5AD0&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;In Y! Teachers you can click multiple filters without a reload. Waits for activity to stop.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;Keep it smooth&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;Make the filters easy to Tweak&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;Make the filter controls easy to manipulate&lt;/font&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/v4p6_WYhmoI&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/v4p6_WYhmoI&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Roost provides nice filters that are easy to work with&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;Keep the Context&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/LNtLEKqplLQ&amp;rel=1"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/LNtLEKqplLQ&amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Y! Autos Car Finders uses large, klunky collapsible areas partly to hide a very large set of filters&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;Make it easy undo filtering&lt;/font&gt;&lt;br /&gt;Just an undo all filters is a nice way to start a search over. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://roost.com/"&gt;&lt;img src="http://static.flickr.com/3244/2294251163_fd3e76de85_m.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Roost has a simple reset&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold;" size="4"&gt;Provide a way to save &amp;amp; compare items for later&lt;/font&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://roost.com/"&gt;&lt;img src="http://static.flickr.com/2242/2294258555_b8cce7f2df_m.jpg" /&gt;&lt;/a&gt;&lt;p style="text-align: right; font-size: 8px"&gt;Blogged with &lt;a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new"&gt;Flock&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/241772091/pattern-refining-search.html" title="Pattern: Refining Search" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=7392970328719450894" title="8 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/7392970328719450894/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/7392970328719450894" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/7392970328719450894" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/02/pattern-refining-search.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-1918823859323296501</id><published>2008-02-26T10:38:00.001-08:00</published><updated>2008-03-30T23:07:44.129-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="antipatterns" /><category scheme="http://www.blogger.com/atom/ns#" term="conferences" /><title type="text">Anti-Patterns: Talk at eBig 2008</title><content type="html">Had a great time &lt;a href="http://www.ebig.org/sig/sig.aspx?SIGid=42&amp;amp;EventID=894&amp;amp;old=y"&gt;last night&lt;/a&gt; giving a talk at &lt;a href="http://ebig.org/"&gt;eBig&lt;/a&gt;, forum for Web Devs &amp;amp; Designers in Emeryville. Nice attendance. Lively discussion and great Q&amp;amp;A afterwards. You can find a &lt;a href="http://billwscott.com/share/presentations/2008/ebig/AntiPatterns2008.pdf"&gt;PDF version of the talk online&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a title="pres-cover-antipatterns.png" href="http://billwscott.com/share/presentations/2008/ebig/AntiPatterns2008.pdf"&gt;&lt;img src="http://farm4.static.flickr.com/3116/2293711827_d9f5dd3a87_o.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I continue to refine this talk on anti-patterns. The &lt;a href="http://www.uie.com/events/web_app_summit/2008/day2/#scott"&gt;next time I present this&lt;/a&gt; is at Jared Spool's &lt;a href="http://www.uie.com/events/web_app_summit/2008/"&gt;Web App Summit 2008&lt;/a&gt; in Coronado Island, CA.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="text-align: right; font-size: 8px"&gt;Blogged with &lt;a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new"&gt;Flock&lt;/a&gt;&lt;/p&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/241644841/ebig-talk-slides-available.html" title="Anti-Patterns: Talk at eBig 2008" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=1918823859323296501" title="3 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/1918823859323296501/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/1918823859323296501" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/1918823859323296501" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/02/ebig-talk-slides-available.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-3694505036855661628</id><published>2008-02-08T10:24:00.000-08:00</published><updated>2008-02-26T15:32:48.410-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="coolstuff" /><title type="text">Online Advertising Stunt</title><content type="html">Pretty fun stunt. Clever use of animation. Kind of a &lt;a href="http://en.wikipedia.org/wiki/Rube_Goldberg"&gt;Rube Goldberg&lt;/a&gt; effect.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://producten.hema.nl/"&gt;&lt;img src="http://billwscott.com/share/blog/hema-site.png" alt="Hema Promo Site" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://producten.hema.nl/"&gt;Try it out&lt;/a&gt;. It's for their main site &lt;a href="http://hema.nl/"&gt;http://hema.nl&lt;/a&gt;. Certainly something viral. I mean I'm blogging about a &lt;strike&gt;dutch catalog company&lt;/strike&gt; store in the Netherlands!</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/231777148/online-advertising-stunt.html" title="Online Advertising Stunt" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=3694505036855661628" title="2 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/3694505036855661628/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/3694505036855661628" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/3694505036855661628" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/02/online-advertising-stunt.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-6882327465884341698</id><published>2008-02-08T09:49:00.000-08:00</published><updated>2008-03-30T23:13:13.029-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="digest" /><category scheme="http://www.blogger.com/atom/ns#" term="coolstuff" /><category scheme="http://www.blogger.com/atom/ns#" term="user_experience" /><title type="text">Roundup: Feb 8, 2008</title><content type="html">&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Javascript and CSS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ejohn.org/blog/the-performance-paradox/" title="John Resig -   The Performance Paradox"&gt;John Resig -   The Performance Paradox&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ajaxian.com/archives/jquery-ui-and-jquery-enchant-alpha-versions-released-today" title="Ajaxian » jQuery UI and jQuery Enchant Alpha Versions Released Today"&gt;Ajaxian » jQuery UI and jQuery Enchant Alpha Versions Released Today&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.danwebb.net/2008/2/8/event-delegation-made-easy-in-jquery" title="danwebb.net - Event Delegation Made Easy In jQuery"&gt;danwebb.net - Event Delegation Made Easy In jQuery&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://webkit.org/blog/156/queryselector-and-queryselectorall/" title="Surfin’ Safari - Blog Archive  » querySelector and querySelectorAll"&gt;Surfin’ Safari - Blog Archive  » querySelector and querySelectorAll&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ejohn.org/blog/tracing-javascript/" title="John Resig -   Tracing JavaScript"&gt;John Resig -   Tracing JavaScript&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ejohn.org/blog/library-loading-speed/" title="John Resig -   JavaScript Library Loading Speed"&gt;John Resig -   JavaScript Library Loading Speed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/ajaxian/%7E3/230064232/firebug-11-and-getfirebugcom" title="Ajaxian » Firebug 1.1 and getfirebug.com"&gt;Ajaxian » Firebug 1.1 and getfirebug.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ejohn.org/blog/sub-pixel-problems-in-css/" title="John Resig -   Sub-Pixel Problems in CSS"&gt;John Resig -   Sub-Pixel Problems in CSS&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sitepoint.com/blogs/2008/02/07/css-reset-reloaded-again/" title="SitePoint Blogs » CSS Reset Reloaded. Again."&gt;SitePoint Blogs » CSS Reset Reloaded. Again.&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Design&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sitepoint.com/blogs/2008/02/07/oprahs-book-club-i-dont-think-so/" title="SitePoint Blogs » Oprah’s Book Club? I don’t think so…"&gt;SitePoint Blogs » Oprah’s Book Club? I don’t think so…&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Cool Stuff&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.techcrunch.com/2008/02/08/farecast-now-offers-international-flight-price-predictions/" title="Farecast Now Offers International Flight Price Predictions"&gt;Farecast Now Offers International Flight Price Predictions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://radar.oreilly.com/archives/2008/02/pmog_gamelayers_augmented_reality.html" title="PMOG as a kind of Augmented Reality"&gt;PMOG as a kind of Augmented Reality&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/readwriteweb/%7E3/231393947/friendfeed.php" title="FriendFeed: Ex-Googlers Create Social Network Experience Using Feeds - ReadWriteWeb"&gt;FriendFeed: Ex-Googlers Create Social Network Experience Using Feeds - ReadWriteWeb&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.regdeveloper.co.uk/2008/02/02/google_android_developers_view/" title="Google Android - a sneak preview | Reg Developer"&gt;Google Android - a sneak preview | Reg Developer&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Funny&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.mapofspringfield.com/map/index.html" title="map of springfield"&gt;map of springfield&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.5min.com/Video/How-to-negotiate---Tips-for-Yahoo-5794173" title="5min - How to Negotiate - Tips for Yahoo! - Video"&gt;5min - How to Negotiate - Tips for Yahoo! - Video&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.flickr.com/groups/microsoft-keep-your-evil-grubby-hands-off-our-flickr/pool/" title="Flickr: The MICROSOFT:  KEEP YOUR EVlL GRUBBY HANDS OFF OF OUR FLICKR Pool"&gt;Flickr: The MICROSOFT:  KEEP YOUR EVlL GRUBBY HANDS OFF OF OUR FLICKR Pool&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Interesting News&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/oreilly/radar/atom/%7E3/230922210/tvnz_gives_up_o.html" title="Television New Zealand Gives Up on DRM"&gt;Television New Zealand Gives Up on DRM&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/OmMalik/%7E3/231665873/" title="Rural Texas Gets Superfast Wireless Broadband - GigaOM"&gt;Rural Texas Gets Superfast Wireless Broadband - GigaOM&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/231750212/weekly-roundup-feb-8-2008.html" title="Roundup: Feb 8, 2008" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=6882327465884341698" title="1 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/6882327465884341698/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/6882327465884341698" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/6882327465884341698" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/02/weekly-roundup-feb-8-2008.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-1601751249236613696</id><published>2008-02-04T10:51:00.000-08:00</published><updated>2008-03-30T23:13:13.030-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="digest" /><category scheme="http://www.blogger.com/atom/ns#" term="coolstuff" /><category scheme="http://www.blogger.com/atom/ns#" term="user_experience" /><title type="text">Roundup: Feb 1, 2008</title><content type="html">&lt;span style="font-weight: bold;"&gt;Some interesting announcements around jQuery&lt;/span&gt;&lt;br /&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/ajaxian/%7E3/225840258/jquery-validation-plugin-v12-updated" title="Ajaxian » jQuery Validation Plugin v1.2 Updated"&gt;Ajaxian » jQuery Validation Plugin v1.2 Updated&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ajaxian.com/archives/jquery-ui-lead-is-hired-by-liferay" title="Ajaxian » jQuery UI Lead is hired by Liferay"&gt;Ajaxian » jQuery UI Lead is hired by Liferay&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/ajaxian/%7E3/225868400/dreamweaver-users-rejoice-support-for-js-libs-now-available" title="Ajaxian » Dreamweaver Users Rejoice! Support for JS Libs Now Available."&gt;Ajaxian » Dreamweaver Users Rejoice! Support for JS Libs Now Available.&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;General interest&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/ajaxian/%7E3/225806929/yui-grid-css-and-grid-builder" title="Ajaxian » YUI Grid CSS and Grid Builder"&gt;Ajaxian » YUI Grid CSS and Grid Builder&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.julienlecomte.net/blog/2008/01/42/" title="Julien Lecomte’s Blog » YUI Compressor Version 2.3 Now Available"&gt;Julien Lecomte’s Blog » YUI Compressor Version 2.3 Now Available&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.molly.com/2008/01/28/w3c-html5-working-draft-published/" title="molly.com » W3C HTML5 Working Draft Published"&gt;molly.com » W3C HTML5 Working Draft Published&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/readwriteweb/%7E3/224730759/mobile_firefox_opera_mini_new_browser_war.php" title="The New Browser War: Mobile Firefox vs. Opera Mini - ReadWriteWeb"&gt;The New Browser War: Mobile Firefox vs. Opera Mini - ReadWriteWeb&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/ajaxian/%7E3/225904823/rhino-on-rails-javascript-mvc-on-the-server" title="Ajaxian » Rhino on Rails: JavaScript MVC on the server"&gt;Ajaxian » Rhino on Rails: JavaScript MVC on the server&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/readwriteweb/%7E3/225652760/have_facebook_apps_peaked_in_popularity.php" title="Have Facebook Apps Peaked in Popularity? - ReadWriteWeb"&gt;Have Facebook Apps Peaked in Popularity? - ReadWriteWeb&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://reference.sitepoint.com/css" title="CSS Reference"&gt;SitePoint CSS Reference&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Design&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://ajaxian.com/archives/seek-or-show-two-design-paradigms-for-lots-of-data" title="Ajaxian » Seek or Show: Two Design Paradigms for Lots of Data"&gt;Ajaxian » Seek or Show: Two Design Paradigms for Lots of Data&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://feeds.feedburner.com/%7Er/ajaxian/%7E3/225166643/dominos-changing-the-feedback-model" title="Ajaxian » Dominos: Changing the feedback model"&gt;Ajaxian » Dominos: Changing the feedback model&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.edwardtufte.com/bboard/iphone-video.adp" title="iPhone video"&gt;Tufte iPhone video&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;And on the funny side&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://datelinehollywood.com/archives/2008/01/28/congress-and-president-bush-agree-on-netflix-rebates-for-americans-during-writers-strike/" title="Dateline Hollywood  » Blog Archive   » CONGRESS AND PRESIDENT BUSH AGREE ON NETFLIX REBATES FOR AMERICANS DURING WRITERS STRIKE"&gt;Dateline Hollywood  » Blog Archive   » CONGRESS AND PRESIDENT BUSH AGREE ON NETFLIX REBATES FOR AMERICANS DURING WRITERS STRIKE&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/229066062/weekly-roundup-feb-1-2008.html" title="Roundup: Feb 1, 2008" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=1601751249236613696" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/1601751249236613696/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/1601751249236613696" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/1601751249236613696" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/02/weekly-roundup-feb-1-2008.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-3257874073378952867</id><published>2008-01-29T14:46:00.000-08:00</published><updated>2008-03-30T23:13:13.031-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="reference" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="user_experience" /><title type="text">Design Paradigms for Lots of Data</title><content type="html">&lt;a href="http://designgenie.org"&gt;Theresa Neil&lt;/a&gt; (longtime friend, co-conspirator on &lt;a href="http://openrico.org"&gt;Open Rico&lt;/a&gt;, Sabre UX team and various other projects) has posted her &lt;a href="http://theresaneil.wordpress.com/"&gt;first blog&lt;/a&gt; :-) Yes folks there are still a number of really smart people who don't take the time to blog.&lt;br /&gt;&lt;br /&gt;Anyway she has a very nice post about &lt;a href="http://theresaneil.wordpress.com/2008/01/29/seek-or-show-two-design-paradigms-for-lots-of-data/"&gt;two design paradigms for navigating through lots of data&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: black;"&gt;The Seek Paradigm: Have the user ask for what they want.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: black;"&gt;The Show Paradigm: Display everything up front, and let the user explore and organize it.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;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.</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/225524803/design-paradigms-for-lots-of-data.html" title="Design Paradigms for Lots of Data" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=3257874073378952867" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/3257874073378952867/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/3257874073378952867" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/3257874073378952867" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/01/design-paradigms-for-lots-of-data.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-4479800761410441779</id><published>2008-01-25T07:08:00.000-08:00</published><updated>2008-06-22T13:47:21.366-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jobposting" /><category scheme="http://www.blogger.com/atom/ns#" term="netflix" /><category scheme="http://www.blogger.com/atom/ns#" term="career" /><title type="text">Really Super Cool Job Opening @ Netflix</title><content type="html">&lt;span style="font-weight: bold;"&gt;Update: Position is filled.&lt;br /&gt;&lt;strike&gt;&lt;br /&gt;We are looking for the following engineer:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;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.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;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.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Also, &lt;span style="font-style: italic;"&gt;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.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you know of anyone that fits either of these jobs please contact me: b dot scott at yahoo dot com.&lt;br /&gt;&lt;/strike&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/222966061/really-super-cool-job-opening-netflix.html" title="Really Super Cool Job Opening @ Netflix" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=4479800761410441779" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/4479800761410441779/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/4479800761410441779" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/4479800761410441779" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/01/really-super-cool-job-opening-netflix.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-1629883626676679062</id><published>2008-01-18T12:55:00.001-08:00</published><updated>2008-06-22T13:48:31.811-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jobposting" /><category scheme="http://www.blogger.com/atom/ns#" term="netflix" /><category scheme="http://www.blogger.com/atom/ns#" term="career" /><title type="text">More New Jobs at Netflix</title><content type="html">&lt;strong&gt;Update: Positions have been filled.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strike&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Here are the jobs currently open:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix1970"&gt;Senior User Interface Designer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix1963"&gt;Senior Interactive Designer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix1964"&gt;Senior Visual Concept Designer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jobs.netflix.com/DetailFlix.asp?flix1973"&gt;Senior Software Engineer—Community Systems (Developer APIs)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;&lt;/strike&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/219081708/more-new-jobs-at-netflix.html" title="More New Jobs at Netflix" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=1629883626676679062" title="0 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/1629883626676679062/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/1629883626676679062" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/1629883626676679062" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/01/more-new-jobs-at-netflix.html</feedburner:origLink></entry><entry><id>tag:blogger.com,1999:blog-11599526.post-873342497546769838</id><published>2008-01-11T12:48:00.000-08:00</published><updated>2008-03-30T23:13:13.031-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="patterns" /><category scheme="http://www.blogger.com/atom/ns#" term="antipatterns" /><category scheme="http://www.blogger.com/atom/ns#" term="design" /><category scheme="http://www.blogger.com/atom/ns#" term="user_experience" /><title type="text">Anti-Pattern: Chart Junk - Virtual Pizza Pie Chart - High Tech Chartjunk</title><content type="html">Another anti-pattern we should consider relates to how we use visualizations or present charts.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://edwardtufte.com"&gt;Edward Tufte&lt;/a&gt; calls the clutter that often obscures charts or visualizations &lt;a href="http://en.wikipedia.org/wiki/Chartjunk"&gt;chartjunk&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;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, &lt;a href="http://www.cnn.com/CNN/Programs/anderson.cooper.360/blog/"&gt;Anderson Cooper&lt;/a&gt; introduced "&lt;a href="http://www.cnn.com/CNN/Programs/anderson.cooper.360/blog/2008/01/andersons-view-iowa-and-pizza.html"&gt;The Magic Pie Chart&lt;/a&gt;". 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.&lt;br /&gt;&lt;br /&gt;&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/L6CTyOWTcCA&amp;amp;rel=1"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/L6CTyOWTcCA&amp;amp;rel=1" type="application/x-shockwave-flash" wmode="transparent" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Here is a more traditional example of chartjunk from Tufte's site.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=0000Jr" target="_blank"&gt;&lt;img style="width: 320px;" src="http://www.edwardtufte.com/bboard/images/0000MK-421.jpg" /&gt;&lt;/a&gt;</content><link rel="alternate" type="text/html" href="http://feeds.feedburner.com/~r/LooksGoodWorksWell/~3/215200932/virtual-pizza-pie-chart-high-tech.html" title="Anti-Pattern: Chart Junk - Virtual Pizza Pie Chart - High Tech Chartjunk" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=11599526&amp;postID=873342497546769838" title="3 Comments" /><link rel="replies" type="application/atom+xml" href="http://looksgoodworkswell.blogspot.com/feeds/873342497546769838/comments/default" title="Post Comments" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/873342497546769838" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/11599526/posts/default/873342497546769838" /><author><name>Bill Scott</name><uri>http://www.blogger.com/profile/12024727845077253669</uri><email>noreply@blogger.com</email></author><feedburner:origLink>http://looksgoodworkswell.blogspot.com/2008/01/virtual-pizza-pie-chart-high-tech.html</feedburner:origLink></entry></feed>
