Overall, using the framework has worked out great. The other front-end frameworks we've used (including ng1) now seem rather toy-like in comparison. The biggest stroke of genius has to the hierarchical dependency injection. Letting a UI component provide injectable services to its children and their descendents instantly solves so much of the tension between integration and reusability that plagued us in the past.
And the template language is also brilliant. It actually understands the difference between binding to the string-based attributes of an HTML element, and the object-based properties of a DOM object.
Angular is totally ready to be use in prod since a long time now.
Very easy to update:
2-> 4 no gap but my project was starting
4-> 5, very few things on a already big project. In my case the HttpModule, and some internationalization adjustment.
This repo is really useful: https://github.com/cexbrayat/angular-cli-diff
It lets you diff a simple project generated with different versions of angular-cli; that way you can easily see the any configuration options etc that have changed between releases.
That comment is more or less a recurring experience for me. I've been solving problems that are slightly out-of-the-box of the typical CRUD app, and Angular 2+ has been nothing but pain for me.