You know what really grinds my gears? Bad UX!
I came across this login prompt today on a local county college library's website and it was just one more example of horrible UX that I see all too often and makes me physically sick:
What's wrong with this? Oh geeze... where do I start!?
- What's with the horizontal alignment?? Stack these fields vertically, please! Users are more than willing to scroll up/down almost indefinitely, but if you make them scroll horizontally, they may never come back again. Granted, this particular example isn't too wide, but why deviate from the de-facto standard?
- "College ID number (ex G12345678)" This has always bothered me. Why can't I choose my own login name? Sure, I understand that it has to be linked to my asinine college ID number at some point - and that's fine - but let me choose a username I can remember. Some people defend this practice, citing "security concerns." What: security through obscurity? Give me a break - if I can log into my PayPal account with just a username and password, a county library system shouldn't need any more than that.
- Status!?! What the heck!? Why do you need to know my status? And, what exactly is my status? This may sound a little philosophical, but what makes a Student or "Faculty/Staff", anyway? What if I am a student worker, employed by the college?
- The only action on the page is "Access Databases." What databases? This is the prompt to login into an online library card catalogue . I don't want to access "databases", I want to search the card catalogue! Actually, my true goal is to find and request the book I'm looking for... but I've already accepted that I have to use the online catalogue to do that.
It's the second and third items that particularly bother me, and the issues that I'm going to attempt to tackle in this post.
You may be saying, "calm down, it's just a library login..." But that's the point - it's not. You run into these things on a daily basis, and they need to stop! UI developers need to make the interface much more polite; they need to cater to their customers instead of insisting their customers cater to them. They ask you for things that they know just so they don't have to figure it out themselves. They can (or at least should be able to) take your ID number, cross-reference it against some database somewhere and determine what your status is, but - for whatever reasons - they don't. Of course, these atrocities aren't limited to login pages... but any time you're soliciting something from the user - asking them to give you some of their priceless time and energy to give you something you want.
It becomes an epic struggle between what you (the customer) and I (the developer) actually want out of this interaction. You usually want a few specific things - in the above example, it happens that you'd like to locate and possibly reserve a book without leaving the comfort of your home. I am here to write applications that give you what you need, but I also have concerns. They may be security-, performance-, business-related, or a myriad other things... but who's needs should take precedence? I'll give you a hint - if your needs didn't exist, I wouldn't have a job.
And the most annoying thing about it all is that the solution is very easy...
Put the Customer First
A lot of lip service is given to this concept, but somehow the sentiment often gets lost somewhere between the requirements phase and the UI design (if it was ever there to begin with)... But, there's a solution: design with the customer in mind. Obviously you're going to need some things - such as a username and password pair in order to authenticate a user, or billing information to complete an order - but before you ask them to spend their valuable time giving you something, be sure you really need what you're asking for! Not only that, ask for it without wasting their time. Here are a few tips:
- For every field you're requiring the user to enter, ask yourself if there is any way you can figure it out yourself using some other piece of information they've already provided. If this is the case, don't waste their time asking them in the first place. For instance: in the above example I can probably determine whether the user is Staff or Student once they've given me their ID
- Ask them for something they know (or can remember easily)! Don't require them to give you their randomly-assigned personal ID (e.g. college id, employee id, etc) every time! It may be very important to you, but you can help them out by asking them once (the first time) and then let them cross-reference it to something that they can remember, such as a username that they've picked. Let the system do the memorizing of obscure data!
- It often helps to explain to customers - on a per-item basis - why it is you think this information is important. Not only is this likely to decrease their annoyance at having to answer your questions, it will also help them understand what, exactly, you're asking for and may even increase their chances of being honest!
- I know, I know - you're thinking "My users don't lie!" Well, I guarantee that if you force them to give you information they don't want to give they will! Tell me - honestly - how many times have you filled out a form, and entered your email address as "firstname.lastname@example.org"? I thought so... (Effeafdsfefe must be getting a LOT of junk mail, whomever he or she is!)
- Ask yourself if you're going to - realistically - do something with this data, or if it's just going to hang out in your database/data warehouse not being put to any good use. Wasting your users' time asking them for information you don't really care about is the biggest insult you can give them. If you determine this is true - that you don't really care about a particular item - but you decide not to remove it anyway (e.g. some business group somewhere thinks it's really important), here are a few ideas that you might implement to ease the added burden you are now placing on your users:
- Make it optional, please! If you're only going to use it at the rare times you're interested in it, let me decide whether or not I want to enter it. I'll enter it during the rare times that I feel like wasting my time entering this extraneous data...
- Try grouping all of these optional items away from the ones so they don't detract from the importance of the required fields. Then, you may even want to go so far as hiding these fields from the user, allowing the user to choose whether or not they even want to see them.
- Pre-populate it with sane default data that the user can simply accept as opposed to entering themselves
- If none of these works - and you're dealing with a known set of values - use the technique that's all the rage lately: auto-complete. This is where the user begins entering data and you try to guess what they're try to say before they're finished saying it... saving them a bunch of energy. If you're going to make them work, make them work as little as possible.
The common idea shared between those last two suggestions bears repeating: pre-populate whenever you can! If you know something, by all means be polite and tell the user you know it already. This can make all the difference between a smart, friendly interface and a waste of time. After all, filling out a form doesn't really have to be a tedious, laborious task. Not if it was created right!
So, now I've made you aware of some of the worst things you can do to your users (along with some helpful tips to mitigate them). Well... we're the developers who propagate these atrocities! And, that means that we hold the power to end them. So, I want you to try something: every morning when you wake up, look in the mirror and say "Put the Customer First" three times. One of two things will happen: either you'll start changing the way you think about designing interfaces, or... you'll feel incredibly silly and stop doing it very quickly. It will probably be the latter (that's what happened to me), but at least you gave it a shot, and maybe just by trying you'll start thinking about it just a bit more; and that's a step in the right direction. Believe me: your users will thank you. I know I will.