<?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>fill the void &#187; design</title>
	<atom:link href="http://www.bdunagan.com/category/design/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bdunagan.com</link>
	<description></description>
	<lastBuildDate>Sat, 28 Aug 2010 06:42:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Don&#8217;t make users feel bad</title>
		<link>http://www.bdunagan.com/2010/06/15/dont-make-users-feel-bad/</link>
		<comments>http://www.bdunagan.com/2010/06/15/dont-make-users-feel-bad/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 03:27:51 +0000</pubDate>
		<dc:creator>bdunagan</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.bdunagan.com/?p=983</guid>
		<description><![CDATA[Matt Drance posted an interesting thought the other day about the average consumer rejecting bad user experience. When helping out my parents or other non-technical folk, I&#8217;ve never found that. At least, not exactly. Average consumers do not think about user experience. They don&#8217;t think about workflows, calls to action, marketing copy, or corner cases. [...]]]></description>
			<content:encoded><![CDATA[<p>Matt Drance posted an interesting thought the other day about <a href="http://www.appleoutsider.com/2010/05/23/features-dont-matter-anymore/">the average consumer rejecting bad user experience</a>. When helping out my parents or other non-technical folk, I&#8217;ve never found that. At least, not exactly. Average consumers do not think about user experience. They don&#8217;t think about workflows, calls to action, marketing copy, or corner cases. Consumers just use stuff. When something goes wrong, it&#8217;s their fault. They internalize any problems. They blame themselves.</p>
<p>When consumers have a great user experience, they don&#8217;t notice. They don&#8217;t wonder how you designed the product so well. They just use it and move on, but that&#8217;s a good thing. They shouldn&#8217;t feel bad while using your product. Don&#8217;t make users feel bad because eventually they&#8217;ll choose a better user experience as a coping mechanism.</p>
<p>User experience: Because your users internalize your product&#8217;s failures.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdunagan.com/2010/06/15/dont-make-users-feel-bad/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Measuring Design Changes</title>
		<link>http://www.bdunagan.com/2010/05/12/measuring-design-changes/</link>
		<comments>http://www.bdunagan.com/2010/05/12/measuring-design-changes/#comments</comments>
		<pubDate>Thu, 13 May 2010 02:38:44 +0000</pubDate>
		<dc:creator>bdunagan</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[marketing]]></category>

		<guid isPermaLink="false">http://www.bdunagan.com/?p=867</guid>
		<description><![CDATA[A week ago, I replaced the Flickr photos in my blog&#8217;s header with iPhone OS apps: Retrospect Touch and Dollar Clock. Since I hadn&#8217;t updated Flickr since Christmas, the iPhone/iPad apps seemed more appropriate, and I was curious to see if the switch affected the download numbers. Here&#8217;s the before and after: Today, I checked [...]]]></description>
			<content:encoded><![CDATA[<p>A week ago, I replaced the Flickr photos in my blog&#8217;s header with iPhone OS apps: Retrospect Touch and Dollar Clock. Since I hadn&#8217;t updated Flickr since Christmas, the iPhone/iPad apps seemed more appropriate, and I was curious to see if the switch affected the download numbers. Here&#8217;s the before and after:</p>
<p><img src="/files/blog_header_change.png"/></p>
<p>Today, I checked the numbers in iTunes Connect for Dollar Clock. At first, I only looked at the total downloads, in the left graph, where the hash mark notes the header change. Clearly, the header change increased the downloads. Then I looked at the purchases and updates separately, in the right graph, and the pattern was less clear. During the week after the header change (the bar after the hash mark), more of the downloads were updates, not purchases.</p>
<p><img src="/files/Dollar_Clock_Purchases.png"/></p>
<p>During the same week I changed the header, Dollar Clock 2.0 was posted to the App Store, and many people downloaded the update that week. The total downloads indicates my header change had a significant effect, but the breakdown reveals confounding variables. Perhaps if I had more variables, I would find that the header change had absolutely no effect.</p>
<p>Or maybe I just wanted an excuse to use Tufte&#8217;s <a href="http://en.wikipedia.org/wiki/Small_multiple">small multiples. <img src='http://www.bdunagan.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdunagan.com/2010/05/12/measuring-design-changes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress Tip: Recent, Relevant, and Random Blog Posts</title>
		<link>http://www.bdunagan.com/2010/04/09/wordpress-tip-recent-relevant-and-random-blog-posts/</link>
		<comments>http://www.bdunagan.com/2010/04/09/wordpress-tip-recent-relevant-and-random-blog-posts/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 04:36:08 +0000</pubDate>
		<dc:creator>bdunagan</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[marketing]]></category>

		<guid isPermaLink="false">http://www.bdunagan.com/?p=777</guid>
		<description><![CDATA[12 May 2010 Update: Interestingly, Google Analytics revealed that in the month since adding the sidebar, there&#8217;s been no significant change in the average time spent on the site (54s) or pages per visit (1.3). I still like it. Recently, I thought it would be interesting to add a sidebar to my WordPress blog. I [...]]]></description>
			<content:encoded><![CDATA[<p><b>12 May 2010 Update</b>: Interestingly, Google Analytics revealed that in the month since adding the sidebar, there&#8217;s been no significant change in the average time spent on the site (54s) or pages per visit (1.3). I still like it.</p>
<p>Recently, I thought it would be interesting to add a sidebar to my WordPress blog. I figured a short list of recent posts, relevant posts, and random posts would help surface information people might find useful. Here&#8217;s a quick rundown of how to add these with the PHP code below:</p>
<ul>
<li><i>Recent Posts</i>: one-liner with simple WP PHP call
<li><i>Random Posts</i>: a couple lines because I wanted random posts but sorted descending by date (not simply <tt>get_posts('numberposts=5&#038;orderby=rand&#038;order=desc');</tt>)
<li><i>Relevant Posts</i>: also called related posts, a template-based plugin worked best for me: <a href="http://mitcho.com/code/yarpp/">Yet Another Related Posts Plugin (YARPP)</a>
</ul>
<pre class="brush: php;">
&lt;div class=&quot;sidebar&quot;&gt;
&lt;b&gt;Recent&lt;/b&gt;
&lt;ul&gt;
&lt;?php wp_get_archives('title_li=&amp;type=postbypost&amp;limit=5'); ?&gt;
&lt;/ul&gt;
&lt;?php related_posts(); ?&gt;
&lt;b&gt;Random&lt;/b&gt;
&lt;ul&gt;
&lt;?php
   // Get five random posts.
   $rand_posts = get_posts('numberposts=5&amp;orderby=rand');
   // Sort them (by date).
   asort($rand_posts);
   // Reverse them.
   $rand_posts = array_reverse($rand_posts);
   foreach( $rand_posts as $post ) :
?&gt;
    &lt;li&gt;&lt;a href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/li&gt;
&lt;?php endforeach; ?&gt;
&lt;/ul&gt;
&lt;/div&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bdunagan.com/2010/04/09/wordpress-tip-recent-relevant-and-random-blog-posts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tracking and Staging WordPress Changes</title>
		<link>http://www.bdunagan.com/2010/03/29/tracking-and-staging-wordpress-changes/</link>
		<comments>http://www.bdunagan.com/2010/03/29/tracking-and-staging-wordpress-changes/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 04:38:39 +0000</pubDate>
		<dc:creator>bdunagan</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.bdunagan.com/?p=691</guid>
		<description><![CDATA[Making template/theme changes to a live blog is a bit frustrating. While mucking around with CSS or a theme header, I occasionally render this blog completely illegible or obviously broken, then I scramble to revert my changes, hoping I remember the original code correctly. Editing is a pain without source control or a staging process [...]]]></description>
			<content:encoded><![CDATA[<p>Making template/theme changes to a live blog is a bit frustrating. While mucking around with CSS or a theme header, I occasionally render this blog completely illegible or obviously broken, then I scramble to revert my changes, hoping I remember the original code correctly. Editing is a pain without source control or a staging process and very different from app development. Too different. So, I figured out how to track all my WordPress changes with git and stage them on a subdomain on DreamHost.</p>
<p><b>Tracking Changes</b></p>
<p>I&#8217;m using git and GitHub, but any scm would be fine. I&#8217;ll run through the steps here. (Keep in mind I use WordPress&#8217;s update system for version and plugin updates; I just want to track my own changes.)</p>
<ol>
<li>Removed unused themes and plugins to reduce installation size to 25MB (<tt>du -h</tt>)
<li>Created a private repo on GitHub
<li>Setup git in blog&#8217;s root directory on DreamHost:
<pre>
git init
# Didn't bother ignoring any files.
git add .
git commit -m "current state of blog"
git remote add origin git@github.com:username/myblog.git
git push origin master
</pre>
<li>Edited the CSS file using WordPress&#8217;s editor then listed the changes (<tt>git status</tt>) and diff&#8217;d the changed file using git (<tt>git diff style.css</tt>)
<li>Decided my edits didn&#8217;t look good on the live blog and reverted them (<tt>git checkout style.css</tt> or <tt>git reset HEAD --hard</tt>)
<li>Ran <tt>mysqldump</tt> then <tt>gzip</tt> on the blog db and added it to git also
<li>Updated <tt>.htaccess</tt> to hide the new <tt>.git</tt> directory (<a href="http://wiki.dreamhost.com/Htaccess#Deny_access_to_.22hidden.22_files">DreamHost</a>): <tt>RedirectMatch 403 /\..*$</tt>
</ol>
<p>Seeing the changed files in git is fantastic, and at this point, I wonder how I got by for so long without versioning my WordPress changes. But tracking changes isn&#8217;t enough.</p>
<p><b>Staging Changes</b></p>
<p>Now, I can easily revert horrible template changes, but anyone hitting the blog during that time will still see it. It reminds me of how the early Facebook team used to directly edit the HTML on the production site when they were adding features. Debugging changes on a live site is annoying and unnecessary. Instead, just use a subdomain. Here are my steps:</p>
<ol>
<li>Created a subdomain on DreamHost for the staging area <i>and</i> assigned it a private IP/enabled SSL (I require <a href="http://codex.wordpress.org/Administration_Over_SSL">SSL for administration</a>)
<li>Pulled the current repo in that new subdomain&#8217;s root directory on DreamHost:
<pre>
git init
git remote add origin git@github.com:username/myblog.git
git pull origin master
</pre>
<li>Pointed this instance of WordPress to the new subdomain by adding <tt>WP_HOME</tt> and <tt>WP_SITEURL</tt> in <tt>/wp-config.php</tt> according to <a href="http://codex.wordpress.org/Changing_The_Site_URL">WordPress&#8217;s &#8220;Changing The Site URL&#8221; page</a> (I want to use the same database so I didn&#8217;t change those entries)
<li>Waited a couple hours while the DNS changes propagated for the new subdomain
<li>Logged into WordPress on the subdomain and changed a couple lines of CSS
<li>Checked out the result on the subdomain and committed it to GitHub
<li>Pushed the commit to GitHub and pulled it down in the live blog
<li>Verified the change on the live blog
</ol>
<p>Staging changes is so much more comforting. Before, I wondered how many visitors hit my site mid-change (which sometimes took hours) and left annoyed. At least now I can think, &#8220;Actually, I designed it that way intentionally&#8230;&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdunagan.com/2010/03/29/tracking-and-staging-wordpress-changes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Blog Breadcrumbs: Relevance, Recognition, and Trust</title>
		<link>http://www.bdunagan.com/2009/11/11/blog-breadcrumbs-relevance-recognition-and-trust/</link>
		<comments>http://www.bdunagan.com/2009/11/11/blog-breadcrumbs-relevance-recognition-and-trust/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 05:04:59 +0000</pubDate>
		<dc:creator>bdunagan</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[marketing]]></category>

		<guid isPermaLink="false">http://www.bdunagan.com/?p=415</guid>
		<description><![CDATA[Whenever I encounter a strange error message or a similar roadblock while programming, I google for answers. This approach leads to a wide array of websites, almost all blogs. (In fact, most of this site&#8217;s traffic comes from Google, presumably from the same approach.) As soon as I get to the site, I want to [...]]]></description>
			<content:encoded><![CDATA[</p>
<p>
Whenever I encounter a strange error message or a similar roadblock while programming, I google for answers. This approach leads to a wide array of websites, almost all blogs. (In fact, most of this site&#8217;s traffic comes from Google, presumably from the same approach.) As soon as I get to the site, I want to quickly assess the post&#8217;s relevance and my level of trust. If the site is interesting and useful, I&#8217;ll trust it more if I come across answers on it again&#8230;if I recognize it. When I designed this blog, I tried to add these same <a href="http://en.wikipedia.org/wiki/Breadcrumb_%28navigation%29">breadcrumbs</a> that I look for when I google: relevance, recognition, and trust.
</p>
<h3>Relevance</h3>
<p>
When I click on a Google link, I want to figure out as quickly as possible if the page is relevant. So I look around for a date, an author, tags, and a comment count.
</p>
<p><img src="/files/WP_permalinks.png"/></p>
<p>
I expect the date to be embedded in the URL, but unfortunately, WordPress&#8217;s default permalink format is arcane: <tt>http://www.bdunagan.com/?p=123</tt>. The URL format is displayed to every single visitor, and yet, all this conveys is how many times I&#8217;ve posted before this. It&#8217;s a sad default when the very next option conveys both timestamp and title: <tt>http://www.bdunagan.com/2009/11/05/sample-post/</tt>. The visitor can quickly glance at the URL and instantly know the post&#8217;s age and topic. The default permalink format is really an indication of the blog creator&#8217;s laziness.
</p>
<p><img src="/files/WP_default_theme_details.png"/></p>
<p>
The URL is easy. One step further is the post&#8217;s meta information. I want to know the author (for a site like <a href="http://www.tuaw.com/">TUAW</a>), tags, number of comments, and frankly, the date again (as I might be looking at the homepage where the date isn&#8217;t in the URL). All that information gives me a better idea of whether or not the post is relevant to my goals. Including that information next to the title makes sense. However, the default WordPress theme hides this information, shown above, at the bottom of the post instead of next to the title and <a href="http://en.wikipedia.org/wiki/Above_the_fold">above the fold</a>. Worse yet, comments follow that section, so I can&#8217;t easily page-down to the bottom of the screen, as it might be tucked away in the middle.
</p>
<h3>Recognition</h3>
<p><img src="/files/WP_default_theme.png"/></p>
<p>
The default theme for WordPress is Michael Heilemann&#8217;s Kubrick. It&#8217;s a fine theme, but far too many authors stay with it, making it difficult for new visitors to trust the site and for repeat visitors to recognize the site. (Moreover, many <a href="http://en.wikipedia.org/wiki/Spam_blog">spam blogs</a> use this theme as well, making sites using it more difficult to trust.) Selecting an alternate theme is ridiculously easy; just go to the admin section, click Appearance, find a theme, and click &#8220;Activate&#8221;. WordPress is nicely architected such that nothing more is required. And with the large number of free, built-in themes, selecting a relatively unique one is no problem. Many insert the post&#8217;s meta information near the title, rather than at the post&#8217;s end. Creating an identifiable site helps visitors recognize you. Going with Kubrick is just lazy.
</p>
<h3>Trust</h3>
<p>
A new visitor to this site has no idea who I am. No trust at all. The only thing going for the site is the fact that it showed up in Google as possibly relevant to the visitor&#8217;s goal. In addition to the content, I put a quick description of myself at the bottom. I put links to Twitter, LinkedIn, and Flickr. Each represents a one-click path for the visitor to find out a bit about me. No guarantee it will be interesting, but it does establish I&#8217;m a real person who writes Mac software. I want to establish a modicum of trust with the visitor. It&#8217;ll help the next time the visitor comes to the site and recognizes it.
</p>
<p>
Matt Gemmell&#8217;s <a href="http://mattgemmell.com/2009/10/27/accessible-blog-redesign">blog redesign</a> is a great example of this trust in action. I visited his site yesterday but immediately thought I&#8217;d clicked on the wrong link; the theme was completely different. Instead of the graphic-rich white-on-black theme I was accustomed to, the site was text-rich black-on-white with lots of white space. I went over to <a href="http://instinctivecode.com/">Instintive Code</a> to see if I&#8217;d mistakenly gone to Gemmell&#8217;s other blog. Nope, no work blog. So I went to the blog&#8217;s index page and saw the title &#8220;Accessible Blog Redesign&#8221;. Ah, a redesign. Still, there was a brief period when I didn&#8217;t trust the page I landed on; it wasn&#8217;t the one I built my trust on.
</p>
<p>
To drive home the importance of breadcrumbs for trust, visit <a href="http://www.shirky.com/weblog">Clay Shirky&#8217;s blog</a>. Shirky is an <a href="http://www.youtube.com/watch?v=LabqeJEOQyI">impressive speaker</a> and a <a href="http://www.amazon.com/Here-Comes-Everybody-Organizing-Organizations/dp/1594201536">great writer</a>. When I read a tweet last spring about <a href="http://www.shirky.com/weblog/2009/03/newspapers-and-thinking-the-unthinkable/">his sharp critique on the demise of newspapers</a>, I immediately clicked through to the blog post. But I landed on a standard WordPress site with the default Kubrick theme. Weird, seemed like a guy as aware as Shirky would do something a bit more creative. I looked back through the blog&#8217;s history. Hmm, created a month ago with only three posts so far. More weird. The blog came from Shirky&#8217;s domain, but it had no links back to the homepage. And, Shirky&#8217;s homepage didn&#8217;t have any links to the blog. At this point, I&#8217;m very skeptical about the blog. I actually googled around to make sure other <a href="http://radar.oreilly.com/2009/03/clay-shirkys-newspapers-and-thinking-the-unthinkable.html">authoritative people</a> linked to the blog articles, which they did. Now, nine months on, the blog still only has six posts and no links. I still find it weird. So many missing breadcrumbs.</p>
<h3>Iterate</h3>
<p>
Ironically, in writing this blog post, I noticed that my single posts didn&#8217;t include the number of comments up at the top like the main index does. Fixed that. And I added a nice favicon from <a href="http://glyphish.com/">Glyphish</a>. Iterate, iterate, iterate.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdunagan.com/2009/11/11/blog-breadcrumbs-relevance-recognition-and-trust/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Design Iteration</title>
		<link>http://www.bdunagan.com/2009/10/01/design-iteration/</link>
		<comments>http://www.bdunagan.com/2009/10/01/design-iteration/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 06:55:17 +0000</pubDate>
		<dc:creator>bdunagan</dc:creator>
				<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://www.bdunagan.com/?p=382</guid>
		<description><![CDATA[The feature I alluded to in my &#8220;Rereading Info.plist&#8221; post is a logging preference. It has two requirements: user-configurable (i.e. not code) but not immediately visible. When a user starts having technical issues and calls tech support, they find out how to turn on logging, and with that output, development has a better idea of [...]]]></description>
			<content:encoded><![CDATA[<p>
The feature I alluded to in my <a href="http://www.bdunagan.com/2009/09/30/rereading-info-plist/">&#8220;Rereading Info.plist&#8221; post</a> is a logging preference. It has two requirements: user-configurable (i.e. not code) but not immediately visible. When a user starts having technical issues and calls tech support, they find out how to turn on logging, and with that output, development has a better idea of what the issues are.
</p>
<p>
A year ago, when I first implemented it, I was averse to adding a secret preferences window, because I couldn&#8217;t think of a natural place for accessing it. Instead, I added a quick key-value pair to Info.plist. Users wouldn&#8217;t happen across it; most of them probably don&#8217;t know app bundles are folders. But the preference was there if needed. So, I shipped that. Multiple times. Recently, I decided this preference needed to be dynamic, for those times when a user wants to enable logging without restarting the application. I set up an <tt>NSTimer</tt> to read the key-value pair from Info.plist every minute. After finding out the dictionary was cached, I figured out how to manually read it. Problem solved.
</p>
<p>
And yet, I completely ignored all the signs that pointed to a bad user experience. The workflow for setting the preference was complicated to explain to other developers (who know app bundles are folders). Non-developers asked for the specific steps multiple times. And yes, the Info.plist dictionary is <i>cached</i>, implying it&#8217;s for general application information, not debug settings. Still, it took two thoughtful comments on my other post to snap me out of my developer haze and think about the feature from a user&#8217;s perspective.
</p>
<p>
The goal of the feature was to hide the user-configurable preference from immediate view, not to bury it completely. The Info.plist workflow didn&#8217;t work, so I started brainstorming. How about a secret preference window? Fine, but where would it go? Perhaps an <tt>NSMenuItem</tt>, but that&#8217;s not hidden. Then I realized an alternate <tt>NSMenuItem</tt> was the perfect fit: hold the option key and &#8220;Preferences&#8230;&#8221; switches to &#8220;Secret Preferences&#8230;&#8221;. A user won&#8217;t stumble across it, but the menu item is a key away. Moreover, an <tt>NSTimer</tt> isn&#8217;t necessary; Cocoa Bindings make a preference change instant. That&#8217;s what I implemented today.
</p>
<p>
Never be afraid to iterate your design. The product I work on went through <i>many</i> iterations before arriving at its current form. Apple agrees. When I&#8217;ve talked to their UI evangelists, John Geleynse and Eric Hope, both consistently cite design iteration as one of the most important processes for developing award-winning applications (along with <a href="http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/MobileHIG/DesigningNativeApp/DesigningNativeApp.html#//apple_ref/doc/uid/TP40006556-CH4-SW2">product definition statements</a>). Most apps start out looking mediocre; the best user experiences are the culmination of many iterations. Keep iterating.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bdunagan.com/2009/10/01/design-iteration/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
