angular_dominance_header

There are a lot of frameworks in the JavaScript world. This was true even several years ago, before it became de rigueur to have your own framework in order to join the elite, conference-speaker crowd.

Just a couple of years ago, it seemed as though Backbone was on its way to becoming the de facto framework for JavaScript developers. It was beating out more established frameworks like Dojo and keeping upstarts like Knockout and Ember at bay.

Then, seemingly overnight, things changed and AngularJS appeared to suddenly dominate any framework discussion related to JavaScript. I was running a popular site for developers (called Flippin’ Awesome, which is now called Modern Web) and it seemed that all any author wanted to write about was Angular. At the time, I thought Angular was just the flavor du jour and that the community would just as quickly move on. That didn’t happen.

Angular Interest Over Time According to Google Trends

Angular Interest Over Time According to Google Trends

Tooling and Integration

I think multiple factors led to Angular’s “dominance” being relatively stable. The first was framework fatigue. No one could realistically keep up with the rate of new frameworks, so it seemed the time was ripe to coalesce around a particular framework, and the fact that it was led by Google probably made it seem like a safer choice.

However, this led to what is probably the more important factor, which is the integration of Angular into other tools and frameworks. This made the decision to choose Angular easier, especially for larger companies. For example, Angular integration comes pre-built into frameworks such as Telerik’s Kendo UI, Ionic, Famo.us, Wijmo and others. IDEs including WebStorm/IntelliJ, Visual Studio, and NetBeans come pre-baked with features specifically for Angular projects.

The point is, all these integrations not only made the choice of Angular easier, but make leaving harder. It’s no longer just about the code I write, but Angular is tied into my entire development experience.

The Controversy

The Angular dominance has not halted the growth of competitive frameworks. Ember continues to innovate. React has gained a small but growing (and seemingly devoted) following. Projects like Meteor seem to be finding an audience, especially among those who are looking for JavaScript front and back ends.

I’d love to chart out relative interest in these frameworks using Google Trends, but it is hard to find specific search terms (i.e. React, Ember and Meteor all give irrelevant results, and searches of Reactjs, Emberjs and Metorjs, for example, barely register on the chart).

However, recently the Angular team has appeared to step into some controversy with some of the plans aired for Angular 2.0.

First of all, it is a complete rewrite, which, in and of itself, isn’t a bad thing. However, one of the key issues seems to be a potential lack of backwards compatibility or easy migration path. Here is a quote on that topic from Igor Minar (emphasis mine):

Our goal with Angular 2 is to make the best possible set of tools for building web apps not constrained by maintaining backwards compatibility with existing APIs. Once we have an initial version of Angular 2, we’ll start to work on a migration path for Angular 1 apps.

In coverage of the changes in Angular 2.0 announced at the ng-europe conference, David Iffland said:

Developers familiar with the Angular 1.X will encounter a drastically different looking framework and will need to learn a new architecture.

Based upon the video of the presentation from ng-europe, Jaxenter noted a basic example given illustrating how different the code may end up being. Below is the example in Angular 1.3 (taken from about 3:20 in the video):

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

…And the same example written for Angular 2.0 (from about 3:26):

<div>
  <input type="text" [value]="newTodoTitle">
  <button (click)="addTodo()">+</button>

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

A close examination of the code shows a number of significant differences, none of which seem to bring to mind any quick and easy upgrade paths (for example, the syntax for directives has completely changed).

What Does This Mean?

Much like the recent Renee Zellweger controversy, Angular developers seemed to be staring at something that looked mildly familiar and at the same time unrecognizable. While other popular frameworks have had breaking changes or complex migration paths, Angular 2.0 seemed so different that it garnered some harsh reactions.

For example, John V. Petersen says that Google has broken the OSS compact with Angular 2.0:

Clearly, 2.0 is a revolutionary step over 1.x. The Angular Team looking to capitalize and build upon Angular 1.x’s success. As such, the community that was praised at ng-Europe has a reasonable expectation to be kept in the loop. That’s the way you’re supposed to treat the community that makes up your development partner base. To me, it seems rather common-sensical. Why on Earth would a team want to disenfranchise the very community it relies upon and praises?

Reaction on Reddit to the Jaxenter post was almost unanimously harsh (granted, harsh comment threads on Reddit are common, but the unanimous unhappiness with the changes was still somewhat surprising). This comment by jbarkett was emblematic of the general feeling of commenters:

I honestly didn’t think it was possible for the Angular team to do anything in the 2.0 release that would turn me off. All of the talk of a real persistence layer with offline first capabilities and dropping support for old browsers to make way for new things sounded great.

This is a mess…the huge gap between this and 1.3 means those of us with real jobs where projects live for years and years have to back off. I can’t tell my boss that we’re going to build something incredible, but that we need to plan for a code only, no new features rewrite in 18 months.

Meanwhile other frameworks continue to innovate. For instance, this week alone featured a new release of Ember, featuring a revamped rendering layer, and a new release of React (and don’t forget the new Kendo UI beta).

This begs the question as to whether Angular can maintain its dominance. For example, in response to my tweet about the Ember release, Jason Marshall wrote:

If enough of the syntax and functionality changes, moving from 1.3 to 2.0 will come with a steep learning curve. While Angular has some of the inherent tooling and integration advantages I discussed earlier, drastic changes could also make it difficult for tools and frameworks to maintain integration with 1.3, satisfying the majority of their audience, and 2.0, satisfying early adopters. Plus, at some point, if the migration is a complex one, you practically incentivize users to at least research alternatives, negating much of Angular’s inherent advantages.

And let’s not forget enterprises. Many were just in the midst of standardizing on Angular 1.3 only to see it seem to take a sharp turn that may affect their projects over the long term (and enterprises aren’t often known for rapid adoption). They may be hesitant to futher commit to the project if they lose trust in Google’s ability to lead it.

It’s still relatively early in the game, and the Angular team could take the backlash as a sign to alter their direction, or at least offer a simpler migration story. Also, admittedly, the actual long-lasting effects of a backlash of this sort can often be overstated during the heat of the moment. Nonetheless, it does appear as if Google has at least opened the door wide enough that a framework competitor could walk through.

I’d love to hear your thoughts.




Written by:

Brian Rinaldi

Brian Rinaldi

Brian Rinaldi is the Developer Content Manager at Telerik focused on ensuring that the Developer Relations team creates top notch content for the web development community on the Telerik Developer Network. Brian founded a popular developer site called Flippin’ Awesome (now Modern Web) and serves as co-editor of Mobile Web Weekly. You can follow Brian via @remotesynth on Twitter.

  • Nick Foster

    It took me months to introduce Knockout to my team who were used to building enterprise apps with ASP.NET MVC. I had been looking at Angular 1.x and thinking whether it was worth convincing them to start using that, but with 2.0 looming and so drastically different, I can’t justify getting my devs to learn a framework that’s about to head into maintenance mode.

    Maybe when 2.0 is out it might be worth picking up, but I think the Angular team have lost a lot of trust with devs by making such dramatic changes. Time will tell I guess.

    • http://www.martinspierings.nl/ Martin Spierings

      I agree. They are not only changing syntax but a lot of the techniques too. Plus if you want to start with 2.0 you would lose a lot of modules and tools that are currently integrating with Angular. You’d start from scratch and i’m not sure if that is the best option. I think going for ES6 is also way too soon as current browsers are hardly supporting anything from it. You need capable browsers before you are going all-in on a new technique.

      • Rick Jolly

        You’d transpile ES6 which is no big deal since you’re running a preprocessor for a number of other things anyway.

    • Kyle Hayes

      We decided this very thing yesterday as well. If 2.0 was out now, or going to be out in the next month, we would consider it. But we are not going to write any new code in 1.x.

  • Pingback: Dew Drop – October 30, 2014 (#1888) | Morning Dew

  • BlessYAHU

    I’m honestly glad I didn’t invest any time into learning Angular 1.x. Maybe I should wait till rev 3, like I do with some Microsoft tools. :)

    Though this post (http://blog.andyet.com/2014/10/30/optimize-for-change-its-the-only-constant) throws some jabs, it makes a good point: Modular (design/frameworks) are more flexible.

    Modular FTW

  • Roland Zwaga

    Well, they do add this at the end of the quote:

    “Once we have an initial version of Angular 2, we’ll start to work on a migration path for Angular 1 apps.”

    So, judging by that, they will offer a migration path, so I’m not sure if moving to Angular 2.0 will require a 100% rewrite. Perhaps they’ll create some sort of legacy adapter layer that will allow large projects to upgrade gradually.

    Anyways, I guess its too early to tell, let’s wait and see what they come up with.
    I’m gong to chalk this down to bad PR on the Angular team’s side….

  • Shawn Wildermuth

    It’s a year too early to panic… See more what I have to say on my blog http://wildermuth.com/2014/10/29/It_Is_Too_Soon_to_Panic_on_AngularJS_2_0

  • http://www.dffrnt.com/ vijay

    While I’m all for breaking changes when there’s danger of legacy getting in the way of innovation, the frightening level of inconsistency here is giving me second thoughts about going forward with this framework. Three different bracket styles (up from two). Two different directive styles (ng-click becomes click but ng-repeat stays the same? what?).

    I was looking forward to 2.0 in the hope that they would be making things simpler for me. However, all I see are changes focused on making things “easy” for them (parsing on their end becomes easier when we do all the hardwork of identifying what’s an attribute(square brackets) and what’s an action(parantheses)).

    They should instead be doing the opposite and strive to remove complexity from our end helping us do more with less. If any angular core dev is reading this, this video[1] by Rich Hickey on the difference between Simple vs Easy should be an eye-opener.

    [1] http://www.infoq.com/presentations/Simple-Made-Easy

  • Steve Gentile

    So, the arguments against it is someone who thinks they have to run out and upgrade the moment a new version comes and they are upset about it. Angular 1.3 will be relevant for all those tasked to support older browsers, etc… and be around at least until 2016, and will go out even further! And there is a statement, whether it will be relevant in 2016, that in the future they will work on a 1.x to 2 migration, it’s just not something they are worried about now (and shouldn’t be). People who are like ‘oh glad I didn’t use 1.x’ – well, you can sit on the sidelines forever and always say ‘glad I didn’t use xyz’ – but for those using it, it’s been a great experience, it’s a very productive framework! I used Knockout, I learned how SPA frameworks work, and I can use any of them now. Name a single SPA framework that won’t be different in 1-2 years – ie. I’ve followed Ember and it’s constantly changing, every .x release broke things in it. It’s the way these things work. If your afraid of change, your probably in the wrong business :)

    • http://www.martinspierings.nl/ Martin Spierings

      1.3 needs support far past 2016 as most browsers which are currently shipped with devices will probably not be replaced by new ones. Especially mobile devices are not gonna be upgraded as soon as they were before.

      Not everybody is working on something that will be getting continuous development. And when you have to support things on the long run or have to support older devices, AngularJs 2.0 isn’t going to work no more. This will result in less big-projects for Angular and can effectivly kill of Angular (you need big projects for your framework to stay around).

      You will also lose support of many modules. Start from scratch. Why would i start with something from scratch these days? I want to use things others have already developed and 2.0 keeps you from doing thiat. And you can bet your ass that 2.0 will require a lot of bugfixes and commits before it is ready so you are looking at a period of 2 or even 3 years where not much will happen. Other than people will be waiting and saying “just wait, it will be better soon”

  • javawerks

    … if they lose trust in Google’s ability to lead it… Why would anyone trust Google? This is not the first time Google has left developers in the lurch. And it won’t be the last.

    • http://www.martinspierings.nl/ Martin Spierings

      Yeah i wouldn’t be surprised if 1.3 gets forked and 2.0 will become a totally new framework. Currently Google is working on both Angular as Polymer and i doubt Angular is gonna win that.

  • Juan Antonio Navarro Jimenez

    Reactjs deprecate some apis but you can still use them and upgrade when you want. AngularJs is changing everything. Is a new framework, new language (atscript). For companie’s development teams could be a nightmare.

    • Phil

      Yeah, its like the maintainers are looking at shiny new tools and no caring about the guy who has to maintain a truckload of the current things.

  • Mike Park

    I think it’s worth also considering that 2.0 has a story for seamless web components integration. How will the other frameworks add or integrate with web components?

    • http://www.martinspierings.nl/ Martin Spierings

      They will eventually but web components are not even supported properly in current browsers (even the standard isn’t nearly finished yet), so how can you talk about already integrating it? Some people actually need backwards compatibility and moving for 2.0 is way too fast.

  • Kyle Hayes

    Kyle Hayes

    Innovations and changes are going to happen all the time and they should. The web development community is an extremely volatile one. But when big companies who offer popular toolkits like Angular make it hard to move to the next version, it seems big headed. Enterprises who adopt these frameworks cannot move as quickly to make drastic changes to long term supported codebases.

  • Phil

    My two issues with Angular.js is that its trying to be all things to all people (like Windows OS) rather simply a binding framework like knockout.js and the maintainers do not have enough concern for people who have to maintain pre-IE8 browsers. Not everyone have the privilege of always using the new shiny tool or have their end-user use Chrome browser which updates every 6 weeks. If I do use Angular.js, its would be because its required on a job rather than me being a fan. I am a fan of knockout.js’ simplicity and focus and will stick with it as long as I can.