Let’s start with validation. Server-side validation is a must, client-side validation is crucial for a good user experince. Next comes the typical “query from DB” presentation style (and it does not matter if it’s google serch result of facebook friend feed): a list of things, all alike. You’ll want to be able to refresh those in real-time. Another case for code duplication. If AJAX is going to show up anyway, wouldn’t we want to make it easier and with less duplicate bugs?
Well, there is one obvious solution. Have it all in AJAX. Send over static HTML files, and fill up the content with AJAX. Do the validation in AJAX, and send in remote calls (the remote calls will hopefully just have exceptions if the values are not the right type). Have stuff in JSON-RPC or something RESTful, and let AJAX do the heavy lifting. In the future, that might be an option.
But if you care about user experience, you don’t want to do that. It would take way too long for the user to get the initial approximation, compared to a traditional solution. The best of all worlds would be a server that just did the AJAX for you. It would be completely untrusted, and would serve HTML by getting the static file and running the same AJAX code being run from the client. All it would take is just another load event (say, OnServerLoad) which would be for the server. You would want a fairly compatible “browser” as the basis for the server. Perhaps one which knew how to do separation between processes well?
(Addendum: Jaxer seems to be close, but still no cigar)