I’ve posted before that I’m not a big fan of frameworks like Angular. Trying to re-invent programming in declarative HTML tags/attributes/{{ curlies }} will likely always feel lacking; and every framework having its own unique way of doing this means a ton of effort needs to be wastedinvested in updating tooling to support/understand it.

So, with my pre-existing bias out of the way; I have to say that recent information about Angular’s future only makes me hold my head in my hands even more…

Not just one new concept to add to tooling; but three!

It wasn’t enough that tooling needed to be updated to support Angular; it seems that the Angular Team now want tooling to support:

Different, but no better

In this article there’s a comparison of code for Angular v1 and Angular v2; that looks like this:

Angular v1

<div ng-controller="SantaTodoController">
	<input type="text" ng-model="newTodoTitle">
	<button ng-click="addTodo()">+</button>
		<tab-pane title="Tobias">
			<div ng-repeat="todo in todosOf('tobias')">
				<input type="checkbox" ng-model="todo.done">
				<button ng-click="deleteTodo(todo)">X</button>

Angular v2

(Note: I’ve tweaked the HTML slightly to what I believe it should be; the article seemed to have some issues).

	<input type="text" [value]="newTodoTitle">
	<button (click)="addTodo()">+</button>
		<tab-pane title="Good kids">
			<div [ng-repeat|todo]="todosOf('good')">
				<input type="checkbox" [checked]="todo.done">
				<button (click)="deleteTodo(todo)">X</button>

There are some significant differences in how Angular concepts are marked up here; but are they any better? Really? Previously things were embedded in strings in attributes, which was bad enough. But in Angular v2, we’re now using [brackets], (parens) and pipes in attribute names too. It’s different, but I really don’t think it is better.

Not ready until 2016

Angular is aiming for a release by the end of 2015 - but early 2016 seems more realistic given the drastic changes that are planned - http://jaxenter.com/angular-2-0-112094.html

This is another big WTF. The changes are so significant that they can’t be progressively released. This makes the v1 -> v2 migration seem like it’s going to be an incredible amount of work.

Angular 1.3 EOL after just 18-24 months

According to Brad Green of Angular, Angular 1.3 will continue to receive bugfix and security patch support for 18-24 months after the release of version 2.0. - http://jaxenter.com/angular-2-0-112094.html

This whole thing is starting to sound like Python 2.7 vs 3.0. Python 3.0 was released in 2008, and the change was so big and breaking, that Python 2.7 end-of-life is currently slated for 2020. That’s a 12 year cross-over. The Angular Team expect to give just 18-24 months. I don’t know which I think is more insane; supporting an old version of your product for 12 years, or giving just 18-24 months for people to migrate; both of them seem bat-shit-crazy to me.

Conclusion: Don’t pick Angular

Where I work; we’re currently evaluating a bunch of new technologies/frameworks/etc. to see which might be suitable for use on vNext of our products. Amongst those being prototyped are Dart, React, Angular and a few others. With all of this info on Angular; I’m struggling to see how we could possibly pick it. Our current codebase has parts that are over 10 years old; and we hope our new codebase will last this long too. It seems that if we start writing Angular today; we’ll be forced to rewrite the frontend in three to four years at latest (and with the way apps are going, the frontend is likely to be a large codebase). This doesn’t sound very attractive.

Maybe I’ve misunderstood something; but I’m really struggling to see a world in which this all makes good sense.

We need frameworks that are stable and supported long-term; not that are constantly inventing new concepts and being rewritten with breaking changes every 5 minutes. Of everyone, Google should know how hard it is to maintain large web apps :-/