<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Sea of Ideas &#187; User Experience</title>
	<atom:link href="http://paulbakaus.com/category/user-experience/feed/" rel="self" type="application/rss+xml" />
	<link>http://paulbakaus.com</link>
	<description>The personal blog of Paul Bakaus</description>
	<lastBuildDate>Mon, 19 Jul 2010 12:47:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=3.0-alpha</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The issue with progressive enhancement</title>
		<link>http://paulbakaus.com/2010/04/12/the-issue-with-progressive-enhancement/</link>
		<comments>http://paulbakaus.com/2010/04/12/the-issue-with-progressive-enhancement/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 10:50:25 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[User Experience]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=334</guid>
		<description><![CDATA[If you have been following my latest tweets, you&#8217;ll notice this is simply the execution of a longer explanation why I think concepts such as progressive enhancement are often very problematic. In the style of a ppk rant, and with the fear of making people angry, disappointed, mad, excited or unbelievably happy, here it goes.
What [...]]]></description>
			<content:encoded><![CDATA[<p>If you have been following my latest tweets, you&#8217;ll notice this is simply the execution of a longer explanation why I think concepts such as progressive enhancement are often very problematic. In the style of a ppk rant, and with the fear of making people angry, disappointed, mad, excited or unbelievably happy, here it goes.</p>
<h3>What is Progressive Enhancement?</h3>
<p>First, let&#8217;s discuss what I&#8217;m actually talking about. Progressive enhancement is a programming concept that simply says you should start building your product or website with the &#8220;Lowest common multiple approach&#8221;, so it runs in browsers like Internet Explorer 6 or with JavaScript disabled, and then continue to enhance functionality, interaction and UI for more capable browsers, devices and users. When well executed, this means that your site is targeted and usable by a maximum audience.</p>
<h3>..but isn&#8217;t this awesome?</h3>
<p>Indeed it is! That&#8217;s what&#8217;s great about progressive enhancement. It makes sure your website runs on every device or browser if executed <em>well</em>, which is definitely something admirable. It also has a multitude of positive side effects – such as possible accessibility benefits and it is really well suited for a junior programmer, as it teaches the layers of a web app in a direct way. … so what am I complaining about?</p>
<h3>PE limits creativity</h3>
<p>My first thesis is actually very easy to explain and to follow. So you&#8217;re a student of a famous painter, and you&#8217;re learning how to draw basic forms. After the art class, the teacher decides to draw something in front of the class to show off his skills. Unfortunately, all canvasses are used by the class, so he has to pick yours and paint on top of it. I&#8217;m pretty sure he succeeded in making it awesome based on your painting, <strong>but what if he had a clear white canvas to start with</strong>?</p>
<p>I&#8217;m positive that most people will come to my conclusion that the second painting would have been truly his, unleashing all his creativity. The situation is, as you might imagine, extremely similar with progressive enhancement. Since you always improve upon the lowest layer of your implementation, you&#8217;re not inventing new user interfaces, new metaphors or interactions – you&#8217;re merely improving the old ones. Even more unfortunate is the fact that we accepted to live with this fact. It is pretty likely you wouldn&#8217;t even have noticed this if you didn&#8217;t read about it here.</p>
<p>So we want to start drawing on a clear white canvas. Wouldn&#8217;t Graceful Degradation fit the bill?</p>
<h3>Graceful degradation</h3>
<p>Graceful degradation is basically the opposite of PE. It says &#8220;start on a free canvas and build crazy shit, then make sure it runs in less charming situations&#8221;. While in theory definitely a great improvement to PE, it doesn&#8217;t always work out, since there are many complex UX patterns and ideas that cannot be reproduced easily in a lower metaphor. In general you could therefore say that it also simply requires a lot more time than PE. That being said, I still use GD to a great extent in many of my projects, and I&#8217;m pretty happy with most outcomes.</p>
<h3>You are the problem!</h3>
<p>Uh well&#8230;not personally. Let me explain: I fully endorse the concepts of Progressive Enhancement and Graceful Degradation. In fact, PE for instance is a vital concept for jQuery UI to follow and implement. The real problem comes with the usage. Web developers misuse PE and GD to a great extent. And it is very easy to follow the wrong path if every &#8220;Best practise&#8221; powerpoint slide tells you to always follow PE. Let me make that crystal clear: <strong>&#8220;Always follow&#8221; = guaranteed misuse of PE</strong>.</p>
<h3>So what? I should just screw IE6?</h3>
<p>Actually yes, you should screw IE6. …errr, let&#8217;s start over: First off, in many instances, you will never need an alternative. If you&#8217;re targetting iPhone Safari as platform for your web app for instance, or if you&#8217;re working on an intranet application to be used with only a single browser. However, there is a great alternative to PE &amp; GD: Instead of adding layers on top of your current site or app and let it become a big fat hard to maintain blurb, how about developing a second client? I will argue that it doesn&#8217;t take longer than the GD approach, and quite important players have done so: Gmail, anyone?</p>
<h3>The bottom line: Start thinking!</h3>
<p>As mentioned, it is really not a problem of the concepts themselves, but of how they&#8217;re used. If you&#8217;re reading this, give it some serious thought and start thinking yourself. Think back in time and look at the projects you&#8217;ve done so far. Is there a chance to improve your workflow by not following every best practice advise blindly? I bet!<br />
<strong style="visibility:hidden"><a href="http://listicles.thelmagazine.com/shrek_forever_after.html">shre forever after</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2010/04/12/the-issue-with-progressive-enhancement/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The coverflickr</title>
		<link>http://paulbakaus.com/2010/02/04/the-coverflickr/</link>
		<comments>http://paulbakaus.com/2010/02/04/the-coverflickr/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 16:40:12 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=328</guid>
		<description><![CDATA[When I was refreshing my labs and updated them to fit the corporate Dextrose design (http://labs.dextrose.com), I quickly figured that I wrote quite a few plugins in the past that still deserve a lot more attention, because they are..well&#8230; kind of awesome.
In order to receive more attention, plugins like Coverflow need a kickass demo. Before, [...]]]></description>
			<content:encoded><![CDATA[<p>When I was refreshing my labs and updated them to fit the corporate Dextrose design (<a href="http://labs.dextrose.com">http://labs.dextrose.com</a>), I quickly figured that I wrote quite a few plugins in the past that still deserve a lot more attention, because they are..well&#8230; kind of awesome.</p>
<p>In order to receive more attention, plugins like Coverflow need a kickass demo. Before, I only had small image demos in a small canvas, which weren&#8217;t quite as effective, so I decided it&#8217;s time for a killer mashup: Meet the <a href="http://labs.dextrose.com/coverflow/demo/slider.html">Coverflickr</a>.</p>
<p><a href="http://labs.dextrose.com/coverflow/demo/slider.html"><img src="http://paulbakaus.com/wp-content/uploads/2010/02/coverflickr.jpg" alt="Coverflickr in action" title="Coverflickr" width="440" height="287" class="alignnone size-full wp-image-329" /></a></p>
<p>The <a href="http://labs.dextrose.com/coverflow/demo/slider.html">Coverflickr</a> is a mashup experiment to show the beauty and flexibility of the Coverflow plugin while making use of a multitude of new HTML5 features. It&#8217;s an interface for browsing Flickr&#8217;s interesting images in a graphically sophisticated way. It is best experienced in Safari (even better : Latest webkit nightly!) or Chrome, although it will run smoothly in Firefox 3.5+ (minus preview animations and reflections). Here&#8217;s the techniques that are being used in the <a href="http://labs.dextrose.com/coverflow/demo/slider.html">Coverflickr</a> for those who care:</p>
<ul>
<li>CSS box reflections combined with CSS gradients for the reflections</li>
<li>CSS Transforms for the preview mode and within the coverflow plugin</li>
<li>CSS Transitions for the preview mode and the alternate mode switching animation</li>
<li>YQL for the fetching of the images</li>
</ul>
<p>There are a couple not immediately visible but pretty neat features going on here. For them, I had to significantly alter the coverflow plugin (soon to be released in a new version):</p>
<ul>
<li><b>Endless browsing.</b> When coming to the right end, it fetches more images, appends them to the list and refreshes the coverflow with the new method &#8220;refresh&#8221;</li>
<li><b>Alternate transformations.</b>Click on the bottom link &#8220;Alternate version&#8221; and the transformation will animate live into another one now using rotations. The coverflow plugins transformations can now be exchanged on the fly through the &#8220;transformation&#8221; option.</li>
</ul>
<p>This has been an incredibly fun demo to do, and I realized it wouldn&#8217;t be possible to do so without the help of the Webkit project, pushing the web like nobody else. I therefore dedicate this demo to the Webkit team, my personal heros that are not afraid to pioneer new features for the greater (web developer) good.</p>
<p>Enjoy, and let me know if you like what you see (also if you don&#8217;t, but please be kind) !</p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2010/02/04/the-coverflickr/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Underestimated UI techniques: Morphing</title>
		<link>http://paulbakaus.com/2009/10/08/underestimated-ui-techniques-morphing/</link>
		<comments>http://paulbakaus.com/2009/10/08/underestimated-ui-techniques-morphing/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 14:38:02 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=251</guid>
		<description><![CDATA[When I design new applications, I realized I use a couple patterns that I haven&#8217;t seen in much use elsewhere, so I&#8217;ll start to blog about them. The first pattern in this series is called morphing.
What is morphing?
Morphing essentially describes a state change on an element, transforming it into another. Many UI frameworks have helpers [...]]]></description>
			<content:encoded><![CDATA[<p>When I design new applications, I realized I use a couple patterns that I haven&#8217;t seen in much use elsewhere, so I&#8217;ll start to blog about them. The first pattern in this series is called morphing.</p>
<h3>What is morphing?</h3>
<div id="attachment_253" class="wp-caption alignleft" style="width: 310px"><a href="http://paulbakaus.com/wp-content/uploads/2009/10/bush-obama-morphing.jpg"><img src="http://paulbakaus.com/wp-content/uploads/2009/10/bush-obama-morphing-300x72.jpg" alt="Bush-Obama morphing" title="bush-obama-morphing" width="300" height="72" class="size-medium wp-image-253" /></a><p class="wp-caption-text">Bush-Obama morphing</p></div>
<p>Morphing essentially describes a state change on an element, transforming it into another. Many UI frameworks have helpers for morphing, usually in the form of class animations. jQuery UI has made it transparent to animate jQuery&#8217;s class manipulation functions like <a href="http://jqueryui.com/demos/addClass/">addClass</a>, script.aculo.us has Effect.morph which essentially <a href="http://wiki.github.com/madrobby/scriptaculous/effect-morph">does the same</a>.</p>
<h3>Why is it useful?</h3>
<p>From a higher level UI perspective, morphing really describes that one element becomes another based on the context. It is essentially very powerful because it gives your users a visual cue what is happening, how is happening and why it is happening. Instead of doing an instant change, the users eye can follow the motion and you therefore give them a better feeling of control over the whole situation.</p>
<h3>Show me!</h3>
<p>Let&#8217;s do an example. While working on smart.fm&#8217;s new item builder, I had to visualize the following steps: Clicking on a button to add text, then displaying a text input, and hiding the button since you cannot add text twice. Usually, it would roughly look like this:</p>
<div class="canvas" style="padding: 10px; margin: 5px; border: 1px solid #eee; position: relative; height: 80px;">
<button class="ui-state-default ui-corner-all" style="position: absolute; top: 40px; left: 20px;" onclick="jQuery(this).hide().parent().find('input').show()[0].focus(); ">Hit me!</button></p>
<input type="text" style="position: absolute; top: 40px; left: 140px; display: none;"  />
</div>
<p>However, with morphing, it not only looks hot but solves the issue in style:</p>
<div class="canvas" style="padding: 10px; margin: 5px; border: 1px solid #eee; position: relative; height: 80px;">
<div class="ui-state-default ui-corner-all" style="position: absolute; top: 40px; left: 20px; padding: 2px 6px 3px 6px;" onclick="jQuery(this).animate({ left: 140, background: '#fff', width: 100 }, 1000); jQuery('input', this).animate({ opacity: 'show' }, 1000)[0].focus();">Hit me!<br />
<input type="text" style="position: absolute; top: -1px; left: 4px; display: none; width: 100px; border: 1px solid black;"  /></div>
</div>
<p>This was a particularly lazy example, since it doesn&#8217;t even truly morph one item into another &#8211; it just animates the width of the button and fades in the input on top. But visually, the element clearly transforms.</p>
<h3>Morphing in the wild: Inline editing</h3>
<p>One technique that was is heavily inspired by morphing is inline editing. Essentially, you click on a paragraph or element, and it transforms into and editable element. Most solutions don&#8217;t actually morph, but you get the idea. There are thousands of other usecases out there waiting to be discovered, and if you have some, I&#8217;d love it of you share them with me!</p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2009/10/08/underestimated-ui-techniques-morphing/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Meet the Uberplayer.</title>
		<link>http://paulbakaus.com/2009/05/07/meet-the-uberplayer/</link>
		<comments>http://paulbakaus.com/2009/05/07/meet-the-uberplayer/#comments</comments>
		<pubDate>Thu, 07 May 2009 10:11:25 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[coverflow]]></category>
		<category><![CDATA[fluid]]></category>
		<category><![CDATA[player]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=160</guid>
		<description><![CDATA[
Finally I can present you one of my newer interface experiments that has grown to something quite nice in the meantime.  With the transition from small movieclips to longer and bigger full length flicks, sites like Youtube still don&#8217;t really get the idea that the movie player has to give the user space, feel a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://paulbakaus.com/lab/interface/uberplayer" target="_blank"><img class="alignnone size-full wp-image-161" title="uberplayer" src="http://paulbakaus.com/wp-content/uploads/2009/05/uberplayer.png" alt="uberplayer" width="430" height="222" /></a></p>
<p>Finally I can present you one of my newer <a href="http://paulbakaus.com/laboratory/">interface experiments</a> that has grown to something quite nice in the meantime.  With the transition from small movieclips to longer and bigger full length flicks, sites like <a href="http://youtube.com">Youtube</a> still don&#8217;t really get the idea that the movie player has to give the user space, feel a bit like a theater for a overall greater experience. What we still receive is a bloated page with thousands of comments below, tags and whatever &#8211; things the user <strong>really</strong> doesn&#8217;t need or want to see while watching. This is why I started a new experiment &#8211; <strong>building a movieplayer for the web that doesn&#8217;t suck</strong>.</p>
<h3>Shows only what&#8217;s needed</h3>
<p>The first idea of the interface was that everything that&#8217;s not required during movie playback will simply not be visible. This effectively means that if the video is playing, <em>nothing</em> else should be shown. Under that requirement, I thought it will also need at least movie information somewhere, and a search interface.</p>
<p>The <em>Uberplayer</em> has slide-in elements for controlling the video. Every function or visibility can be controlled through either the mouse or the keyboard. At initialization and pause, all controls are automatically shown, since you&#8217;re not focussing on the video. During video playback, move your mouse towards the bottom and the search slides in &#8211; move it to the top and you&#8217;ll see current video information and the search bar.</p>
<h3>Coverflow</h3>
<p>I can also proudly state that this is the first time I actually integrated my experimental <a href="http://paulbakaus.com/2008/05/31/coverflow-anyone/">Coverflow</a> plugin into an actual application. After you entered a search term and pressed return, the bottom view slides in and presents the search result thumbnails in a really nice flowing coverflow like view if you are using a <a href="http://en.wikipedia.org/wiki/List_of_web_browsers#KHTML-_and_WebKit-based_browsers" target="_blank">webkit enabled browser</a>. If not, don&#8217;t worry &#8211; the fallback looks nice nontheless! Additionally, the click-through rate is minimized by switching coverflow states on mouse over &#8211; clicking opens the new movie.</p>
<h3>Integration with Youtube</h3>
<p>I choose to integrate with Youtube because it allows me to do searches to their API&#8217;s through their <a href="http://code.google.com/intl/en/apis/youtube/2.0/developers_guide_json.html" target="_blank">JSON API</a>. What does that mean? It means that the <em>Uberplayer</em> is completely backendless, therefore doesn&#8217;t need any server software / logic. It&#8217;s all JavaScript, baby!</p>
<p>The second reason was that Youtube has a nice <a href="http://code.google.com/intl/de-DE/apis/youtube/chromeless_player_reference.html">chromeless player</a>, which worked really well for my kind of interface. The only drawback is that the chromless player doesn&#8217;t support HD playback at this point, but I hope they&#8217;ll give us that feature <a href="http://code.google.com/p/gdata-issues/issues/detail?id=1003" target="_blank">eventually</a>.</p>
<h3>Feature overview</h3>
<p>To get an idea, here&#8217;s a quick walk through all features that are probably worth mentioning and explain how the player works.</p>
<ul>
<li>Full-screen playback at all times (toggle full screen mode on your browser for a better experience)</li>
<li>Fluid slide-in interface (move your mouse towards the bottom or top to blend in controls)</li>
<li>Click on the video to toggle pause state and blend in all controls</li>
<li>Rich keyboard interaction
<ul>
<li>&#8216;<em>down</em>&#8216; toggles the search results view</li>
<li>&#8216;<em>up</em>&#8216; toggles movie information and search bar</li>
<li>&#8216;<em>space</em>&#8216; toggles pause state</li>
<li>&#8216;<em>s</em>&#8216; focusses search bar and let&#8217;s you type in a new search (&#8216;escape&#8217; cancels)</li>
<li>&#8216;<em>left</em>&#8216;,&#8217;<em>right</em>&#8216; let&#8217;s you navivate through search results when the search results view is active</li>
<li>&#8216;<em>return</em>&#8216; opens a new movie when the search results view is active</li>
</ul>
</li>
<li>Automatically generates hash urls that you can bookmark or send to someone &#8211; they will not only open the movie, but also the attached search results</li>
<li>Completely backendless through <a href="http://code.google.com/intl/en/apis/youtube/2.0/developers_guide_json.html" target="_blank">Youtube&#8217;s JSON API</a></li>
</ul>
<h3>What&#8217;s left to do</h3>
<p>This is a very early preview release, so please be merciful. Some things I would like to do for the next version is a playlist manager (sliding in from the left), and if I only could get access to a chromeless <a href="http://vimeo.com">Vimeo</a> player, that would totally kick ass.</p>
<p>Anyway, <a href="http://paulbakaus.com/lab/interface/uberplayer" target="_blank">check it out</a>, and leave a comment!</p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2009/05/07/meet-the-uberplayer/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>The usability series: Responsiveness</title>
		<link>http://paulbakaus.com/2009/04/30/the-usability-series-responsiveness/</link>
		<comments>http://paulbakaus.com/2009/04/30/the-usability-series-responsiveness/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 10:17:25 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[responsiveness]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=158</guid>
		<description><![CDATA[Usability is something I consider a major part of my professional life. I even tend to think of it as the key to any good website or application. If it&#8217;s unusable, it doesn&#8217;t help if it can spit out flying dragons. That&#8217;s why rather than doing one summary post on the fundamentals, I decided to [...]]]></description>
			<content:encoded><![CDATA[<p>Usability is something I consider a major part of my professional life. I even tend to think of it as the key to any good website or application. If it&#8217;s unusable, it doesn&#8217;t help if it can spit out flying dragons. That&#8217;s why rather than doing one summary post on the fundamentals, I decided to discuss one usability pattern at a time and dig into it really deep. As first entry in this series, I decided to go with a key fundamental often forgotten even by the pro&#8217;s &#8211; <strong>responsiveness</strong>.</p>
<h3>What&#8217;s it all about?</h3>
<p>For real people to actually use your application in daily life, it&#8217;s not enough to bundle it with a nice UI and a bunch of cool features, it has to be really responsive as well. The reasoning is simple &#8211; people hate to wait. People hate to wait in<br />
lines (except the British, hehe), they hate to wait for their salary, they hate to wait for the weekend to arrive and they<br />
hate to wait for the next season of their beloved TV series. Ok, sometimes the anger can transform into excitement (and vica versa) &#8211; but raise your hopes too much, this seldom happens in the case of web apps. Yes, people hate to wait after the click.</p>
<p>Responsiveness is often described by <em>how quickly an application reacts upon a user triggered action</em>. Basically <strong>everything we do in the web is interaction</strong> &#8211; the website or application waits for an user action and then replies. There has been already a lot of research on today&#8217;s topic, concluding for instance that people already get the feeling they&#8217;re waiting if the result doesn&#8217;t come up in less than 0.5 seconds. But the answer to the problem is the tricky bit.</p>
<h3>The obvious solution: Performance optimizations</h3>
<p>Many of todays apps and websites are Ajax driven, to the extend that a user initiated action triggers a request to the server. This is why the most obvious solution coming to mind is to<strong> improve the time each request takes</strong>. Be careful though &#8211; this is also exactly why responsiveness is so often forgotten in the frontend planning. People tend to think of it as something non-visual, therefore they let the backend guys do the work.</p>
<p>Now after you speeded up the requests and your backend, you have to take the frontend really serious. The <strong>JavaScript powering your website is often the most visible bottleneck</strong> because it&#8217;s directly happening on the client, even before any backend request can happen. And it&#8217;s not only JavaScript &#8211; heavy usage of CSS Frameworks (especially resets) for instance can horribly slow down any application as well. Remember &#8211; <strong>if your frontend performs bad, the backend guys don&#8217;t even have a chance to make up for it</strong>. Of course I could go into detail how to actually optimize your code, but that&#8217;s content for another blog post.</p>
<h3>Transparency and disguise</h3>
<p>In the last couple years I noticed a general pattern when designing a responsive experience. There are essentially two ways to tackle it: The first is <strong>total transparency</strong> &#8211; the user should <em>never</em> be clueless, and if the application is in a loading state, tell it to your user so he doesn&#8217;t get annoyed too much. The second, and to me the one with almost unlimited potential is<strong> illusion</strong>.</p>
<h3>Fixing the experience without fixing the implementation</h3>
<p>Something only very few people I met realized is that <strong>an application can be improved even without fixing the implementation</strong>. There is really only one thing that matters to the user &#8211; how the application feels. Yes, let me repeat that: Your implementation doesn&#8217;t have to <strong>be</strong> responsive &#8211; it just has to <strong>feel</strong> that way.</p>
<h3>Apple &#8211; masters of illusion</h3>
<p>The best way to describe what I mean by making your application *feel* responsive is through a perfect example. It&#8217;s the best <strong>illusion of responsiveness</strong> I&#8217;ve ever seen so far. I&#8217;m talking about the <strong>iPhone</strong>.</p>
<p>The iPhone runs a very sophisticated operating system based on Mac OS X, with thousands of API&#8217;s for developers to use. Combined with the fact that the iPhone isn&#8217;t running particularly fast hardware (more than a standard cellphone, but way less than any netbook), simple performance optimizations could only get you so far here, and this is is where the magic comes in.</p>
<p>Almost every interaction on the <strong>iPhone uses an animation to transition from one state to another</strong>. You&#8217;ll see animations when you launch or quit applications, when you slide through screens and on many other instances, sometimes so tiny you don&#8217;t realize it. Since they&#8217;re very well integrated into the general flow of the interaction, <strong>they not only excite users but serve as visual cue helpers</strong> that let the user &#8216;grasp&#8217; what&#8217;s happening. But the key is what happens during the animation: Any application you launch or close on the iPhone needs time to initialize and to de-initialize. You guessed it already: It&#8217;s all done when the user is distracted by a beautiful zoom effect. How cool is that?</p>
<p>As a summary: <strong>At the cost of slowing down the operating system</strong> in technical terms (every animation takes a fixed amount of time), Apple improved the whole user experience and <strong>made the iPhone feel extremely responsive</strong>.</p>
<h3>Loading indicators</h3>
<p>As a conclusion to the illusion technique, in 90% of all cases <strong>a loading indicator is evil</strong>. Why on earth would you want to highlight the slow parts of your application? That being said, a loading indicator is always better than a frozen state and a clueless user. As a general rule, <strong>only add a loading indicator to your application if all other improvements fail</strong>. For instance, there are situations where you absolutely can&#8217;t predict when the result will arrive. Imagine a multiplayer game with two players, and you&#8217;re waiting for the other player to select his character. In this case you have to notify the user that the game is waiting for a response.</p>
<p>See you next time!</p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2009/04/30/the-usability-series-responsiveness/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Taking Usability to another level</title>
		<link>http://paulbakaus.com/2008/11/21/taking-usability-to-another-level/</link>
		<comments>http://paulbakaus.com/2008/11/21/taking-usability-to-another-level/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 15:19:38 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[editors]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://paulbakaus.com/?p=84</guid>
		<description><![CDATA[So I love that my main interest is finally a hot topic, and recently, Aza Raskin continued doing a great job evangelizing Usability in web and application design, making it more popular than ever.
However, our efforts to usability are still limited to one single angle: The actual end user experience. While this is unquestionably the [...]]]></description>
			<content:encoded><![CDATA[<p>So I love that my main interest is finally a hot topic, and recently, <a href="http://www.azarask.in/blog/">Aza Raskin</a> continued doing a great job evangelizing Usability in web and application design, making it more popular than ever.</p>
<p>However, our efforts to usability are still <strong>limited to one single angle: The actual end user experience</strong>. While this is unquestionably the most important part, we can&#8217;t ignore another: <strong>Usability for developers</strong>. Since tackling the whole world of development is too much for one blog post, we&#8217;ll only investigate web development here.</p>
<h3>Syntax &amp; API</h3>
<p>Why are certain programming languages more popular than others? Usually not because they&#8217;re faster &#8211; not even because the input or output is smaller. A single argument counts most: <strong>The easiest understandable, the one with the greatest learning curve wins</strong>.</p>
<p>Think about it &#8211; while binary approaches to languages and data formats are much more efficient, it&#8217;s a pain to work with. Take JavaScript &#8211; due to it&#8217;s flexible and dynamically typed nature, it&#8217;s not always the most efficient way to code &#8211; however, it&#8217;s the <a href="http://javascript.crockford.com/popular.html">most popular</a>.</p>
<p>Let&#8217;s think about a higher abstraction: JavaScript libraries. <a href="http://www.jquery.com">jQuery</a>, for once, is highly popular amongst web developers because the API has a natural, language-oriented aspect. It&#8217;s almost neurologic &#8211; by looking at a certain block of jQuery code, you start to almost guess what the other functions could be named like.</p>
<p>Now, as soon as you have a good concept of the API using real-world language, easy to understand by simply looking at it, there needs to be a next step: <strong>Make the learning curve as small as possible</strong>. This can be done by providing a complete and solid documentation, demonstration of every feature, walkthrough tutorials and ways to communicate within the community (forums, mailing lists).</p>
<p>So, in other words, for a web programming language or toolkit/framework to be developer friendly, the following arguments (at the very least) need to apply:</p>
<ul>
<li>Real-world language when naming API calls (do, write, make, etc)</li>
<li>A high learning curve, achieved by
<ul>
<li>Good documentation</li>
<li>Good demonstration</li>
<li>Good communities around the project (forums, mailing lists, etc)</li>
<li>A strict API design with no or little exceptions</li>
</ul>
</li>
</ul>
<p>Of course there&#8217;s more to it, but this should give you a good start (by the way, this works for most development, not only web development).</p>
<h3>Tools</h3>
<p>The second very important field where usability needs to be improved are the actual tools web developers use to create applications and websites. It&#8217;s no wonder Dreamweaver is ridiculously successful &#8211; it&#8217;s not necessarily something that outputs great results (although it can, if you&#8217;re disciplined!), but it&#8217;s simply so damn easy to use.</p>
<p>Web developers usually have to use tools for the following tasks, and the sub lists tell you how these need to be  improved:</p>
<ul>
<li><strong>Writing the source code</strong> (IDE&#8217;s, Editors)
<ul>
<li>Better versioning integration</li>
<li>Helpers for refactoring</li>
<li>Integration with the browser engine</li>
</ul>
</li>
<li><strong>Creating and designing the frontend</strong> (WYSIWYG Editors)
<ul>
<li>Integration with the browser engine, instead of faulty preview modes (Dreamweaver CS4 has that, but they didn&#8217;t remove the preview mode yet)</li>
<li>Smart control panels that utilize a framework&#8217;s documentation to create fields / controls</li>
<li>Tight framework integration</li>
<li>Integration with actual design applications (i.e a bridge to Photoshop from Dreamweaver, allowing &#8220;live slices&#8221; to be be embedded into the Dreamweaver source, that update automatically as soon as I change the overall image in Photoshop)</li>
</ul>
</li>
<li><strong>Testing</strong> (End-platform, various browsers, Selenium [automated tests])
<ul>
<li>Semi-automated testing frameworks that run in a browser and serve a click-through for testers and mainly create experience surveys</li>
<li>Automated user tests, creating a &#8216;fake&#8217; user that executes clicks and drags on actual websites and applications</li>
</ul>
</li>
<li><strong>Debugging</strong> (often integrated in IDE&#8217;s, our in the actual platform, i.e. Browsers)
<ul>
<li>One tool that debugs across various browsers, instead of great tools for each browser, i.e. Firebug, Dragonfly, the IE8 Debugger.</li>
</ul>
</li>
</ul>
<p>While there are some solutions that are clean, well designed and integrated for application development (see iPhone development), web developers still suffer. Especially testing and debugging is still a pain in the arse, and needs to be improved.</p>
<h3>Conclusion</h3>
<p>In the end, I think there is a lot that needs to be done to <strong>make the actual developers happy before those can make the end users happy</strong>. A developer in an inspiring environment can create things you wouldn&#8217;t even imagine.</p>
<p>On the jQuery UI side of things for instance, there&#8217;s still a lot that needs to be done, but what&#8217;s really great is that we realized that our development cycle sucked. We have started to make developer tasks as easy as possible &#8211; there&#8217;s a new <a href="http://code.google.com/p/jquery-ui/source/browse/trunk/tests/simulate/jquery.simulate.js">jquery.simulate</a> plugin that triggers actual clicks and drags to ease testing, there are new commit hooks that will clean trailing whitespaces and there will be a project tool in the future that aids in documentation, testing and API design. We were also proud to be the first framework to announce <a href="http://www.adobe.com/cfusion/exchange/index.cfm?from=1&amp;o=desc&amp;cat=290&amp;event=productHome&amp;s=5&amp;l=-1&amp;exc=3">web widgets</a> in Dreamweaver.</p>
<p>So if you&#8217;re involved into a product that helps developers, think about how usable it is (instead of all it&#8217;s cool features), and help me and my comrades to make developer lifes easier, so they can create the great products we all love.</p>
]]></content:encoded>
			<wfw:commentRss>http://paulbakaus.com/2008/11/21/taking-usability-to-another-level/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
