I am currently working on a smart client app that is to service a company and thousands of its employees over a large geographic area.
From what I understand the reasons to go smart client instead of web was
- It would be faster
- A far better UI experience could be provided
- It would scale better
In reality we faced some issues
- steep learning curve making a transition from ASP.NET or WinForms to WPF
- steep learning curve with CAB
- steep learning curve making a transition from Web Services to WCF
- CAB+ WPF left the team using an essentially unsupported piece of software
- less time left to worry about things that matter like security &performance
The current state of "Web 2.0" makes it really hard to justify a smart client app. Removing the requirement for offline, because In the end we didn’t even implement offline (one of the
5 characteristics of a Smart client ), initially give the perception of an even playing field. However:
- ASP.NET seems to be the number one skill developers have. No need to learn CAB and WPF.
- Deployment issues just go away. We actually had very little in the way of problemswith deployment mainly just the size of the DLLs.
- The UI argument is pretty much dead with Silverlight, Ajax, JavaScript and CSS. I can’t at the moment think of a requirement for a Banking application to require thefull power of WPF that can not be performed by the above web technologies.
- Any performance issues we had were related to either the amount of data being returned from the service or the impact the CAB and WPF just have. These maybe due to our lack of knowledge of WPF and CAB but we think we are pretty much on top of it now after 12months of dev. Data communication performance should be moot as using Ajax essentially negates an argument for or against. Loading modules which is slowing CAB down wouldn’t be a hassle for the web implementation.
Retrospectively I get the feeling the app we have built so far could have been done in ASP.NET with less developers in a quicker time frame with less defects. The resulting product would be remarkably similar though. This also then gives me the sinking feeling that I have invested a lot of time in to a rather dead-end framework instead of keeping up with our peers in the ASP.NET world.
Flip side; maybe I now have a niche skill that makes me a commodity?