Developers need to step back and think.
I have been doing a lot of consulting lately looking at people's ideas for Ajax applications. Whole idea behind it is to tell them if it will work or not. I have seen some cool ideas, ideas I would have never thought of, but I have seen a lot of bad ones too. Now it really seems that people think "flashy" is good. If I add tons of crap people will love it. It may make your application top of the line, but you have to draw a line somewhere. Developers have to remember don’t change things that are normal by default and users can not read your mind on how things work! Do not override functionality!!!! I can not stress that point enough.
First let’s peep at some bad design choices with applications:
One application had panels that opened and closed to perform actions. Well this seemed cool until you realize that this was meant to enter in orders. So a fancy picture showed up. You clicked on different portions, sort of like a JavaScript controlled image map. Now if I am a person that had to click on the one picture to enter an order 100 times a day I would be pissed off. That is 100 clicks I really did not need to do. All just so the menu is not visible all of the time. Concept looked nice to the eyes of the executives, but it would not work for the person using it 40 hours a week. Think of the time wasted to click on an image, wait for this drawer to open up and show a form that could have been sitting there in the first place.
Another was using Ajax to save entered data. Now this makes sense people were entering data to make orders. They were using Ajax to send back information. Problem was they were sending an Ajax request for each form element in the form. Now the form had 10 fields. Therefore they were making 10 requests to send information for each item entered. The reason for implementing this was to keep a user from having to click a single button to save the information.
You are creating more bandwidth than needed and also more problems. I suggested sending information only when the button is clicked. Plus another thing was they were not using an OO based request so a fast typer would be killing the requests for each element. Now look at all of the extra work these people were creating. So you save each field, what if the user stops entering data. Now you have incomplete data in the database which you would have to mine out. What if the user figured they spelt something wrong? You would have to code checks to see if data was there. All of this was extra work on developers. So this one click savings was going to relate in multiple man hours to solve all of the new issues brought into the mix. Not every economical!
Now there is a good use for Ajax on a single element. One example is a product number. You can validate to make sure that number is correct. I would prefer a type ahead functionality to do this, but you can check to see if usernames are in use when a person is signing up or that an area code matches the city and state. Keep it to basic checks before a large form is submitted to the server. Not every field should be validated this way! Keep validation that needs no server side knowledge on the client. PLUS validate your data on the server when submitted! A fatal flaw I see all of the time!
Another flaw (or annoyance) I se is using way too many special effects. Thanks to those wonderful libraries people are fading in things more than I like. I do not want to see my page fading in and out when I scroll! I know an action is happening since I am scrolling; you do not have to emphasize it! I do not want to see text flash or change colors unless we are talking about errors. But you do not need to have it on a setInterval until I fix it. I see it, stop harassing me. I started to code those wonderful status bar scrollers 9 years ago. Just because I could do it does not mean I would use it in a professional application. Think how this stuff will effect your user's eye movements as they look at the screen. If stuff is popping in and out, flipping around, you can drive someone crazy. Keep everything in a normal eye flow and keep it in my view.
Do not randomly add text into a portion of a page without some notification. One application was reading error logs, I reading it and a new one pops up. Now that is annoying. I lost my space and I had to scroll to find it. Appended it to the bottom, add checks to see if I am reading, keep my spot please!
Everyone should follow KISS. Keep It Simple Stupid. Just because you programmed it and know how it works, does not mean that your user knows that they have to click the picture, spin their mouse 360 degrees, click three times, and yell at the screen to make the link appear. When you get requirements just ask yourself one thing: "Would I want to come back to this site after using it once." If I have to go through loops to do basic actions, I would not want to come back.
A real world example:
The forums at ASP.NET implemented a feature that I can not stand. If you double click anywhere on the page, the page fades out and a reply box appears. Now who would think that I use my mouse to double click on a word to perform the action of copy and paste? So now when I try to copy a keyword to add in a reply, I can't do it because someone changed my basic functionality of the browser! It is really really really^1000000 annoying. Hence my post count there does not increase since I really hate it! One feature that sounds cool to one person can really screw others over. If you want this to be a feature, let someone enable or disable it!
So please as a developer, remember not to change functionality, do not screw with right clicks, shift keys, ctrl keys, function keys, etc. They are meant to do things by default, by changing them you make people uncomfortable. Keep the user interface simple. Do not overuse effects. Just because fading in stuff can be one line of code, does not mean that everything on the page has to do it.
Eric Pascarello
Coauthor of Ajax In Action
Moderator of HTML/JavaScript at www.JavaRanch.com
Author of: JavaScript: Your Visual Blueprint for Dynamic Web Pages