Brook Preloader

Angular is the best

... for teams building complicated web applications

So, first of all, React and Vue are fantastic tools to develop UI componentry. I applaud the communities that build and support these tools that are so clearly beloved by so many. But I am convinced that as of right now, if you are building a complicated and dynamic web application UI, especially with a team, Angular is the best choice of tooling.

The first-class support for TypeScript is huge.

If you don't like TypeScript, fine, but in a large UI project, the value of TypeScript is ENORMOUS. Typed interfaces, transpile-time errors, and future-focused ECMAScript features are going to buy you so much productivity in the long run. React and Vue have support in some sense, but it's just not there yet. Hats off to the Vue team for their native TypeScript support coming in Vue 3 - looking forward to that.

The prescribed Angular architecture pattern is important

...especially when we are talking about working in teams. Your application is modularized. Your UI components are separated from the service layers. You have pipes and directives with clear and precise responsibilities. There are clear boundaries to how you structure your application, and this is important at a team and company level. When someone changes projects, they don't have to relearn code style or project tooling, because everyone is standardized. Not only that, but this structure makes it easy to find code because the responsibilities are clear. Neither Vue nor React have this - and that is intentional for those tools, but it is what makes them a weaker choice in this context.

The Angular CLI and scaffolding tools are amazing.

One thing I can't wrap my head around for React is the fact that you can go to GitHub and find starter React repos with hundreds of commits from tons of contributors, all just to get you what Angular gives you with ng new. Along with that, you then have to deal with the package management, which is way more complicated with React and Vue applications because there's no truly centralized authority. In Angular, you get major versions with CLI-assisted upgrades. With React and Vue, you are completely on your own and you have to hope that even the simplest, most crucial parts of your app - like a router - are ready for the upgrade.

The batteries-included approach absolutely what you want in the scenario. While I applaud those who want to use "best-in-class" tools, for things like HTTP Clients, Routers, configuration, dev servers, form libraries, "OKAY" tools that are standardized are more than adequate - and these Angular libraries are great. I hear a lot of complaints saying "it is too heavy and bloated, it has all these things", but when you're building apps like these, you need these things. That's not bloat, that's necessity. It's not fat, it's muscle.

No state store required.

Redux and tools like that can be useful in non-hierarchical user interfaces, but more often than not I find it gets shoved into applications as a default behavior because that's "the React way"/"the Vue way". THAT is bloat. In Angular, the one-way and two-way data-binding is all you need, for quite a while - only when it gets truly complex do you actually need to add something like NgRx. Working with Vue and React projects, I'm always annoyed to see something as simple as a logout button click takes me through a hoop of state store emissions, just to find it redirects the user to a page. I understand that this is a case-by-case "that person used it wrong" approach, but when it is a widely prescribed architecture, I'm not so sure that the ecosystem or tooling isn't to blame.

Angular isn't dying. It's not even close.

I know the State of JavaScript survey came out, but it merged the modern Angular with its predecessor, the now-widely disliked, AngularJS and is not representative of how developers see Angular. Additionally, it is very underestimated how widely adopted Angular is in the enterprise. While a lot of the vocal proponents of React carry the hacker ethos in the start-up world and communities, the less vocal proponents of Angular are happily working away at enterprise jobs. It's still widely used, I just think it's not as loud.

React and Vue absolutely have their place.

These are great tools for component development. The problem with both of them is that they're not frameworks - INTENTIONALLY. It's up to you to build that framework, or find one like Material UI implementations, or tangential tooling like Gatsby, Next, Nuxt, etc (though the value of these are less in the framework and more in the additional functionality they offer).

I hope you are enjoying your tooling.

React and Vue are great, and I hope you're enjoying them. My stance, however, is that Angular makes the most sense in the context of application development. It has served my teams and I so well over the last few years, and these applications continue to be maintainable and easy to update. Since we're talking JavaScript frameworks, I completely expect to disagree with this whole post in a few years but until then, long live Angular.

Thinking about working with me?