<?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>navarts</title>
	<atom:link href="http://blog.navigationarts.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.navigationarts.com</link>
	<description>creating compelling sites to further communication, e-commerce, and community building</description>
	<lastBuildDate>Wed, 18 Apr 2012 14:52:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Drupal 8 + Symfony2: What Will the Merger Mean?</title>
		<link>http://blog.navigationarts.com/drupal-8-and-symfony2/</link>
		<comments>http://blog.navigationarts.com/drupal-8-and-symfony2/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 14:33:25 +0000</pubDate>
		<dc:creator>Sean Hanford</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Content Management]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[DrupalCon2012]]></category>
		<category><![CDATA[Symfony2]]></category>

		<guid isPermaLink="false">http://blog.navigationarts.com/?p=4461</guid>
		<description><![CDATA[Upon arriving at DrupalCon in Denver a few weeks ago, I was very excited to review the schedule and map out the sessions I wanted to attend.  I thought I had a pretty solid schedule until I saw Dries Buytaert, the original creator and project lead for Drupal, give his keynote speech on &#8220;Winning hearts and minds through [...]]]></description>
			<content:encoded><![CDATA[<p>Upon arriving at DrupalCon in Denver a few weeks ago, I was very excited to review the schedule and map out the sessions I wanted to attend.  I thought I had a pretty solid schedule until I saw <a title="Dries Buytaert personal website" href="http://buytaert.net/" target="_blank">Dries Buytaert</a>, the original creator and project lead for <a title="Drupal Website" href="http://www.drupal.org" target="_blank">Drupal</a>, give his keynote speech on &#8220;Winning hearts and minds through innovation&#8221;. I was completely surprised by a segment of his speech where he announced that Drupal 8 would adopt a number of components from <a title="Symfony Website" href="http://symfony.com/" target="_blank">Symfony2</a>. <span id="more-4461"></span></p>
<p>This was a compelling idea to me, having spent the previous nine months working on a large-scale <a title="Symfony 1.4 Website" href="http://www.symfony-project.org/" target="_blank">Symfony</a> project. As a new employee at NavArts, I couldn&#8217;t believe that two of my favorite frameworks were going to be &#8216;merged&#8217; in a way I had never fathomed. I immediately altered my penciled-in schedule so I could attend the &#8216;<a title="DrupalCon2012 Presentation of Drupal 8 Meets Symfony2" href="http://denver2012.drupal.org/program/sessions/drupal-8-meets-symfony2" target="_blank">Drupal 8 Meets Symfony2</a>&#8216; presentation given by <a title="Fabien Potencier's Personal Website" href="http://fabien.potencier.org/" target="_blank">Fabien Potencier</a>, the Symfony founder and lead developer, and <a title="Lukas Kahwe Smith's Personal Website" href="http://pooteeweet.org/" target="_blank">Lukas Kahwe Smith</a>, a Symfony2 core contributor and PHP 5.3 Release Manager.</p>
<p>Below is a brief synopsis of the presentation along with some research materials:</p>
<p>Drupal 7 was the first release that had any type of object oriented (OO) methodologies and OO design patterns. Other PHP frameworks and CMS applications have been built using these practices for years. As many Drupal developers know, there is one way to do something and there is the &#8220;Drupal Way&#8221;. Unfortunately this is because not enough change has been implemented in Drupal 7 to affect its internal structure to be like the majority of other similarly available applications. Lukas Smith,  stated &#8220;This doesn&#8217;t mean that Drupal is wrong&#8221;, but it does make it more difficult for experienced developers and juniors alike to easily comprehend and master Drupal. It has become so complex that only those who have been using the application and participating in its evolution can really grasp the core of Drupal itself. As these developers leave the community or move on, it will become increasingly more difficult to replace them with people who have the same amount of historical knowledge.</p>
<p>So, Dries and other core contributors held a sprint for the Web Services and Context Core Initiative (WSCCI) for Drupal 8 in early February to discuss the future of Drupal.The preliminary goals of the sprint were clearly defining the initiative&#8217;s scope, get agreement on what was to be accomplished and why, as well as laying out a clear plan for how this was going to be achieved. Although there were many discussions and other improvements made to the core, one of the most exciting was the adoption of a handful of Symfony&#8217;s components.</p>
<p>For those of you not familiar with Symfony or what it provides, it is a reusable set of standalone, decoupled, and cohesive PHP components that solve common web development problems. Symfony is a full stack web-framework with an Object-Oriented set of classes compatible with PHP 5.3 and later. So, you have Drupal which is an infinitely extensible Content Management System and Symfony, a Content Management Framework. The components being adopted by Drupal are not minor components from Symfony or for Drupal, but major components that will provide the base for a great low-level architecture for Drupal 8. These components are <a title="HttpFoundation Component" href="http://symfony.com/doc/current/components/http_foundation.html" target="_blank">HttpFoundation</a>, <a title="HttpKernel Component" href="https://github.com/symfony/HttpKernel" target="_blank">HttpKernel</a>, <a title="The Routing Component" href="http://symfony.com/doc/master/components/routing.html" target="_blank">Routing</a>, <a title="The EventDispatcher Component" href="http://symfony.com/doc/master/components/event_dispatcher.html" target="_blank">EventDispatcher</a>, <a title="The DependencyInjection Component" href="http://symfony.com/doc/master/components/dependency_injection.html" target="_blank">DependencyInjection</a>, and <a title="The ClassLoader Component" href="http://symfony.com/doc/master/components/class_loader.html" target="_blank">ClassLoader</a>.</p>
<p>By adopting these components from Symfony it will facilitate the refactoring towards a &#8220;framework&#8221; core for Drupal,  also allowing for easier integration with other applications and best of all, by bringing the communities of Symfony and Drupal together it will ensure that the Drupal developer pool will continue to grow and persist, rather than falter as a result of attrition.</p>
<p>I provided links from the Symfony website for the components discussed above. You may also find more information from the following sites:</p>
<ul>
<li>Official Symfony website &#8211; <a href="http://symfony.com" target="_blank">http://symfony.com</a></li>
<li>Symfony Repository &#8211; <a href="https://github.com/symfony/symfony" target="_blank">https://github.com/symfony/symfony</a></li>
<li>Symfony Components &#8211; <a href="http://symfony.com/components" target="_blank">http://symfony.com/components</a></li>
<li>Components Repository &#8211; https://github.com/symfony/(component name here)</li>
<li>Dries Buytaert&#8217;s blog entry discussing the Symfony2 decision &#8211; <a href="http://www.buytaert.net/the-future-is-a-restful-drupal" target="_blank">http://www.buytaert.net/the-future-is-a-restful-drupal</a></li>
<li>Fabien Potencier&#8217;s entry discussing Drupal 8 and Symfony2 &#8211; <a href="http://symfony.com/blog/symfony2-meets-drupal-8" target="_blank">http://symfony.com/blog/symfony2-meets-drupal-8</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.navigationarts.com/drupal-8-and-symfony2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taking UX Design to the Backend by Designing the Content Management Experience</title>
		<link>http://blog.navigationarts.com/taking-ux-design-to-the-backend-by-designing-the-content-management-experience/</link>
		<comments>http://blog.navigationarts.com/taking-ux-design-to-the-backend-by-designing-the-content-management-experience/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 16:11:49 +0000</pubDate>
		<dc:creator>Autumn Rose</dc:creator>
				<category><![CDATA[Information Architecture]]></category>

		<guid isPermaLink="false">http://blog.navigationarts.com/?p=4422</guid>
		<description><![CDATA[I started my web career as a web content manager, and I’ve never forgotten the pains and frustrations of using a CMS that works more as a roadblock than a publisher—posting content to multiple channels, fighting a structure that doesn’t accommodate my content, and becoming buried in out of date information.  I’ve heard the same [...]]]></description>
			<content:encoded><![CDATA[<p>I started my web career as a web content manager, and I’ve never forgotten the pains and frustrations of using a CMS that works more as a roadblock than a publisher—posting content to multiple channels, fighting a structure that doesn’t accommodate my content, and becoming buried in out of date information.  I’ve heard the same sentiments echoed by many content managers I’ve met.  Many feel a new CMS would make all the difference on the world.  It is true, there are a wide range of CMS products on the market and selecting the right one is important, but so often I find that many of their issues are not inherent to the CMS at all, but how it was implemented.<span id="more-4422"></span></p>
<p>I learned early on in my career that the long-term success of the site can be dependent on how the site is managed. If making an update is cumbersome, difficult, or costly, it’s not going to be used to its full potential.</p>
<p>This is why I’m excited by a new push by NavArts to encourage Information Architects to broaden their technical understanding by taking CMS classes specifically geared to IAs.  The training helped us gain a deeper understanding of how the sites we design are built and managed. We concentrated on how to optimize our designs for long term content management by designing for modularized reusable content elements and how to automate the flow of content throughout the site.  Learning the nitty-gritty on how a site is built, updated, and managed through the CMS gives us the insight we need to take our designs to the next level—leveraging the inherent strengths of various CMS systems and architecting the backend-end to be as intuitive as possible for our content managers.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.navigationarts.com/taking-ux-design-to-the-backend-by-designing-the-content-management-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How Google&#8217;s New Privacy Policy Pulled Back the Curtain</title>
		<link>http://blog.navigationarts.com/how-googles-new-privacy-policy-pulled-back-the-curtain/</link>
		<comments>http://blog.navigationarts.com/how-googles-new-privacy-policy-pulled-back-the-curtain/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 03:00:49 +0000</pubDate>
		<dc:creator>Jim Keeney</dc:creator>
				<category><![CDATA[Marketing]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://blog.navigationarts.com/?p=4396</guid>
		<description><![CDATA[Back in early 2001, when I was trying to explain the web to my bosses at a financial services firm, I came up with three principles:  Instantaneous Gratification, Convenience, and Control. These are the fundamental principles of the social contract of the web &#8212; they define what we expect and have come to rely on [...]]]></description>
			<content:encoded><![CDATA[<p>Back in early 2001, when I was trying to explain the web to my bosses at a financial services firm, I came up with three principles:  <strong>Instantaneous Gratification, Convenience, and Control</strong>. These are the fundamental principles of the social contract of the web &#8212; they define what we expect and have come to rely on when we travel the web. Consequently, any behavior that violates these principles breaks the social contract and drives users away.</p>
<p>It was with this in mind that I recently read <a href="http://gizmodo.com/5895010/the-case-against-google" target="_blank">some of the commentary</a> on Google’s change to its <a href="http://www.google.com/policies/privacy/" target="_blank">privacy policy</a>. <span id="more-4396"></span>I still remember when Google first arrived. It was different in so many ways. At the time, Yahoo was king but I was a big user of AltaVista. You see, Yahoo was too invasive. A search on Yahoo was more like a catalogue search, and the web was changing too fast for the catalogue to keep up. AltaVista offered up a raw search interface that promised more objectivity, more <strong>control</strong>. It was a heady promise, and very addicting, but it was still not quite true. I felt  there was a fudge factor behind the scenes, and the results were not always dependable.</p>
<p>Then along came Google. From the moment I first used Google, I knew this was something different, something more honest and true. The spare interface shouted, “Nothing but results!” Behind the spare interface the search engine was also different. Somehow the results returned seemed more accurate. The first time I entered a <a href="http://googlenope.com/about.php" target="_blank">search that returned zero results</a>, I was hooked on Google. No other search engine had ever been so honest as to openly say that what I was searching on was ridiculous, and when Google did, I knew that I was getting an honest result.</p>
<p>However, even before the <a href="http://gadgetwise.blogs.nytimes.com/2012/03/01/googles-new-privacy-policy-what-to-do/" target="_blank">controversy</a> concerning Google’s privacy policy, I had begun to wonder about the accuracy and honesty of Google search results. It started simply enough. In my non-existent spare time, I am renovating my house and shopping for a door. Wrestling with the build or buy decision, I visited an exotic lumber retailer nearby and used my phone to perform a search that I had performed many times before at home. But the results on my phone were completely different.</p>
<p>That forced me to start really thinking about my trust in Google. How could the results be so different? The answer was simple: Google was using information from my browser at home that it no longer could access on my phone. Ah. <a href="http://all.pro/blog/what-is-google-tracking-cookie-and-why-you-should-care-187" target="_blank">Tracking cookies</a>. On the one hand, I missed the repeatability of the search I had performed at home. Yet, on the other, I realized that all my searches had been limited. Could the door I really wanted have been just around the corner, hidden by Google’s opinion of me?</p>
<p>Having first noticed the skewed search results, I then began looking for more evidence of <a href="http://www.telegraph.co.uk/technology/google/9116072/Google-privacy-changes-prompt-Big-Brother-warning.html" target="_blank">the Big Brother</a> effect.  We recently launched a new website for <a href="http://www.breitbart.com/" target="_blank">Breitbart</a>. As part of the launch, we performed research on various ad solutions. That led me to really look at the ads being served to me. And yep, they were doing it again. The ads were definitely targeting me. When I was in Los Angeles helping with the launch  I was receiving ads for the LA Galaxy (they should be careful since I am an avid <a href="http://www.dcunited.com/" target="_blank">DC United Fan</a>), and, now, back in DC, I’m getting ads for the Shakespeare Theatre Company.</p>
<p>I want my <strong>control</strong> back. I want an easy way to say stop or go. Do I want it enough to move to one of the Google <a href="http://www.basewebmaster.com/seo/5-alternative-search-engines.php" target="_blank">alternatives</a>? I’m not sure yet, but I can tell you <a href="http://www.stumbleupon.com/" target="_blank">I’m shopping around</a>. And you know what? I’m starting to feel a little more <a title="Wizard of Oz" href="http://www.youtube.com/watch?v=YWyCCJ6B2WE">creative</a>.</p>
<p>After writing this article I happened to catch Dan Russell, basically the &#8220;Director of User Happiness&#8221; for Google, on the Kojo Nnamdi show. The interview is a good exploration of Google&#8217;s perspective on search and their new privacy policy.  <a href="http://thekojonnamdishow.org/shows/2012-03-27/search-education-evangelism" target="_blank">Definitely worth a listen</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.navigationarts.com/how-googles-new-privacy-policy-pulled-back-the-curtain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ROI of User Experience and Technology Done Right</title>
		<link>http://blog.navigationarts.com/roi-of-user-experience-and-technology-done-right/</link>
		<comments>http://blog.navigationarts.com/roi-of-user-experience-and-technology-done-right/#comments</comments>
		<pubDate>Wed, 28 Mar 2012 00:54:18 +0000</pubDate>
		<dc:creator>Dustin Collis</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[Internet Strategy]]></category>
		<category><![CDATA[Sitecore]]></category>
		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://blog.navigationarts.com/?p=4388</guid>
		<description><![CDATA[The hard numbers of UX can sometimes be difficult to nail down, but when they are properly identified and reviewed, they can be substantial.  A perfect example is the result of one of our Sitecore engagements with MAA, based in Memphis, TN.  The project unified and improved the manageability all of their Apartment Community sites, [...]]]></description>
			<content:encoded><![CDATA[<p>The hard numbers of UX can sometimes be difficult to nail down, but when they are properly identified and reviewed, they can be substantial.  A perfect example is the result of one of our <a href="http://www.sitecore.net" target="_blank">Sitecore</a> engagements with <a href="http://www.maac.com/" target="_blank">MAA</a>, based in Memphis, TN.  The <a href="http://www.navigationarts.com/our-work/case-studies/MAA" target="_blank">project</a> unified and improved the manageability all of their Apartment Community sites, main site, and mobile presence.  Launched in March of 2011, the numbers are back – and they look pretty impressive.<span id="more-4388"></span></p>
<p>The goal was to increase usage of the site, increase leasing, and of course provide clearer pathways for residents to use their existing tools (like the Resident portal).  According to <a href="http://multifamilyexecutive.com/technology/open-for-business.aspx" target="_blank">an article in The MultiFamily Executive</a> the mark was hit and then some:</p>
<blockquote><p> &#8221;MAA unveiled its new site last March and, so far, it’s working well, Ogle says. <strong>Twenty percent</strong> of applicants are now leasing online, and, she notes, &#8216;We’ve seen a <strong>17 percent increase</strong> in the number of resident portal sign-ups since launching our new website. Currently, <strong>70 percent</strong> of our residents have an active myMAA.com log-in account, and <strong>34 percent</strong> pay their monthly rent online, compared with 24 percent the month before we launched the new website.&#8217;”</p></blockquote>
<p>This was accomplished through the careful implementation and integration of multiple back-end systems: leasing, real-time pricing and availability, analytics, and of course a well crafted User Experience for both the desktop and mobile user.</p>
<p>A key factor to note is the number of non-technical staff that manage and run the 160+ websites: <strong>only 2</strong>.  This is an example of a <strong>Technology Experience</strong> commensurate with its sibling &#8211; <strong>User Experience</strong>.  Unfortunately many organizations are slow to recognize the ROI achieved by building fully integrated systems that are as easy to manage as this one.</p>
<p>User Experience coupled with an equally thoughtful Technology Experience provides direct and immediate results.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.navigationarts.com/roi-of-user-experience-and-technology-done-right/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Before Updating Your Software, Think Twice</title>
		<link>http://blog.navigationarts.com/before-updating-your-software-think-twice/</link>
		<comments>http://blog.navigationarts.com/before-updating-your-software-think-twice/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 20:54:09 +0000</pubDate>
		<dc:creator>Corey Burnett</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://blog.navigationarts.com/?p=4285</guid>
		<description><![CDATA[If you&#8217;re like me, you probably have a number of electronic gadgets that you have come to rely on every day &#8211; things like cell phones, iPods, tablets, e-Readers, etc.  And if you&#8217;ve had these things for a while, you also know that the software and apps that run on these devices are constantly being [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re like me, you probably have a number of electronic gadgets that you have come to rely on every day &#8211; things like cell phones, iPods, tablets, e-Readers, etc.  And if you&#8217;ve had these things for a while, you also know that the software and apps that run on these devices are constantly being updated.  Sometimes these are bug fixes and sometimes they are just incremental improvements or new features  - occasionally they are complete overhauls to the operating system.</p>
<p><span id="more-4285"></span></p>
<p>I&#8217;ve noticed a phenomenon over the last year or two that is not necessarily a good thing:  older hardware that can&#8217;t handle the latest software update.  It started with my old Droid Eris cell phone.  When I first got the Eris it was a smaller, cheaper alternative to the larger Android phone.  It ran version 1.5 of the Android OS and didn&#8217;t have some of the cool features of the larger phone, like turn by turn GPS navigation, but it worked well enough.  The user experience was pretty good and the phone was responsive and easy to use.</p>
<p>About 5 months after I got the phone Verizon announced that they were going to be releasing a mandatory upgrade of the OS that would get automatically pushed to all Droid Eris phones.  They were upgrading to version 2.1 of the Android OS and this would include all the cool, fancy features of the new OS!  The upgrade went fine but it didn&#8217;t take long for me to realize that the hardware of the Eris just couldn&#8217;t handle the complexities of the new OS.  The phone was much, much slower.  The GPS and navigation features were very cool but frustratingly slow at times.  Apps were crashing much more than before.  In general the phone was much less stable than before and the user experience was terrible.</p>
<p>I&#8217;ve also noticed that this is not just a problem with Android products.  I&#8217;ve owned an iPad now for almost 18 months.  Originally, it was shipped with v4.3 of the iOS.  It was great &#8211; very snappy and responsive and almost never crashed.  Last fall Apple released v5 of the iOS and made it available for the iPad.  While it wasn&#8217;t mandatory to upgrade, it certainly seemed like there were a lot of features that would make using the iPad a better experience and Apple was certainly not warning owners of the original iPad not to upgrade.  Yet my experience has once again been that the hardware of the original iPad just can&#8217;t keep up with the demands of the new OS.  I have found that some of the main apps like Safari and Email are significantly less responsive and the entire OS in general is more sluggish.  I&#8217;m also finding that apps crash much more frequently than before.</p>
<p>As a self-professed computer geek and early adopter of new technology, I am usually clamoring for the next release of a product or the latest updates.  When I read about some new whiz bang feature I want to get it right away.  I think that in the future I will be much more wary about automatically upgrading software on my electronic devices &#8211; especially full blown upgrades of the most important piece of software &#8211; the operating system.  I&#8217;ve found in my own experiences that sometimes the awesome user experience of an older OS (with fewer cool features) is better than the terrible user experience of the latest OS on inferior hardware.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.navigationarts.com/before-updating-your-software-think-twice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Spotify Experience</title>
		<link>http://blog.navigationarts.com/the-spotify-experience/</link>
		<comments>http://blog.navigationarts.com/the-spotify-experience/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 21:46:49 +0000</pubDate>
		<dc:creator>Hayley Wilson</dc:creator>
				<category><![CDATA[UX Design]]></category>

		<guid isPermaLink="false">http://blog.navigationarts.com/?p=4274</guid>
		<description><![CDATA[A curious musical thing happened to me at a party last weekend. My friend said, “We’re going to Aaron X’s house.” I didn’t know Aaron, but his name sounded so familiar. We arrived at his place to the sound of Explosions in the Sky reverberating off the walls. And then it hit me: I knew [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;" align="center">A curious musical thing happened to me at a party last weekend. My friend said, “We’re going to Aaron X’s house.” I didn’t know Aaron, but his name sounded so familiar. We arrived at his place to the sound of <em>Explosions in the Sky</em> reverberating off the walls. And then it hit me: I knew Aaron from Spotify. His playlist “Good Music” had been trending amongst my friends for the last 2 weeks. In fact, I had “Starred” the <em>Explosions </em>song that was playing when we walked in. I might not have known Aaron, but I already liked him because I knew what kind of music he listened to.</p>
<p style="text-align: left;" align="center"><span id="more-4274"></span></p>
<p>Spotify has been actively chronicled in the U.S. since its July 2011 launch, yet I still run into people who have no idea what it is. (That same weekend, I was at my brilliant yet unwaveringly anti-social media brother’s apartment, listening to him stream music through his tired iTunes account. Ugh.) For those like my brother, a Spotify cheat sheet:</p>
<ul>
<li>Digital <strong>licensed </strong>music streaming service – all major record labels and some independent</li>
<li>Artists earn royalties whenever their music is played – a platform for the anti-pirates</li>
<li>Popular in Europe (HQ Sweden) for years, but only hit the U.S. 7 months ago</li>
<li>NOT based on an algorithm (like Pandora) – you choose <strong>exactly</strong> what you want to listen to</li>
<li>Extremely limited free version (lots of ads, no mobile option), as well as monthly Unlimited ($4.99) and Premium ($9.99) versions &#8211; basically, you should go Premium</li>
<li>This past fall integrated with facebook, meaning that all new users must have a facebook account if they want access to Spotify</li>
<li>Optimized for Windows, Mac, Linux, and mobile &#8211; iPhone, Android, Windows, Symbian, (Palm &#8211; Europe)</li>
</ul>
<p>To me, Spotify represents two game-changing elements: mass digital socialization of music, and <strong>real </strong>user experience driving a music streaming platform.</p>
<h4>Spotify UX</h4>
<p>The Spotify user interface screams Scandinavian design: streamlined, functional, attractive. From his blog, the lead Spotify designer <a href="http://rsms.me/about/spotify/" target="_blank">describes his approach</a> as “semi-conservative-but-still-daring in certain elements.” I see what he means: handcrafted pixels make the UI awesomely responsive. A dynamic UI personalizes features and recommendations. Common options (Starred, What’s New, Add Playlist) are clearly displayed. Options for more advanced search and tagging functionality exist but are intelligently suppressed to avoid confusion for the majority of users. Really, the UI makes a mockery of Pandora’s cluttered design and iTunes antiquated, boring, sometimes (enough with the updates) confusing layout. There’s something edgy about the dark gray color and tiny white font.</p>
<p>I’m always amazed by Spotify’s functionality. When there’s an action I want to take, I always think, “No, there’s no way they thought of that.” But they have. I can make playlists, and publish or hide them as I choose. I can “Subscribe” to friends, friends of friends, and totally random users, and get updates when they publish new playlists. I can send tracks to friends with written messages that are read through their facebook accounts. That’s a really amazing element: the absolutely seamless experience between facebook and Spotify. There was a ton of backlash in the U.S. when the move to integrate the two platforms happened this past fall. But I agree with co-founder Daniel Ek’s reasoning: one less user name and password to remember. Plus, <a href="http://www.forbes.com/sites/parmyolson/2011/09/28/spotify-tries-to-soothe-angry-users-over-facebook-conditions/" target="_blank">Spotify users are more social</a>.</p>
<p>My friends and I have found some functionality limitations. For example, you can Star an individual song or whole album (this automatically adds the tracks to your Starred playlist), but you can’t drag and scroll to Star. Also, if you Unstar a song, it just disappears, meaning that there’s no way to keep it in that folder and just not have it play. Aside from that, the dragging functionality is terrific. There are clickability features I would appreciate (album covers, for example), but it’s not so agitating to be bothersome because other pathways to get what I want are perfectly intuitive.</p>
<h4>Spotify Socialization</h4>
<p>The Spotify social experience is unlike anything I’ve encountered before. Prior to Spotify, my friends and I shared music sparingly &#8211; YouTube links, shared iTunes or SoundCloud account access, random music sites and blogs – but never with such ubiquity or excitement (or insecurity).  Excitement, because I love learning about my friends and their vacillating moods as I watch the real-time track ticker switch from The Allman Brothers to David Guetta. Insecurity, because failing to make a session Private (meaning no one can see what you’re listening to), can result in major social backlash when you’re nabbed rocking out to the Britney Spears-Skrillex remix. Four times in a row. But really, sharing tracks on Spotify has become an integral part of my daily routine. Never have I had such vast access to music. And never have I been OK with paying for it. In fact, Spotify might be the first music platform my friends and I have ever willingly paid for. Of course, this was Spotify’s plan all along: <a href="http://articles.latimes.com/2011/nov/10/business/la-fi-ct-facetime-spotify-20111110" target="_blank">get users hooked, then ask them to pay for music.</a></p>
<p>Beyond sharing with current friends, I’m more eager than I’ve ever been to connect with people I think might have good taste in music. That kid from high school who was always locked into massive Bose headphones while the rest of us were trading Savage Garden CDs? Yea, I think I will find and friend him on facebook. I think it’s fair to say that Spotify is widening people’s social circles. The other day, my friend posted this facebook status: <em>I hope you know I’m only friending you so I can see your Spotify collection</em>.</p>
<h4>Listening Limitations</h4>
<p style="text-align: left;">If you’re an “I heard that track 3 months ago” type of person, Spotify might not be the best choice for you. One of the major complaints I hear from my most progressive friends is that Spotify doesn’t have any underground or collaborative music. It’s true that Spotify won’t have your local corner band’s mix tape, or that cool mashup you heard in some random warehouse. But, that’s really what niche music blogs are for. Spotify’s mission isn’t to support local artists, but rather to proliferate mass music sharing amongst friends and, by proxy, even further extend facebook’s role in our lives.</p>
<p>What I think is coming next – and what I can’t wait to see &#8211; are companies joining Spotify. The idea of curating playlists for branding effects and sharing them on facebook? Now, that’s an idea. After all, music moves people.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.navigationarts.com/the-spotify-experience/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>eCommerce Q&amp;A with Senior Art Director Jaythan Elam</title>
		<link>http://blog.navigationarts.com/ecommerce-qa-with-senior-art-director-jaythan-elam/</link>
		<comments>http://blog.navigationarts.com/ecommerce-qa-with-senior-art-director-jaythan-elam/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 16:35:28 +0000</pubDate>
		<dc:creator>Jaythan Elam</dc:creator>
				<category><![CDATA[Strategy]]></category>
		<category><![CDATA[UI Design]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[interactive design]]></category>
		<category><![CDATA[Visual Design]]></category>

		<guid isPermaLink="false">http://blog.navigationarts.com/?p=4235</guid>
		<description><![CDATA[Q: Do you feel there’s a trend towards minimalism in ecommerce design? What about minimalism works for ecommerce? A: I come from the school of thought that minimalism, while capitalizing on open space and fluidity, does not pair well with the heavy informatics of ecommerce design. That being said, the greatest design &#8211; i.e. form [...]]]></description>
			<content:encoded><![CDATA[<p>Q: Do you feel there’s a trend towards minimalism in ecommerce design? What about minimalism works for ecommerce?</p>
<p>A: I come from the school of thought that minimalism, while capitalizing on open space and fluidity, does not pair well with the heavy informatics of ecommerce design. That being said, the greatest design &#8211; i.e. form meets function &#8211; occurs under a project&#8217;s constraints. It&#8217;s the out of box thinking that takes the cake.</p>
<p><span id="more-4235"></span></p>
<hr />
<p>Q: How do you feel about giant banner ads? Are they affective?</p>
<p>A: My thoughts on banner-ads, giant or otherwise, rank right up there with white noise. I know it&#8217;s there and so therefore automatically disregard the &#8220;noise&#8221; to scan for the information I need. Slapping an interruptive banner ad on top of a website is the equivalent of cutting to commercial on television—it’s an opportunity to go to the bathroom.</p>
<hr />
<p>Q: It’s all about increasing conversions. Have you found any visual cues that really work in moving visitors through the buying process?</p>
<p>A: This is an interesting question. There are certainly cues to help consumers move through the buying process, but I’ve found that it&#8217;s a user&#8217;s ability to backtrack that tends to add the most value. We’ve all gotten lost in big online shopping sites. It&#8217;s going to happen. How you&#8217;re able to navigate back once it occurs &#8211; that&#8217;s what has the greatest impact.</p>
<hr />
<p>Q: How important are customer reviews for ecommerce sites? What do you think about when incorporating them into the design?</p>
<p>A: Reviews are HUGE. They allow for a non-biased customer to rate and review. They act as one of the most cost effective selling techniques ecommerce sites have at their disposal. Because of this, I automaticcally incorporate an option to rate, review, and display popularity of any given product. The main drawback when it comes to reviews rests with authentication. There should always be measures in place so that a product&#8217;s reviewer is legit.</p>
<hr />
<p>Q: Have you found that vertical or horizontal displays work more effectively for certain products?</p>
<p>A: With the advent of the tablet, I think design for responsive displays is the new standard. Any given design should be easily read vertically or horizontally with a clearly defined brand, message, and contact.</p>
<hr />
<p>Q: Is there something you particularly enjoy about designing for ecommerce sites that you don’t get out of designing for traditional marketing sites?</p>
<p>A: I&#8217;m drawn to the ever-changing landscape of ecommerce. Load speed, bounce rate, conversion performance, OH MY! With a well designed site, these factors all combine to convey an informative, easily navigable site.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.navigationarts.com/ecommerce-qa-with-senior-art-director-jaythan-elam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Meme Killed the Fad</title>
		<link>http://blog.navigationarts.com/the-meme-killed-the-fad/</link>
		<comments>http://blog.navigationarts.com/the-meme-killed-the-fad/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 15:15:37 +0000</pubDate>
		<dc:creator>Hayley Wilson</dc:creator>
				<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Strategy]]></category>
		<category><![CDATA[fad]]></category>
		<category><![CDATA[internet meme]]></category>

		<guid isPermaLink="false">http://blog.navigationarts.com/?p=4188</guid>
		<description><![CDATA[My mom gets a big kick out of my clothes. “I used to wear those when I was your age,” she says. Or, “I remember when those were popular!” What does she mean by that? I think incredulously. It’s even more unsettling when she muses over the things I do. “Oh, I used to go [...]]]></description>
			<content:encoded><![CDATA[<p>My mom gets a big kick out of my clothes. “I used to wear those when I was your age,” she says. Or, “I remember when those were popular!” <em>What does she mean by that?</em> I think incredulously. It’s even more unsettling when she muses over the things I <em>do</em>. “Oh, I used to go there all the time with my friends. It was very popular when I was your age.”</p>
<p>Her comments have waxed as I’ve gotten older and discovered &#8211; through some clandestine sifting through cardboard boxes &#8211; that not only did she have cool clothes I can wear <em>now</em>, she listened to music I’m into, and read books whose titles have floated around in recent conversations amongst friends. After I swallowed the whole idea that nothing I do will ever be <em>original</em>, I took a step back and started thinking about trends and fads. What’s classic? What’s destined to come back? What should <strong>never</strong> come back? And where does the relatively new genre of internet memes fit in?</p>
<p><span id="more-4188"></span></p>
<p>Explaining trends is slightly less exhausting than the obtuse world of fads. Basically, trends have staying power and the ability to become a long-term influence in society as a whole. A great example of a current trend is the Occupy Protests, which have encapsulated <a href="http://www.pewsocialtrends.org/" target="_blank">festering class conflicts</a> that existed long before the dawn of Twitter. Trends generally have a foothold in society before they become popularized and user adoption/acceptance spikes. Waning support for the death penalty. Digitization of Higher Ed. Working remotely. <a href="http://pewresearch.org/pubs/1642/more-women-without-children" target="_blank">More women without children</a>. These are all strong examples of trends.</p>
<p>Fads, on the other hand, are a different, incredibly fascinating, relatively understudied social and economic phenomenon. In her paper “<a href="http://www.uh.edu/margo/paper.pdf" target="_blank">When a Fad Ends: An Agent-Based Model of Imitative Behavior</a>,” Margo Bergman defines a fad as an instance of “seemingly irrational imitative behavior…a drastic swing in mass behavior without obvious external stimuli.” Most theories that attempt to explain fads – network externalities (think proliferation of telephones), planned obsolescence (Apple does this all time), and information cascades (this Pez Dispenser isn’t “useful” anymore), fail to account for the rapid adoption and/or rapid exit of a product, or make inconclusive arguments around the perceived value of that product. Basically, fads can’t be explained by normal demand patterns.</p>
<p>In her study, Bergman used computer-generated agents to emulate real world market decisions. She called the agents “Fad Setters” and “Fad Followers” and programmed them to make fad-type purchase decisions.  She defined the Fad Setters as possessing qualities – popularity, wealth, status &#8211; that followers want to emulate.  Fad Setters are the people who begin the fad cycle. Fad Followers are also interested in new goods, but either don’t know how to find them, or aren’t interested in them until others have them.</p>
<p>Bergman’s agent model revealed one very important fact: if user adoption amongst Fad Setters is too low initially, the good will NOT become a fad.  This group is absolutely essential to popularizing an otherwise inconsequential idea or product.</p>
<p>Just for fun, lest we ever forget: The Pet Rock. Fallout shelters. Leg warmers. Bell bottoms (with a regretful resurgence in the 90s). Lava lamps. Have a Nice Day. Telephone booth stuffing (arguably a classic). Water beds. Beatniks. Beanie Babies. Yo-yos. Pogs. Zoot Suits.  And the list goes on.</p>
<p>So, where does the internet meme fit into all of this? Part of it has to do with <strong>time. </strong>Take a look at these graphs from Bergman’s agent model study and observe the timeline she used for evaluating the Rubik’s Cube fad.</p>
<div class="calloutFull"><a href="http://dev.blog.navigationarts.com/wp-content/uploads/2012/01/Bergman_Rubiks.png" data-colorbox-image="true"><img src="http://dev.blog.navigationarts.com/wp-content/uploads/2012/01/Bergman_Rubiks.png" alt="Rubik's Cube Fad" width="507" height="329" /></a></div>
<p>This isn’t the point of Bergman’s study, but it’s an excellent consequence for my purposes: she highlights that, classically, fads have a lifetime of 1-3 years. The hula hoop lasted a little longer; UFO pants a little less. But this timeframe is oft cited when referring to fads.</p>
<p>Now this is where things get interesting: On December 21<sup>st</sup>, I saw a youtube video (posted through a blog I read) called “Stuff Girls Say.” At that time, the video had around 2,000 views, which allowed me to do something very rare: share it with my network of friends who <strong>hadn’t</strong> seen it. If you don’t live in this hyper-networked world, then just trust me: this is a rarity.</p>
<p>Two weeks ago, I checked the video again. It had 8 million views. I checked again today, and it had just over 13 million views.  Seems like it’s still growing in popularity, right? Well, it’s not.</p>
<p>In fact right now, this video is at the declining end of its maturity. Most of the meme followers have caught on already, spurring dozens upon dozens of spin-offs: “Stuff New Yorkers Say,” “Stuff People in DC Say,” “Stuff Yogis Say,” and the list goes on. These copy cats flooded my newsfeeds for 2 weeks straight, effectively making it really <strong>not</strong> cool anymore.  And just like that, after only a month of wild success and popularity, the meme is dying.</p>
<p>This is the course of all memes – Double Rainbow, Honey Badger, “Planking,” whatever – to surge exponentially, quickly lose popularity, but hopefully retain some residual value.</p>
<p>So, it seems a meme is just like a fad, but shorter. Look at the general characteristics of fads:</p>
<p>Characteristics of fads (descriptive):</p>
<ol>
<li>Homogenous</li>
<li>Novel</li>
<li>Odd</li>
</ol>
<p>Characteristics of fads (user adoption):</p>
<ol>
<li>Sudden</li>
<li>Rapidly Spread</li>
<li>Quickly Accepted</li>
<li>Short Lived</li>
</ol>
<p>But there’s something different about memes: they aren’t dependent on those classic Fad Setter characteristics. What they’re really dependent on is the characteristics of the <strong>community</strong> promoting the meme.  In most cases, the meme begins with someone anonymous, and is popularized through social circles comprised of varying individuals.</p>
<p>Today, people can still remember sleeping in water beds, or staring at a lava lamp until 5 in the morning. Those physical fads gave us discrete memories.</p>
<p>But in 20 years, will I remember this meme? Likely, no. What I will remember is the communal experience of sharing these blogs, videos, photos, etc, with friends and enjoying that <strong>feeling</strong> of mutual experience.</p>
<p>As memes continue to pop up, I think we’ll notice a lot less concentration on fads, as what’s “cool” becomes less dependent on the perceived Fad Setter class and more reliant on what your online social circle shares with you. Memes live and die so quickly, feeding our frenzied need for constantly new content. I really don’t think we have the attention span for fads anymore.</p>
<p>Memes are slowly replacing fads. Memes <strong>are</strong> the trend.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.navigationarts.com/the-meme-killed-the-fad/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usability &amp; Agile Development: Tips for Integrating User Experience into the Process</title>
		<link>http://blog.navigationarts.com/usability-and-agile-development-tips-for-integrating-user-experience-into-the-process/</link>
		<comments>http://blog.navigationarts.com/usability-and-agile-development-tips-for-integrating-user-experience-into-the-process/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 23:33:33 +0000</pubDate>
		<dc:creator>Sarah Tricha</dc:creator>
				<category><![CDATA[Strategy]]></category>
		<category><![CDATA[agile development]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[User Research]]></category>

		<guid isPermaLink="false">http://blog.navigationarts.com/?p=4115</guid>
		<description><![CDATA[“Advance, and never halt, for advancing is perfection.” -Khalil Gibran Time, budget, and competing business priorities make it challenging to factor usability testing into project plans. Sometimes getting a product to market quickly is the “right” business priority for the client. With agile development projects, we add another obstacle to usability testing: release quick and [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>
    “Advance, and never halt, for advancing is perfection.”
</p></blockquote>
<p>-Khalil Gibran</p>
<p>Time, budget, and competing business priorities make it challenging to factor usability testing into project plans. Sometimes getting a product to market quickly is the “right” business priority for the client. With agile development projects, we add another obstacle to usability testing: release quick and release often. How does a user advocate fit into rapid release cycles that often focus on complex technical fixes?</p>
<p><span id="more-4115"></span></p>
<p>First, before development begins, hopefully the team has conducted foundational user research to root out any false assumptions or deeper problems on the design and development path. Once the ball starts rolling on rapid releases, it will be difficult to uncover any major issues.</p>
<p>Iterative usability methodologies are a starting point for usability testing on agile development projects. For example, Microsoft’s <a href="http://en.wikipedia.org/wiki/RITE_Method">Rapid Iterative Testing and Evaluation (RITE) Method</a> and usability guru Jakob Neilson’s <a href="http://www.useit.com/alertbox/discount-usability.html">discount usability</a> are good places to start.  Both of these methods share similar features:</p>
<ul>
<li><strong>Focus on qualitative not quantitative results</strong>. Small test groups of 3-5 users are enough to reveal most errors.</li>
<li><strong>Use simple prototypes and scenarios. </strong>Use paper prototypes to test simple use cases. Focus on <a href="http://www.useit.com/papers/heuristic/heuristic_list.html">ten usability heuristics</a> instead of complex interaction designs.</li>
<li><strong>Keep the sessions simple. </strong>Having a note taker present is enough. No need for the expense and added time of video recordings.</li>
</ul>
<p>Fitting usability into an agile development process requires a mindset change. Recognizing the truth of Voltaire’s observation that “the best is the enemy of the good,” keep usability moving forward by:</p>
<ul>
<li><strong>Using the users you have.  </strong>Informal tests using the team on its own project make scheduling work easier. Remember, an imperfect methodology can be worthwhile if it uncovers problems and results in timely improvements.</li>
<li><strong>Simplify requirements documentation.  </strong>Frequent conversations with the development team and low-fidelity prototypes replace more formal requirements documentation.</li>
<li><strong>Parallel tracks for user experience and development. </strong>Let user experience work continue ahead on a separate track while complex back-end fixes are implemented.</li>
</ul>
<p>A user experience professional bridges the gap between various stakeholders, technical requirements and user needs. As a project owner, user experience is the force that can herd the cats and focus priorities on user acceptance and adoption – the final determination of project success. Making usability a part of agile development requires a change in mindset, but leaving usability out of agile development is too costly to be worthwhile.</p>
<p>Do you have experience integrating user experience into an agile development project? How did it go for your project team? Please share a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.navigationarts.com/usability-and-agile-development-tips-for-integrating-user-experience-into-the-process/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Caching via Sitecore&#8217;s HTML Cache</title>
		<link>http://blog.navigationarts.com/caching-via-sitecores-html-cache/</link>
		<comments>http://blog.navigationarts.com/caching-via-sitecores-html-cache/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 15:10:22 +0000</pubDate>
		<dc:creator>Alan Gallauresi</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Caching]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Sitecore]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://blog.navigationarts.com/?p=4145</guid>
		<description><![CDATA[HTML Caching Sitecore employs a number of caches to improve base performance in the system.  Some contain database items, others contain access information.  One of the most important from a development perspective is the HTML Cache, which (unless explicitly turned off) exists independently. Sitecore allows developers to place both .NET sublayouts and XSL renderings in [...]]]></description>
			<content:encoded><![CDATA[<h2>HTML Caching</h2>
<p>Sitecore employs a number of caches to improve base performance in the system.  Some contain database items, others contain access information.  One of the most important from a development perspective is the HTML Cache, which (unless explicitly turned off) exists independently.</p>
<p><span id="more-4145"></span></p>
<p>Sitecore allows developers to place both .NET sublayouts and XSL renderings in Sitecore’s caches to improve performance.  This can be done by setting the sublayout or rendering to Cacheable=”true” in statically assigned calls, or checking the “Cacheable” property in the Layout designer for controls added dynamically through the Sitecore interface.  When a control is set to be cacheable and has been recently accessed, it is served by HTML cache designated for the current context site of the user – typically the site named “website” in a stock Sitecore installation’s production environment.</p>
<p>Enabling caching without setting individual VaryBy parameters caches a particular rendering’s output once for the lifetime of that cache – useful in the case of something like header text that never deviates anywhere it is shown on a site.  The HTML cache’s lifetime is dependent on several factors.  Since it lives in memory with the w3p.exe process, any time that process is restarted or killed, the cache is cleared: an IIS restart, a moved DLL, a web.config change, etc.  Additionally, the HTML cache is selectively cleared by publication events, flushing out items that may have been affected by the publication.</p>
<h2>VaryBy Parameters</h2>
<p>Applying individual VaryBy parameters sets aside a separate copy of the rendering’s output based on the parameters when the page is hit under those conditions.  The possible VaryBy parameters are:</p>
<ul>
<li>VaryByData</li>
<li>VaryByDevice</li>
<li>VaryByLogin</li>
<li>VaryByParm</li>
<li>VaryByQueryString</li>
<li>VaryByUser</li>
</ul>
<p>The parameters’ exact nature is described in <a href="http://sdn.sitecore.net/upload/sitecore6/64/presentation_component_reference-a4.pdf#search=%22presentation%22">Sitecore’s Presentation Component Reference</a> guide.  It is important to understand the differences between each of the VaryBy conditions – it is easy to confuse something like VaryByLogin with VaryByUser, a very different parameter.</p>
<p>How does this variance work? As an example, if an anonymous user hits a page with a sublayout which is set to Cacheable and VaryByLogin, Sitecore stores a copy of the non-logged in version of the sublayout in the HTML cache, serving it up as cached HTML to any other anonymous users.  When a logged-in user hits the page, and not until then, Sitecore caches up a “logged in” copy of the sublayout’s HTML and serves that up to further users.</p>
<p>The idea that Sitecore only caches individual VaryBy versions after the page is hit under those particular circumstances might seem obvious, but the consequences often are not.  A major goal of caching is to reduce the times code has to be run.  When a sublayout is varied by login, there are a maximum of two possible times the underlying code will be hit: logged-in, and not logged-in.  If that sublayout requires varying by user, the number of possible times that code might be hit may be in the thousands, or millions, depending on the number of users.  Since the sublayout is not placed into cache until the condition is met – generally a good thing, since otherwise a cache could contain gigabytes of nigh unusable data – each individual user is going to get an uncached version the first time they hit that component.  If that component is very slow, subsequent actions by that user might be faster, but that first hit will always take place, where it is likely that someone else would have hit a sublayout that is only cached by login.</p>
<p>Below are some practical values for the number of variations a VaryBy parameter might result in, and therefore their rough effectiveness.  Note that each VaryBy has a de facto minimum of two, because otherwise there is no need to vary by that condition – if there is only one device on a website, there’s no point in varying by it.</p>
<ul>
<li>VaryByLogin (two variations, always)</li>
<li>VaryByDevice (two to ten, accommodating various mobile or XML versions)</li>
<li>VaryByQueryString (two to millions, depending on how many unique querystrings might be applied to the sublayout)</li>
<li>VaryByData(dozens to hundreds of thousands, depending on how many content items are associated with that sublayout)</li>
<li>VaryByUser(dozens to millions, depending on number of user accounts)</li>
<li>VaryByParm(two to unlimited, depending how many parameters are used and their values)</li>
</ul>
<p>The inclusion of additional VaryBy parameters multiplies the number of potential cacheable bits, and tends to drastically reduce the effectiveness of caching.  A homepage sublayout which has three rendering options – normal website, mobile website and RSS feed (VaryByDevice), and different content depending on whether a user is authenticated or not (VaryByLogin) will have six variations (3 device * 2 login variations).  For a busy site, this is likely a good trade-off.  A sublayout that shows a breadcrumb trail for the current page in a thousand page site (VaryByData), and filters out any pages one of the site’s ten thousand users doesn’t have access to (VaryByUser) will have ten million variations &#8212; a configuration of no practical benefit and, at the least, be likely to waste valuable cache space.</p>
<h2>Application of VaryBy Conditions</h2>
<p>As mentioned previously, VaryBy conditions should be applied in &lt;sc:sublayout&gt; calls when the sublayout is statically included in a larger sublayout or layout, or dynamically applied in the design view when the sublayouts are attached to placeholders.  Do not put VaryBy conditions on placeholders, but on the controls within them.  Placeholders are designed so modular controls can be slotted onto them, and the individual controls should be in charge of whether they are cached and under which circumstances based on their code.</p>
<p>Remember that caching a control automatically caches the underlying controls included in it, statically or through placeholders.  A developer cannot “uncache” a particular subcontrol that is part of a larger cached structure.  To accommodate such a scenario, follow the Divide and Conquer approach described below.</p>
<h2>Divide and Conquer</h2>
<p>“Divide and conquer” refers to the act of splitting functionally similar controls into separate sublayouts strictly for the purpose of dividing cacheable “pieces” of functionality from non-cacheable.  It often goes against logical ideas of what should be included within a single atomic control.  For instance, a footer often does not contain a great deal of complex logic and a developer might structurally conceive of it as a single sublayout.  Indeed, many developers are wary of creating too many sublayouts because of the implied performance overhead, so even if it logically can be broken up into separate nested controls, they would choose a single sublayout.  This is typically a miscalculation when the potential to increase caching exists.</p>
<div class="calloutFull"><a href="http://blog.navigationarts.com/wp-content/uploads/2012/01/aaaaaaa1.png"><img data-colorbox-image="true" src="http://blog.navigationarts.com/wp-content/uploads/2012/01/aaaaaaa1.png" alt=""/></a></div>
<p>In the footer above, the left side is utility navigation, dynamically controlled by content authors in the system.  Because there is no roll-over state on the links and is consistent across the site, it could be cached without VaryBy deviation, which allows that navigation to be an ideal compromise between content author control and top performance by hard-coding those links.  The right side contains several bits of functionality, including ShareThis links, a print friendly option, a language selector, and a font size manipulator.  All of that functionality is accomplished with identical, cacheable HTML and Javascript – except for the language selector, which is an interactive postback control, which is generally not eligible for caching (see Interactive Controls, below).  Because of that one postback control, a single footer sublayout which contains all this suddenly goes from being entirely cacheable – Sitecore generates it once on the first hit, and then it is served up from memory every time after – to having no potential for caching whatsoever unless it is broken up in smaller sublayouts, which are cached with individual VaryBy criteria.</p>
<p>“Divide and conquer” indicates that the footer should be broken up into smaller sublayouts, because over the lifetime of a site, there is usually nothing that gets hit more frequently than headers and footers, and even small performance savings are replicated hundreds of thousands of times over, resulting in high ROI for low LOE.  In the footer example, it makes sense to nest.</p>
<p><em>An optimized footer with nested sublayouts. </em></p>
<p>Most comparisons should be able to easily show that the resulting gains are many times any anticipated overhead from splitting up sublayouts when there is a reason to do so.  Like all optimization exercises, it is important to do before-and-after metrics to make this demonstrable.</p>
<p>As a final note, this “divide and conquer” approach is a compelling reason to engage in optimization early on in the SDLC, so wireframe and control design account for performance in the componentization of functionality.</p>
<h2>Interactive Controls</h2>
<p>A control that posts back to the server is almost never a candidate for caching by VaryBy properties, as it varies by the form data that is posted back (not one of the standard VaryBy parameters), and often takes significant action based on that, rather than being just HTML display.  In some cases, it may be appropriate to consider rewriting logic so that a control does not require a postback at all.  A good example of this is a logout button which kills a user’s authenticated session and redirects them to a login page.  A programmer might naturally use a TextButton or other control that runs the code to log a user out on a postback submit.  But if this logout button is part of a complex sublayout that does “heavy lifting”, such as producing dynamic navigation, then that technique disallows Sitecore caching of the entire sublayout.</p>
<p>A more optimizable route is to create the logout button as a Hyperlink with a url parameter that forces logout, allowing the sublayout to be cacheable with the VaryByQueryString parameter.   Another alternative is to link to a completely different page that performs the logic, requiring no inherent varying of the caching of the original sublayout at all.  Finally, a developer may consider a custom Vary By parameter to handle the postback scenario.</p>
<h2>Custom VaryBy Parameters</h2>
<p>A developer may easily find his or herself in a situation where the standard VaryBy parameters do not fairly represent the conditions by which caching can occur.  If the “Divide and Conquer” approach is not sufficient, it is possible to create custom Vary By parameters by one of two methods: using the VaryByParm property and manually specifying the parameter, or by extending a webcontrol base class and inheriting your sublayouts from it, as described in several blog posts by Sitecore experts John West and Alex Shyba:</p>
<p><a href="http://www.sitecore.net/Community/Technical-Blogs/John-West-Sitecore-Blog/Posts/2011/05/Custom-Caching-Criteria-with-the-Sitecore-ASPNET-CMS.aspx" target="_blank">Custom Caching Criteria with the Sitecore ASP.NET CMS</a> - John West</p>
<p><a href="http://sitecoreblog.alexshyba.com/2011/08/sitecore-output-caching-kick-it-up.html" target="_blank">Sitecore Output Caching: Kick it up a Notch</a> - Alex Shyba</p>
<p>Once again, one must appreciate the caveat that optimization is an exercise in gathering low-hanging fruit, and an analysis of the effort in creating the custom parameter versus potential speed gain is important factor.</p>
<h2>Control Hierarchy and DOM Considerations</h2>
<p>In an ideal scenario, presentation layouts and sublayouts are divided up in logical manners, and each control only affects its own piece of real estate.  Every bit of functionality affects only the area where it “lives” in the control hierarchy, and caching potential is easy to determine.</p>
<p>In the real world, it’s common to see scenarios where controls, either in HTML output level or .NET functionality, need to alter other controls even when they are not in a direct parent/child situation.  An often seen example of this is when the HTML for a page is identical, but the dimensions of objects are changed by swapping out a different CSS class on high-level elements, such as the body of the page, when some modular part of the page is there or not.</p>
<p>Take, for instance, a simplified scenario where a page’s interior dimensions change via CSS when there is no left nav. The following pseudocode HTML represents a page with such HTML:</p>
<pre class="prettyprint">&lt;body&gt;
    &lt;div id="container" class="left-nav-with-content"&gt;
        &lt;div id="leftRail"&gt;
            &lt;sc:Sublayout runat="server" ID="slNavLeft" Path="~/layouts/Site/Nav Left.ascx" /&gt;
        &lt;/div&gt;
        &lt;div id="content"&gt;
            &lt;sc:Sublayout runat="server" ID="slContentBody" Path="~/layouts/Site/Content Body.ascx" /&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;</pre>
<p>The “left-nav-with-content” class applied to the high level container determines the width of each div column.  Now, the same structure without a left navigation sublayout:</p>
<pre class="prettyprint">&lt;body&gt;
    &lt;div id="container" class="no-nav-just-content"&gt;
        &lt;div id="leftRail"&gt;
        &lt;/div&gt;
        &lt;div id="content"&gt;
            &lt;sc:Sublayout runat="server" ID="slContentBody" Path="~/layouts/Site/Content Body.ascx" /&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;</pre>
<p>The HTML developer has left the leftRail div, and swapped out on the class on the main container for “no-nav-just-content”, adjusting the dimensions of the elements to hide the left nav.  If the existence of a left nav is static on a per template basis, this change can be statically applied in the presentation and work well with caching.  However, if the nav is dynamically present, say, based off of a checkbox called “Include Nav” on the content page, this makes caching of the navigation sublayout complicated. Since only the output of the sublayout is cached, that cached HTML cannot programmatically affect parts of the page in .NET.  It is impossible for it to be cached via normal VaryBy parameters and swap out the CSS class applied to the container div.</p>
<p>How can the issue be addressed?  There are several potential methods:</p>
<ol>
<li>Ideally, the HTML may be rewritten so that the leftRail elements “push” the content elements, obviating the need to have a specific class on the container object.  Each element can be cached appropriately for itself, and the page reflows naturally. This approach is desirable but not always practically possible.</li>
<li>The swapping of classes may be handled by client-side scripting, where the information about the existence of a left nav element is done in jQuery or pure javascript.  This solution bypasses worries about caching, but is prone to having the page visually flash as the browser reflows the page after the document is ready.</li>
<li>Programmatically use FindControl to alter the class attribute based on the existence or visibility of the left nav.  The page itself can determine the state of the interior controls and write out the correct class.</li>
</ol>
<p>All this goes to say that the hierarchical design of a site’s presentation plays an important role in the applicability of caching individual components, and care should be taken to account for caching during the design and cutting phases.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.navigationarts.com/caching-via-sitecores-html-cache/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

