<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0">
    <title>flow|state</title>
    
    <link rel="hub" href="http://hubbub.api.typepad.com/" />
    <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/" />
    <id>tag:typepad.com,2003:weblog-182620</id>
    <updated>2009-11-09T00:01:00-08:00</updated>
    <subtitle>UI design craft</subtitle>
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <link rel="self" href="http://feeds.feedburner.com/flowstate" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry>
        <title>Announcing QuickUI: a fast and powerful way to create web UI controls</title>
        <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/2009/11/introducing-quickui-a-tool-for-creating-web-ui.html" />
        <link rel="replies" type="text/html" href="http://miksovsky.blogs.com/flowstate/2009/11/introducing-quickui-a-tool-for-creating-web-ui.html" thr:count="2" thr:updated="2009-11-09T09:20:52-08:00" />
        <id>tag:typepad.com,2003:post-6a00d83451fb6769e2012875646878970c</id>
        <published>2009-11-09T00:01:00-08:00</published>
        <updated>2009-11-08T23:26:18-08:00</updated>
        <summary>Today I want to announce the project I've been working on as a hobby for most of the past year: QuickUI, a framework for creating web user interface controls. The work on QuickUI has taken the place of my normal...</summary>
        <author>
            <name>Jan Miksovsky</name>
        </author>
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://miksovsky.blogs.com/flowstate/"><div xmlns="http://www.w3.org/1999/xhtml"><p>Today I want to announce the project I've been working on as a hobby for most of the past year: <a href="http://quickui.org">QuickUI</a>, a framework for creating web user interface controls. The work on QuickUI has taken the place of my normal blog writing, hence the long hiatus here on flow|state.</p>

<p><strong>Why create a web control framework?<br /></strong></p>

<p />

<p>I couldn't find anything
that met my needs. I was so completely frustrated by the dearth of good tools in the middle ground between image editors (PhotoShop), prototyping tools (I've often used PowerPoint), HTML editors (e.g., DreamWeaver), and raw code using JavaScript UI frameworks and libraries (jQuery et al.). There are plenty of tools contending for this middle ground, but to me they seem to avoid working with the substance of the web—HTML, CSS, JavaScript—in favor of something that obscures those technologies (Cappucino, etc.) or does away with them altogether (Silverlight).</p>

<p>I want to work in the real stuff of the web. The web is built with HTML, CSS, and JavaScript, so that's what I want to use. I just want to be more efficient doing so. The fact is, those technologies are riddled with idiosyncrasies, and I don't want to feel like I'm solving the same problems over and over again. And it's not just me—the UI world wastes uncounted hours painfully (re)learning the various hacks to do something as simple as <a href="http://stackoverflow.com/questions/148251/css-centering-tricks">centering something on the page</a>.</p>

<p>For me, the worst problem with the web is that it lacks a native control framework. There's no way to easily bundle up a bunch of content, visual styling, and behavior into a reusable control. There are certainly JavaScript control frameworks (YUI, jQuery UI, etc.), but most seem to be either a very small library of common controls, or a set of utilities for writing controls on your own. Nothing seems to be scaling up to permit an <em>ecosystem </em>of controls. The Visual Basic 1.0 community had a more vibrant control ecosystem of VBX controls in 1991 than the web does nearly twenty years later.</p>

<p>I'm sure the HTML 5 team has worked long and hard to get to where they are today, but the last thing I need are new HTML tags with fixed semantics. What I want is to be able to write new tags and <em>define </em>their semantics. (<a href="http://msdn.microsoft.com/en-us/library/ms752059.aspx">XAML</a> is great, and would be incredible if it weren't proprietary.)</p><p>A good framework should give me a way to package things up so that I can easily share those tags with other people—and they can share them with me. If we had a good control framework, someone could package up good solutions to common problems as live code. I wouldn't have to find the answer to my question on <a href="http://www.stackoverflow.com">StackOverflow</a> as little fragments of HTML, CSS or JavaScript embedded in text—the answer to my question would be a fully reusable piece of self-contained working code.</p>

<p><strong>A markup language for controls<br /></strong></p>

<p>The control framework I envisioned was built around a markup language that looked and felt like HTML, but defined controls (at any level of the UI) instead of only pages. The control would <em>define a new tag</em>, so it could be used inside of other controls just like a native HTML tag. As with HTML, the control markup would define document elements for the control's contents, a &lt;style&gt; tag for CSS defining the control's visual appearance, and a &lt;script&gt; tag for JavaScript defining the control's behavior. A control would be packaged up in a single file that could be added to a new UI project simply by copying the file into the project folder.</p>

<p>This idea eventually took shape as QuickUI, and evolved into the release I'm announcing today. For details and examples, including a full tutorial, please see the <a href="http://quickui.org">QuickUI</a> site. Here I'll simply mention that QuickUI currently comprises:</p><ol>
<li>The Quick markup language for defining new controls.</li>
<li>A compiler for compiling Quick markup files into JavaScript and CSS files.</li>
<li>A build tool for compiling a collection of Quick markup files and combining the generated output into a project-level .js and .css file.</li>
<li>A JavaScript library used by QuickUI controls at run time.</li>
</ol>
<p /><p>The QuickUI compiler and build tool are themselves written in C#, and I use the tools on Windows machines and Macs (via <a href="http://www.mono-project.com">Mono</a>) alike. (For the time being, I've posted instructions only for Windows use, but hope to document Mac use soon.)</p><p>The generated JavaScript makes use of the jQuery library to build the user interface on demand. QuickUI works well with jQuery, but should be able to interoperate with other JavaScript frameworks.</p><p>Adding a compile-time step to web UI design is, admittedly, a
hassle—but only a minor one. A small amount of tinkering with a
reasonable development environment makes it possible to automatically
invoke the QuickUI build tool whenever a Quick markup file is updated. These days I prefer Aptana Studio, and have documented steps for
integrating QuickUI into that environment on the QuickUI site. Other
tools make similar integration possible. With that in place, working in Quick markup feels only a small step removed from working in raw .html and .css files, and the productivity gains of a modular control framework quickly outstrip the minor inconvenience of compilation.</p>



<p />

<p />

<p><strong>So far, so good<br /></strong></p>

<p>I now use QuickUI almost exclusively to quickly prototype functional UI designs for <a href="http://www.cozi.com">Cozi</a>. I occasionally take recourse to PhotoShop to create image assets for inclusion in specific QuickUI controls, but the vast majority of my design work is now authored in Quick markup. The tools are good enough for my everyday use that I'd never go back to working without such a framework. And, as I slowly build up a library of reusable controls, I'm spending less and less time fighting old problems, and more time moving forward.</p><p>I consider the current state of QuickUI to now be minimally interesting to others, hence this announcement. Nothing’s set in stone, and any part of it could be made better.</p>

<p>If you're interested, please check out <a href="http://quickui.org">QuickUI</a> for yourself. You can post questions or comments on the discussion board there. If you like this and want to make it better, I would welcome the help.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/flowstate/~4/oohy8_Uy0GM" height="1" width="1" /></div></content>


    </entry>
    <entry>
        <title>Attending UIE's Web App Summit this week</title>
        <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/2009/04/attending-uies-web-app-summit-this-week.html" />
        <link rel="replies" type="text/html" href="http://miksovsky.blogs.com/flowstate/2009/04/attending-uies-web-app-summit-this-week.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-65709275</id>
        <published>2009-04-19T09:27:35-07:00</published>
        <updated>2009-04-19T09:27:35-07:00</updated>
        <summary>Just breaking the radio silence to say that this week I'll be down in Newport Beach, CA, attending UIE's Web App Summit 2009. If you'll be there, let me know via a comment or mail to jan at cozi dot...</summary>
        <author>
            <name>Jan Miksovsky</name>
        </author>
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://miksovsky.blogs.com/flowstate/"><div xmlns="http://www.w3.org/1999/xhtml"><p>Just breaking the radio silence to say that this week I'll be down in Newport Beach, CA, attending UIE's <a href="http://www.uie.com/events/web_app_summit/2009/">Web App Summit 2009</a>. If you'll be there, let me know via a comment or mail to jan at cozi dot com; it'd be great to connect in person.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/flowstate/~4/FCXEUm6RJmY" height="1" width="1" /></div></content>


    </entry>
    <entry>
        <title>Hiatus</title>
        <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/2009/02/hiatus.html" />
        <link rel="replies" type="text/html" href="http://miksovsky.blogs.com/flowstate/2009/02/hiatus.html" thr:count="6" thr:updated="2009-05-15T11:11:01-07:00" />
        <id>tag:typepad.com,2003:post-62246366</id>
        <published>2009-02-01T21:06:09-08:00</published>
        <updated>2009-02-01T21:06:09-08:00</updated>
        <summary>At the beginning of January, I set myself a goal to see if I could make at least one post on flow|state a month. January's now over, with no post. I've had a draft of the promised follow-up to the...</summary>
        <author>
            <name>Jan Miksovsky</name>
        </author>
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://miksovsky.blogs.com/flowstate/"><div xmlns="http://www.w3.org/1999/xhtml"><p>At the beginning of January, I set myself a goal to see if I could make at least one post on flow|state a month. January's now over, with no post. I've had a draft of the promised follow-up to the last post on the <a href="http://miksovsky.blogs.com/flowstate/2008/10/the-shared-suff.html">Shared Suffering Hypothesis</a> under construction for three months. (Thanks to Michael, Barry, Evan, &amp; co. for their comments, the most interesting dialogue I've received on a post in a long while.) I still can't find the time to finish off the darn post.</p><div><div><br /><div><div>It's sinking in that helming a startup through a stormy economy while adequately parenting three young children just doesn't leave enough personal time to do this blog justice. FeedBurner says I've got several thousand subscribers, and I've occasionally run into readers who offered me their encouragement (thanks, John F.!). I would prefer not to leave them wondering why there's no activity.</div><br /><div>I need less stress, not more, right now, and think the safest thing to do is declare an indefinite blog hiatus. There are still countless UI topics on which I would like to write, and I hope at some point to find the time to get some down. At that point you—and I—can be pleasantly surprised. Until then, thanks for reading.</div><br /><div>Best,</div><div>Jan</div></div></div></div><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/flowstate/~4/cPUSt2hr890" height="1" width="1" /></div></content>


    </entry>
    <entry>
        <title>The Shared Suffering Hypothesis, or setting things up the way everyone else does</title>
        <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/10/the-shared-suff.html" />
        <link rel="replies" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/10/the-shared-suff.html" thr:count="10" thr:updated="2008-11-05T14:00:02-08:00" />
        <id>tag:typepad.com,2003:post-49563912</id>
        <published>2008-10-05T21:45:00-07:00</published>
        <updated>2008-10-05T21:45:00-07:00</updated>
        <summary>Tinkering endlessly with computer hardware and software can be fun... if you have the time. As for me, I eventually came to the paradoxical conclusion that the more I tuned a product to my specific needs, the less likely the...</summary>
        <author>
            <name>Jan Miksovsky</name>
        </author>
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://miksovsky.blogs.com/flowstate/"><div xmlns="http://www.w3.org/1999/xhtml"><p>Tinkering endlessly with computer hardware and software can be fun... if you have the time. As for me, I eventually came to the paradoxical conclusion that the more I tuned a product to my specific needs, the less likely the product would actually work as intended—and the less likely I could find someone to help me when a problem did arise. Product manufacturers often tout the ability of their products to be configured to a user's idiosyncratic needs, but maybe users can most effectively minimize heartache this way:</p> <blockquote> <p><em>The Shared Suffering Hypothesis: You're best off configuring a product so as to maximize the number of other people who can help identify and resolve problems with that configuration.</em></p></blockquote> <p>Here's an example: A number of years ago I set up a media PC, eschewing the small number of commercial media PCs then available to get a tricked-out gamer PC. I maxxed every spec—video card, hard drive, etc.—and for its day, this machine <em>rocked</em>. What didn't occur to me was that, with each component I picked, I was reducing the number of other people who had the same device I had. And upon receiving the box, I wiped it and installed an early beta of an obscure OS version. Fantastic! Now I had a blazingly fast PC, the likes of which were possessed by no one else on the planet!</p> <p>I was a user community of one. When sorting through the inevitable driver weirdness and other nightmares, I had no one to turn to for help, because no one else shared this configuration or anything like it. The OEM and its component manufacturers, of course, had no experience with that OS, nor had the OS manufacturer ever tested on any of that hardware. The nascent media PC user community couldn't help either. This left me solving every configuration issue on my own. I spent hours on exciting tasks like trying to see if the PC motherboard would cope better with the hard drive configured for RAID 0 or RAID 1, or maybe I should try RAID 5? Damn, and all I wanted to do was watch TV on this thing.</p> <p>Lesson learned, when I bought a new media PC a couple years later, I abandoned impressive computer specs in favor of amassing the largest number of people who could share my problems. If I ran into a problem, I wanted a hundred other people to have already hit it and collectively solved it. I purchased a basic media PC from a huge OEM—not because they made great media PCs, but because they sold a lot of them. I purchased the most vanilla configuration possible, more or less blindly accepting the OEM's self-serving default hardware recommendations. The more defaults I could accept, the more likely it was someone else would have something like the same box I did. When the box arrived, I tried hard to avoid changing anything from the default config, and in generally avoided installing funky apps on the box. In the end, the new PC wasn't a perfect media experience—but it worked, and I spent very little time keeping it that way.</p> <p>(And now the impending forced cutover to digital cable in the U.S. is going to kill me. It's forcing me to rebuild a perfectly good media PC setup, all so that our seldom-watched analog cable TV can now be a seldom-watched digital cable TV. Once again I'll be searching for the solution that involves the least weird configuration.)</p> <p>The problem here are the economics of configuration. You'd think you'd benefit by tailing a product to your needs, but I believe in most cases that benefit is overwhelmed by the benefits of <em>not</em> customizing. And the issue has implications for software designers: each time you add an option to your product, you might be making things worse for your users, not better. I'll take a cut at that question in the next post.</p> <p><em>Next time: The economics of configuration</em></p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/flowstate/~4/qND0DfVT5xE" height="1" width="1" /></div></content>


    </entry>
    <entry>
        <title>Transient controls: a delicate balance between discoverability and visual clutter</title>
        <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/06/transient-contr.html" />
        <link rel="replies" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/06/transient-contr.html" thr:count="5" thr:updated="2009-09-18T09:25:27-07:00" />
        <id>tag:typepad.com,2003:post-51717954</id>
        <published>2008-06-22T21:51:43-07:00</published>
        <updated>2008-06-22T21:51:43-07:00</updated>
        <summary>Last week Cozi posted an update to our family calendar that included a small but significant usability fix to the UI for entering appointments. In addition to a traditional form-based UI for entering appointments, the bottom of the main calendar...</summary>
        <author>
            <name>Jan Miksovsky</name>
        </author>
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://miksovsky.blogs.com/flowstate/"><div xmlns="http://www.w3.org/1999/xhtml"> <p>Last week Cozi posted an update to our <a href="http://www.cozi.com/products/familycalendar.aspx">family calendar</a> that included a small but significant usability fix to the UI for entering appointments. In addition to a traditional form-based UI for entering appointments, the bottom of the main calendar page offers a text box in which a user can type an appointment in English:</p> <p><a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%203.png"><img height="480" width="640" border="0" alt="Calendar" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Calendar_thumb.png" /></a> </p> <p>In general this UI for entering appointments works well, but usability testing had indicated that a sizable population of users would hesitate when entering an appointment. They would type the text of the appointment, then move their mouse over the right end of the text box, apparently searching for a button they could click to save the appointment.</p> <p>These users were likely conditioned by web browsers, which generally have a Go button to the right of the address field. Advanced users generally don't click the Go button (and may take steps to hide it), but many users navigate with it. We had originally left off a Go button in the interests of reducing visual clutter, and expected people would be able to figure out they could just press the ENTER key to save the appointment.</p> <p>In testing, it became apparent that we were correct, but only to a point. Most users would, in fact, eventually try pressing the ENTER key. The issue is that it would take a second or two of uncertainty before they would figure it out. We didn't like the thought of producing any uncertainty or anxiety, especially in relation to the natural-language appointment feature. That's a star feature in our calendar, and we want to show off. (Yes, Google Calendar and others have a similar feature, but we think ours is better.)</p> <p>We were reluctant to add a permanent button to the page if we could avoid it. Instead, we opted to follow the lead of Internet Explorer and Firefox and use a <em>transient control</em>: a control that's only visible part of the time. Both IE and Firefox used to have their Go buttons visible all the time, but both changed the Go buttons to a transient control that is only visible when the user is actually typing a URL.</p> <p>Here's how it works in Cozi's case. When the user enters the page, the focus is in the appointment entry text box. The text box sports hint text to let the user know what the text box is for. (Significantly, the hint text does <em>not</em> disappear when the text box has the keyboard focus—since the text box has the focus by default, hiding the hint text on focus for this field would mean the hint text was invisible when it would have been most valuable. If the user clicks on the text box, we do hide the hint text, so the user doesn't waste any time trying to delete the hint text before typing their own text.)</p> <p><a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%201_2.png"><img height="53" width="640" border="0" alt="Entry Area 1" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%201_thumb_1.png" /></a></p> <p>When the user starts typing, the transient Enter button appears on the far right:</p> <p><a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%202_1.png"><img height="53" width="640" border="0" alt="Entry Area 2" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%202_thumb.png" /></a></p> <p>When the user moves the mouse (not shown below) over the Enter button, the Enter button exhibits its hover state:</p> <p><a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%203_2.png"><img height="53" width="640" border="0" alt="Entry Area 3" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%203_thumb.png" /></a></p> <p>The user presses the button or types the ENTER key, and the appointment data is sent to the server to be parsed. During this round-trip to the server, the text box and its associated change to a quasi-disabled state to suggest that: a) something is happening, and b) the user shouldn't type again until the text box has left this state.</p> <p><a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%204_1.png"><img height="53" width="640" border="0" alt="Entry Area 4" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%204_thumb.png" /></a></p> <p>When the updated calendar data returns from the server, the calendar view updates to show the new appointment. The appointment entry text box resets to its original state to let the user know they can type again:</p> <p><a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%201_3.png"><img height="53" width="640" border="0" alt="Entry Area 1" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Entry%20Area%201_thumb_1.png" /></a></p> <p>So far, this transient Enter button seems to work well, but we will continue to watch that button closely in testing. We're cautious about employing this UI technique, because it's easy to accidentally sacrifice discoverability in the name of visual cleanliness. Here the transient control works well because it manages to appear just when a user is about to start looking for it. In other cases, a user might hold their mouse still while looking around the page, and if they didn't see the control they were expecting, they might jump to the reasonable conclusion that such a control did not exist.</p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/flowstate/~4/C22y5fB3Xy4" height="1" width="1" /></div></content>


    </entry>
    <entry>
        <title>Looking for concrete research on impact of animated ads on user experience</title>
        <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/05/concrete-resear.html" />
        <link rel="replies" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/05/concrete-resear.html" thr:count="1" thr:updated="2008-05-16T10:39:25-07:00" />
        <id>tag:typepad.com,2003:post-49944896</id>
        <published>2008-05-15T21:08:22-07:00</published>
        <updated>2008-05-15T21:08:22-07:00</updated>
        <summary>I find myself faced with the question of whether to accept animated ads in an ad-based product. An animated ad likely detracts from the user's experience—everyone says they dislike them—but to what degree? I'm finding it difficult to find persuasive...</summary>
        <author>
            <name>Jan Miksovsky</name>
        </author>
        
        
<content type="xhtml" xml:lang="en-US" xml:base="http://miksovsky.blogs.com/flowstate/"><div xmlns="http://www.w3.org/1999/xhtml"><p>I find myself faced with the question of whether to accept animated ads in an ad-based product. An animated ad likely detracts from the user's experience—everyone says they dislike them—but to what degree? I'm finding it difficult to find persuasive research quantifying that effect.</p>



<p>It's relatively easy to find data on the side of the advertiser or the site showing the ad. An animated ad will likely be noticed by more people, and can have higher click-through rates, which is what an advertiser is looking for. Accordingly, a site willing to show an animated ad can charge a higher premium for such an ad over a static ad. Animated ads = more revenue. It's hard to argue with that—especially at an ad-funded startup.</p>

<p>To put the potential revenue upside in perspective, I'm looking for concrete research on the impact of animated ads on the user experience. Here's the kind of research that would be most helpful:</p>

<ul><li>Hard data. An anecdotal personal claim that, "I refuse to use a site that shows an animated ad", holds little weight. Same goes for claiming, "Everyone hates animated ads... obviously!" If everyone hates animated ads, then it should be easy to find research proving that point.</li>

<li>Focused on the actual effect on site usage. The little research I can find seems focused on user opinions. (<a href="http://www.useit.com/alertbox/20041206.html">Example</a>, from Jakob Nielsen's AlertBox) I don't want to know whether people like animated ads—I want to know how much they actually impair site usage, or diminish a site's brand, or drive people away.</li>

<li>Recent. I can't use a study done way back in the halcyon days of
1997 when the web was fresh and new and people didn't think there
should be ads in it anywhere.</li>

<li>Expressed in money terms. It'd be helpful to find, for example, a case study comparing a site's gain in ad revenue from the introduction of animated ads with the monetary downsides (if there are any) of those same ads.</li>

<li>Objective. A tiny study done by a user interface designer with a personal bias may not help. A large study done by a company that's taking the long view, and trying to balance revenue with customer satisfaction would be better. A peer-reviewed scholarly paper on the topic would be ideal.</li></ul>

<p>Any timely pointers here would be helpful in making this decision. Thanks.</p>

<p><em>Updated 6/22/08: A big thanks to Michael who </em><em>in the comments </em><em>posted links to a pair of relevant papers. Those papers were very helpful to us in deciding whether to accept animated advertisements. We ultimately did decide to accept animated ads, but did put in place some guidelines that we hope will keep out the more egregious uses of that medium.</em></p><xhtml:img xmlns:xhtml="http://www.w3.org/1999/xhtml" src="http://feeds.feedburner.com/~r/flowstate/~4/t9Nic0MH_Zw" height="1" width="1" /></div></content>


    </entry>
    <entry>
        <title>Showing the complete range of choices in a grid</title>
        <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/04/using-a-grid-of.html" />
        <link rel="replies" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/04/using-a-grid-of.html" thr:count="3" thr:updated="2009-09-11T06:59:32-07:00" />
        <id>tag:typepad.com,2003:post-48362188</id>
        <published>2008-04-13T21:14:22-07:00</published>
        <updated>2008-04-13T21:14:22-07:00</updated>
        <summary>The previous post on Cozi’s updated family calendar reminded me to point out a small but interesting aspect of the Cozi calendar UI that’s worked out rather well. As it turns out, the UI in question is in the Settings...</summary>
        <author>
            <name>Jan Miksovsky</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://miksovsky.blogs.com/flowstate/">
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;The previous post on Cozi’s updated family calendar reminded me to point out a small but interesting aspect of the Cozi calendar UI that’s worked out rather well. As it turns out, the UI in question is in the Settings area of the product—an area where interesting design opportunities are often overlooked in the haste to get that peripheral stuff out of the way so one can get back to designing core features. &lt;/p&gt;

&lt;p&gt;During Cozi's early family research, we met parents who liked to color-code calendar entries according to the person or people involved in the appointment. Accordingly, Cozi lets families color-code appointments in the calendar. (Color is used as a shorthand; it’s not the only way of seeing who an appointment is for, so color blind users need not worry.) Cozi picks a color for each family member by default, but since color is a highly emotional element, we wanted to offer a way to let family members choose their own color.&amp;nbsp; &lt;/p&gt;

&lt;p&gt;We had the following constraints in mind for our color settings UI:&amp;nbsp; &lt;/p&gt;

&lt;ol&gt; &lt;li&gt;The available colors should all be attractive and work well with the overall Cozi color palette.&amp;nbsp; &lt;/li&gt;

&lt;li&gt;The UI should ensure each family member ends up with a unique color for each family member, otherwise the family won’t be able to tell whose appointments are whose when scanning the colors. &lt;/li&gt;

&lt;li&gt;The colors need to cover a sufficiently broad range that each family member can get a color they like.&amp;nbsp; &lt;/li&gt;

&lt;li&gt;The palette from which colors are chosen shouldn’t contain colors that are too similar. If one family member chooses dark blue and another a slightly darker blue, they’ll never be able to tell them apart.&amp;nbsp; &lt;/li&gt;

&lt;li&gt;It shouldn’t be hard for a family to collectively choose a set of colors that all work well together. This is a challenging design constraint: once you’ve got about 6 colors in a palette, your choices for each additional color are either going to start running close to your existing colors, or else create the potential for ugly combinations. Some applications like Microsoft PowerPoint have a sophisticated color model to help people create reasonably attractive combinations of colors. (Alas, they still can’t prevent the determined user from creating something hideous.) We didn’t have the capacity to develop such a model, and needed something simpler.&amp;nbsp; &lt;/li&gt;

&lt;li&gt;As a consequence of the above point, the palette of choices should be as small as possible. The smaller the palette, the smaller the chance of a clashing disaster. Here Cozi’s targeted focus on families works in our favor, since we can optimize the UI for the demographics of a family. Our database schema allows a maximum of 10 people per household, but in practice our sweet spot is families with 2-4 children. A family with two parents and two kids gets 5 colors: 4 colors for the family members, plus an additional color to represent appointments for the whole family. We eventually settled on a palette with 16 colors. This is sufficient to satisfy the above constraints and still leave some breathing room. (In any given family, there are certain to be colors liked by none of the family’s members.) &lt;/li&gt;

&lt;li&gt;A family should be able to have some fun picking the colors.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Our starting point for the design was fairly standard: we listed out the names of the family members, and next to each name put a dropdown color picker. You can see something similar in other applications that let users choose a set of colors from a large palette. Here's a clean example from Microsoft PowerPoint 2007's &amp;quot;Create New Theme Colors&amp;quot; dialog, which lets users select twelve colors from a large palette that is revealed when a dropdown color picker is clicked: &lt;/p&gt;

&lt;p&gt;&lt;img width="265" height="431" border="0" alt="PowerPoint Theme Colors" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/PowerPoint%20Theme%20Colors_thumb.png" /&gt;&amp;nbsp; &lt;/p&gt;

&lt;p&gt;One wrinkle in using a design like this for our calendar settings UI was created by requirement #3 above: the need for unique color mappings. This is an instance of a cross-field validation rule: the validity of one field value may depend upon another. In a UI like the one above, it’s hard to come up with a good design to communicate cross-field validation rules without confusing or irritating the user. Suppose the colors must be unique, and the user wants to swap the colors in field A and field B. They try to change B’s value to the value in A, but the field complains that B's value duplicates A's value—and forces the user to fix field B before they can leave it. This is terrible! They’re forced to clear B (or assign some temporary value to B), go to A, change it, and come back and enter the desired value in B.&amp;nbsp; &lt;/p&gt;

&lt;p&gt;One solution is to leave such cross-field validation rules until the user tries to commit the whole form. Alternately, you can deliver the feedback about the need for uniqueness modelessly. The problem with either solution is that the user ends up being surprised: just at the point they think they’re done, they have to go back and rethink their entries. You can try to let them know the uniqueness requirement up front via instructional text, but most users aren’t going to read it, so you’d probably just spend some screen real estate for nothing.&amp;nbsp; &lt;/p&gt;

&lt;p&gt;Our strategy in such a dilemma is always to refer back to our family domain and see whether we can optimize for it. Here, we see that the above UI allows for an arbitrarily large palette, but we don’t need that: we only have 16 choices for each color. And the typical user will only need to pick 3-5 colors. Instead of displaying the palette in a dropdown, we display all the available choices in a row:&amp;nbsp; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Cozi%20Calendar%20Colors.png"&gt;&lt;img width="640" height="432" border="0" alt="Cozi Calendar Colors" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Cozi%20Calendar%20Colors_thumb.png" /&gt;&lt;/a&gt;&amp;nbsp; &lt;/p&gt;

&lt;p&gt;The immediate advantages of this approach is that the user can see all the color choices at a glance, and they can make a choice with a single click (instead of having to spend one click revealing the dropdown palette, and another to make a selection). But the true benefit of this approach is that &lt;em&gt;the user will infer the requirement for uniqueness&lt;/em&gt; without it needing to be enforced. In usability tests, we see users intuitively grasp that they should pick a color from any given column no more than once. They can work that out on an intellectual level, of course, but the UI makes that easier to see. With that in mind, we were able to relax the enforcement of unique color selections—the user takes care of that on their own. This lets us deal handily with situations like the need to swap color choices. And, finally, people seem to enjoy using the UI to pick colors. &lt;/p&gt;

&lt;p&gt;This design approach could be applied in other situations. It's quite similar to what you find in online surveys. The design requirements here are slightly different, but the final result still shares the presentation of the complete range of choices: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/SurveyGizmo%20Template.png"&gt;&lt;img width="510" height="160" border="0" alt="SurveyGizmo Template" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/SurveyGizmo%20Template_thumb.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.8em;color: #666666;"&gt;from &lt;a href="http://www.surveygizmo.com/"&gt;SurveyGizmo&lt;/a&gt;&lt;/span&gt; &lt;/p&gt;

&lt;p&gt;It's well understood that a dropdown control will generally be more compact than a set of radio buttons, but in situations where the same dropdown control is repeated across multiple rows, a grid of radio buttons can be efficient as well. Each column only needs to be labeled once, so the individual radio buttons don't need their own labels. (The color swatches in the Cozi design are effectively self-descriptive radio buttons that don't even need column labels.) And though the repeated controls take up considerable space, they afford the user the ability to quickly apprehend relationships between field values. In the Cozi color UI, the user can spot-check whether each color has been used only once. And in the survey UI, the user can quickly perceive the balance of their responses across the range of choices. &lt;/p&gt;

&lt;p&gt;If you have a similar settings UI in your own product, perhaps with dropdown controls, consider whether the set of choices is small enough that you can display the complete range in a grid. &lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/flowstate/~4/4Pl1RaBlAps" height="1" width="1"/&gt;</content>


    </entry>
    <entry>
        <title>Cozi calendar UI overhaul</title>
        <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/04/fit-and-finish.html" />
        <link rel="replies" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/04/fit-and-finish.html" thr:count="1" thr:updated="2008-04-03T15:05:32-07:00" />
        <id>tag:typepad.com,2003:post-47896610</id>
        <published>2008-04-02T21:57:24-07:00</published>
        <updated>2008-04-02T21:57:24-07:00</updated>
        <summary>It's been way too long since I was last able to post here, mostly because having three small children equates to having zero personal time. Still, work has been productive. Today Cozi posted an update to the web version of...</summary>
        <author>
            <name>Jan Miksovsky</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://miksovsky.blogs.com/flowstate/">
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;It's been way too long since I was last able to post here, mostly because having three small children equates to having zero personal time. Still, work has been productive. Today Cozi posted an update to the web version of our &lt;a href="http://www.cozi.com/products/familycalendar.aspx"&gt;family calendar&lt;/a&gt;. Our web calendar has long lagged behind the PC version, but we've been working hard to correct that, and today's release represents a big step towards that goal.&lt;/p&gt; &lt;p&gt;Before today, the calendar was a bare-bones UI that looked like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Calendar%20-%20Old.png"&gt;&lt;img width="640" height="462" border="0" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Calendar%20-%20Old_thumb.png" alt="Calendar - Old" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The new calendar looks like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Calendar%20-%20New.png"&gt;&lt;img width="640" height="462" border="0" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Calendar%20-%20New_thumb.png" alt="Calendar - New" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;We still have a long list of improvements in the works for the calendar, but this latest public release already includes a range of large feature enhancements and small fit-and-finish details that collectively make the new calendar, IMHO, quite polished for an AJAX UI:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Asynchronous loading of appointment data. We used to reload the entire page whenever we needed to display new calendar data (e.g., when adding an appointment). Now we just refresh the days we need to.&amp;nbsp; &lt;/li&gt;

&lt;li&gt;Infinite scrolling. The old implementation would only let you see one week's worth of appointments at a time. Movement between weeks was generally managed with &amp;quot;Previous Week&amp;quot; and &amp;quot;Next Week&amp;quot; links. The new UI uses infinite scrolling, so the user can move as far into the future (or past) as they need to with just the scroll bar. This work dovetails with the aforementioned async loading of data. &lt;/li&gt;

&lt;li&gt;Complete typography overhaul. Improved margins and leading make it easier to visually parse the information into three vertical columns and a large horizontal row for each date. This included details like right-aligning the color-coded family member dots so that they are visually grouped with the appointment subject. &lt;/li&gt;

&lt;li&gt;We took extreme pains to line up the start times and end times by the colons to improve legibility. This was somewhat at odds with our desire to follow proper typographic convention and separate times with an &lt;a href="http://en.wikipedia.org/wiki/Endash#En_dash"&gt;endash&lt;/a&gt; instead of a hyphen. Using an endash with vertically-aligned colons produced a situation in which a bit of extra white space would appear before end time that had a single hours digit. That is, &amp;quot;–&lt;span face="Courier New"&gt;&amp;nbsp; 3:00&lt;/span&gt;&amp;quot; would have more interior space than &lt;span face="Courier New"&gt;&amp;quot;&lt;/span&gt;–&lt;span face="Courier New"&gt; 12:00&lt;/span&gt;&amp;quot;. We finessed this by using an endash when the end time has a single digit hour, but a hyphen when the end time has a double digit hour:&lt;br /&gt;&lt;br /&gt;&lt;img width="135" height="112" border="0" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Cozi%20Calendar%20Timetable.png" alt="Cozi Calendar Timetable" /&gt; &lt;br /&gt;&lt;br /&gt;For all we know zillions of other people have done the same thing, but we think this bending of the rules lets you produce a clean and highly legible timetable with plain HTML.&lt;br /&gt; &lt;/li&gt;

&lt;li&gt;Tuned the color of all text elements in the calendar data. Dates are shown in color, body text in gray. For contrast, the subjects of a non-routine appointment (something that doesn't happen weekly) are set in black to make them stand out—since those are the appointments a family needs to focus their attention on. &lt;/li&gt;

&lt;li&gt;Placed the day of the week over the date. Users of a family calendar are extremely interested in what's happening during the coming week, and much less so in what's happening months away. Placing the day of the week over the date reflects that priority. &lt;/li&gt;

&lt;li&gt;Tweaked the background color banding on alternate days to make it a bit more prominent. This is really hard to get right so that it's perceptible on all monitors, but not overpowering on monitors with excessive contrast. &lt;/li&gt;

&lt;li&gt;Revised the UI controls for selecting the family member whose calendar you want to look at. The old design had big tabs, which users immediately understand, but they occupied more space than was justified by their relatively infrequent use. We took the opportunity to more explicitly present the list of names as a legend for the color-coded dots. &lt;/li&gt;

&lt;li&gt;Added gradients to the colored bars at the top and bottom of the calendar. These are done as a series of one pixel-high DIVs so that we can easily swap out the gradient based on the current family member's color without needing to store a ton of images. &lt;/li&gt;

&lt;li&gt;Cleaned up element margins overall. &lt;/li&gt;

&lt;li&gt;Tightened borders around the natural language appointment entry area at the bottom. &lt;/li&gt;

&lt;li&gt;Shifted the little triangle that had been to the left of the text box so that now it's inside the box. That triangle is one of a pair of triangles used to visually imply a connection between the text box and the calendar: the triangle on the calendar indicates the day where new typed appointments will go (if you don't type a date). Moving the bottom triangle inside the box more clearly connects the two triangles: they're now directly horizontally lined up, and they can now both share the same black color. (Users will readily infer a connection between two elements on a page if they share a color.) &lt;/li&gt;

&lt;li&gt;Shortened the hint text inside the text box. Although being able to double-click a day to create an appointment is a useful shortcut, users can find it on their own without instruction. &lt;/li&gt;

&lt;li&gt;In that same area, replaced the &amp;quot;What can I type?&amp;quot; link (which was spec'ed as white, but had ended up as black due to a bug) with a smaller question mark icon. &lt;/li&gt;

&lt;li&gt;Cleaned up the &amp;quot;Home&amp;quot; button script in the upper left. We'd previously used &lt;a href="http://www.mikeindustries.com/sifr"&gt;sIFR&lt;/a&gt; for this and other instances of &amp;quot;handwritten&amp;quot; text in the product. It's a nice bit of technology, but in this case the text was static, so using Flash was complete overkill. Now it's a simple transparent PNG (or a &lt;a href="http://blogs.cozi.com/tech/2008/03/transparent-png.html"&gt;transparent PNG8 in IE 6.x&lt;/a&gt;). &lt;/li&gt;

&lt;li&gt;Cleaned up the mini-calendar on left. The mini-calendar now shows a minimal set of information and controls in its normal state (when the mouse isn't over it). This keeps the UI clean. When the user moves the mouse over the mini-calendar, various navigation controls appear for navigation to the previous month, the next month, and today. In the rollover state, the mini-calendar also shows the dates at the end of the previous month and the dates at the beginning of the next month. This makes it quicker to navigate to dates just outside the current month. We've built this calendar by styling the &lt;a href="http://docs.jquery.com/UI/Datepicker"&gt;jQuery UI date picker&lt;/a&gt;, which has worked well in practice. &lt;/li&gt;

&lt;li&gt;Added advertising in the left pane. Hey, we have to pay for all this work somehow! We've been careful to keep advertising separate from the family's calendar content on the right.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Overall, we're quite happy with the result. We have more improvements to the Cozi calendar in the works, and are eager for those to see the light of day too.&lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/flowstate/~4/g4FjCRSVxWQ" height="1" width="1"/&gt;</content>


    </entry>
    <entry>
        <title>Looking forward to seeing Facebook apps drop their pointless mystery</title>
        <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/01/facebook-applic.html" />
        <link rel="replies" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/01/facebook-applic.html" thr:count="5" thr:updated="2009-10-31T00:33:31-07:00" />
        <id>tag:typepad.com,2003:post-44270974</id>
        <published>2008-01-27T21:53:00-08:00</published>
        <updated>2008-01-27T21:53:00-08:00</updated>
        <summary>Consider the following hypothetical computer experience: One day a friend of yours sends you a one line email saying, "Hey, check out FooBar!" That's all the message says. "Okay", you're wondering, "What the heck is FooBar?" You follow the link...</summary>
        <author>
            <name>Jan Miksovsky</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://miksovsky.blogs.com/flowstate/">
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Consider the following hypothetical computer experience:&amp;nbsp; &lt;/p&gt;&lt;blockquote&gt; &lt;p&gt;&lt;em&gt;One day a friend of yours sends you a one line email saying, &amp;quot;Hey, check out FooBar!&amp;quot; That's all the message says. &amp;quot;Okay&amp;quot;, you're wondering, &amp;quot;What the heck is FooBar?&amp;quot; You follow the link to the FooBar site, and all you can see is a EULA check box and a &amp;quot;Sign Up&amp;quot; button. You have no idea what FooBar does, so you're reluctant to entrust any information to this site. Before leaving, you notice a tiny link that says, &amp;quot;Learn more about FooBar&amp;quot;. You click it, and are presented with the FooBar logo and a short paragraph that says that FooBar is pretty cool. You're still confused about what it does because you can't actually get inside and see it for yourself. Finally, overcome with curiosity about why your friend would recommend the site, you give in and click the Sign Up button.&lt;/em&gt;&amp;nbsp; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Once inside the site, you realize the site is stupid, and wish you'd never signed up. You later discover that all your friends have just received a one line email from you saying &amp;quot;Hey, check out FooBar!&amp;quot;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This, in a nutshell, seems to be the experience of trying the typical &lt;a href="http://www.facebook.com"&gt;Facebook&lt;/a&gt; app. Granted, in Facebook, the above experience would generally take place entirely within the world of Facebook (with its own messaging system, etc.), but I think the story captures the basic pointless mystery of it all.&lt;/p&gt; &lt;p&gt;I've been watching with interest how Facebook's application model will pan out, particularly the user experience of engaging with an application: discovering it, learning about it, adding it to one's profile, and using it. A while back I noted how many companies were busily removing &lt;a href="http://miksovsky.blogs.com/flowstate/2007/05/hurdles_in_the_.html"&gt;hurdles at a site's entrance&lt;/a&gt; so people could experience a product's value (or at least a taste of the product's value) before committing to the product. Facebook, in contrast, seems to be confidently bucking this trend with the apps that live on top of its platform. &lt;/p&gt;

&lt;p&gt;On the one hand, Facebook users can quickly add a new app to their profile because they don't have to reenter personal information for each app. However, in my opinion, this advantage is overwhelmed by the &lt;em&gt;de facto&lt;/em&gt; requirement that a user add a Facebook app to their profile before they can derive any meaningful value from it—or even understand what it does. &lt;/p&gt;

&lt;p&gt;The first point of contact you may have with an app may be when it tries to catch your attention in your feed: &lt;/p&gt;

&lt;p&gt;&lt;img width="461" height="73" border="0" alt="Facebook News Feed - Friend Added Application" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Facebook%20News%20Feed%20-%20Friend%20Added%20Application.png" /&gt; &lt;/p&gt;

&lt;p&gt;Many apps are deliberately coy about what they do before you install them. Many (or sometimes all) of the links in the feed entry will require that you first add the app to your profile: &lt;/p&gt;

&lt;p&gt;&lt;img width="649" height="410" border="0" alt="Facebook Add Super Wall" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Facebook%20Add%20Super%20Wall_thumb.png" /&gt; &lt;/p&gt;

&lt;p&gt;If the anecdotal accounts of my friends are anything to go by, at this point most people just go ahead and click the big Add button. A curious user can read the laconic and non-descriptive Developer's Description. An especially cautious user can click the tiny &amp;quot;More information about &amp;lt;application&amp;gt;&amp;quot; link to view an About page: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Facebook%20Super%20Wall%20(Full).png"&gt;&lt;img width="248" height="480" border="0" alt="Facebook About Super Wall" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Facebook%20Super%20Wall%20(Full)_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you do add the application, unless you're careful to uncheck &amp;quot;Publish stories in my News Feed and Mini-Feed&amp;quot;, you'll end up telling all your friends that you've just added the app to your profile (in the manner of the original news feed entry shown above). The app has enlisted your unwitting help in perpetuating its pointless mystery. &lt;/p&gt;

&lt;p&gt;That mystery would, in fact, seem to be the basis for the viral distribution model of many Facebook apps. I have trouble with this approach, being founded on a disregard for a user's intelligence and precious time.This model relies entirely on mystery to entice you add the application—and then banks on the fact that, once you add an application to your profile, you'll just leave it there rather than remove it. This is fundamentally deceptive. &lt;/p&gt;

&lt;p&gt;(The deception is compounded in cases like the one above, in which the app developer has deliberately incorporated a &lt;em&gt;huge &lt;/em&gt;amount of white space into their description. Below the app's description, Facebook displays commentary from friends and other users of the app about the app itself. The obvious purpose of incorporating lots of white space into the description is to push all the commentary far below the fold, the better to leave the app's potential users uninformed.) &lt;/p&gt;

&lt;p&gt;That a Facebook app would hide information about itself suggests the app offers no persistent, real value. If it were actually valuable, the app would employ all the means at the disposal of a normal web site to balance the amount of value they provide to user with the degree of commitment they require from the user. For example, a normal site might let a curious potential customer: start a process but not finish it; read content but not write content; do something a fixed number of times; use the site for a trial period; perform certain basic operations but not other, more interesting ones; etc. Even the most brain-dead web site at least presents information about itself &lt;em&gt;first&lt;/em&gt;, before making you sign up for the site. The first generation of Facebook apps generally forego all these techniques in favor of an all-or-nothing requirement that you add the app to your profile. &lt;/p&gt;

&lt;p&gt;Remove a Facebook app you don't like is not hard, requiring a simple click on the little &amp;quot;X&amp;quot; in the app's profile box. Still, it's a tiny bit of work, and the work adds up with every app you try. I have to believe that most people will eventually tire of removing applications, and therefore tire of adding them. That in turn means the Facebook world is biased in favor of the first set of Facebook apps a user comes into contact with (i.e., all the apps used by their initial Facebook friends), and impairs the ability of later apps to succeed. &lt;/p&gt;

&lt;p&gt;One could argue that it's in the interests of Facebook and an app's developer to force a user to agree to an app's terms of use before they can use it. And yet somehow the rest of the Internet doesn't have this problem. In the normal web, users implicitly agree to a &amp;quot;browse wrap&amp;quot; agreement whenever they visit the site, conferring a degree of legal protection to the site. Presumably this same level of protection extends to browsing Facebook apps, so it's unclear why Facebook would be more concerned about this than sites on the open web. &lt;/p&gt;

&lt;p&gt;I also find it hard to stomach the presumption that, when you add an app on Facebook, by default the platform and app presume to advertise that the app is now part of your identity. That's absurd. &lt;em&gt;You haven't even seen what the app does.&lt;/em&gt; What else in the world works this way? When you pick up a book in a bookstore to &lt;em&gt;consider&lt;/em&gt; buying it, are you really prepared to declare to everyone you know that you've picked up the book? The news feed entries about adding applications seem like nothing more than spam. They do, however, also also serve Facebook's ulterior goal of giving every user the illusion of social activity, regardless of how many friends they have or how active those friends are. &lt;/p&gt;

&lt;p&gt;All the behavior described here appears to stem from a combination of deliberate platform limitations, unintentional platform limitations, &lt;em&gt;de facto&lt;/em&gt; conventions that arose around the plaform's first apps, and plain bad design. A newer generation of apps do let you see a tiny bit of their functionality before you the add the application to your profile, but what you can see is generally still a very limited subset of what the app does. &lt;/p&gt;

&lt;p&gt;Regardless of their intent, it's fascinating to see Facebook facilitate such a closed app adoption model—and still create a successful and vibrant application platform. Clearly there are a huge number of people who don't mind (yet) adding unknown applications to their profile, nor do they mind (yet) advertising that fact to the world. What's odd is that those same users don't tolerate the same experience on every other web site. I'm hopeful those users will eventually turn away from Facebook's unnecessarily mysterious apps, and eventually force those apps to open their front doors as wide as the rest of the web.&lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/flowstate/~4/SW3QxXikmXo" height="1" width="1"/&gt;</content>


    </entry>
    <entry>
        <title>Zune: a fine music subscription device</title>
        <link rel="alternate" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/01/zune-a-fine-mus.html" />
        <link rel="replies" type="text/html" href="http://miksovsky.blogs.com/flowstate/2008/01/zune-a-fine-mus.html" thr:count="3" thr:updated="2008-04-03T14:32:13-07:00" />
        <id>tag:typepad.com,2003:post-43290784</id>
        <published>2008-01-10T22:08:00-08:00</published>
        <updated>2008-01-10T22:08:00-08:00</updated>
        <summary>Last month I received a Microsoft Zune 80 as a gift. (Thanks, Johnny!) Having used the device for several weeks now, I wrote up some opinions of that experience to send to a friend on the Zune team, and have...</summary>
        <author>
            <name>Jan Miksovsky</name>
        </author>
        
        
<content type="html" xml:lang="en-US" xml:base="http://miksovsky.blogs.com/flowstate/">
&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Last month I received a Microsoft Zune 80 as a gift. (Thanks, Johnny!) Having used the device for several weeks now, I wrote up some opinions of that experience to send to a friend on the Zune team, and have decided to share those thoughts here as well.&lt;/p&gt; &lt;p&gt;My experience with Zune actually goes back a few months, to when I first subscribed to the Zune music service without actually owning a Zune device. I'm partial to having a &lt;strong&gt;music subscription&lt;/strong&gt; rather than &amp;quot;owning&amp;quot; tracks. This is due to personal past experiences wrestling with DRM, and the sense of freedom I find in paying a flat fee for unlimited music. For $15/month I can listen to whatever I want within the reasonably spacious Zune Marketplace. In practice I could use the same amount to buy a big pile of audio tracks from iTunes, but for me a subscription enables a freer sense of experimentation. Case in point: a relative who visited over the holidays wanted to share music by an obscure Chilean musician. It felt great to listen to several esoteric albums through the subscription, and there's simply no way I would have felt good forking over money on the spot to listen to something I might never listen to again.&lt;/p&gt; &lt;p&gt;Nevertheless, owning a Zune in an iPod world feels akin to belonging to an oppressed religious minority. Discussions about the Zune with fellow Zune owners must be conducted in secret, lest the conversation be overheard by the dogmatic iPod-wielding masses. This is too bad, since I found the second-generation Zune client software and the Zune device itself to work quite well in practice.&lt;/p&gt; &lt;p&gt;&lt;a href="http://miksovsky.blogs.com/photos/uncategorized/2008/01/10/zune_player.png"&gt;&lt;img width="640" height="480" border="0" alt="Zune_player" title="Zune_player" src="http://miksovsky.blogs.com/flowstate/images/2008/01/10/zune_player.png" /&gt;&lt;/a&gt;


 &lt;/p&gt; &lt;p&gt;The Zune client on Windows generally looks attractive. The client UI is designed carefully enough to reward a close look:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;I found it trivial to find new music, download it, and sync it to the Zune. YMMV.&lt;/li&gt; &lt;li&gt;The original Zune client felt like a warmed-over skin for Windows Media Player, while the new one feels distinct enough to have its own style. The swirly background fractal may not be to your taste, but at least it's making a statement. I like it.&lt;/li&gt; &lt;li&gt;A very subtle visual orange/pink gradient animates in the background at the bottom of the window when music is playing. I didn't notice this until I tried to take screenshots for the image above and compared them. It's similar to, but much more subdued than, the background effect in Windows Media Center. I assume the effect is there to confer a (slight) sense of movement.&lt;/li&gt; &lt;li&gt;The UI makes extensive use of elements that come alive or reveal more detail on hover, such as scroll bars, the volume label, the device/disc/playlist icons in the lower left.&lt;/li&gt; &lt;li&gt;The five-star rating system from Media Player always seemed to be more detail than I cared to supply. The Zune client replaces this with three simple states: neutral, I Like It, or I Don't Like It.&lt;/li&gt; &lt;li&gt;The client makes good use of web-style navigation, a style I've referred 
to as a &lt;a href="http://miksovsky.blogs.com/flowstate/2005/10/bbop_the_ubiqui.html"&gt;BBOP&lt;/a&gt; 
UI (Buttons, Back, One task, Page-based). My only complaint is that the little back 
arrow in the upper left disappears in the Settings area, which is treated like a 
giant modal dialog. I think that's a mistake—if you're going to offer web-style 
UI with a Back button, you really &lt;em&gt;have&lt;/em&gt; to offer the Back button on 
every page, or you're really going to confuse the user. I can sympathize with 
the designers' dilemma, though. It's hard for client software designers to 
accept the fact that a user might want to walk away a page in which data has 
been entered—without making an explicit command to save their changes or cancel 
the operation. People do this every day on the web without issue. The Settings 
area should offer a Back button, and if the user happens to click it and loses 
it, so be it. That's how virtually all web pages already work.&lt;/li&gt; &lt;li&gt;I was happy to discover that I could sync recorded TV shows from my Windows Media Center to the Zune. This worked well overall, even if video files did have to go through a slow conversion process. One annoyance was that the Videos view on the Zune client only shows the episode title, not the show title, air time, or episode description. This makes it hard to find the show you want to sync. I assume that essentially no time has been spent designing Zune and Media Center to coexist happily, and that minor issues like this will get resolved as Media Center integration improves in the future.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I'm no hardware guru, but the Zune device itself seems well designed.&lt;/p&gt; &lt;p&gt;&lt;img width="182" height="320" border="0" src="http://miksovsky.blogs.com/flowstate/WindowsLiveWriter/Zune%20Device.png" alt="Zune Device" /&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The out-of-box experience was reasonable.&amp;nbsp; &lt;/li&gt;

&lt;li&gt;The Zune 80 device itself is attractive and lightweight. &lt;/li&gt;

&lt;li&gt;The headphones seem better than most. My only complaint is that, like most headphones, you can't tell the Left and Right phones apart without looking closely at them to find a tiny &amp;quot;L&amp;quot; or &amp;quot;R&amp;quot;. It would be great if one could feel which one was which through some means (a raised letter, dots, whatever). Interestingly, the Zune cable already does something similar: there's a raised bump on one side of the connector so you can tell which of the otherwise identical flat surfaces on the connector needs to be facing up as you plug it in.&amp;nbsp; &lt;/li&gt;

&lt;li&gt;Just once I wish I could buy a device with an expensive screen that came with its own cheap plastic stick-on screen protector in the box, instead of having to hunt for an aftermarket screen protector myself. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The software on the Zune device also looks and feel pretty good.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The touchpad is an elegant way to scroll up and down through lists—while allowing you to navigate laterally across lists to the left or right. &lt;/li&gt;

&lt;li&gt;The UI uses animated transitions to good effect. &lt;/li&gt;

&lt;li&gt;I wish the Zune device UI weren't &lt;em&gt;quite&lt;/em&gt; so minimalist. It feels like Microsoft is trying to out-minimize Apple by pursuing &lt;a href="http://miksovsky.blogs.com/flowstate/2005/07/the_impenetrabl.html"&gt;Apple's desire for a UI that's clean to the point of inscrutability&lt;/a&gt;. Case in point: I couldn't find the UI for turning on Shuffle. Through trial and error I discovered that pressing the middle of the touchpad brought up a context menu of sorts which included the Shuffle command. If hardware buttons must be context sensitive to keep down the number of buttons, I always appreciate an on-screen indication of what they're going to do if I press them now. Windows Mobile does a decent job of this by always showing what the two soft buttons directly below the screen will do. &lt;/li&gt;

&lt;li&gt;I'm really curious about the decision to have the main menu scroll. In the above image, you can see that the designers have very carefully sized and positioned the menu items so that one item (&amp;quot;podcasts&amp;quot;) is clipped at the bottom of the screen. This is a great way to indicate that the user can scroll down to see more items without having to resort to a heavy-handed scroll bar. Very elegantly done, yes? So, how many additional menu items do you think you will gain access to if you scroll down? &lt;em&gt;One&lt;/em&gt;. One! If you scroll down, you'll see one more item (&amp;quot;settings&amp;quot;). I'd be inclined to dismiss this as insanity, if it weren't for the careful attention to detail here. It would have been trivial to position and size the text slightly differently to get all the text to fit on the screen without scrolling. More to the point, it would have a been a &lt;em&gt;lot&lt;/em&gt; easier to develop. I can only conclude that making the menu feel more dynamic (by forcing the user to scroll) felt better than offering a completely static menu. &lt;/li&gt;

&lt;li&gt;The Photos area was fine, but I was disappointed the device doesn't include a rotation sensor like the iPhone (or most modern digital cameras). This means that, when looking at photos, valuable screen real estate is often wasted, and pictures are shown at a size smaller than that of the screen.&lt;/li&gt; &lt;li&gt;The Zune offers a modest personalization option: you can set the background of the main menu to a photo. Surprisingly, that was entirely sufficient for me to feel like I'd made the device mine. Many other devices do this, of course, but here the trick felt a particularly effective because the main menu itself is so minimal.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;In putting the device through its paces, I ran into more than a few issues:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The Zune client incorrectly catalogued a few albums under the wrong artist. This appears to be a &lt;a href="http://support.microsoft.com/?id=945319"&gt;bug&lt;/a&gt; introduced during the upgrade from Zune 1.x to Zune 2.0. &lt;/li&gt;

&lt;li&gt;I was puzzled why the Zune client doesn't offer a context menu on every UI element a user might conceivably want to right-click on. There are no context menus on many online store data elements, for example. A UI that makes inconsistent use of context menus can be pretty frustrating, here all the more so because context menus are a nearly perfect way to offer a rich set of commands without cluttering the UI. &lt;/li&gt;

&lt;li&gt;I'd prefer a Now Playing area in the client that showed what was playing without a distracting album art visualization. &lt;/li&gt;

&lt;li&gt;The Zune Marketplace often appears to get confused as to which online tracks are already in my collection. &lt;/li&gt;

&lt;li&gt;The client frequently hiccups when I move between PCs. One of the major benefits of a music subscription is being able to move from one PC to another and not have to go through the absurd exercise of copying massive piles of audio bits everywhere I want to listen to music. The Zune client sometimes gets confused if I switch PCs and try to listen to music through the subscription. Signing out and back in always fixes the problem, but that's an irritating workaround. I'm hoping the client will eventually do a better job of automatically signing in whenever one switches to a different PC. &lt;/li&gt;

&lt;li&gt;I had trouble syncing over WiFi: nothing would happen, or else I would see a cryptic error message. I eventually discovered that the error message would go away if I got closer to the wireless router, so presumably the error message was just a (very bad) way of saying the WiFi signal wasn't strong enough. &lt;/li&gt;

&lt;li&gt;The aforementioned Settings area pegs its buttons to the lower right, which is a bad idea. On a large monitor, these controls all but disappear in a distant corner of the screen, far from the content they pertain to. This common UI flub occurs when &lt;a href="http://miksovsky.blogs.com/flowstate/2005/07/if_a_ui_sketch_.html"&gt;designers optimize too much for a specific window size&lt;/a&gt;. &lt;/li&gt;

&lt;li&gt;While home videos on my local PC show up in the Zune library, videos on a networked PC don't show up at all, with no explanation. I still can't figure this out. &lt;/li&gt;

&lt;li&gt;The Zune would make for a decent podcast player—if it weren't for a crippling bug: the Zune sometimes (randomly?) forgets what portion of the podcast already I've listened to. For me, being able to Resume a paused podcast is the feature that distinguishes a music player from a podcast player. The unreliability of this feature on the Zune nearly wipes out it's value as a podcast player. &lt;/li&gt;

&lt;li&gt;Both the Podcast and Videos areas are missing a crucial feature: the ability to remove a podcast or TV show when you're done listening or watching to it. A list of podcasts isn't like a list of songs you want to listen to over and over. It's more like a To Do list of things you want to listen to once. It's tedious to have to go back to your PC just to remove a podcast you've listened to or a TV show you've watched.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Overall, I'm pretty happy with my Zune 80. As a music player for an online music subscription service, the Zune works nearly flawlessly. It's less effective as a podcast or video player, but I'm looking forward to seeing those deficiencies addressed. &lt;/p&gt; &lt;p&gt;I'm not sure what Microsoft can do about Zune's biggest handicap: its brand. People like buying Apple products because of what they feel the purchase says about them. At this point, buying a Zune either tells people that you're a Microsoft-loving sap, or else so uninformed as to be unaware that you've just purchased a second-place music player. Virtually all of this bad vibe is attributable to the unshakable feeling that Microsoft is trying too hard to be cool. I actually think Microsoft has made some bold and innovative moves in designing and marketing the Zune, but all that works has to fight against the grain of the intrinsically uncool brand of Microsoft itself. And for what? I can't think of a single way in which the Microsoft brand has helped the Zune in any way, and one can only wonder how much more successful the Zune would be if it had been marketed as a completely independent entity. To their credit, the Zune folks at Microsoft are painfully aware of this enormous marketing handicap, and I wish them the best of luck overcoming it.&lt;/p&gt; &lt;p&gt;In the meantime, I'll be happily listening to all the music I can eat on my Zune.&lt;/p&gt;&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/flowstate/~4/SrpG7P73DVE" height="1" width="1"/&gt;</content>


    </entry>
 
</feed><!-- ph=1 --><!-- nhm:dynamic-ssi -->
