This past week, my colleagues and I have been researching Ajax Frameworks. We're working on a project that's following SOFEA-style architecture principles and we want the best framework for our needs. I'm writing this post to see 1) if you, the community, agree with our selection process and 2) to learn about your experiences with the frameworks we're evaluating. Below is the process we're following to make our choice.
- Choose a short list of frameworks to prototype with.
- Create an application prototype with each framework.
- Document findings and create a matrix with important criteria.
- Create presentation to summarize document.
- Deliver document, presentation (with demos) and recommendation.
For #1, we chose Ext JS, Dojo, YUI and GWT because we feel these Ajax libraries offer the most UI widgets. We also considered Prototype/Scriptaculous, jQuery and MooTools, but decided against them because of their lack of UI widgets.
For #2, we time-boxed ourselves to 3 days of development. In addition to basic functionality, we added several features (i.e. edit in place, drag and drop, calendar widgets, transitions, charts, grid) that might be used in the production application. We all were able to complete most of the functionality of the application. Of course, there's still some code cleanup as well as styling to make each app look good for the demo. The nice thing about doing this is we're able to look at each others code and see how the same thing is done in each framework. None of us are experts in any of the frameworks, so it's possible we could do things better. However, I think it's good we all started somewhat green because it shows what's possible for someone relatively new to the frameworks.
For #3, we're creating a document with the following outline:
Introduction Ajax Framework Candidates (intro and explanation) Project Information (history) (license / cost) (number of committers) (support options) (mailing list traffic (nov/dec 2008)) Matrix and Notes Conclusion
For the Matrix referenced in the outline above, we're using a table with weights and ranks:
|#||Important Criteria for Customer||0..1||0..1||0..1||0..1||Notes about rankings|
Our strategy for filling in this matrix:
- Customer adjusts the weight for each criteria (removing/adding as needed) so all weights add up to 1.
- We rank each framework with 0, .5 or 1 where 0 = doesn't satisfy criteria, .5 = partially satisfies, 1 = satisfies.
The list of criteria provided to us by our client is as follows (in no particular order).
- Quality of Documentation/Tutorials/Self Help
- Browser support (most important browsers/versions based on web stats)
- Testability (esp. Selenium compatibility)
- Project health/adoption
- Productivity (app dev, web dev)
- Richness of widget/component library
- Charting capability
- Ability to create new widgets
- Match to existing Java team skill-set
- Ease of deployment (on Ops, QA, Users)
- Degree of risk generally
- Ability to integrate with existing site (which includes Prototype)
- Easy to style with CSS
- Validation (esp. marking form elements invalid)
- Component Theme-ing/Decoration
- CDN Availability (i.e. Google's Ajax Libraries API or Ext CDN)
What do you think? How could this process be improved? Of course, if you have framework answers (0, .5 or 1) for our matrix, we'd love to hear your opinions.