Is Angular (^2) over-complicated and over-engineered?View other answers to this thread
I think Angular may have more of a perception of being over-complicated. However I think it has also matured considerably from the Angular 2 days, it's stabilized and resolved issues that used to occur back in 2016. The perception may persist, however I am not sure it is still warranted. I've had my fair share of struggles with Angular...but these days, they all seem to be "in the past", rather than "currently."
I would call Angular well-engineered, rather than over-engineered. It does include more out of the box for the end user, however you don't necessarily need to use it all. If you want to start simple and keep things simple, you can. RxJS is integrated and native, however if you aren't ready for them, you don't have to start with them. You can call .toPromise() on any observable to get back to familiar territory, and migrate to the full power and flexibility of RxJS as you learn it. Making Http requests is quite simple, and quite familiar if you need it to be.
Release cycles may have been difficult with Angular 2, during which time the CLI was immature and quite buggy. It definitely had some holes back then that left you stuck dealing with issues, however with the latest CLI builds (particularly in NG 5), the command line has become very stable and reliable. The NG5 CLI brings schemas into play, allowing command line plugins to extend the interface and make it more capable, such as adding support for generating ngrx code (see NRWL!) Managing an Angular application ultimately boils down to familiar git commands plus ng lint, ng test, and ng build, with the occasional ng generate here and there to scaffold new components, directives, etc. I've been amazed at the capability of ng build to reduce an 800+ megabyte project+node_modules folder down to just 2.7 megs, including partitioned lazy-loaded modules (often allowing the initial preload scripts and assets to be as little as a few hundred K.)
Angular is indeed its own domain with intrinsic language and design concepts. Making effective use of Angular does require learning it, and learning all of it does take time. However I honestly do not think that is any different than any other framework. Angular can be learned piecemeal. React may be a simpler, lighter framework...however when the time comes that you need something React does not offer, you either have to write something yourself (rather than simply learn a new aspect of the framework as with Angular), or find a third-party solution...which itself would also need to be learned. If you need a kitchen sink, then you need a kitchen sink...you'll end up with one one way or another. ;) The philosophy behind Angular is they will give you most of everything you might generally need, for simple or complex projects, including the kitchen sink, and you can learn and use what you need when you need it. One of the benefits of the Angular approach is that everything maintains a consistency and cohesion across the entire framework that you usually do not have when blending together many disparate frameworks, each one solving different problems in very different ways with different idioms, patterns, and philosophies.