Web Framework Evaluation
At work, sometime towards the end of this year, we’ll be moving our primary application to a different web framework. There are a number of reasons for doing this, some I’ll talk about here, others I won’t. Obviously in order to properly evaluate some of the tools we need to develop some basic criteria for the evaluation. None of this is set in stone, but here is my first cut (these are in no particular order):
- 10 Minute Rule (ok, maybe 30) - Given the current state of most modern web frameworks it seems to me that you should be able to do something of value quickly. While I understand that you probably won’t finish your application in an afternoon, you should be able to accomplish something measurable. If it takes you all day just to setup your environment, you fail. How long does it take you to write “Hello World”? This will provide a good idea of how quickly you’ll be able to iterate on things when you’re doing real work.
- Convention over Configuration - This concept has been popularized as of late by Ruby on Rails. The core idea here is that if you name things certain ways, put things in certain places, and in general, follow understood methods then you shouldn’t have to spend a bunch of time “telling” the framework where things are. If you have spent much time maintaining a large enterprise web application then you understand why this is important (if not important, then definitely desirable). Most of my recent experience has been with Struts 1, which has lots of “configuration” bloat. Define your actions in this xml file, put your reusable views over here in this xml file, map your domain objects in these xml files, prick your finger and put a drop of blood over here, blah, blah, blah. Not that I’m knocking Struts 1, because we have built some great stuff with it, but these days I think we can do better.
- Tool Support - We’re an all Java shop and all of our engineers have become pretty dependent on a good IDE. Whatever framework we decide to use needs to play nicely with our current development environment. Things like code completion are critical. Can you start, stop, and reload from within your development environment? How long does that take? Telling all of our developers to go back to using vi or emacs just ain’t going to cut it.
- Developer Resources - I want to make sure that whatever framework we choose has lots of resources available for our developers to consume. What is the documentation like? Are there books that you can buy from Amazon? Are there active mailing lists? Are there conferences that you can attend? Is there a local user’s group?
- RESTful - It’s my hope that whatever framework we choose will easily facilitate (if not mandate) RESTful development. I want a framework that will take out some of the guesswork that can be involved here.
- Access to Java - Seeing as all of our core technology is built using Java this is pretty important. We need the ability to reach back and execute Java code in our existing stack. This doesn’t have to rule out frameworks that are built using other languages, but it does mean that if we do look at other languages they’ll have to run in the JVM.