Tuesday, January 1, 2008

Common Sense

Common sense. The problem seems to be it's not all that common.

In today's world of software products, countless frustrations are encountered by users every day. These range from obviously bad UI design to mystical error messages that leave the user (and sometimes the PC) hanging, wondering what to do. A common phrase seen on message boards by frustrated customers is "Was this even tested?!"

I have professionally filled the roles of System Administrator, Quality Assurance Engineer and Software Developer, but fundamentally we are all users of software in some capacity or another. I understand how development and product marketing function under various circumstances - from well-planned and well-executed projects, to those that never had a design document and are hacked out in a myriad of languages. I even understand that sometimes, it's better to release a product with 90% functionality and make the deadline than to release 100% and miss the deadline entirely. And as an advanced user, I accept that most software today is complex and requires teams of people to compose. But this doesn't excuse the developer, the QA staff or the product management organization from overlooking common-sense items that will clearly frustrate their users.

Programming logic is one thing, while common sense is another. I recently encountered a web page that was supposed to send me a code so I could authenticate my bank account login. It had one radio button available and a "Send" button. I checked the radio button and clicked Send. What did I see?

An error occurred sending e-mail. Try again.

Obediently I tried again, but of course nothing changed. In shock I e-mailed the website, ranting that there didn't seem a whole lot of room for human error on my part. This error left me confused, not knowing if it was an error on my end, an application error or an error with the address I had previously provided in my bank account settings. Furthermore, now that I couldn't authenticate, I had to go through the insecure medium of e-mail to contact support.

Frustrating User Interfaces (FUI's) are abounding. Take the popular personal networking site, www.facebook.com. Facebook provides excellent features, but navigating the user interface is extremely frustrating. Common sense dictates that if a site is difficult to navigate, many users will just give up and go do something else. I returned many times over the course of several days and finally discovered how to retrieve a personal message, and this success happened almost randomly. When I click on someone's name, I expect to go to their profile page, but I seem to be taken to all sorts of random pages. It is unclear whether or not I will navigate to another page within my own profile or my friend's page, and where I will land. Facebook is but one of thousands of bad interfaces.

I feel that many engineers either refuse to step outside of their engineering brain to see things as a user, or simply don't care about anything but hitting their deadline, at all costs. The end result is undocumented code, poorly organized source files, untested code paths and strings containing unintelligible instructions or spelling errors. These elements create a perception of lack of quality when viewed by an every day customer.

Could most of us do any better? When designing software from scratch, with nothing to reference as a template, I'd probably say no. But with so many products out there, it seems reasonable that we should be constantly improving on software design and learning from the mistakes of others (including our competitors). Yet common sense in software remains... not so common after all.