I’m pretty new to Backbone. I started using it in early 2016. My first “large” app was really complex and hard to develop. I made so many mistakes - using jQuery instead of methods, callbacks instead of events, business logic in the router - plenty of issues. It was… unpleasant… but worth the pain: what I learned in event-based architecture and “object-oriented” JS was invaluable. I’m currently working on my fourth app, and I feel like my code is much more flexible and solid.
A big turning-point for me was realizing that it’s just Underscore for objects. This revelation has made all the difference. Knowing that it’s possible to build a Backbone-like app without actually using the library, has helped me appreciate the work that it does. It has also changed the way I think about solving problems. Instead of focusing on the steps needed to update a UI (methods), for example, now I think about how I could single-out a dynamic element, and create an object and template for it.
I even see the point of making all dynamic elements views. With just a little more work, you gain way more flexibility. Handlers are much easier to use and organize, you can incorporate a model and its syncing methods (should you decide to start capturing data on that element) - the options seem endless. You could achieve these same ends with a vanilla JS object, but why do that when adding just a few more lines of code, adds tons of functionality to that same object? It's an even more compelling case if you're already using Underscore. Snippets have been helpful here, by the way. Again, more work up-front, but worth it in the long-run.
Of course I’ve found my share of issues. The biggest one being the need for a build system, or some sort of dependency manager (RequireJS, SystemJS, etc.). I’m over it now, but I really disliked this, at first; I felt like it just added more complexity to the app - making something like understanding a .gulpfile an added dev requirement. That’s not cool. It makes it harder for a new dev to learn. After the build system is in place though, it’s painless.
I’ve read the articles and know a large portion of Backbone users love its flexibility. I’m not in that camp, however; I’d prefer more rules around its use. I designed my first app terribly. Honestly, I still don’t know if I’ve found an “optimum” structure, but I just keep moving forward. It would help guys like me to have a “right” way.
I still have a ton to learn with Backbone. It’s fairly old, at this point, and taking a back seat to Angular and React, but I still find it very useful. Plus, it’s used in plenty of legacy apps. At some point, I plan to move on to more "in-demand" frameworks and libraries, but Backbone has been a good start. My code is much more modular, with tighter cohesion and looser coupling.