April 29, 2011 1 Comment
I often see this question on forums and social network groups, so I decided to share my own view on SoftFluent official blog.
To introduce myself, I worked for a company that was acquires by IBM between 1992 and 1997. From 1997 to 2005, I worked for Microsoft, being in charge of developer evangelism in France, mostly around .NET between 2001 and 2005. Since then, I created my own company SoftFluent. And I often advise ISVs in their evolution strategy, sometimes outside the Microsoft platform. For example, I audited the development organization of some Java-oriented software companies, working closely with Zenika on the technical and architecture area, one of the best Java consulting shops in France.
So I have been hanging around with evangelists of both sides, and more important, seen the result on real projects on those platforms. This said, on what criteria should you base a platform decision?
First, when you develop software, you often develop it to be used over a long period of time. In fact, you never really know when it will be replaced. Look at all those Cobol programs that are still at the heart of many banking systems. So it is critical to evaluate the sustainability of the choices and try to understand where the market is going, in non-technical dimensions also.
This argument is the reason why I mostly talk about .NET and Java here. These two platforms have a critical size, and there is no chance that either one could disappear in the foreseeable future. This might not be the case if you chose a more exotic programming language.
#1: Applicability of the platform for your scenarios
The first element to take into account is the applicability of the platform for your application scenarios. I won’t make any debate about performance as both platforms have proven they can handle whatever volume needed for almost any applications. Scaling your business will not be an issue with the underlying technology but rather an application design consideration.
If running beyond Windows is a real requirement (which is not so often), you will have to go for Java, as the support for multiplatform in .NET is only based on market-risky initiatives not fully backed by Microsoft. Microsoft is not platform-neutral and will probably never be.
However, since the Windows platform is significantly dominant, there are many scenarios where this is not an issue at all.
#2: Efficiency of the development platform for your scenarios
If you don’t have a real multiplatform constraint and your applications will run on Windows, and mostly if you do not have a large budget and timeframe for delivering your application, choose the .NET platform. It is clearly easier to implement .NET applications for a simple reason. It is totally integrated and version upgrades occur globally. You have a single framework of about 25,000 base classes that evolve simultaneously, with an integrated development environment.
Whereas in the Java world, not only you will have to gather different frameworks that come from different vendors or from the community, but you will for sure need to adjust this choice over time. This is a significant cost in money and time for Java projects. It is also worth mentioning the risk of choosing a framework that will turn obsolete or become incompatible with other stacks in the future. This explains why dependency injection has become prevalent on the Java platform, whereas it is usually not even needed on the Microsoft platform, except in some very specific scenarios (I will develop this in a future post).
Of course, this is a simplified view, and one could develop more about the advantages of Java for embedded applications or for .NET when you need to integrate with Microsoft Office, but this is the most important point to understand not to get lost in details.
#3: Skills availability in your organization and in your market
Another important consideration that might weight in a platform decision is the skills of the people in your organization. If 80% of your development resources are used to a platform, it would be suicidal to choose the opposite one.
Not only will you need to train them, but very often, the developers are culturally on one side or the other. It is not so easy for many developers to switch, not to mention the sometimes ‘religious’ behavior about platforms, especially for open-source minded people.
One of my observations is that most "clever" engineers tend to be in the Java ecosystem. When I say "clever", I talk about the intellectual power. The issue is that this often goes with a non-pragmatic mindset that leads to over-architect systems and economical disasters. Read this excellent post from Joel Spolsky to understand the issue.
Unfortunately, this over-architecting issue tends to be imported in the .NET world as it gains market share in the higher end segment. And this complexity even tends to be imported in the .NET platform as Microsoft listens to the community. Will the unique programming model promoted at the launch .NET survive in the future? It is not so obvious, as there are now ASP.NET Webforms and MVC, Silverlight and WPF with real differences in the implementation, etc…
#4: Additional business-related specificities
Last but not least, your market may influence such a decision. If you are developing a packaged product for small companies, it is likely that your customer will be targeted by Microsoft somehow, and there might be specific partnership opportunities to choose the Microsoft stack.
On the other hand, if your market is mostly Java, like in the telecommunications or government sectors, it might be easier to sell and market a product developed on Java.
#5: Using several platforms?
In some cases, it might be relevant to use different platforms for heterogeneous scenarios. If you have mixed teams and the critical size for it, it can be a good way to get some emulation between teams and fulfill scenarios that involve interoperability.
By the way, it is likely that one will have to deal with multiple skills as new platforms get traction, for mobility or social networks support. iPhone has already become unavoidable for many businesses and a platform such as Facebook could gain some significant traction with developers in the relatively near future.
Feel free to comment on this post or share your experience to complete my view.