Thursday, June 02, 2005

The use of Java to build business systems

I have been a big fan of Java for several years. It all started 4 years after I standardized my applications development organization on Visual Studio and C++.

Let's start with why we standardized on C++ for UNIX and Windows. The year was 1999 and we were building an e-commerce site. We needed a platform to develop on. In 1997, the year we developed the core or CRM-portion of this e-commerce platform we had decided that Sun/Solaris would be our server OS since NT4 was about as stable as nitroglycerine. So Java made a lot of sense due to its cross-platform design as it would in time allow us to migrate our CRM application using middle-tier Java code. As we began our investigations into available technologies the first difficulty we encountered was a lack of 'advanced' IDEs. This was OK since I was hiring, get this, real programmers who could work without one, however it would affect our productivity and ever a dollars and cents man this did concern me. The second hurdle which is what really led to our choice of abandoning Java, was the rate at which the Java API was changing and the lack of backwards compatibility between versions. This was just not acceptable in a mission critical and yet cost sensitive environment. I couldn't afford to have to re-write my applications 2 years down the road. The last hurdle was the lack of availability of affordable (less than $ 1/2 million) Java-based e-commerce platforms - you know the shopping cart etc. piece of it. This was important as we had limited time and so chose a component-based build strategy.

I also needed to adopt a mainstream language, something I believed Java would become, and could not therefore adopt the use of more what I consider esoteric languages. Therefore an MS-based solution became our choice by default with both mid-tier and web server components running on Windows. Over the years we encountered the need to, and ensuing difficulties of, interfacing with a variety of systems including our IVR and CTI systems. Our clients also wanted hooks into our systems. We were building more and more server-side components and, in order to leverage the benefits of code and platform reuse wanted to migrate the CRM portion from a fat to a thin client. So I once again, in 2002, revisited the platform question. Java or Windows-based?

Over the past two years I have read more articles than I care to remember on the Java / .Net performance debate. Although this is a relevant issue I think it more useful to compare Java and other languages like C++ since they, like Java and unlike .Net, have been around for long enough for organizations to develop real-world versus laboratory experience with them, putting us in a better position to compare. I suggest you read The Java Performance Debate at ( since the author has gone to some lengths to provide many of the links that I am just too lazy to go back and find.

What it boils down to is that I buy into Java as a development platform because:
  • It is a cross-platform environment and means that I am not held hostage by any one vendor
  • It runs on different types of devices efficiently (cell phone, PDA, Blackberry, server, PC)
  • Multiple organizations contribute to its specification
  • It is more productive than C++
  • For BIG systems, vendor support includes many server management features not found in languages such as PHP or even .Net
  • There are numerous Open Source projects built on it
  • Large companies committed to Open Source contribute significant code to the free-as-in-freedom code base
There are drawbacks even with the above benefits such as the JCP (Java Community Process) getting bogged down in red tape and resulting in feature bloat and excessive complexity.

I'll continue this post at a later time. I have to assess my current organization's programming practices and standards and make a decision on direction. Lots of thinking to do.