On my trip to Amsterdam to the SDGN Conference I had a chance to talk a bit with Chris Anderson from Microsoft. Chris is heavily involved in the Longhorn team and especially with Avalon which is the codename for the Longhorn desktop/graphics engine. As might be expected Chris is a strong proponent of Client Side development and he jokes frequently about wanting to kill off the ASP. Net team and converting long time server buffs into client side developers.
I have long been a proponent for getting away from HTML based interfaces and moving to a more distributed architecture that relies on rich client apps with a Web backend via Web Services or other XML based mechanism that pulls the remote data as needed. In fact, in 2000 just before the release of .Net I wrote an article about the Diminishing Importance of HTML regarding this topic. I think the content of this article still applies today, but to the detriment of the point in this article, the trend away from HTML has not materialized as strongly as I would have thought.
This may have many reasons of course. For Microsoft developers especially I think that the focus of Web development has just drastically overshadowed client side development in the last few years because Microsoft has pushed server development very heavily. .Net 1.x certainly has had mostly a server push with ASP. Net and the WinForms end of it feeling more like a last minute addition that wasn’t quite ready for the release. It works but there are many small problems with controls and implementations that either seem incomplete or not quite thought through all the way.
The end result is that today most new applications are giving first shrift to HTML based Web applications, simply because it seems the most common and in some ways the easiest route to getting content out to users. For some scenerarios this is definitely true today, but for many others the choice to go to a mixed rich client and server implementation is a choice that’s often plainly overlooked or simply ruled out.
In fact, I got caught in this when talking to Chris who challenged with a simple question: “What do you do with digital images?” to which my proud answer was that I publish them to a custom application on my Web site. I upload the pictures to my site either via FTP or via the included Web interface that sends the images up to the server – another click allows creation of thumbnails and an admin page allows re-ordering, resizing and a few other options to lay out the album. That’s fine and well for somebody like me but I hardly qualify as Johnny Average Computer User who would likely have a few problems with this arcane interface to send up the images. Chris countered with the point that a decent client application could do a much better job of allowing selection of the images from the media card or directly from the camera, previewing and manipulating the images (cropping, basic image adjustments etc.) and uploading of the images to the Web Site.
Aside from the fact that this is an overly simplistic scenario, I do agree strongly on this point for the best user experience this makes perfect sense. But even for my own photo album application that I use very frequently I have yet to build this rich client front end. Building the Web Front end for this app was pretty easy (a few late nights), but building a Rich Client front end for this app by the same token would take a lot more doing and essentially require the creation of a separate application and development cycle. It would take a lot to make this process more compelling and well, I don’t feel nearly as motivated to do it as I did for building the Web photoalbum in the first place. It also requires that the Web backend is in place and well thought out (and in fact would require some changes to work with a client front end). In other words, a lot more knowledge is required to build this sort of an application compared to either a Web or Fat Client application.
Certainly Microsoft could make my life easier for this sort of thing on the client side. For example, here a Common Dialog for image manipulation would come in handy. A GetPicture() type dialog that allows previewing images from lists (in a thumbnail format), the ability to rotate images, crop, adjust brightness and contrast, color balance etc. and then save and select the image. Sure there are opportunities to make things easier and if Microsoft is serious about working more effectively with common media types (of which images and audio are probably the #1 consumer feature) they could provide features along these lines out of the box for a common user experience.
To build these kinds of distributed applications requires significant additional resources – resources that enhance usability, but otherwise don’t necessarily enhance the functionality. The point is it’s gotta really pay to build the rich client front end ontop of the Web functionality to make it worthwhile. I suspect the same is true on a larger scale for a more significant development effort. I certainly have been on a few projects where I’ve pushed for a rich client front end and it was almost always overruled for a plain HTML based Web implementation. There’s a stigma to overcome…
I’ve built these kind of two way interfaces for a long time – I started doing this way back in ’95 with some of my Fox Web apps. For example, my Message Board includes an offline reader that provides a ton of functionality that is not part of my Web based Message Board running on the Web site. I built the rich front end because I replied at some point to over 75 messages a day and it was much easier and convenient to use the markup tools and other aids in the rich client application to create my messages.
The reader was free available to all, yet very few people used it. Even today when it installs as part of a couple of my products, it's still lightly used even though now it's already installed anyway! It’s definitely useful and provided in this case significant feature enhancements. Why? Two issues I think: Installation and the feeling that it’s easier to run something in the browser. There’s a distinct stigma associated with installing applications these days and this is something that Microsoft has to work hard to overcome if rich client is going to come back in force.
Now Microsoft has given us opportunities to make this sort of thing more transparent in .Net with the ability to run .Net applications off a URL. Unfortunately in Version 1.x this model is severely limited due to the security configuration that makes it next to impossible to run a useful application off the Web without having to modify the machine security policy (and a whole lot of fun that is!). Essentially to run any semi-sophisticated app on the client downloaded from the Web you have to give full rights to it using CASPOL or the .Net Administration tool. For commercial, broad reach applications this is not an option. It might work for internal corporate apps, but for consumer applications the .Net security model is way to complex to throw at consumers of an application.
ClickOnce in Whidbey promises to address this issue by better control on figuring out what rights are required and providing a customized security policy for this. All of this can be packaged up into a sort of light-weight install package that can install from a URL and can provide the same easy versioning that you get with a pure Web backend by automatically checking and installing updates.
While this is a big step in the right direction, I’m not sure that this helps perceptions. Clickonce still feels like an install and the security policy needs to be installed and accepted has potential for the sloppy ignorance we were used to back when ActiveX controls and Java applets were commonly floating around in Web pages. If we get enough of these dialogs that ask us to install a custom security policy to run this or that app, we’re back to accepting all the security dialogs and just allowing installation of anything which puts us right back at an insecure environment. It’s a sticky issue.
So what’s the answer here? A change in perception. Lightweight installations are key and it seems that ClickOnce may address this well. Security is a tricky subject always. If it’s secure it will give people confidence to install, but if it’s too secure we won’t be able to run the damn code. What to do, what to do?
There are no easy answers, but it’s an interesting topic that has many conflicting facets to think about. I’ll have more on this topic in a few days as there are more reasons I think that thin client or even Fat Client apps with distributed backends will still be a while off…