And what makes it so smart?
The term Smart Client was coined to highlight the differences between the typical "Rich
Client" applications of yesteryear and the next generation of client applications. To
understand these differences, and to understand how they are likely to change the face
of client-side computing, it is useful to take a trip down memory lane...
Client Applications: Then and Now
In the dim and distant past (that is, the mid 1990's) there was a dramatic
increase in the number of client applications being developed for the Microsoft® Windows® platform.
This increase occurred in large part due to the availability of high-quality
developer tools and frameworks (such as Microsoft® Visual Basic®, Microsoft
Visual Studio®, MFC, and so on) and because of the availability of a feature-rich
client platform. Ah, developer heaven.
The majority of these applications were standalone and operated on the client
machine with no regard to the environment in which they operated, both with
respect to the other machines and services on the network, and with respect
to the other applications on the user's machine. Very often, integration between
applications was limited to using the cut-copy-paste features provided by Windows
to transfer small amounts of data between applications. On the whole, though,
users were pleased with the increasingly useful functionality that these applications
now provided.
After a while, two-tier applications started to appear; these allowed multiple
users to access common data that resided on the network. Shortly thereafter,
DCOM allowed applications to become more distributed, with logic and state
no longer tied to the client machine. Both of these developments were important
and enabled a whole host of new scenarios and better functionality.
All of this increased flexibility and functionality, however, came at a price.
Perhaps the biggest problem with rich client applications was that of deployment.
As the complexity of the applications and the client platform had increased,
so had the difficulty associated with deploying the application to the client
machine in a reliable and secure way.
In addition, the increasingly connected nature of applications brought with
it many other problems. Connected applications were considerably more complex
to develop, despite the availability of developer tools and frameworks. And
as the size and complexity of these distributed applications grew, the tight
coupling between the client application and the services it consumed became
increasingly difficult to maintain, which in turn exacerbated the deployment
and maintenance problems.
So, while rich clients typically provided a great user experience and had
good developer support, they were still just too difficult to deploy and maintain.
Around this time, the Internet came along.
The Internet had very little effect on rich client applications. Some applications
provided the ability to notify the user of available updates, or allowed additional
content or features to be downloaded and installed, but on the whole, the Internet
had little influence on how client applications were developed, deployed, and
maintained.
The Internet did provide an alternative to the traditional rich client model,
however, one which promised to solve all of the problems associated with application
deployment and maintenance. Thin client browser-based applications allowed
applications to be deployed and updated centrally, thereby reducing the problems
(and therefore the cost) associated with deploying and maintaining an application.
Also, thin client applications allowed companies to expose their applications
to a large and diverse external audience.
Unfortunately, this brave new world was not without disadvantages.
Thin client applications at that time often represented the best way to expose
a company's information and services to an external user base. But in many
cases, internal applications that would have traditionally been implemented
using a rich client application were also moved to the thin client model. While
this movement had advantages in reducing deployment complexity, it did so at
the cost of the user experience.
The usability of the applications was often much reduced and common features
that the user had grown accustomed to, such as drag-and-drop, undo-redo, context
sensitive help, and so on, were no longer available. Furthermore, the responsiveness
of the application was diminished, especially for business applications, such
as those in customer call centers, which demanded heavy data entry and navigation
across multiple screens.
And of course, the browser was entirely dependent on having a network connection
at all times. This meant that mobile workers had no access to the applications
at all, requiring them to re-enter data when they returned to the office. And
even when a connection was available, low bandwidth or high latency connections
caused performance problems and a reduction in user efficiency.
Developers, too, suffered in the early days of thin clients. Tool support
was lacking, and developers had to move from the cozy world of component-based
development, with type safety and object-oriented design principles, to the
harsh and unforgiving world of script and HTML. Only now can Web developers
claim to have anything approaching the same level of support as client developers
enjoyed 4 or 5 years ago. Even now, drag-and-drop, undo-redo, context sensitive
help, and other common client-side features are still extremely challenging.
Despite these drawbacks, the deployment and management problems associated
with rich clients were so big that the tradeoff seemed worth it. As a result,
the thin client browser-based application model has dominated in recent years.
Client Applications: The Next Generation
Today we live in an information-based economy. In order to thrive in this
hyper-competitive market, users must access and borrow information from many
sources, including customers, partners, and suppliers. And users are now demanding
more from their applications: they want to be empowered to act, plan, analyze,
visualize, and explore the data, not just to read it.
Such concerns are not limited to a company's internal workforce. Leading companies
are increasingly becoming aware that they have to build a digital relationship
with their customers and partners, allowing them to provide faster and more
accurate responses to customer requests and giving them easy access to purchasing,
inventory, and shipping-status information. These users also need to be able
to work with the data within their own applications.
Without question, the complexity of applications is increasing, and with it
the expectations of the user. The thin client model is no longer able to provide
the required levels of functionality, performance, flexibility, and integration.
Users are now demanding fast and responsive applications to perform their daily
work in a flexible and efficient manner. Add this to the explosion of devices
and the increasing mobility of the workforce and it is clear that a new category
of client application is required.
So, the pendulum has begun to swing back towards the rich client model. But
what about application deployment and update? The TCO of an application is
still as important as it ever was, probably more so. Do you sacrifice manageability
for usability, or vice versa?
Happily, you don't need to sacrifice either. Key capabilities now exist
which mean that we can take full advantage of the rich client model, providing
the user with an excellent user experience, while at the same time reaping
the benefits of centralized deployment and update. In short, this new generation
of client applications, the so-called "smart" clients, provides the best
of both worlds and adds the intelligence to manage data and connectivity
to produce an extremely compelling user experience.
While smart clients provide the benefits of a rich client
model with thin client manageability, they also provide much more flexibility
than the traditional rich client applications. For example, smart clients
need not be designed as monolithic desktop applications. Smart client solutions
can be developed that are composed of functionality from more than one client
application, with each application collaborating with the others to provide
just the right functionality to the user. Such "composite" applications integrate
client-side software resources into a coherent solution, or extend the functionality
of an existing application to provide smart client features.
In addition, the client platform has moved on in the past few years
and now includes many different types of client devices, not just desktop
PCs. Such devices include PDA's, SmartPhones, Tablet PCs, Laptops, set-top
boxes, automotive devices, retail terminals, and so on. Smart client applications
can be built to take maximum advantage of the features provided by the host
device and tuned to provide the best user experience for the typical users
of these devices.
Smart Client Check List
Because of the high degree of flexibility and somewhat ambiguous nature
of smart client applications, it is often useful to talk about the key characteristics
of a smart client. These characteristics serve as a guide to the features
typically provided by smart clients over and above those provided by traditional
rich client applications. If a client application displays these characteristics,
then it can be said to be smart:
- Utilizes Local Resources
A smart client application always has code artifacts on the client that enable
local resources to be utilized. What do we mean by local resources? We
mean everything from hardware to software resources. A smart client may
take advantage of the local CPU or GPU, local memory or disk, or any
local devices connected to the client, such as a telephone, bar-code/RFID
reader, and so on. But it may also take advantage of local software,
such as Microsoft Office applications, or any installed line-of-business
(LOB) applications that interact with it.
- Connected
Smart client applications are never standalone and always form part of a
larger distributed solution. This could mean that the application interacts
with a number of Web services that provide access to data or an LOB application.
Very often, the application has access to specific services that help
maintain the application and provide deployment and update services.
- Offline Capable
Because they are running on the local machine, one of the key benefits
that smart client applications offer is that they can be made to work even
when the user is not connected. For applications running in occasional or
intermittent connectivity situations, such as those used by traveling workers
or even those running on laptops, tablets, PDA's, and so on, where connectivity
cannot be guaranteed at all times, being able to work while disconnected
is essential. Even when the client is connected, the smart client application
can improve performance and usability by caching data and managing the connection
in an intelligent way.
- Intelligent Install and Update
Smart client applications manage their deployment and update in a much more
intelligent way than traditional rich client applications. Applications can
be updated while running and can be deployed on demand by clicking on a URL.
Assemblies can be given limited
permissions in order to restrict their functionality in semi-trusted scenarios.
- Client Device Flexibility
Often,
there will be multiple versions of the smart client application, each targeting
a specific device type and taking advantage of the devices unique features
and providing functionality appropriate to its usage.
Many analysts have been predicting for a while now that the pendulum
has swung back towards rich clients and away from browser-based applications.
With .NET, and especially with Whidbey and Longhorn, it looks like the time
of the smart client is well and truly upon us.
References:
|