I was discussing developing Smart Client applications vs mobile web applications with a colleague earlier.  A Smart Client application is one which can operate when it's not connected to the operator network/back end server infrastructure.  Our discussion centered around why you would develop Smart Client over a mobile web application.  We agreed a Smart Clients ability to always work and hence keep the user productive was the optimal solution in most cases.  Where we differed was what drove the necessity for Smart Clients.

Conventional wisdom suggests that it will take a long time to build out the network infrastructure that has 100% coverage in somewhere like the US, for example it's not cost effective to roll out to rural areas with low population.  For many years, I've talked about the onion skin model of network bandwidth where you get the highest bandwidth technology close to the population centers and older, lower bandwidth technologies farther away from population centers.  Of course, if bandwidth is shared it doesn't matter how much the potential bandwidth there is, it all comes down to available bandwidth as a function of the number of people using it.  But that's a totally different discussion!

So here's the thing.  Over time, wireless phone networks will build out to fill the gaps in their network and approach 100% coverage and over time those "hot" new high bandwidth technologies will spread throughout that coverage.  At that point, do we stop building Smart Clients and build only mobile web applications?  I think no.

The beauty of a Smart Client solution is it's ability to read it's connectivity state and batch and queue data requests until it is connected.  A good Smart Client solution should hide the status of it's connection to any required back end infrastructure from the user.  Take as an example Outlook 2003.  Outlook 2003 does a good job of managing whether it's connected or not.  The key difference between this and previous versions of Outlook is that it won't hang when it loses connectivity, it will just seamlessly slip into offline mode and batch up your changes until it can connect again.

How does this relate to mobile phone networks and building smart client solutions?  Regardless of the efforts of mobile operators there will ALWAYS be scenarios where my device cannot connect through the network to the backend.  These scenarios will be common too.  For example, I live in a concrete apartment building in Seattle.  Even though it's smack in a population center and has great radio coverage I cannot get a good signal in the lobby or the elevator because of the materials used in the building.  There are lots of places we don't expect to get coverage : elevators, when underground, working on a plane or in parking garages and I don't see those scenarios going away.  If we want users to use our solutions wherever and whenever they are, we should be creating Smart Client solutions that can hide that connection state.

That's my 5c, I'd love to hear your thoughts.