No Rob, Dumb Terminals are a Dumb Idea
My friend and colleague Rob Howard recently posed the question on his blog, “Are Smart Clients a Dumb Idea?” In his post he recanted his earlier statements regarding the adoption of smart clients and now is convinced that web based applications written with the magic of AJAX are indeed the future. In this post, I hope to bring him, and the rest of the AJAX Hip-Mo-Tized world back to some semblance of reality.
Let’s start by dispelling a few myths about web based development.
1. Web applications are easier to develop
Easier than what exactly? Faster than light space
travel? Mapping human DNA? Or perhaps just figuring out
why people watch Reality TV? It might be easier than these
but it’s certainly not easier than Windows Forms based
development. Here are a few bullet points of where web
development, even in ASP.NET falls far short of “easy”.
-
Number of technologies used. It’s not enough to
know VB or C#. To create an even remotely useful web page
you have to know HTML (tags and DOM), CSS, Javascript, and
at least one programming language. Put ASP.NET WebForms
architecture on that and you add the concept of server
controls, postbacks, and XML. Now throw in multimedia or
applets (Java or ActiveX) and it gets significantly
worse. Heck, I still haven’t figured out Flash and
thousands of sites use that.
-
Most applications don’t work in a strictly
request-response paradigm. ASP.NET goes to huge lengths to overcome the basic
obstacle of web development which is that it is a request
and response based communication. We’ve added ViewState,
SessionState, Application Caching, SqlDependency, Output
Caching, and lots of other things all because centralized
server based processing doesn’t hold state between
requests. To create a robust, enterprise scale
application a developer has to take on the burden of
wiring together all of these various services just to be
able to recognize that the user has already logged into
the application. Now I will grant you that ASP.NET does
a fine job of making it easier, but easier doesn’t mean
easy.
- Web based interfaces are incredibly difficult to build accurately. Any developer who has written a widely deployed web based application has gotten that call from a user saying that some piece of the web page isn’t showing up or isn’t showing up in the correct way. Even on the same browser and version (more on that later) dozens of settings from screen resolution to font sizes can change the way an interface looks between users. This leaves the developer with either having to test the interface on as many browsers as their PC will hold or simply aim for the middle and hope for the best.
To summarize, consider this. If Windows Forms development was so hard, why did the ASP.NET team go to such huge lengths to make Web Forms work in EXACTLY the same way? The easiest web development architecture I ever saw was Java Servlets. You get a Request Object in and you spit out a Response. What happens in between is entirely up to you.
2. Web applications are easier to deploy
This myth is based on the concept that it’s easier to
deploy an application to a server or web farm than to 1000
desktops. But that concept is another IT slight of hand
that has people looking the other way while the same
deployment issues that exist with local installations get
solved through different means. Specifically here are some
examples of the issues involved with web based
deployments.
-
Without the browser on those 1000 desktops, your web
application is useless. Why then does it seem like no big deal to deploy a web
browser? Simple, for the most part it’s already there.
Windows (the ubiquitous desktop platform) includes
Internet Explorer of some version or another. So many
companies can leverage that browser and concentrate on the
apps, or so they think.
What web based application fans might not understand is that this same argument is also why .NET based Smart Clients are a good idea. It wasn’t too long ago (and yet not long enough in my mind) that you couldn’t predict which of the various browsers your clients, even corporate desktop clients, would be using. Netscape ruled the world and IE was coming up quick, but there were others. I can still recall having to make sure that our applications worked withLinksLynx, a text only based browser (Man, I’m old!). But since Microsoft started pushing out IE with every version of Windows this has become much less of a problem. The same thing will happen as the .NET Framework is included with every new version of Windows and on Windows Update. And here’s another thing that many people haven’t considered. Other companies, I won’t mention any specific names but one of them has the initials HP, distribute the .NET Framework on their new PCs because the custom software they use to annoy you with advertising is written in it. Windows Media Center, which is growing more popular every day, requires the .NET Framework. With more than 120,000,000 installations, it’s unlikely that you really need to worry too much about the fact that a Smart Client application requires the .NET Framework be installed. So relax, it will be there when you need it and if not, it’s a pretty simple install.
-
Browser incompatibility. I’m not just talking
about the differences between Internet Explorer and
FireFox, which is a big enough problem. I’m talking about
the differences between IE 5.5 and IE 6.0 or even IE 6.0
with HotFix A versus IE 6.0 with HotFix B to say nothing
of Windows XP SP1 versus XP SP2. These can be hugely time
consuming to track down and fix and require you to get
deeply acquainted with the innerworkings of your client
PCs. This is not easier deployment, you simply have
shifted the issue from one of application deployment to
that of browser deployment.
-
Production servers are usually all or nothing
deployments. Many organizations prefer to release their software in
a controlled manner through one or more pilot releases.
Pilot releases with a web based application can be
extremely difficult. You have to either give the users a
new URL, thereby breaking any saved links they might have,
or you have to play DNS/Routing games on your network.
Then, when the application is ready for widespread
distribution, the pilot group has to change their URL
again or more network settings have to be changed.
-
Development is rarely done on production servers.
Most ASP.NET developers create their applications, from
web interface to database, on their local machine. Then
they go through whatever deployment and testing process
they go through and the application ends up on the
production server, where it promptly stops functioning.
This can be for a number of reasons such as:
-
Incorrect Server Configuration
Between IIS and web.config there are dozens of ways to misconfigure an application. A seemingly simple change like forgetting to bump the max System.Net connections or using different MachineKeys in a web farm can cause a web based app to crash that worked fine in development.
-
Performance was not adequately tested
Too many web applications are developed only to have to undergo massive overhaul when put under production loads. During development it is difficult for a developer to simulate how an application will react to things like 90% of the users signing into the application within the first half hour, or users leaving their browser windows open when they go to lunch only to find out that their session has timed out when they come back.
-
Incorrect Server Configuration
3. Web Applications Cost Less
This is another one of those statements that doesn’t require any actual numbers to back them up. It, like the earlier myth, is based on the concept that one big-time server is cheaper than 1000 desktops. This argument would make sense if the desktops weren’t already out there in corporate America, waiting to be used. But they are. Most of the desktops being used by your average business worker get less exercise than I do (which is damn little exercise, but I’m planning to change that). And yet, companies continue to buy new quad CPU servers with SANs and clustering for every new web application they deploy while relegating the desktops to dumb terminals that know how to run Outlook and IE.
Getting back to Rob’s comments let’s look at a few other of the things he says while under the influence of AJAX.
“The only offline application I care about is email and
that problem has already been solved in Outlook.”
Okay Rob, so consider this. You are in your offices
at Telligent working
away and you lose network connectivity. Not just Internet,
but the internal network too. What can you accomplish? You
can still continue to develop
CommunityServer, your
award winning ASP.NET based CMS. You can still write articles for
MSDN or
even
TheServerSide.NET (Please, Please!!!) While a nuisance it won’t slow you
down all that much. Now consider a branch loan officer.
He’s got a line of people waiting to complete applications
for new loans and is thinking about the boat he’ll buy with
the commissions when he loses network connectivity.
Unfortunately his company decided to go for the “ease of
development and deployment” myths and created a loan
application system that is web based. He can kiss that boat
goodbye to say nothing of the customers.
We computer
nerds are not good examples to use when thinking of the
“online/offline” question. Most of what we do is offline.
I’m even writing this rather lengthy blog post offline in
Word. If I lose network connectivity I can save it and post
it tomorrow. But it’s companies that are building
applications that rely on the browser and network
connectivity that will suffer if their decision makers don’t
understand the importance of being able to continue working
while offline.
“Watching someone like my wife use a computer makes me
realize that she, as a pretty typical user, does about
95% of her computer usage through the browser”
Why is that? It’s not because the browser is the
better solution it’s because the technology to allow Amazon
to create an interactive catalog that you can browse while
offline hasn’t existed long enough for them to see how
useful it would be. Imagine if JC Penney decided to create
an application that would let you scan in a picture of
yourself and then shop for clothes by superimposing the
image of the clothes onto the picture of you? That would be
a very cool application (Hey Chris Anderson, if you ‘re
reading this how about a nice XAML demo of this?).
“and then read about some of the new "web enabled"
offerings coming out of Microsoft like live.com”
See my
earlier post and you’ll notice that Microsoft’s Live services are more
about smart clients than browser based applications. Web
2.0 (a name so cute it makes me want to hurl, but they’d
just name it Dinner 2.0) isn’t about a resurgence of
websites that almost mimic functionality of Windows 3.1.
It’s about the services that can be offered over the
Internet and delivered through a number of means, with smart
clients being (IMO) the best possible platform.
“Why should you care about writing smart clients. You
probably shouldn't. If you can write it as web
application do it.”
The reasons listed above are why we as computer geeks
care about browser based applications versus smart clients.
But the real reason that organizations should care about
smart clients is for their users. Users want and deserve
the best applications that we can give them. Applications
built on technology from 10 years ago (even if it does have
a snazzy new name) won’t keep them fooled forever.
So for any of you readers out there who may be wondering how to decide which type of application to write, here’s my advice. Think about your user and Do What Works Best For Them. I’m betting it will be a smart client application.