Pages

Monday, April 16, 2012

The "Best" Web Stack for ScrumTime

I remember as an intern at IBM in Charlotte in 1992 that the computer science community debated what was the "best" desktop operating system. Is it Windows 3.1 or IBM OS/2? My office desktop at the time was an OS/2, yet I had a Windows 3.1 at home and in the labs at Appalachian State University. To me the "best" was whatever operating system provided most growth of my knowledge and the greatest potential of growth for my career.

I believed Windows 3.1 was the "best" because I had heard it was the best and it was more widely available. However, I learned while using OS/2 at IBM that it was superior to Windows 3.1 in terms of various technical capabilities. Once I felt that I knew both operating systems down to a medium level, I determined that there was only one question remaining. 'Which operating system will provide the greatest potential growth of my career?' A long story short, I left IBM in 1995 well before Windows 95 was released. I haven't touched OS/2 since.

What is the point? I learned a lesson about the computer industry at that time that is still relevant today.

'Never assume that one product or solution is better than another simply because others (including the media, advertising, your cousin's bowling league, etc.) say that it is better. Always, treat every new technology with an open mind and take the time to learn it as much as time permits. After doing so, decide which is better for your immediate application and for your needs in the foreseeable future. But, never commit to only one technology because it is a complicated world.'While working on ScrumTime (off and on) during the past five years, I have learned three web technology stacks: Ruby on Rails, Grails (java based), and ASP.NET MVC. All three have been very beneficial to my career. Ruby on Rails is a fantastically concise, clean, and stable web development experience. However, it has never had the developer following that a Java or a Microsoft solution has had. Therefore, I have not pursued Ruby on Rails with ScrumTime or with my career.

Grails is basically a knockoff of Ruby on Rails. However, it was being pushed in the Java community around 2007 and 2008 which is why I decided to learn it. As a result, releases 0.4, 0.5, and 0.6 of ScrumTime were implemented in Grails. I am a huge fan of Grails and I would like to see more Java developers implement projects Groovy and Grails.

ASP.NET MVC is not as concise and clean as either Ruby on Rails or Grails, but it has a huge following in comparison. Once I realized that it was open source, I decided to implement ScrumTime 0.9 in ASP.NET MVC 2 hoping that ScrumTime users and developers would find it useful. There has been more interest in ScrumTime since switching to the Microsoft stack, but I suspect it is because more features were made available in 0.9 release than in any prior release.

After trying Grails and ASP.NET MVC implementations of ScrumTime (and other applications), I do not claim that one is the "best". However, I can say that one fits the needs of ScrumTime better than the other. I used the following points to make this assessment.

Using a language or platform that is known to a large number of developers is important to keeping an open source project relevant over the course of time.

Indeed.com indicates that the need for Java developers is about the same as that for .NET developers.

Indeed.com indicates that the need for ASP.NET MVC developers is greater than the need for Grails developers.

This point is effectively a draw between ASP.NET MVC and Grails simply because both are still very new technologies.

ScrumTime should be easy to deploy on all popular operating systems.

The Java platform may be deployed on whatever operating system you like with greater ease than the Microsoft ASP.NET platform.

The mono mvc project has potential but it does not seem to be mainstream among ASP.NET developers. Open source solutions that are not easy to deploy are not often used.

Grails applications deploy as war files which are the standard for all Java based web application deployments.

These indicate that Grails wins this point.

The Groovy language is more concise than all existing .NET languages that support MVC.

At first glance, this sounds like a subjective point. However, I can prove that the number of lines to implement ScrumTime in Grails is fewer than the number lines required to implement ScrumTime in ASP.NET MVC.

What is the point?

Developers that are new to a project or technology will more quickly ramp up when the total breadth of a project is smaller rather than larger.

Like Ruby, Groovy is very expressive and conveys only what is intended within a convention. The downside is that the developer must understand the convention in order to clearly understand the source code. However, the convention is the same across all projects regardless of the author. As a result, the developer will quickly understand the source for all other projects in the future. ASP.NET MVC also follows convention over configuration to a point. However, it is simple to fall-back to non-convention following practices with ASP.NET MVC. As an initial developer, that is an awesome feeling to throw anything in wherever I choose. But, it is not so great for the developer that must support the product.

Grails seems to win this point.

When considering these points, it seems that ScrumTime 1.0 should be implemented in Grails. However, the story does not end with ScrumTime 1.0. The plan is that ScrumTime 1.0 will have the ability to support mobile browsers and even offer a JSON/XML interface to native clients such as iPhone, Android, and desktop applications.

These mobile and desktop native clients will most likely use the ScrumTime 1.0 RESTful interface and they will have their own release cycles. It is my hope that other developers will be inspired to create their own open source projects to implement such clients. If not, I may get around to it some day.

I am planning to begin the project with two implementations...one in Grails 2.0 and the other in ASP.NET MVC 4. It seems like a waste of time, but I think it will be good research and I plan to document my findings.