<?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>Perspx &#187; Software</title>
	<atom:link href="http://perspx.com/blog/archives/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://perspx.com</link>
	<description>Musings of a teenage programmer</description>
	<lastBuildDate>Thu, 20 May 2010 06:56:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Making Cocoa list views really fast</title>
		<link>http://perspx.com/blog/archives/1427/making-list-views-really-fast/</link>
		<comments>http://perspx.com/blog/archives/1427/making-list-views-really-fast/#comments</comments>
		<pubDate>Thu, 20 May 2010 06:55:20 +0000</pubDate>
		<dc:creator>Perspx</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Echofon]]></category>
		<category><![CDATA[lists]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Tweetie]]></category>

		<guid isPermaLink="false">http://perspx.com/?p=1427</guid>
		<description><![CDATA[It seems that many of the apps in use today rely on or display feeds or lists of data; be that a Twitter timeline, an RSS feed or a list of history in a version control system, there&#8217;s a common trend in UI for using lists.
But displaying lists in applications can be much more than trivial, certainly for applications on  ... ]]></description>
			<content:encoded><![CDATA[<p>It seems that many of the apps in use today rely on or display feeds or lists of data; be that a Twitter timeline, an RSS feed or a list of history in a version control system, there&#8217;s a common trend in UI for using lists.</p>
<p>But displaying lists in applications can be much more than trivial, certainly for applications on Mac OS X, especially when you have to deal with large quantities of data, and have to solve problems such as variable row heights or changes to this information.</p>
<p>Ever since using <a href="http://www.atebits.com/tweetie-mac/">Tweetie</a>, a Twitter client for Mac OS X, from a development point of view I was always curious as to how the list view for the Twitter timeline was implemented; hundreds of rows of tweets can be displayed in this control, and the performance hit appears to be minimal; scrolling is smooth, there doesn&#8217;t appear to be a huge memory footprint. So how is it done?</p>
<h2>Lists in Tweetie</h2>
<p>If you <a href="http://www.codethecode.com/projects/class-dump/">class-dump</a> Tweetie, you can see three classes at work:</p>
<ul>
<li><strong>ABScrollView</strong>: A subclass of <code>NSScrollView</code>. It&#8217;s not clear as to why there is this subclass but an <code>ABColor</code> object is used for the background (as opposed to an <code>NSColor</code>).</li>
<li><strong>ABTableView</strong>: A subclass of <code>ABScrollView</code> which is used as the list control.</li>
<li><strong>ABTableViewCell</strong>: The cell class used to display each row in <code>ABTableView</code>.</li>
</ul>
<p>The interesting part of the class hierarchy is contained in <code>ABTableView</code> and <code>ABTableViewCell</code>. <code>ABTableView</code> is a subclass of <code>ABScrollView</code> (<em>not</em> <code>NSTableView</code>) and is a control which can display a list of <code>ABTableViewCell</code>s. However the real misnomer here is the <em>cell</em> part, because <code>ABTableViewCell</code> is a subclass of <code>NSView</code>, and not <code>NSCell</code>.</p>
<p><a href="http://perspx.com/wp-content/uploads/2010/04/TweetieClassDiagram.png"><img class="aligncenter size-full wp-image-1434" title="Tweetie lists class diagram" src="http://perspx.com/wp-content/uploads/2010/04/TweetieClassDiagram.png" alt="" width="356" height="313" /></a></p>
<p>So essentially what we have here is an implementation of something similar to <code>NSCollectionView</code>, which has a set of subviews which each represent a row and have their own place in the view hierarchy. But how, then, is the Tweetie list view so performant?</p>
<pre class="prettyprint">@interface ABTableView : ABScrollView
{
    ...
    NSMutableDictionary *reusableTableCells;
    ...
}

...
- (id)reusableCellsArrayForIdentifier:(id)arg1;
- (id)dequeueReusableCellWithIdentifier:(id)arg1;
...
@end</pre>
<h3>Reusing Cells</h3>
<p>The answer seems to lie in a method declared on <code>ABTableView</code>, which is <code>-dequeueReusableCellWithIdentifier:</code>. For those of you who are iPhone developers, you will be familiar with a method on <code>UITableView</code> with <em>exactly</em> the same method signature.</p>
<p>For those who aren&#8217;t, I shall explain: certainly compared to simple <code>NSCell</code> instances, <code>NSView</code> instances are pretty expensive. In fact, <code>NSCell</code> is <em>actually designed</em> as a &#8220;mechanism for displaying text or images in an NSView without the overhead of a full NSView subclass&#8221;<sup>1</sup>. In light of this, if we have 100, 1,000 – or even more – rows in a list, we don&#8217;t want the overhead of 1,000 instances of <code>NSView</code>, each used to represent a row. What&#8217;s more is that most of these cached views are wasted, since 1,000 rows cannot be displayed in the viewport at the same time. The iPhone takes advantage of this, and ensures that there are only enough view (in this case <code>UIView</code>) instances to cover the height of the table view; if the associated rows are scrolled off screen, then the views are removed from the view hierarchy.</p>
<p>Scrolling works much like laying down track for a train by picking up track from behind it; when a row is scrolled so that it is no longer visible, it is removed from the table view and &#8220;enqueued&#8221; (ie stored in an array); when a row that is not visible is scrolled so that it becomes visible, the data source should first check to see if there are any enqueued views, and if so it is then added to the view hierarchy and displayed.</p>
<p>What this means is that hundreds of rows can be displayed in one control without a large performance hit, and is one of the optimizations that makes the iPhone UI so responsive.</p>
<h2>Lists in Echofon</h2>
<p>After class-dumping, you can see that Echofon implements their list views in pretty much the same way as Tweetie, using two main classes:</p>
<ul>
<li><strong>FastTableView</strong>: A subclass of <code>NSScrollView</code> which is the list control.</li>
<li><strong>FastTableCell</strong>: A subclass of <code>NSView</code> which represents a cell used for the table view.</li>
</ul>
<p><a href="http://perspx.com/wp-content/uploads/2010/04/EchofonClassDiagram.png"><img class="aligncenter size-full wp-image-1438" title="Echofon Class Diagram" src="http://perspx.com/wp-content/uploads/2010/04/EchofonClassDiagram.png" alt="" width="356" height="253" /></a></p>
<p>Although not as explicit as the enquing/dequeuing in Tweetie&#8217;s list control, it would <em>seem</em> that <code>FastTableView</code> does a similar job as it has declared on it <code>-popCellForRow:fromArray:</code> and <code>-popSpareCell</code>.</p>
<p>Also to note is the use of <code>NSControl</code> and <em>not</em> <code>NSView</code> as the superclass of the table &#8220;cell&#8221; object, unlike with Tweetie. I would guess that this is for some of the additions that <code>NSControl</code> provides, perhaps the target/action mechanism.</p>
<h2>Final word</h2>
<p>When displaying large amounts of data in a list, as many applications do, often <code>NSTableView</code> is not enough. It is a pretty performant class, but when you start doing things with variable row heights, it isn&#8217;t really cut for the job. Nor is a class such as <code>NSCollectionView</code>; again it doesn&#8217;t implement variable row heights and lots of items can slow it down.</p>
<p>It seems that using view objects for each row, which have an established presence in the view hierarchy is the way to go, if you have the optimizations on top of this. For one you get the added convenience of using instances of <code>NSView</code>, and not simply working with <code>NSCell</code>.</p>
<p>As a final note, a quote I recall from <a href="http://www.zarrastudios.com/ZDS/Home/Home.html">Marcus Zarra</a>&#8217;s <a href="http://www.amazon.com/Core-Data-Apples-API-Persisting/dp/1934356328">book on Core Data</a> says:</p>
<blockquote><p>The lesson I took away from that story is to expect my users to put thousands of times as much data into my application as I would ever consider reasonable</p></blockquote>
<p>When working with large quantities of data, it is these kinds of optimizations that make your app more responsive and provide a better experience to the user.</p>
<div id="footnotes">
<h2>Footnotes</h2>
<ol>
<li>From <a href="http://developer.apple.com/mac/library/documentation/cocoa/conceptual/ControlCell/Concepts/AboutControlsCells.html">Control and Cell Programming Topics for Cocoa: About Cells and Controls</a></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://perspx.com/blog/archives/1427/making-list-views-really-fast/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Application Demos</title>
		<link>http://perspx.com/blog/archives/1363/application-demos/</link>
		<comments>http://perspx.com/blog/archives/1363/application-demos/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 09:44:50 +0000</pubDate>
		<dc:creator>Perspx</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[demos]]></category>
		<category><![CDATA[users]]></category>

		<guid isPermaLink="false">http://perspx.com/?p=1363</guid>
		<description><![CDATA[You&#8217;ve created an awesome piece of software, which you have been working on for months. You&#8217;ve refined every aspect of it; the aesthetic qualities, the data model, the user interface and experience.
But now you need people to buy it. You release a demo version of your software which allows your potential customers to get a feel for the app and  ... ]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve created an awesome piece of software, which you have been working on for months. You&#8217;ve refined every aspect of it; the aesthetic qualities, the data model, the user interface and experience.</p>
<p>But now you need people to buy it. You release a demo version of your software which allows your potential customers to get a feel for the app and decide whether it&#8217;s right for them, or not. <strong>And in doing so, you screw up the entire thing.</strong></p>
<h2>Where demos suck</h2>
<p>It amazes me how many software companies get demo versions of their applications wrong. Demos <em>aren&#8217;t</em> a trial period for you of your users, <strong>but rather a trial period for your users of you and your software</strong>. And if you want to sell your app, you&#8217;d better make a good impression.</p>
<p>But time and time again, demo versions of applications aren&#8217;t done properly, and rather provide more friction for making sales than acting as a way of convincing your users that your software is worth them buying. Common areas where application demos fall down are:</p>
<ol>
<li>You have to <strong>register an account</strong> to download the demo.</li>
<li>The emphasis is placed on <strong>purchasing the app</strong> rather than downloading it.</li>
<li>The demo places a <strong>crippling restriction</strong> on the software that doesn&#8217;t let you get a proper feel for it. For example, restricting major features.</li>
<li>There is a <strong>time limit</strong> on the demo which pressures users into purchasing the full version.</li>
<li>An annoying <strong>window prompting you to buy the app</strong> is displayed at frequent intervals.</li>
</ol>
<p>All of these elements create a negative experience of you and your software, right from the very start. But what is it about some of these irritations that make such demos a bad experience for your users, and what are the alternatives?</p>
<h3>1. Account registration</h3>
<p>Everyone hates account registration. I – like most other people – already have too many online accounts, and to be quite honest, I don&#8217;t want any more.</p>
<p>But where this is even more of a problem for people who want to try out your apps before they buy is that <strong>you&#8217;re already putting rope around their neck</strong>. They may just want to try out your app but you are already asking them to make a partial commitment by signing up to try out the demo.</p>
<p style="text-align: center;"><a href="http://www.filemakertrial.com/nskto/form/entry.aspx?homepage=fm11_launch_try&amp;try=fm11_launch_try"><img class="aligncenter size-full wp-image-1364" style="border: 1px solid #aaaaaa;" title="Registering to download a FileMaker Pro Trial" src="http://perspx.com/wp-content/uploads/2010/03/filemaker_register_thumb.jpg" alt="" width="437" height="230" /></a></p>
<p>An example of this is with the <a href="http://www.filemakertrial.com/nskto/form/entry.aspx?homepage=fm11_launch_try&amp;try=fm11_launch_try">FileMaker Pro trial download</a>. Before you get a copy of the software to try out, you have to fill in a form, providing your name, address, operating system, and other market research questions such as how you heard about the product. This will be a huge turnoff for any potential customers because they will be less inclined to go through this entire process, just to see whether the application is something they&#8217;re interested in or not.</p>
<p>The solution to this problem is simple: <strong>don&#8217;t do it</strong>. On the main page for your app, place a prominent &#8220;Download&#8221; link which allows people to download your demo in one-click, no strings attached. This way they can see whether your software is relevant to them, without them feeling as if they&#8217;re being tied to anything.</p>
<h3>2. Emphasis on buy, not try</h3>
<p>Another problem with demo software is that the emphasis of the product is immediately placed on <em>buying</em> the software, not offering users to try it first. This ties in with making the users register to download the demo version first, or nagging for them to hand over their credit card details and is again, annoying because it ties them down and makes them feel that they are making a commitment rather than just trying out the software in their own time.</p>
<p>A good example of this being done well is on the Agile Web Solutions <a href="http://agilewebsolutions.com/downloads">downloads page</a>; it is clear that the focus of the section is <em>downloading</em> a demo version of the software to try out first, and not immediately placed on buying it, as shown by the prominence and alternate colour of the &#8220;Download Now&#8221; button compared to the &#8220;Buy It&#8221; button.</p>
<p style="text-align: center;"><a href="http://agilewebsolutions.com/downloads"><img class="aligncenter size-full wp-image-1390" title="1Password Download" src="http://perspx.com/wp-content/uploads/2010/03/1Password-Download.png" alt="" width="474" height="265" /></a></p>
<h3>3. Crippling restrictions</h3>
<p>Of course, some form of restriction needs to be placed on your demo applications so that people who have a genuine need or interest for your app can&#8217;t use it forever for free.</p>
<p>However, these crippling kinds of restrictions include things like restricting major features from the demo version, which is often counter-productive, because it doesn&#8217;t <em>actually</em> let your users see whether your software is right for them, since they don&#8217;t have access to certain features, which might be the main reason that they would be interested in using the full version.</p>
<p>Instead of imposing restrictions such as this on your demos, <em>where possible</em> it is better to provide some other restriction that allows your users to get a feel for the application, but perhaps provides an upper bound on their use of it. A good example of this is with <a href="http://realmacsoftware.com/littlesnapper/">LittleSnapper</a>, which limits the number of images in your library in the demo version to 30, but so long as you have 30 or less images in your library you get access to all the other features available in the full version of the app.</p>
<p>From a business perspective, you want to make sure that the restriction you place means that people who are genuinely interested in using your software can&#8217;t do so forever without paying, but which doesn&#8217;t provide a barrier for those who aren&#8217;t yet sure to see whether the app is right for them.</p>
<h3>4. Time restrictions</h3>
<p>This is probably one of my main annoyances with demo applications – where time limits are imposed  on the use of the demo. The reason I find this such a turnoff is that it it similar to being sold something by a salesman on commission: there is constant pressure on you to purchase the full version rather than doing it in your own time.</p>
<p>Again, this seems attractive from the business side of software, and sometimes this may be appropriate, as there is no other justifiable alternative as a restriction on the demo, but <strong>this should only be used as a last resort</strong>.</p>
<p>And as <a href="http://mattgemmell.com">Matt Gemmell</a> suggested on one of the World According to Gemmell segments on the MDN show, if you are going to impose a time limit as a restriction, make sure that the time limit <strong>only applies to the days that the software is actually used</strong>. For example, if you impose a 30-day time limit and the user first uses the demo on the 1<sup>st</sup> of the month, but doesn&#8217;t use it on the 2<sup>nd</sup>, 3<sup>rd</sup> or 4<sup>th</sup> and comes back and uses it on the 5<sup>th</sup>, only count that as 2 days of use, not 5.</p>
<h3 style="clear: both;">5. Prompts to buy</h3>
<p>This is probably my <em>biggest</em> annoyance of application demos: where they constantly nag you to purchase the full copy; be that on launch, on exit, or even just during use of the application, it&#8217;s a definite no and will not get me – and most other people, I imagine – on your good side.</p>
<p>As I mentioned earlier, application demos are a way for your users to decide whether your software is right for them, and whether it is worth their time (and money). But this is another really annoying feature of demos because it is again pressuring users to purchase your software, rather than letting them decide first whether it is right for them or not.</p>
<p>In this process, it provides your users with a negative experience, and pushes them in the opposite direction to buying your software.</p>
<h2>Final word</h2>
<p><strong>A</strong><strong>pplication demos are a way for the user to decide whether your software is right for them</strong>. It&#8217;s your one shot to impress them and convince them that your software is worth investing their time – in learning how to use the software – and money.</p>
<p>Although it might seem like a convenient excuse to offload a whole load of marketing onto your potential customers and pressuring them to make a purchase, this reflects badly on you, and if you offer multiple products they are unlikely to try out others if you create a bad first impression.</p>
<p>The key is to provide a user-friendly experience which portrays you and your software in a positive light; if the software is presented in this enticing manner and people have a genuine need or interest in your software then you are going to make some sales.</p>
]]></content:encoded>
			<wfw:commentRss>http://perspx.com/blog/archives/1363/application-demos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Psychology of Software</title>
		<link>http://perspx.com/blog/archives/1298/the-psychology-of-software/</link>
		<comments>http://perspx.com/blog/archives/1298/the-psychology-of-software/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 18:22:22 +0000</pubDate>
		<dc:creator>Perspx</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[users]]></category>

		<guid isPermaLink="false">http://perspx.com/?p=1298</guid>
		<description><![CDATA[Attending Matt Gemmell&#8217;s workshop last week was a great exercise for thinking from the user&#8217;s perspective – something which we, as software developers, often do not usually spend enough time doing because of being wrapped up in other things.
As developers, it is hard for us to detach ourselves from what we do and cater to the user. We live on  ... ]]></description>
			<content:encoded><![CDATA[<p>Attending <a href="http://perspx.com/blog/archives/1193/the-world-according-to-gemmell/">Matt Gemmell&#8217;s workshop</a> last week was a great exercise for thinking from the user&#8217;s perspective – something which we, as software developers, often do not usually spend enough time doing because of being wrapped up in other things.</p>
<p>As developers, it is hard for us to detach ourselves from what we do and cater to the user. We live on the other side of the fence and are often restrained from making the right decisions because of the way we think, and usually need an objective opinion. We have the curse of knowledge by being so deeply focused in on our software, and what seems intuitive and easy for us is unlikely going to be the same for the people who use our creations.</p>
<h2>Thinking from the user&#8217;s perspective</h2>
<p>The amazing thing about a lot of usability and application design is that <strong>most decisions come down to simple thought</strong> of how your software is going to be used, and to anticipate and accommodate the user&#8217;s various needs. It&#8217;s about thinking &#8220;I shouldn&#8217;t put that text field there because the relation to that other form is confusing&#8221; or &#8220;I should relabel that button because the current label is misleading&#8221;.</p>
<p>As software developers, <strong>our main subjects are not computers</strong> (even though we do instruct them on what to do) but rather <em>people</em>. We have to be psychologists to some degree and accommodate <em>their</em> needs – our software of which is an end to a means.</p>
<h2>The reality</h2>
<p>As Matt stated on an earlier MDN show podcast, users want to spend as <em>little</em> time in an application as possible, so that they can get on with their lives. But because we have an affinity with the software we produce it is often hard to detach ourselves from the way we go about our business and think in this way.</p>
<p>Of course this doesn&#8217;t mean that we shouldn&#8217;t design and architect our applications in a maintainable way, and doesn&#8217;t mean that we should write crap code that looks like something the dog threw up. However bear in mind that the user doesn&#8217;t actually <em>see</em> any of this. To paraphrase Gemmell again, all the user sees of our applications is the interface.</p>
<p>At the end of the day, users couldn&#8217;t care less whether you have a PHP backend or the UI implemented using Rails; they have such a different perspective of what we create. What they care about is <strong>how your software solves their problem</strong> and how it makes their life easier by doing so.</p>
]]></content:encoded>
			<wfw:commentRss>http://perspx.com/blog/archives/1298/the-psychology-of-software/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Are you sure?</title>
		<link>http://perspx.com/blog/archives/1157/are-you-sure/</link>
		<comments>http://perspx.com/blog/archives/1157/are-you-sure/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 17:28:53 +0000</pubDate>
		<dc:creator>Perspx</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[bad design]]></category>
		<category><![CDATA[destructive actions]]></category>
		<category><![CDATA[modal dialogs]]></category>

		<guid isPermaLink="false">http://perspx.com/?p=1157</guid>
		<description><![CDATA[We&#8217;ve all seen it before: dialogs which ask you whether you are absolutely, completely, invariably sure that you want to close without saving changes. And you click &#8220;Yes&#8221; in your haste, and then realise that you actually kind of needed that unsaved presentation that you&#8217;d been working on all evening.

A flawed design
It&#8217;s a pretty common design in applications even today,  ... ]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve all seen it before: dialogs which ask you whether you are absolutely, completely, <em>invariably</em> sure that you want to close without saving changes. And you click &#8220;Yes&#8221; in your haste, and then realise that you actually <em>kind of</em> needed that unsaved presentation that you&#8217;d been working on all evening.</p>
<p><a href="http://perspx.com/wp-content/uploads/2010/01/alertpanel.jpg"><img class="aligncenter size-full wp-image-1174" title="Alert Panel" src="http://perspx.com/wp-content/uploads/2010/01/alertpanel.jpg" alt="" width="464" height="218" /></a></p>
<h2>A flawed design</h2>
<p>It&#8217;s a pretty common design in applications even today, although flawed. The problem is that it is often linked with a permanent, destructive action, and doesn&#8217;t take two important behaviours into account:</p>
<ol>
<li><a href="http://www.codinghorror.com/blog/archives/000114.html">People don&#8217;t read</a></li>
<li>Humans being humans, we all make mistakes</li>
</ol>
<p>It also offloads the responsibility of managing data – which often is important – to the user, and forces them to make a choice about what they want to do, a choice which often cannot be undone. But hang on, <strong>why should an action that I want to perform be completely, irreversibly destructive anyway? </strong>We have the Recycle Bin to provide a safety net for accidental deletion in the filesystem, so why shouldn&#8217;t closing a Word document without saving or unsubscribing from an RSS feed be reversible too?</p>
<p>Alongside this, the dialog is irritating in <em>most</em> situations:</p>
<ol>
<li><em>&#8220;Why are you asking me this?! I clicked on the button because I </em>wanted<em> to perform the action&#8230; duh&#8221;</em> – when we&#8217;re in a hurry and just want to delete something, <strong>we have to then go through another modal dialog</strong> to accomplish the action.</li>
<li><em>&#8220;Shiii- I needed that and I just clicked on Delete&#8221;</em> – due to the fundamental flaw in nature of the design, <strong>it&#8217;s easy to accidentally go ahead with the action anyway</strong>.</li>
</ol>
<h2>A better design</h2>
<p>I like the design that <a href="http://mail.google.com/">Gmail</a> have implemented when you want to delete a message: the message is soft-deleted and a bar is displayed prominently notifying the user that a potentially destructive action has just taken place, but that it isn&#8217;t permanent and can be quickly undone by clicking the Undo button.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1161" title="Gmail: delete mail" src="http://perspx.com/wp-content/uploads/2010/01/gmail_delete.jpg" alt="" width="527" height="85" /></p>
<p>This is a great design because it caters for most use cases: if you want to quickly go through and delete messages, you can do without being inhibited by modal dialogs. However if you accidentally delete something that you don&#8217;t want to, the action can be easily reversed.</p>
]]></content:encoded>
			<wfw:commentRss>http://perspx.com/blog/archives/1157/are-you-sure/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>When people don&#8217;t like clicking</title>
		<link>http://perspx.com/blog/archives/976/when-people-dont-like-clicking/</link>
		<comments>http://perspx.com/blog/archives/976/when-people-dont-like-clicking/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 17:50:09 +0000</pubDate>
		<dc:creator>Perspx</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[batch operations]]></category>
		<category><![CDATA[multiple items]]></category>

		<guid isPermaLink="false">http://perspx.com/?p=976</guid>
		<description><![CDATA[People like clicking; after all, wasn&#8217;t the mouse the main piece of hardware that lead to the GUI and made computers more accessible?

But people don&#8217;t like repetitive, boring tasks. And one of the areas where this is done especially poorly is when performing batch operations on large sets of data, where the user has to go through several stages to  ... ]]></description>
			<content:encoded><![CDATA[<p><strong>People like clicking</strong>; after all, wasn&#8217;t the mouse the main piece of hardware that lead to the GUI and made computers more accessible?</p>
<p style="text-align: center;"><a href="http://www.veryfunnycats.info/wp-content/uploads/2007/02/funny_cat_pictures_pc_2.jpg" target="_blank"><img class="aligncenter size-full wp-image-988" title="Cat Clicking Mouse" src="http://perspx.com/wp-content/uploads/2009/12/cat_clicking_mouse.jpg" alt="" width="387" height="354" /></a></p>
<p>But <strong>people don&#8217;t like repetitive, boring tasks</strong>. And one of the areas where this is done especially poorly is when performing batch operations on large sets of data, where the user has to go through several stages to accomplish a task – each time for every item they want to perform the operation(s) on.</p>
<h2>Dealing with multiple items</h2>
<p>It really does amaze me how badly this is done with lots of services that are on offer, most of which play with large quantities of data – manipulating all of this can be something of a nightmare.</p>
<p>A great example of this is on Facebook. In the settings, there are a list of applications that you have granted privileges to – 85 in my case. What I want to do now is remove a load of these from this list. The procedure to do this is:</p>
<ol>
<li>Click on the X in the right-hand corner.<a href="http://perspx.com/wp-content/uploads/2009/12/facebook_app_removal.jpg"><img class="aligncenter size-full wp-image-986" title="Facebook App Removal" src="http://perspx.com/wp-content/uploads/2009/12/facebook_app_removal.jpg" alt="" width="572" height="121" /></a></li>
<li>Click on &#8220;Remove&#8221; in the are you sure..? dialog box (as a side note, the &#8220;Remove&#8221; button shouldn&#8217;t be the default option since it is a destructive action)<br />
<a href="http://perspx.com/wp-content/uploads/2009/12/facebook_app_removal_2.jpg"><img class="aligncenter size-full wp-image-978" title="Facebook App Removal: Are you sure..?" src="http://perspx.com/wp-content/uploads/2009/12/facebook_app_removal_2.jpg" alt="" width="378" height="150" /></a></li>
<li>Click on OK in the confirmation dialog<br />
<a href="http://perspx.com/wp-content/uploads/2009/12/facebook_app_removal_3.jpg"><img class="aligncenter size-full wp-image-979" title="Facebook App Removal: Confirmation" src="http://perspx.com/wp-content/uploads/2009/12/facebook_app_removal_3.jpg" alt="" width="378" height="100" /></a></li>
</ol>
<p>For those who are mathematically inclined, you probably have guessed that to remove all 85 applications from the list takes <strong>255 clicks</strong> (perhaps more taking into account accidental/mis-clicking). And guess what? There is no way of removing privileges from multiple applications at once.</p>
<p>This is when people don&#8217;t like clicking – when <strong>they have to perform batch operations by clicking the same things over and over again </strong>to do the same job on lots of items.</p>
<h2>Solving the Problem</h2>
<p>I feel that iTunes solves this problem very well when editing multiple items at once in the &#8220;Get Info&#8221; panel. The panel is generic and works with different kinds of media, and allows batch editing of all properties that are shared by items in the current selection, something which is very useful especially when dealing with large media libraries. This means that the user can change a load of common properties of items in their media library in one fell swoop, then go through and change the unique properties, such as song name afterwards.</p>
<p style="text-align: center;"><a href="http://perspx.com/wp-content/uploads/2009/12/iTunes.jpg"><img class="aligncenter size-full wp-image-993" title="iTunes Get Info dialog" src="http://perspx.com/wp-content/uploads/2009/12/iTunes.jpg" alt="" width="430" height="355" /></a></p>
<h2>Final word</h2>
<p>When designing an interface that deals with lots of data, make sure you have a way of changing or removing multiple items at once, rather than the user having to repeat several actions for each item – something which becomes tedious very quickly, and means they have to waste more time dealing with fairly minor actions, rather than the main focus of your application.</p>
]]></content:encoded>
			<wfw:commentRss>http://perspx.com/blog/archives/976/when-people-dont-like-clicking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Off by default</title>
		<link>http://perspx.com/blog/archives/934/off-by-default/</link>
		<comments>http://perspx.com/blog/archives/934/off-by-default/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 15:13:47 +0000</pubDate>
		<dc:creator>Perspx</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://perspx.com/?p=934</guid>
		<description><![CDATA[The other day I was using Cyberduck more heavily than I would usually, when I was doing a whole load of uploading. When I came to close the application, I was presented with this dialog:

It&#8217;s a fair enough dialog, I have been using free software which someone put their own time into and I&#8217;m appreciative, and might think of donating  ... ]]></description>
			<content:encoded><![CDATA[<p>The other day I was using <a href="http://cyberduck.ch/" target="_blank">Cyberduck</a> more heavily than I would usually, when I was doing a whole load of uploading. When I came to close the application, I was presented with this dialog:</p>
<p style="text-align: center;"><a href="http://perspx.com/wp-content/uploads/2009/12/cyberduck_donate.jpg"><img class="aligncenter size-full wp-image-935" title="Cyberduck donate dialog" src="http://perspx.com/wp-content/uploads/2009/12/cyberduck_donate.jpg" alt="" width="421" height="278" /></a></p>
<p>It&#8217;s a fair enough dialog, I have been using free software which someone put their own time into and I&#8217;m appreciative, and might think of donating to the developer(s) who wrote it.</p>
<p>However, two fatal mistakes have been made here:</p>
<ol>
<li>The &#8220;don&#8217;t show again&#8221; checkbox is <strong>unchecked by default</strong>:<br />
<a href="http://perspx.com/wp-content/uploads/2009/12/cyberduck_dontshowagain.jpg"><img class="size-full wp-image-936 alignnone" title="Cyberduck don't show again checkbox" src="http://perspx.com/wp-content/uploads/2009/12/cyberduck_dontshowagain.jpg" alt="" width="263" height="46" /></a></li>
<li>The donate button is the <strong>default option</strong>:<br />
<a href="http://perspx.com/wp-content/uploads/2009/12/cyberduck_donatebuttons.jpg"><img class="alignnone size-full wp-image-937" title="Cyberduck donate button" src="http://perspx.com/wp-content/uploads/2009/12/cyberduck_donatebuttons.jpg" alt="" width="225" height="50" /></a></li>
</ol>
<p>From a business or financial perspective, that sounds <em>brilliant</em>. Prompt the user to give you money <em>every time</em> they close your app, because they&#8217;re probably going to forget to check the &#8220;don&#8217;t show again&#8221; box, and fortunately for you, if they happen to accidentally hit enter then they&#8217;re going to be taken straight to the donate page.</p>
<p>But in terms of establishing goodwill with your customers, it&#8217;s a horrible decision – the dialog is annoying, and this is only going to be a lingering annoyance if you repeatedly forget to check the &#8220;don&#8217;t show again&#8221; option – something fairly likely since it&#8217;s on application terminate when you generally want or need to get out of the application quickly.</p>
<p>You should always make sure that options such as this are <strong>safe and off by default</strong> – that is, that without any user intervention if they are prompted once for something that is an extra and something annoying,<strong> the option to turn it off is set to yes by default</strong>. By default, no stupid emails when registering for an online account, no annoying popup boxes or dialogs.</p>
<h2>Be subtle</h2>
<p>Of course it&#8217;s reasonable to have some form of link to donate to a product, or buy a full version or something similar. But if you&#8217;re going to have one <strong>be subtle about it</strong>. Put it in the about box or discreetly as a menu item, so that if users want to find out more they can do, but it&#8217;s not always glaring and in-your-face. I quite like how <a href="http://connectedflow.com/viewfinder/" target="_blank">Viewfinder</a> by <a href="http://connectedflow.com/" target="_blank">Connected Flow</a> does this on their demo version:<a href="http://perspx.com/wp-content/uploads/2009/12/viewfinder_buynow.jpg"><img class="aligncenter size-full wp-image-943" title="Viewfinder &quot;Buy Now!&quot;" src="http://perspx.com/wp-content/uploads/2009/12/viewfinder_buynow.jpg" alt="" width="183" height="75" /></a></p>
<p>Granted it&#8217;s always there, but it&#8217;s a discreet message and in a small font, which isn&#8217;t particularly distracting and at the least doesn&#8217;t get in the user&#8217;s way.</p>
<h2>Overall a winner</h2>
<p>At the end of the day, if your app isn&#8217;t annoying and persistent about money, the good experience you give your customers will make them <em>more likely</em> to donate to your project. And if your product is commercial then you&#8217;ll give your users a better experience and mean that others are likely to purchase it based on the good things that people say about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://perspx.com/blog/archives/934/off-by-default/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The 90/10 rule of piracy</title>
		<link>http://perspx.com/blog/archives/751/the-90-10-rule-of-piracy/</link>
		<comments>http://perspx.com/blog/archives/751/the-90-10-rule-of-piracy/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 09:00:12 +0000</pubDate>
		<dc:creator>Perspx</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[piracy]]></category>

		<guid isPermaLink="false">http://oneinfinitemonkey.wordpress.com/?p=751</guid>
		<description><![CDATA[
I have talked about piracy before, but I was inspired by Matt Gemmell&#8217;s take on it in Episode #9 of the MDN Show:
Piracy is pretty much an unsolvable problem. That&#8217;s a controversial thing to say, but I don&#8217;t mean it&#8217;s absolutely technically unsolvable, but it&#8217;s one of these situations where you have diminishing returns. The better your protection, the better  ... ]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.flickr.com/photos/70267096@N00/4173094553"><img class="aligncenter size-full wp-image-886" title="Pirates... arrgh?" src="http://perspx.com/wp-content/uploads/2009/12/pirates1.jpg" alt="" width="500" height="375" /></a></p>
<p>I have talked about piracy before, but I was inspired by <a href="http://mattgemmell.com/" target="_blank">Matt Gemmell</a>&#8217;s take on it in <a href="http://www.mac-developer-network.com/shows/podcasts/mdnshow/mdn009/" target="_blank">Episode #9</a> of the MDN Show:</p>
<blockquote><p><strong>Piracy is pretty much an unsolvable problem.</strong> That&#8217;s a controversial thing to say, but I don&#8217;t mean it&#8217;s absolutely technically unsolvable, but it&#8217;s one of these situations where you have diminishing returns. The better your protection, <strong>the better your solution to the problem of cracking and piracy and so forth, typically the more it ends up hurting your users.</strong></p></blockquote>
<p>I completely agree with that point, with something I like to call the 90/10 rule. That is, that a large percentage – hopefully the larger percentage – of your users are legitimate, but that there are always going to be a small percentage of users who will pirate your software, and no matter what you do, they won&#8217;t pay for it. And as Gemmell said, the more you try to prevent piracy, the more it hurts the 90% of your users who are legitimate.</p>
<p>The people who are going to pirate your software are split into two main categories:</p>
<ol>
<li><strong>The hardcore pirates.</strong> These people aren&#8217;t going to pay for your software. Period. No matter how good your anti-piracy implementation, they&#8217;ll try and get around it. And if they don&#8217;t crack it, they&#8217;re not going to pay, because they just don&#8217;t want to pay you.</li>
<li><strong>The casual pirates</strong>. These people often don&#8217;t actively seek to harm you, but they may need to use your software immediately but can&#8217;t pay for it straight away. Perhaps they work for a company and need to go through some admin to pay for it, but they need to use your software right now.</li>
</ol>
<p>For the casual pirates, this is where your basic anti-piracy enforcements come into play, such as serial numbers, for example. They aren&#8217;t <em>actively</em> seeking to harm your business, but they may do so to get the software immediately. But they are unlikely to persue the case to the end of the Earth to pirate your software if the methods to do so aren&#8217;t immediately available. If your anti-piracy methods are <em>just</em> good enough, they&#8217;re probably going to become legitimate users because it&#8217;s not worth their effort to pirate your software and will expend that effort paying for it.</p>
<p>However, the hardcore pirates <em>are</em> likely to go to the end of the Earth and beyond to pirate your software. These are the 10% and they don&#8217;t want to pay. Perhaps this is a moral decision, perhaps they just don&#8217;t like you. Perhaps they just don&#8217;t like companies. But the bottom line is that <strong>they are not going to pay you</strong>. If they can&#8217;t get past your anti-piracy methods, they&#8217;re not going to pay you, and if they successfully pirate your software they&#8217;re not going to pay you. Either way it&#8217;s a lost cause.</p>
<p>Hopefully less than 10% of your users are actively pirating your software to cause you harm. But instead of focusing on the 10% of your users who just aren&#8217;t going to pay, <strong>you should look to the other 90% of the people who <em>are</em> paying for your software</strong>, and think about them.</p>
]]></content:encoded>
			<wfw:commentRss>http://perspx.com/blog/archives/751/the-90-10-rule-of-piracy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On inventing your own UI: don&#039;t do it</title>
		<link>http://perspx.com/blog/archives/733/on-inventing-your-own-ui-dont-do-it/</link>
		<comments>http://perspx.com/blog/archives/733/on-inventing-your-own-ui-dont-do-it/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 17:57:51 +0000</pubDate>
		<dc:creator>Perspx</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[user interface]]></category>

		<guid isPermaLink="false">http://oneinfinitemonkey.wordpress.com/?p=733</guid>
		<description><![CDATA[
After downloading the new Chrome beta for Mac OS X the first thing that struck me was how well it blended into the native Mac UI. The window takes on the standard OS X window appearance whilst working into it with the tabs which are built into the title bar. This wasn&#8217;t simply a port of the Windows version, it&#8217;s  ... ]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://perspx.com/wp-content/uploads/2009/12/chrome1.jpg"><img class="aligncenter size-full wp-image-882" title="Chrome" src="http://perspx.com/wp-content/uploads/2009/12/chrome1.jpg" alt="" width="525" height="319" /></a></p>
<p>After downloading the new <a href="http://www.google.com/chrome?platform=mac&amp;hl=en" target="_blank">Chrome beta for Mac OS X</a> the first thing that struck me was how well it blended into the native Mac UI. The window takes on the standard OS X window appearance whilst working into it with the tabs which are built into the title bar. This wasn&#8217;t simply a port of the Windows version, it&#8217;s evident that time and effort has gone into making the app as Mac OS-native as possible, with the Preferences window and the keyboard shortcuts and so forth.</p>
<p>But the truth is that many software developers <strong>think they can invent a better UI</strong><strong> than already exists</strong>.</p>
<p style="text-align: left;">One of the worst applications for OS X in terms of UI that I&#8217;ve come across recently has been the <a href="http://www.penreader.com/mac-os-software/Oxford.html" target="_blank">Paragon Talking Concise Oxford English Dictionary and Thesaurus</a>. <a href="http://www.techradar.com/reviews/pc-mac/software/home-and-reference-software/paragon-talking-concise-oxford-english-dictionary-and-thesaurus-611315/review" target="_blank">Reviewed by Mac Format</a>, the actual functionality of the app seemed to be fairly average. But worse still, as concluded in the final rating was the &#8220;often awkward interface&#8221;. I don&#8217;t know about awkward, but I&#8217;d also add in damn-right ugly:</p>
<p style="text-align: center;"><a href="http://perspx.com/wp-content/uploads/2009/12/oed1.jpg"><img class="aligncenter size-full wp-image-883" title="Paragon Talking OED" src="http://perspx.com/wp-content/uploads/2009/12/oed1.jpg" alt="" width="466" height="350" /></a></p>
<p style="text-align: left;">What I don&#8217;t understand is why the developers did this – what was so bad about the native OS X UI? It&#8217;s the classic example of <a href="http://perspx.com/blog/archives/606/reinventing-the-wheel/">reinventing the wheel when it didn&#8217;t need it</a>, but which in this case was <em>damaging</em> since the reinvented UI looks pretty grim.</p>
<p>Especially if you&#8217;re porting your application, <strong>don&#8217;t make your application look identical on multiple platforms</strong>. Take the time to port it to the platform so that it fits in with that platform&#8217;s appearance and behaviour.</p>
<p>Creating your own UI or using that of another platform can distract users away from the actual functionality of the app because it looks alien compared to other applications on the platform; if it is behaviourally different then this also makes the app harder to use because then they have to deal with behaviours that they&#8217;re not used to.</p>
<p>If you want some custom control, then <strong>build into the existing UI and make it fit in</strong>.</p>
<p>Otherwise, the learning curve of using the new UI – which comes as cliff-like – is the main learning focus <strong>rather than learning to use the actual functionality of the app</strong>, the functionality being the reason why people buy the app in the first place, right?</p>
]]></content:encoded>
			<wfw:commentRss>http://perspx.com/blog/archives/733/on-inventing-your-own-ui-dont-do-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Users like familiarity</title>
		<link>http://perspx.com/blog/archives/549/users-like-familiarity/</link>
		<comments>http://perspx.com/blog/archives/549/users-like-familiarity/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 21:26:41 +0000</pubDate>
		<dc:creator>Perspx</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[familiarity]]></category>

		<guid isPermaLink="false">http://oneinfinitemonkey.wordpress.com/?p=549</guid>
		<description><![CDATA[Users don&#8217;t like change. Perhaps one of the most apt demonstrations of this is with Facebook. Only today, changes were made to Facebook, basically consisting of a new setting on the front page:

Which can be changed to:

(Dependent on your level of stalkiness).
Being a moody teenager myself, I am, naturally in contact with.. A lot of moody teenagers. And there has  ... ]]></description>
			<content:encoded><![CDATA[<p>Users don&#8217;t like change. Perhaps one of the most apt demonstrations of this is with Facebook. Only today, changes were made to Facebook, basically consisting of a new setting on the front page:</p>
<p><img class="alignnone size-full wp-image-858" title="Facebook newsfeed" src="http://perspx.com/wp-content/uploads/2009/10/facebook_newsfeed1.jpg" alt="" width="258" height="112" /></p>
<p>Which can be changed to:</p>
<p><a href="http://perspx.com/wp-content/uploads/2009/10/facebook_livefeed1.jpg"><img class="alignnone size-full wp-image-859" title="Facebook Live Feed" src="http://perspx.com/wp-content/uploads/2009/10/facebook_livefeed1.jpg" alt="" width="251" height="105" /></a></p>
<p>(Dependent on your level of stalkiness).</p>
<p>Being a moody teenager <em>myself</em>, I am, naturally in contact with.. A lot of moody teenagers. And there has been almost outrage over the new changes; groups with such titles as &#8220;i HATE THE NEW FACEBOOK!&#8221; rallying troops with motivational speeches including &#8220;i HATE HOW FACEBOOK HAS BECOME MORE CONFUSiNG, THEY ARE ADDiNG TOO MANY FEATUrES, PEOPLe CAN SEE YOUR EVERYMOVE&#8230;NOT A GOOD LOOK!!!!&#8221; have sprung up thick and fast (you&#8217;d perhaps be misguided that <a href="http://capslockday.com/" target="_blank">International Caps Lock Day</a> is infact the twenty-<em>third</em> of October).</p>
<p>Although I find this very amusing, I can sympathise.</p>
<p>Of course changes have to be made to Facebook, otherwise it would remain like a stagnant pool for 10 years. And I&#8217;m sure they&#8217;re responding to user feedback and I&#8217;m <em>sure</em> in the long run it will improve the whole Facebook experience (although this particular update seems like <a href="http://perspx.com/blog/archives/221/ooh-shiny/">a bit of candy to satisfy the kids</a>).</p>
<p>But the way they&#8217;ve gone about it is terrible.</p>
<blockquote><p>What is this? What can it do for me? Why the hell would I even <em>want</em> this?</p></blockquote>
<p>were several questions that came through my mind, and where were the answers? Where was the explanation of how or why to <em>use</em> this? Nowhere. Users have basically been thrown into the deep end – accustomed to the &#8220;old&#8221; Facebook layout, this change has been sprung upon the site, and they don&#8217;t know what to do with it, how it works (initially) or why they would want to use this.</p>
<p>And this is not new. This has occurred several times with Facebook.</p>
<p>Joel Spolsky summarised this quite well on <a href="http://blog.stackoverflow.com/2009/04/podcast-51/" target="_blank">Episode #51</a> of the Stack Overflow podcast:</p>
<blockquote><p>Spolsky: They&#8217;re gonna start, I mean, every time I changed a font, I could change a font on “Joel on Software” and get, you know, 30 angry emails, and then change it back and get another 30 angry emails, 25 of them from the same people that were upset the first time I changed them “ I just finally got used to that font that you changed”.  And have to change it all over again.</p></blockquote>
<p>And it&#8217;s because people <strong>don&#8217;t like to be somewhere they&#8217;re uncomfortable</strong>. They want to be familiar with their surroundings and know <em>what</em> to do and <em>how</em> to do it.</p>
<h3>Not just <a href="http://en.wiktionary.org/wiki/cainophobia" target="_blank">cainophobia</a></h3>
<p>By now you&#8217;ve probably come to the conclusion that users simply don&#8217;t like change. But this is an important thing to note. This is <em>why</em> designing UIs which are <strong>familiar</strong> to users is so important – UIs which reflect their mental model, which are consistent with other applications on the platform, which have workflows which are common and canonical are so important. Because if they aren&#8217;t, then you&#8217;re throwing your users into the deep end, and their experience will be so much worse.</p>
<p>And if it isn&#8217;t, make sure that an explanation is near – all you need is a small question mark icon, or a line of text which explains what something is, or perhaps a tooltip, such as those on <a href="http://stackoverflow.com" target="_blank">Stack Overflow</a>:</p>
<p><a href="http://perspx.com/wp-content/uploads/2009/10/stackoverflow_tooltip1.jpg"><img class="alignnone size-full wp-image-861" title="Stack Overflow Tooltip" src="http://perspx.com/wp-content/uploads/2009/10/stackoverflow_tooltip1.jpg" alt="" width="275" height="165" /></a></p>
<p>which will give your users confidence in what they&#8217;re doing and help them to do what they want to do.</p>
]]></content:encoded>
			<wfw:commentRss>http://perspx.com/blog/archives/549/users-like-familiarity/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Naming is hard</title>
		<link>http://perspx.com/blog/archives/530/naming-is-hard/</link>
		<comments>http://perspx.com/blog/archives/530/naming-is-hard/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 19:24:12 +0000</pubDate>
		<dc:creator>Perspx</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[naming]]></category>

		<guid isPermaLink="false">http://oneinfinitemonkey.wordpress.com/?p=530</guid>
		<description><![CDATA[I&#8217;ve been working on a software project recently, and I got to the point which every software developer dreads: naming. Although naming isn&#8217;t the most important feature of a piece of software, it&#8217;s good to come up with a name that at least works pretty well. This particular Dilbert cartoon comes to mind:

As Jeff Atwood noted on Episode #37 of  ... ]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a software project recently, and I got to the point which every software developer dreads: naming. Although naming isn&#8217;t the most important feature of a piece of software, it&#8217;s good to come up with a name that at least works pretty well. This particular <a href="http://dilbert.com/" target="_blank">Dilbert</a> cartoon comes to mind:</p>
<p><a href="http://perspx.com/wp-content/uploads/2009/10/dilbert_product_name1.jpg"><img class="aligncenter size-full wp-image-854" title="Dilbert product naming cartoon" src="http://perspx.com/wp-content/uploads/2009/10/dilbert_product_name1.jpg" alt="" width="420" height="188" /></a><br />
As <a href="http://codinghorror.com" target="_blank">Jeff Atwood</a> noted on <a href="http://blog.stackoverflow.com/2009/01/podcast-37/" target="_blank">Episode #37</a> of the Stack Overflow podcast:</p>
<blockquote><p>Naming is super hard; whether you&#8217;re naming code, you&#8217;re naming human beings, naming is just <em>really</em> difficult.</p></blockquote>
<p>And he&#8217;s right. Finding the &#8220;right&#8221; name or a name that works for software is really hard. When I started to think about naming (which I had deferred for as long as possible) I looked for a few tips on what makes a good name – of course I have some ideas of my own, but I wanted to see what others had to say on the topic. Although quick Googling <a href="http://www.google.co.uk/search?hl=en&amp;source=hp&amp;q=naming+software&amp;btnG=Google+Search&amp;meta=&amp;aq=f&amp;oq=" target="_blank">yields a fair few results</a> I wasn&#8217;t too happy with the results I saw, most of which seem to resemble something similar to SEO patter.</p>
<p>So I started thinking: what makes a good name for software, and <em>how</em> do you go about finding it? My first thought was to go for a bit of brainstorming – ideally, I would have scribbled my thoughts on a wall covered in <a href="http://www.ideapaint.com/site/ideapaint_work.html" target="_blank">IdeaPaint</a> but at $200 per 50 sq. ft. I decided to go for the old-skool whiteboard. I think that brainstorming is perhaps one of the greatest ways to come up with an idea – even if most of the diagram amounts to no immediate result, it&#8217;s a great way to get your ideas down. Then you decide to take a break and come back later, your ideas will still be there, and you&#8217;d be able to add any fresh ones.</p>
<p>But what do you brainstorm? I started to think about different perspectives that would affect the name – namely:</p>
<ol>
<li><strong>Who are your users?</strong> Since the name is a way of your software sounding attractive to your users, who are they? What background are they likely to have? What are they likely to be familiar with?</li>
<li><strong>What is the context?</strong> Where is your software going to be used? This often affects the name – since I am working on some software targeted at the Mac, there are certain &#8220;conventions&#8221; (in a loose sense) or &#8220;trends&#8221; which affect what a good name for that audience is. I had a look around at similar pieces of software and started thinking about what was common about them; were there certain aspects or a &#8220;style&#8221; of the name that were part of this context?</li>
<li><strong>What does your software do?</strong> Often great names can arise from a fundamental word or set of words that explain what the software does. For example, one of the Apple Design Award 2009 winners is an app called <a href="http://culturedcode.com/things/" target="_blank">Things</a> which is task management software. Part of the effectiveness of this title goes down to the fact that it explains (or at least gives an idea of) what it does in one word. <strong>Don&#8217;t be afraid to get out your thesaurus</strong> for this bit – I found it pretty useful in expanding my ideas by finding synonyms of these fundamental words or ideas.</li>
</ol>
<p>After I&#8217;d got my ideas down I found that I could think about them, and see which bits fitted well together – was it certain words, or ideas that stood out and formed a great name? However I also had periods where I&#8217;d have no idea where to go next, and left it at that and went and did something else. Then, when I came back to it I had several new ideas which I could use to expand upon, and since I&#8217;d written my ideas down I could continue from where I&#8217;d left off.</p>
<p>But what makes a great name? I started to think about this too, and there are perhaps two key points that I decided:</p>
<ol>
<li><strong>Keep it short</strong>. Although having a name which explains (to some degree) what it does, don&#8217;t be verbose about it (not naming any names, but several Microsoft product names don&#8217;t <em>exactly</em> fit this criteria).</li>
<li><strong>Make it easy to remember</strong>. This often comes with keeping it short, but make sure that it is something that is easy to remember and spell. Often something easy to remember is something original and different, but make sure that it isn&#8217;t too obscure.</li>
<li><strong>Make sure it isn&#8217;t taken</strong>. Do a quick search for the name and make sure that your name hasn&#8217;t already been taken. If it has is there some way you can modify the name to make it something you like but different from this name?</li>
<li><strong>Make sure it isn&#8217;t offensive</strong>. Particularly if your software is targeted at other languages apart from your native one, make sure that what you choose isn&#8217;t something offensive or a turnoff in those languages.</li>
</ol>
<p>Another point that I started exploring was metaphors; is there something in real life that is a metaphor for the core functionality of the software? If this can be drawn into the name it makes it more effective and easier for your users to remember and associate with.</p>
<p>An important point is that when coming up with the ideas, don&#8217;t be afraid to try things out. Write it down, see how it looks on paper; say it out loud, or ask colleagues what they think of the name. Having a list of names that you&#8217;ve come up with – perhaps added to the brainstorm, perhaps separate – even if they don&#8217;t work, can help to provide inspiration for other names. And great names don&#8217;t come quickly – I spent about a week or so thinking about it and coming up with ideas before I found a name that I thought worked pretty well. Don&#8217;t rush the process – and when you think you&#8217;re sure about a name, think about it some more; make sure it&#8217;s something you definitely like and you want to go ahead with.</p>
<p>Although these were my experiences with this, I&#8217;ve provided a bit of a generalisation – some projects require more of certain parts and less of others, but these are some things to think about. And naming isn&#8217;t the <em>only</em> thing to consider about your software – <strong>it&#8217;s pretty much a marketing feature</strong>. Create a great software product and <strong>make sure the name is something that at least works</strong>, and things should start to fall into place.</p>
]]></content:encoded>
			<wfw:commentRss>http://perspx.com/blog/archives/530/naming-is-hard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
