A cartoon from an ex-Google software engineer, titled “Welcome to Google,” made the rounds a while back. It featured two diverging roads, neither passable. One was the main road, marked as deprecated (“don’t even think about it,” the sign read). The new road, however, was marked as still under construction (“Danger”), and so was unusable as well. That was the no-win choice two million frontend developers faced in 2014, when Google unexpectedly deprecated its popular JavaScript framework, AngularJS, in favor of Angular 2, which had a radically different architecture, a confusing name, no upgrade path, and wasn’t even fully released yet. So, many developers turned the wheel and headed to Reactville or Vuetown instead. How Google botched the Angular upgrade provides timely lessons in how not to update a software package, which former Google Developer Advocate Stephen Fluin outlined in a talk at the All Things Open conference last week. “Uncertainty kills motivation,” said Fluin. “When you’re taking away everything [developers] know and love, they’re going to feel disheartened.” Fluin is now head of developer relations for Buildkite , but he worked for Google from 2016 to 2021 on the Angular project. “Things were a little bit rough at the time. It was a bit of a death march,” he told the audience. “We had no idea when Angular 2 was going to come out, and the core fundamentals of Angular kept changing.” From AngularJS to Angular 2 Google had good reasons for updating Angular. The AngularJS team had been snatched from Google’s infrastructure division and placed under its ad division, where the software could be more fully exploited. To support operations of that size, Angular needed greater rigor. The original AngularJS was launched in 2009 as a side project of Google engineer Miško Hevery , who wanted to extend HTML. Google pulled AngularJS into an internal project because Google developers found it easier to work with than the Java-based Google Web Toolkit ( GWT ). The framework quickly caught on with outside web developers too, who readily understood the angle brackets of HTML (hence the name) and wanted more interactive components. Hevery built AngularJS 1. 3 with a traditional controller model, which handled all user input, logic and data transport under the JavaScript $scope object. Angular 2, announced at the ng-europe 2014 conference, was a major shift in architecture. It shifted to a component model, with each HTML template enjoying its own class properties. After a forced, unhappy dalliance with Google’s Dart , the team rewrote Angular completely in TypeScript, with no backward compatibility whatsoever. It was a lot to take in, and the introductory talk at ng-europe seemed to spook Angular developers more than inspire them. For each discarded feature, the speakers displayed a graphic of a tombstone (“RIP Controllers”) and played a recording of a church bell tolling in the background. “That talk is still infamous today for what it did to the community,” Fluin said. “All these things that you know and love about AngularJS are gone. They’re dead…