By now, most readers know a little about the motivations and features of Angular 2.0. Here I recap them briefly, these are ideas I have seen Angular team members say in conference talks, mixed with others I have inferred.
- Performance, and design/API changes needed to achieve it.
- Accommodate the changing web development environment, including Web Components.
- Replace Angular-specific features with web platform features.
- Dynamic Loading, especially for faster mobile startup.
- Easier learning curve, though it is unclear how well this will pan out, given the large pile of dependency technologies.
- Scale up to complex applications effectively.
- Excellent tooling support, which again helps scale up development teams.
- Server-side pre-rendering – SEO Friendly and mobile friendly.
- Server-side template compilation (as a build step), for faster application start.
- Leverage web workers – ideally this will be trivial, for use in almost any application.
- Leverage RxJS, make it nearly as easy to create an end to end real-time/reactive system, as it was to create a old-fashioned manual-update application with the older tools.
- Retain the large-scale corporate development appeal which AngularJS 1.x has enjoyed.
- Keep up with the competition! React, for example.
Putting all this together, my assessment is that Angular 2 is staggeringly ambitious. Not for any one goal (most of the goals and features above, are present in at least one competitor); but rather, it takes ambition to combine all of the above into one framework, then to drive that framework to completion fast enough for all of these things to be of current interest.
But, will it work?
At Oasis Digital we have been following the Angular 2 alpha versions for months now, and we have multiple applications underway on Angular 2. We know customers who are already deep into production application development on Angular 2. We have taught “early start” classes on Angular 2, and have our curriculum well underway to teach full-length “boot camp” classes. We were thrilled to see the beta version ship earlier this month.
From all the above, and studying some of the competition as well, it seems likely that Angular 2 will achieve its technical ambitions.
There are some risks and challenges facing the Angular 2 team, they are well aware of these and working hard.
Size: So far, as of beta.0, Angular 2 has surprisingly substantial code size. There is work underway to trim this, but the extent of success is to be determined. Code size might be the unavoidable cost of ambition.
Dependency size: Angular 2 has mercifully few dependencies, but one of them (RxJS “RxNext”) is important, powerful, and large. This can be minimized by including only the pieces of Rx that a given application actually uses, but a complex application written using Angular 2 and much of RxJS will, unless things change greatly, end up with a big total code size.
Development pace: because Angular 2 is so ambitious and large, it has also taken a while to build. The competition has not stood still, so there is risk that by the time Angular 2 is fully out the door, it may have fallen behind in some key area. This risk is much more well-managed now that the product is in beta.
Innovation: There are other alternatives out there, radically different and with some chance of being radically better. Imagine if, for example, something like Elm were adopted by one of the major technology companies.
Style and preference: for good reasons, Angular 2 has a split between code and template. This design choice has served version 1 very well, and while there are technical reasons to choose between a code/template versus an all-code, that choice is also to a significant extent a matter of style, preference, and fad. If the prevailing preference moves toward and all-code approach, this could be a challenge to Angular 2 adoption.
Place Your Bets
There is no sure thing, and there are significant unknowns and hazards. But I will step out on a limb with the following (scoped) prediction: