ince the late '90s there has been a significant move away from desktop applications in favor of Web-based thin clients. Part of the reason was the Internet boom; Web technologies suddenly became popular, and architects discovered that the internet model allowed them to cut deployment costs. The lure of centralized management and applications accessible from any Internet-connected computer proved overwhelming. The majority of new projects were planned as Web applications, and many existing thick client applications were converted to Web technologies, with varying degrees of success. The terms "fat" client and "bloatware" were coined to describe desktop apps, not only to distinguish them from thin clients, but also to draw attention to their unwieldy nature; desktop apps often consist of a lot of files, hog precious disk space, and require a large amount of local processing power and resources to run.
The general consensus for the last few years has been that desktop apps just can't be deployed quickly and easilythey require developers to create a setup program and test the application on a variety of platforms. Worse, deployment problems don't stop with the initial installation; any updates to the application require yet another installation process. Users don't take kindly to having to reinstall applications repeatedly to patch bugs, so developers had to make sure that applications were tested thoroughly before deployment, further raising costs. This is in stark contrast to thin clientsusers just point their browser at your site, and they have the latest version of your code.
Despite the deployment benefits, thin clients offer a poor user experience in comparison to desktop apps. The request/response model of HTTP is too slow and disjointed for anything more complex than the simplest of applications. The lowest common denominator UI toolboxthose controls available on every browserconsists of only basic controls. Development of richer tools requires mastery of several very different technologies, such as DHTML, CSS, client-side scripting, and Flash, each of which, despite standards efforts, is at least somewhat dependent on the client's choice of OS, browser manufacturer, and even the browser version. Even after mastering these challenges, Web developers must still contend with the stateless model and the performance and logic problems caused by the separation of client-side and server-side code. Many thick client conversion projects went awry because the thin client model is simply not suitable for data-intensive applications where performance and a feature-rich UI are essential. The fact is that thin clients just cannot replace thick clients completely.
So, building thin client applications did provide some real advantages, but they also carry intrinsic complexities that hinder development and limit application interactivity. Fortunately, thick client technologies haven't rested on their laurels. For the last few years, thin clients have been king, but now desktop applications are making a comeback, with improved connectivity and deployment capabilities, under the new moniker "smart client".
The New Smart Clients
The new generation of desktop applications offers all the standard rich client features of traditional Win32 apps, combined with the ease of deployment of thin clients, and a new "offline" model that thin clients are unable to provide. The smart client will come into its own on Microsoft's new operating systemLonghorn will blur the distinction between thick and thin clientsbut fortunately, you don't need to wait until Longhorn ships to develop self-updating Windows Forms applications; Microsoft's Updater Application Block, which is provided for free and supplied with source code, allows you to build the new deployment model directly into your applications today. In fact, the pattern and approach taken by the Application Block's developers has largely been incorporated into the new ClickOnce deployment model of Visual Studio 2005 and Longhorn, so an understanding of how the application block works will give you an early insight into how application development and deployment will work in the future.