I have one big pet peeve when it comes to my daily work as a software developer, and I see it in all types of applications across the web and on the desktop: applications designed without taking the user experience into consideration. By no means am I saying that an application should have a masterfully designed interface that requires top notch designers and artists, but at least a workable UI that makes functionality obvious to the user is desirable.
One thing that makes me cringe is when the UI of an application is not consistent across the application. Sometimes it is difficult to design a UI that will work for all situations, but it is doable, and it makes it so much easier on the users if they know where to look for specific functionality. I have also noticed, however, that sometimes there is a temptation to use shiny new toys (i.e. third party components) just because they’re available, and not necessarily because they’re the best tool for the job. For example, in the administration console of a web site: if I use a third party grid on one listing page but do not use the same grid for all the listing pages, we’ve pretty much killed our consistency because there’s a very good chance that they’re not going to look or act the same. This problem compounds as multiple developers use more components across the application. By no means is this the only situation that creates inconsistency, but it is certainly a big one that I have experienced.
Another thing that can complicate the user experience is sluggish or lack or responsiveness in an application, especially on pages that utilize AJAX and don’t have any sort of loading indicator. I guarantee that some users will get frustrated if they click on something, expecting some sort of immediate behavior, and do not get it. As soon as they do not get it, they start looking around for some answers. Even just a slow response here and there adds up to be a frustration. For example, on a form that I had the "pleasure" of using in the past, the AJAX response was slow enough to the point where if you filled out the form and tabbed between the fields faster than the field-by-field validation could process, when it finally did catch up it would kick the cursor back to the field that triggered the processing and erase all the information entered afterwards. Talk about confusing.
I’ll leave this semi-rant at that. Needless to say, there are many factors that can negatively affect the user experience, and it takes some careful testing from the user’s perspective to catch them all. I know as a developer it is sometimes hard for me to catch some of them before the users do. This is the part of the application that people see and work with, so it is important, if not critical, to get it right.