· javascript
Stephen Fluin advises developers on software upgrades using Angular 2's 2014 transition example
The shift to Angular 2, which involved a radically different architecture, a confusing moniker, a lack of a clear upgrade path, and an incomplete initial release, presented two million frontend…
The shift to Angular 2, which involved a radically different architecture, a confusing moniker, a lack of a clear upgrade path, and an incomplete initial release, presented two million frontend developers with a dilemma in 2014, akin to facing two impassable roads, as depicted in a cartoon from an ex-Google software engineer titled “Welcome to Google.” This situation, where developers were forced to choose between a deprecated main road and an unusable, under-construction new road, led many to abandon the popular JavaScript framework, AngularJS, for alternatives like React or Vue.
Former Google Developer Advocate Stephen Fluin detailed how Google mishandled the Angular upgrade in a talk at the All Things Open conference last week, offering valuable insights into how to avoid problematic software package updates. Fluin stated, “Uncertainty kills motivation,” adding, “When you're taking away everything [developers] know and love, they're going to feel disheartened.” Though he is now leading developer relations for Buildkite, Fluin gained experience with the Angular project at Google between 2016 and 2021, recalling that, “Things were a little bit rough at the time. It was a bit of a death march,” because “We had no idea when Angular 2 was going to come out, and the core fundamentals of Angular kept changing.”
The transition from AngularJS to Angular 2 was driven by legitimate needs for improvement; the AngularJS team had been moved from Google’s infrastructure division to its advertising division, enabling greater exploitation of the software. Supporting operations of that scale demanded increased levels of strictness. AngularJS originally emerged in 2009 as a side project from Google engineer Miško Hevery, who aimed to enhance HTML. Google incorporated AngularJS into an internal project because developers within the company found it more manageable than the Java-based Google Web Toolkit (GWT). The framework quickly gained traction with external web developers, who were already familiar with the angle brackets of HTML (hence the name) and desired more interactive elements. Hevery initially developed AngularJS 1.3 using a conventional controller model, which managed all data transport, logic, and user input through the JavaScript $scope object.
Angular 2, which was presented at the ng-europe 2014 conference, represented a substantial architectural overhaul, moving to a component model where every HTML template possessed its own class properties. After a reluctant engagement with Google's Dart language, the team completely rewrote Angular using TypeScript, ensuring absolutely no backward compatibility. This massive undertaking proved overwhelming, and the introductory presentation at ng-europe seemed to alarm Angular developers rather than inspire them. For every feature that was eliminated, the speakers showed a tombstone graphic reading “RIP Controllers” and played the sound of a church bell tolling. Fluin observed that, “That talk is still infamous today for what it did to the community,” emphasizing, “All these things that you know and love about AngularJS are gone. They're dead. And nobody knew this was coming.”
Fluin further pointed out that the timing was generally unfavorable for software migrations, noting that Python was struggling with its move from version 2 to 3, and the KDE desktop was facing its migration from version 4 to version 5, alongside the lingering shadow of the difficult transition from GNOME 2 to 3. Regarding naming conventions, Fluin offered advice: “If you're trying to bring your developers with you, give them a path. Don't just kill your old thing and then not have a new thing ready.” Consequently, many developers switched to React and Vue.js, two other JavaScript frontend frameworks that had already established production use and also adopted the component model.
In the 2016 State of JS Survey, React emerged as the most favored frontend framework, with 53 percent of JS developers reporting its usage. Angular’s user base was split unevenly; 30 percent continued to employ the original version, while only 13 percent were using Angular 2, and 10 percent had adopted Vue. Angular 2 was eventually released in September 2016, with Angular 4 following in March of the next year, skipping version 3 entirely for an unclear reason. Meanwhile, the classic AngularJS, which wasn't formally retired until the close of 2021, received an update to version 1.5 in the spring of 2016, which introduced components. The confusion was compounded by the framework's naming, which baffled many casual observers: was AngularJS distinct from Angular 2, and did the "2" in Angular signify a version number or the complete architectural change? Resolving public understanding of this name change proved to be a significant hurdle. Fluin explained that, “We had to fix public communication guidelines. We had to train experts. We had to fix Google's knowledge graph,” which functions as Google's factual database about the world. He concluded, “Naming and versioning matter,” adding, “They don't matter in a pure technical sense, but they matter to human beings because it's human beings you're trying to keep up to date with.”
While it would be easy to assign blame for nearly jeopardizing Angular to Google's leadership, the framework has successfully met Google's internal requirements. Today, the component-driven Angular powers interfaces for Gemini, Google Analytics, and numerous other Google applications. It is now integrating with Google’s internal Wiz high-performance framework, which was initially created for the unsuccessful Google+ social network. Furthermore, Angular has established a more predictable and user-friendly update cycle, maintaining a routine release cadence of twice annually, strictly adhering to semantic versioning guidelines where major version numbers denote breaking changes. Google subjects every forthcoming version of the framework to testing within its own applications before making it available to the public, and any feature slated for removal is first marked as deprecated for a full year. Nevertheless, looking back, Fluin suggested that Google might have been better served by giving Angular 2 a completely different name, even if that meant cultivating a new user base from the ground up, telling The Register, “JavaScript developers loved trying new frameworks. So, pretending to be a new framework might have been better.”
Why it matters
This case study offers crucial lessons for developers and tooling teams regarding major framework migrations. Understanding how poor communication and abrupt changes can drive developers toward competing solutions is vital for maintaining community trust and adoption of new tools.

