-MVC style architecture for organizing your code
-Models and collections which can be persisted through a RESTful API
-Views which can automatically update by listening for changes in your model
-An optional routing system to define states of your app for single page applications
Strength of the Project and Community
Ease of Learning
On one hand, backbone is a relatively simple library. If you go to their website, you will find a link to the annotated source code, which shouldn’t be hard for the average developer to read and understand. On the other hand, backbone has several concepts (e.i. model, collection, view and router), and the documentation is not as extensive as knockout or angular for example. Also, inexperienced programmers could quickly get into trouble if they are not aware of proper conventions when using backbone.js. Backbone also relies heavily on underscore.js, so it is necessary to learn underscore first or pick it up along the way. From our own experience and hearing other stories, it takes longer to get up and running with backbone in comparison to knockout. On the other hand, even though the concepts in backbone may be difficult to grasp at first, once you get it you will not need so much time to discover the rest of its functionality.
Compatibility and Extensibility
Testing and Debugging
There seem to be some plugins written to help debugging, but we have not used them so we cannot comment on how useful they are. We have seen that people using Jasmine to run unit tests in backbone. In general, we find that backbone can be relatively difficult at times to debug.
-Relatively mature, proven framework with a strong community behind it
-Many extensions and scaffolding tools available
-Flexible, works fine for a new project or improving an existing one
-Requires a large amount of boiler-plate code
-Could be dangerous if programmers do not follow proper conventions