The Five Stages of Grief: Laying Angular Down for React
Author’s Note: This is meant to be a satirical take at an architectural choice that required much thought. Having a sense of humor before reading is highly recommended.
Stage 1: Denial
I was an Angular fanatic. I loved it despite its flaws and wonky behavior (dependency injection and digest cycle, anyone?). When Google dropped the Angular 2.0 bomb last year, I could not believe it. No way would they actually release a version with no clean upgrade path! No way would they basically throw away years of tribal knowledge in the community and a thriving ecosystem.
Stage 2: Anger
Okay, so all the syntax we know is gone for promised improvements. I’m still sort of with you, Google. Another bomb: TypeScript is a first-class citizen. Wait, what? I’m of the opinion that type checkers like TS and Flow certainly have their place in problem domains, but to apply it wholesale? You’re kidding, right? This is ridiculous! What am I going to tell clients when they have to upgrade? “Yeah, so all that code you spent a lot of money on? Obsolete. We’re going to need a full rewrite if you want ng 2.0. And we gotta use TypeScript everywhere.” Are you nuts?!
Stage 3: Bargaining
Faster render times, no more transclusion, concise syntax. Okay that’s good, I guess. Do we really have to use TypeScript? Can we do this upgrade in phases? I’ll bite the TypeScript bullet if we can just get a smoother transition to 2.0: one that doesn’t involve including both versions concurrently. We can make that happen, right?
Stage 4: Depression
Beta release drops. TypeScript. Everywhere. Promises of fewer directives, but there’s still that matter of telling clients that this amounts to a full rewrite of their apps if they want to upgrade. The value in return? Slightly faster rendering times. Some may argue cleaner looking code (I wouldn’t.). Somebody hand me that bottle of Ron Zacapa.
Stage 5: Acceptance
I get the Angular team was trying to be ambitious. I quite admire that. However, the execution leaves much to be desired, and I need to do what’s in the best interest of my clients and stakeholders. If a full blown rewrite effort needs to happen, there needs to be equal value for that effort. I just don’t see that value in Angular 2.0, and I therefore must let my old friend go.
I’m even building real native mobile apps now on React Native, sharing a lot of code with the web apps, and not sacrificing User Experience for it. There’s even talk of React eventually finding its way onto native desktop applications as the front-end layer. “Learn once, write everywhere” is indeed adequate value to justify a rewrite of apps.
Perhaps Angular 2.0 was the framework I needed after all: the framework that allowed me to realize that maybe I didn’t need a huge, unwieldy framework; maybe what I needed was a perspective adjustment to this land of cheap rendering, easy state management, and freedom of choice.
I look back fondly at the years with Angular. However, it’s clear to me now that it was simply a bridge to an even better world, one where you can simply React to change instead of being a victim to it.