<?xml version="1.0" encoding="utf-8"?>

			<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cc="http://web.resource.org/cc/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">

			<channel>
			<title>Cutter&apos;s Crossing - Usability</title>
			<link>http://www.cutterscrossing.com/index.cfm</link>
			<description>ColdFusion Development, Life, and Other Stuff</description>
			<language>en-us</language>
			<pubDate>Sat, 25 May 2013 21:06:19 -0400</pubDate>
			<lastBuildDate>Thu, 09 Feb 2012 10:51:00 -0400</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>web.admin@cutterscrossing.com</managingEditor>
			<webMaster>web.admin@cutterscrossing.com</webMaster>
			<itunes:subtitle></itunes:subtitle>
			<itunes:summary></itunes:summary>
			<itunes:category text="Technology" />
			<itunes:category text="Technology">
				<itunes:category text="Podcasting" />
			</itunes:category>
			<itunes:category text="Technology">
				<itunes:category text="Tech News" />
			</itunes:category>
			<itunes:keywords></itunes:keywords>
			<itunes:author></itunes:author>
			<itunes:owner>
				<itunes:email>web.admin@cutterscrossing.com</itunes:email>
				<itunes:name></itunes:name>
			</itunes:owner>
			
			<itunes:explicit>no</itunes:explicit>
			
			<item>
				<title>The Joys of Developing for Internet Explorer</title>
				<link>http://www.cutterscrossing.com/index.cfm/2012/2/9/The-Joys-of-Developing-for-Internet-Explorer</link>
				<description>
				
				&lt;em&gt;Note: Follow the madness here to it&apos;s conclusion, to discover yet another &quot;Really? I didn&apos;t know that...&quot; IE moment, that may save you heartache and pain.&lt;/em&gt;

Is the sarcasm evident in my title? It should be. While Internet Explorer may have been &quot;groundbreaking&quot; when it was released, it has ever been the bain of the web developer&apos;s existance. Why, you ask? Because it refuses to adhere to standards, and just operates differently than everyone else. To be fair, Internet Explorer 10 is in the works, and supposedly closes the gap a fair amount (and even wins out in some of the html 5/css 3 support), and 7, 8 and 9 did progressively improve (if slowly). Unfortunately the fact remains that some companies/organizations/governments are stuck on Internet Explorer 6, or maybe even 7. If you are a web developer, and write cross-browser web applications, chances are Internet Explorer has hit you more than once in your career.

It&apos;s the dumbest things that hit you too. The most obscure &quot;WTF!?!&quot; moments that drive you crazy. That is a daily experience for me now.I&apos;ve been a server-side developer for over two decades now, but in the last several years I have dealt more and more with client-side development. Why? Well, I started with HTML, and got into Javascript when it was introduced, and then got into server-side programming, so I already had some roots. With all of the work that I&apos;ve done, working with &lt;a href=&quot;http://www.sencha.com/products/extjs/&quot; target=&quot;_blank&quot;&gt;Ext JS&lt;/a&gt; and &lt;a href=&quot;http://www.jqueryui.com&quot; target=&quot;_blank&quot;&gt;JQueryUI&lt;/a&gt;, my current position threw me to the wolves to work on standardizing our application&apos;s interface development. Fun, right? It is (a lot), but the client is one of those mixed environments that is entrenched in IE, typically at 7 or 8. They can&apos;t upgrade, so it&apos;s our responsibility to make sure that our interfaces can render and function properly in these older, buggy, non-compliant POS browsers. (Note the frustration here.) Let me layout one of those typical, what-the-hell-is-goin-on-here, Internet Explorer moments for you.

&lt;h3&gt;The Application&lt;/h3&gt;

Like most good development companies, we&apos;ve made the shift to more modular, reusable code. It&apos;s a legacy codebase, serving the client well for years, and goes through constant review, revision, update and improvement. Many of us (developers in general) would love to just scrap our current codebase and start from scratch, but that&apos;s not really practical in most situations. What happens is you begin to slowly move away from &lt;a href=&quot;http://www.laputan.org/mud/&quot; target=&quot;_blank&quot;&gt;The Big Ball of Mud&lt;/a&gt; design pattern, by replacing small pieces of your application as updates/changes are required, with more modern code. Rather than one huge application, what you end up with are small, mini-applications, that can be plugged in anywhere within an application. Each of these &apos;applications&apos; then have their own supporting files: html, javascript, and css. Welcome to the fun.

&lt;h3&gt;Collision Control&lt;/h3&gt;

At this point, the issue isn&apos;t necessarily browser specific, but rather logistics. When you start adding in multiple mini-applications, things can (and will) butt heads. You will have issues with race conditions, as multiple scripts use variables of the same names, have functions with the same name that override each other due to execution order, id&apos;s repeated in a page (IE hates this a lot), and multiple event handlers accidentally added to the same DOM controls because selectors aren&apos;t specific enough. You tighten up your DOM selectors, come up with some variable and DOM naming standards, and learn about namespacing. Each a slow, progressive step towards sanity.

Then there&apos;s the issue of accidentally loading the same files multiple times. Our application uses JQueryUI, &lt;a href=&quot;http://cfuniform.riaforge.org/&quot; target=&quot;_blank&quot;&gt;cfUniform&lt;/a&gt;, &lt;a href=&quot;http://www.tinymce.com&quot; target=&quot;_blank&quot;&gt;TinyMCE&lt;/a&gt;, and &lt;a href=&quot;http://www.trirand.com/blog/&quot; target=&quot;_blank&quot;&gt;jqGrid&lt;/a&gt; extensively. Each of these mini-apps loads it&apos;s own support files. Suddenly, you&apos;re faced with coming up with systems of control, to ensure that you aren&apos;t loading scripts and CSS multiple times.

&lt;h3&gt;Back to the Browser&lt;/h3&gt;

There&apos;s a ton of debate out there about loading multiple scripts and css files. Loading multiple files has performance issues for initial download, but maintenance is far easier with these bit modularized like your display and model. In many applications things aren&apos;t complex enough for multiple files to truly be an issue. But, when you are writing a complex application, like scheduling software, customer resource management, content management, etc., the number of &apos;modules&apos; you might include in a page can grow and grow and grow, especially if your interface makes heavy use of ajax. This is where Internet Explorer can actually force your hand into creating a better experience, unintentionally and generally when it&apos;s inconvenient.

What happens when you load up your app, and notice that your forms (cfUniform) don&apos;t appear to be styled, and your highly configured and customized &lt;abbr title=&quot;What You See Is What You Get&quot;&gt;WYSIWYG&lt;/abbr&gt; editor (TinyMCE) appears to be half loaded? But, only in IE? Well, you start troubleshooting. Maybe cfUniform didn&apos;t load? No, the stylesheet is what&apos;s important here, and Developer Tools say it&apos;s there. The editor? Did it initialize? Well, the style and font dropdown info is there, even if they aren&apos;t in dropdowns. What&apos;s going on?

You start removing script files, one at a time, to make sure there isn&apos;t a conflict. But wait, it works in everything but IE? Well, you try it anyway. You step debug things, trying to see a break. And you Google (and Google, and Google). These are my days. And, after three days of this single issue, you finally stumble on &lt;a href=&quot;http://john.albin.net/css/ie-stylesheets-not-loading&quot; target=&quot;_blank&quot;&gt;an obscure post&lt;/a&gt; (page 15 of a Google search). Please, tell me you&apos;re kidding me...

Yes, Internet Explorer (at least 6 through 9) only apply up to 31 stylesheets and/or style blocks. So, when your page (1 specific stylesheet) uses JQueryUI (1 plugin stylesheet), and a menu (3 plugin stylesheets), and a nav widget (1 plugin stylesheet), plus cfUniform (3 plugin + 2 override stylesheets), and jqGrid (1 plugin stylesheet), and TinyMCE (multiple dynamically loaded stylesheets, depending on plugin configuration), and...

You get the picture. Oh, and did I mention that some of those stylesheets were 10 line, IE only stylesheets to hack IE&apos;s different handling of CSS? Yeah, salt in the wound. To test this, I went looking for something that might be loaded by default, but wasn&apos;t needed on this page of my app (or at least, not for what I was testing). I found a few stylesheets I could disable in local development, and reloaded my page. Imagine my surprise when everything rendered as it should. I had to toggle it back and forth a few times just to verify. I think I spewed profanity for several minutes.

&lt;h3&gt;What To Do?&lt;/h3&gt;

OK, so we had already been looking to form a strategy for combining files and minification. Notice I said &quot;looking to&quot;. That is to say, we wanted one, and knew we needed one, and even done a little research, but we hadn&apos;t &lt;b&gt;solidified&lt;/b&gt; one. If we had, we&apos;d already have been working on it. Now, under the gun, with deadlines looming, we have to put it in gear. What to do? Well, in this case, improvise. Time not being on our side, we have to do this manually. Identify multiple CSS files that are used either constantly (every single page load) or extensively (85%+ page view). Combine and compress, and remove single &lt;em&gt;link&lt;/em&gt; references from the code. Now, I didn&apos;t do this completely manually. I did write a script where I could define which files, in what order, and have the script build the file, while correcting internal url references so that image paths wouldn&apos;t break. Then I used an online compressor to minify the file. After all of this work (took the good part of an afternoon), I reload my pages and all of them function as intended, in all browsers. And, compressing 10 files down to 1, I now get my form styling, and my editor displays correctly, etc.

OK, is this the ideal solution? No, we&apos;ll still develop a comprehensive (and automated) strategy. But, this gets us over the deadline hump, and proves that the multiple stylesheets were the issue, and that this type of action can correct the issue. Proof of concept. You have to start somewhere I guess. But, how much easier web development would be if we didn&apos;t have to support Microsoft&apos;s mistakes.
				</description>
				
				<category>Ajax</category>
				
				<category>ExtJS</category>
				
				<category>Sencha</category>
				
				<category>JQuery</category>
				
				<category>Usability</category>
				
				<category>Development</category>
				
				<category>jqGrid</category>
				
				<pubDate>Thu, 09 Feb 2012 10:51:00 -0400</pubDate>
				<guid>http://www.cutterscrossing.com/index.cfm/2012/2/9/The-Joys-of-Developing-for-Internet-Explorer</guid>
				
				
			</item>
			
			<item>
				<title>Anatomy of a Shopping Cart: A Usability Study</title>
				<link>http://www.cutterscrossing.com/index.cfm/2012/1/6/Anatomy-of-a-Shopping-Cart-A-Usability-Study</link>
				<description>
				
				This little writeup is a usability study of cart layout and process in general. So many apps today are still sporting the 1999 click-and-reload interface, and times have changed. Users are tired of the old way, embracing the new, and if you&apos;re behind the times you could be losing clients fast.

Shopping Carts are funny, terrible things. The less intuitive they are, the higher the abandon rate, and yet you have to pack a ton of stuff in there. The trick is to anticipate user workflow, and match that as much as possible, without making the user work for it too much. This is the whole precept behind &lt;a href=&quot;http://www.amazon.com/gp/product/0321344758/ref=as_li_tf_tl?ie=UTF8&amp;tag=cutterscrossi-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321344758&quot;&gt;Don&apos;t Make Me Think&lt;/a&gt;&lt;img src=&quot;http://www.assoc-amazon.com/e/ir?t=cutterscrossi-20&amp;l=as2&amp;o=1&amp;a=0321344758&quot; width=&quot;1&quot; height=&quot;1&quot; border=&quot;0&quot; alt=&quot;&quot; style=&quot;border:none !important; margin:0px !important;&quot; /&gt;.

First things first, create a method for detecting JavaScript prior to a user ever coming to the shopping cart, as it redefines the experience for the user entirely. If JavaScript isn&apos;t present, then it&apos;s either a bot, some non-Class A mobile device, or less than 1% of the desktop user. Surfing the web without JavaScript is even less of a chance than a user surfing without the Flash player. There&apos;s just too much of a user experience that is lost without it, and most standard users don&apos;t have a clue how to disable it to begin with.

You end up with two separate cart processes, one with JavaScript, and one without. &quot;Two processes?&quot; Well, you write a process with graceful degradation, that can do what needs to be done in either scenario, and with code reusability in mind. This writeup will go over the user with JavaScript enabled.

I&apos;ve mocked up a simple, yet effective, cart design. This is just a wireframe model, but there&apos;s nothing here that can&apos;t be done with HTML and CSS. A user without JavaScript would have to step through the stages of placing an order, screen by screen. A user with JavaScript has to step through as well, but through JavaScript and Ajax, this user does most of their work right from the cart.

Below is the mockup, with an explanation of the different stages of process to follow:

&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img src=&quot;/images/cart-pt1.png&quot; style=&quot;width: 600px; height: 529px;&quot; title=&quot;Shopping Cart Balsamiq Mockup&quot; /&gt;
&lt;/div&gt;

This is pretty loose. &lt;a href=&quot;http://www.balsamiq.com/&quot; target=&quot;_blank&quot;&gt;Balsamiq&lt;/a&gt; only allows you to do so much, so color and highlights and icons give things a lot more pizazz, but this should give you a good idea. If you&apos;re unfamiliar with Balsamiq, it&apos;s a great tool for doing simple &quot;pen on napkin&quot; wireframe layouts during interface design. It&apos;s also a great way to draft quick mockups for clients without spending hours of unpaid time, and even more hours on revisions.

From the top down:

The only button at the top is the &quot;Keep Shopping&quot; button. A user has to verify all the details prior to checking out, so the &quot;Checkout&quot; button is at the bottom of the form. The &quot;Clear&quot; button is also at the bottom, giving the user a second chance not to clear out. A second &quot;Keep Shopping&quot; button is at the bottom of the page, to encourage the user to buy more.

Next up is the cart contents. A user, coming to the cart, wants to know what&apos;s in it first. This is the user&apos;s main focus, so registering for the site or entering credit details and stuff always comes after the cart itself.

&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img src=&quot;/images/cartitems.png&quot; style=&quot;width: 600px; height: 125px;&quot; title=&quot;Mockup Cart Items Listing&quot; /&gt;
&lt;/div&gt;

There are a few different ways to handle actions on cart items. Here I show the &apos;Remove&apos; checkbox. If a user hits the box, take the item out. Don&apos;t prompt &apos;Are you sure?&apos; This annoys users. Of course they&apos;re sure, or they wouldn&apos;t have checked the box. Another way of handling &apos;Remove&apos; is part of an action link list. There are already two other action links showing (Gift Wrap and Add to Registry), it would be easy to adjust the layout to use all action links instead (Remove at the top, Add to Wishlist, Add to Registry, with Gift Wrap last). Here&apos;s a tip though: &lt;em&gt;Any of these actions will ultimately remove the item from the cart&lt;/em&gt;.

Being tabular in nature, it&apos;s best to use a table here. Unwritten rules of cart usability: the &apos;Item&apos; is listed first, unless something small, like a checkbox, radio button, or icon precedes it. The cost (Qty * Price) is always last. This allows us to build a columnar layout of the money details. If you have line item discounts, you may show the math here too, to emphasize what the client is getting. In this mockup, it&apos;s all shown below.

Next, show the user some love. Discounts, Promos, Gift Cards and Coupons should follow the cart. 1) it makes it easier to calculate the Subtotal and 2) it gives the user a warm fuzzy to watch their Total decrease. If there were discounts on items, pull them out here (if you didn&apos;t do it above). Don&apos;t make a user refresh the page to get a new Total. Gift Cards and Coupons? Use Ajax to verify their validity and value, and apply it to the tally block right then.

&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img src=&quot;/images/cartdiscounts.png&quot; style=&quot;width: 277px; height: 87px;&quot; title=&quot;Mockup Cart Discounts&quot; /&gt;
&lt;/div&gt;

If addresses aren&apos;t pre-populated, then the user hasn&apos;t logged in or registered or set up addresses yet. Our action depends on which scenario is the case. If the user hasn&apos;t logged in or registered, then we show them a login box, with a register button. If they login, we go ahead with the rest of the order process. If they must register, handle that registration in a modal popup and then update your area. If the system allows for anonymous users (those who don&apos;t want, or have, to register with the site), or a registered user hasn&apos;t setup addresses yet, then we display &quot;add address&quot; links to the display that can load modal forms to collect the necessary details.

&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img src=&quot;/images/cartaddresses.png&quot; style=&quot;width: 348px; height: 95px;&quot; title=&quot;Mockup Cart Addresses&quot; /&gt;
&lt;/div&gt;

You can&apos;t tally Tax unless you know you need to collect it. If you don&apos;t have an address yet, don&apos;t show the Tax line item. If you get an address, and tax does need to be applied, add it in right away, and highlight it, and the Total change, so there&apos;s no surprises.

&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img src=&quot;/images/carttotals.png&quot; style=&quot;width: 171px; height: 70px;&quot; title=&quot;Mockup Cart Addresses&quot; /&gt;
&lt;/div&gt;

And, once you have an address, then you already know the zip/postal code the order is going to. Once a Shipping Method is selected we can lookup the shipping cost via Ajax. And, if the purchase is a download, then there&apos;s no reason to show them the Shipping line item at all. Avoid the &quot;Estimated Shipping&quot; thing, just give them the info once you have it. If need be, show them text (&quot;We need your address and Shipping Method to show Shipping Cost&quot;) to help push them through the order process.

&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img src=&quot;/images/cartshipping.png&quot; style=&quot;width: 327px; height: 53px;&quot; title=&quot;Mockup Cart Shipping Methods&quot; /&gt;
&lt;/div&gt;

Last is the Payment Method. When a user selects the Payment Method, then the input fields for this area should change to the appropriate fields for that method. Don&apos;t show them fields for every possible option, just those for the option they&apos;ve chosen.

&lt;div style=&quot;text-align: center;&quot;&gt;
	&lt;img src=&quot;/images/cartpayment.png&quot; style=&quot;width: 519px; height: 84px;&quot; title=&quot;Mockup Cart Payment&quot; /&gt;
&lt;/div&gt;

That&apos;s it. By streamlining your Cart and Checkout process to match user workflow, you should see a lower abandon rate and higher sales. There&apos;s a lot of code involved, and both client-side and server-side data validation is a must, for security purposes, but the end gain makes the effort more than worthwhile. What are your suggestions for improving Cart usability? Give me your feedback below.
				</description>
				
				<category>Ajax</category>
				
				<category>Usability</category>
				
				<category>Development</category>
				
				<pubDate>Fri, 06 Jan 2012 16:27:00 -0400</pubDate>
				<guid>http://www.cutterscrossing.com/index.cfm/2012/1/6/Anatomy-of-a-Shopping-Cart-A-Usability-Study</guid>
				
				
			</item>
			</channel></rss>