Coding Options

I have discovered that I have been away from coding for a while! My last coding assignment was with EDS(www.eds.com, now a unit of HP), working on an existing codebase that dealt with a mixed Oracle/mainframe backend, with a Java servlet/JSP front end (http://travis.gov.ab.ca). This was a familiar environment, since I worked on similar systems at Novartis (www.gnf.org) and the University of Alberta Human Metabolome Database Project (metabolomics.ca). However, my work at EDS transitioned into Business Analysis, including a lengthy stint as a facilitator for a large-scale Smart Card implementation. While I was gone, the world changed!

The world has experimented with web user interfaces (UIs), and has found them wanting. In their place, the Rich Web has gained prominence. This primarily has meant AJAX, and in practice, the Google Web Toolkit along with other offerings. Adobe has introduced Adobe AIR, which allows cross-platform desktop development based on Flash. And the rise of the Mac platform to relevance has re-invigorated cross-platform library solutions, such as Qt, a unit of Nokia, which provides Java and C++ development environments that can be targeted at almost any platform, including Linux, Mac, Windows, and many smart phones.

So I want to develop custom, easily modified business software. So do millions (?) of other developers. I hope that my choice of technology gives me a business advantage. Of course, my primary business advantage is that I will start by creating a relationship with my clients, and then will meet their perceived and actual needs. This means that my choice of platform must allow me to fulfill those needs within a cost and time structure that allows me to be profitable.

So, what do I do? Here are some major factors in my decision-making process (which has not finished yet!):
1) Run on desktop vs. remote server: Do I set up a server and allow my clients to log in to the server? Or do I send a complete solution to the client desktop, including a persistence solution and all business logic?
My experience and my instincts suggest that if I can control the server, I can improve the experience for the client without the pain of an upgrade process. This should allow me to iterate rapidly towards a really good product.
2) Web client vs. Rich client: Should the user interface be compiled to run on the local machine, or should it be mediated by one of several possible browsers, over an uncertain network connection? This seems to be somewhat of a false dichotomy, as long as the client has decent bandwidth. With my choice of a server backend in #1, the bandwidth seems to be required. Can a solution such as GWT support enough functionality to make the browser "disappear?" Or would a Java client offer enough speed and interactivity to make the browser interface seem clunky? Perhaps I should let Qt provide the UI framework, and write once, test everywhere?
3) Client hosting of data: Will the clients be comfortable with their private business data in the "cloud," or should I sell them on local appliances that host their solution on their local intranet (which means in many cases, setting up an intranet)?
The low cost of desktop hardware leads me towards this second option, where I build and configure a server that hosts the persistent data and the application, which is served to the client desktop (through something like Java Web Start, or through GWT, or Adobe AIR). This allows me to set up backup schemes and encryption to reassure the client of the security of their data, and gives me a single upgrade point per client.

Given the explosion of virtual server environments available, I believe this progression of questions and answers will lead me to develop a standard appliance that can be easily loaded into a commodity PC. This appliance will host the applications required by the client, while the data will be stored on the PC outside of the appliance, allowing for quick swapping of images when I wish to push out an upgrade or bugfix, without touching the client data.

I have a lot of experience with MySQL, and combined with its price point (free!), I plan to stick with it for now (while watching PostGres et al). Combining MySQL with a JVM and a servlet container (Tomcat? Jetty? Jboss? I'll decide later... the joy of standards) gives me a comfortable backend. Now, developing on the front end for the JVM has gotten interesting, and that's where I'm still experimenting. GWT? AIR? I will probably pass on AIR for now, as its advantages are pretty small compared to the other options, and there is a small upfront cost involved. I'm still happiest with free tools.

I am taking a good long look at Qt, and its Java implementation, Qt Jambi. That combination gives me a near-native front end (from C++ compiled into native code) combined with Java (which I actually have worked in before). If it's not dynamic enough (more on that in a later post), I will probably invest some time in GWT, and then fall back to HTML+javascript as a last resort (but the one I actually know how to do now).


Categories: Business , Methodology , Software