10 Years of Frontend
Itâs fun to try and guess what the future holds. And what better time to do it than on New Yearâs Eve?
This year marks a decade of frontend development for me. Which is as long as anyone could say theyâve done it, because it wasnât a job title before then (at least not in my part of the world).
In the past 10 years the web has undergone some really wild changes. Many were as pointless and frustrating as a tailing mission in a video game. Others may point to the future of civilization as we know it. In this blog post Iâll take a look back on the past decade of frontend to try and guess where weâll be in 2033, while trying my best to avoid my Grandpa-mode-back-in-my-day ramblings about hacking CSS floats and putting Web 2.0 peeling stickers everywhere (hate to break it to you, but table layouts and image rounded cornersâwhich I also didâare even older than that).
2015: The rise of React
Itâs no secret that Facebookâs JS framework had a monumental impact on how the web is built and experienced. It opened our eyes to whatâs possibleâwe could have true, interactive, animated, desktop-app-like experiences in a browser! No longer are we limited to simple brochure sites and form-submission-powered dashboards.
React spread like wildfire, becoming âthe way to do thingsâ1 within a few short years of its public release.
Why React became so widely-used (and so quickly) is complex, and doesnât fit into a neat answer. It wasnât the first popular JS framework, nor was it the most advanced. But answering that question isnât interesting to me; I just chalk it up to âright place, right timeâ and move on. A far more interesting analysis is reflecting on Reactâs lasting impact, not only on the content of the internet, but the developers who build it as well.
1 While many frameworks like Backbone.js/Angular/batman.js/Ember.js/etc. predated React, they paled in comparison to Reactâs adoption and widespread usage.
Reactâs impact on the content of the internet
In content terms, the internet has gotten (much) heavier. I wonât belabor the point as itâs been already been covered at length. But itâs still worth not forgetting React was a large cause of this: by shifting the interactivity from the backend to the frontend, it also increases the code weight by its fundamental design. But frameworks like Qwik (and Astro!) have led the charge in executing that client code in the server (or not at all). Which is a feat of engineering, to say the least.
The good news is devs have been receptive to tools that basically provide âfree speedâ while still getting to write React (or React-adjacent) code, so in the spirit of optimism Iâm calling it early: weâve turned the tide, and tooling has caught up to React and counterbalanced the weight it introduces. Mischief managed. Good work, everyone.
Reactâs impact on frontend
In dev terms, we couldnât be in a more different place than where we were 10 years ago. I diagrammed this major paradigm shift in a blog post I wrote in 2016 on webpack: we shifted from a workflow where a frontend developer would have to manually manage the inputs & outputs of every file type they were using (which was complex and brittle), to a new workflow where everything ran through JavaScript, and the tooling determined all the outputs from a single entry file (which was JS).
While this was an improvement, it meant everything had to shift. In what felt like an overnight change, everything built before React was being rapidly thrown out in favor of this new gospel. And though we called this new tool webpack, it was really React pulling the strings2. After all, we had no reason to run everything through JS in a world before we wrote all our markup in JS (JSX).
Mind you, it wasnât the templating power of JSX that led to this paradigm shift3. Rather, it was the volatile mixing of HTML and JS that enabled so many breakthroughs while completely upending every frontend devâs knowledge, toolchain, and workflow. Not to mention job requirements. This rift was described accurately in Chris Coyierâs oft-quoted 2019 post The Great Divide. Through one lens, there was a rift between âfront-of-the-frontendâ CSS devs and âback-of-the-frontendâ JS devs. But through another, the rift was between frontend devs stuck in âthe old wayâ (HTML, CSS, and JS are separate) vs âthe new wayâ (HTML and JS are one; CSS gets ignored, but weâll get back to that in the next section on styling).
However you choose to interpret the schism of frontend devs, React was the so-to-speak 95 Theses that instigated it. And we canât go back to a world without React at this point.
Summary: React defined the last 10 years of frontend.
Prediction: React will define the next 10, too?4
2 Even Tobias Koppers admits webpackâs popularity had early adoption from Facebookâs dev team to thank.
3 HTML partials and programmatic HTML had been around for nearly all of the internetâs history (going back to the days of Perl and CGI).
4 Despite the rise of competitors, React still seems to be pulling ahead at even greater speeds. At this rate, for something else to catch up to React, itâll most likely have to be a direct replacement (i.e. not requiring
teams to divest from React entirely).
2015: Styling is the (most/least) important thing
âSo if HTML + JS = JSX, where does that leave CSS?â Where, indeed!
While React was gaining popularity in 2015 and unifying the JS ecosystem, CSS was in a very different place. Despite (very) vocal advocates of BEM/OOCSS/SMACSS, they didnât effectively solve styling problems at scale5. And React didnât help with that at all, instead, entirely punting on the decision and leaving it up to the individual developer.
And so, largely as a direct result of the rise of React, CSS kicked off its battle royale to fight for the top spot (thatâs still going on till this day). And while React was probably correct not picking a side for styling (React couldnât have predicted its own impact on styling and incorporate that change in its initial design), it still leaves JSX users in limbo, waiting to see what styling solution(s) will rise to the top.
Collectively, weâve tried CSS Modules, CSS-in-JS, Atomic CSS, Scoped CSS, Utility CSS, and more. And thereâs still no clear direction6. With all the rapid improvements in CSS, the answer may end up just being âvanilla CSS was actually good enough after all.â But even now, as of 2023, the dust hasnât settled, and weâre still figuring out collectively how to do styling7. But as a result, itâs the biggest factor (still) dividing frontend developers. Odd how CSSâone of the 3 pillars of frontendâis also one of its most controversial, most-often-neglected parts.
Summary: CSS underwent its most extreme metamorphosis the last 10 years, and itâs not finished yet.
Prediction: The next 10 years will see the (re) rise of vanilla CSS. And a whole new generation of haters. And probably another decade of failed experiments trying to replace it.
5 Its biggest criticisms were a) it required 100% manual human enforcement and was 0% automatable, b) required too much of a learning curve only to result in what was still a subjective solution (e.g. having pedantic
arguments over whether sub-âelementsâ are allowed or whether thatâs a new âblockâ), and c) it still assumed global CSS, which meant one accidental line of CSS could break the entire app. If you need further proof, watch Vjeuxâs 2014 talk introducing CSS-in-JS that covers these points.
6 No. The future of styling isnât Tailwind.
7 Itâs easy to point out âVue and Svelte had built-in styling solutions; why didnât React?â while forgetting the timeline. Vue didnât even have the .vue
syntax with <style>
tags until its
2.0 release in late 2016, after many new styling ideas had come about. And even then, support was limited, and buggy (I still think Vueâs decision to âleakâ the top-level element into parent styling in scoped styles is a mistake, but
thatâs another discussion). Svelte came later, and got to reap the benefit of years of failed experiments in React and Vue-land.
2018: TypeScript is good, actually
Angular never achieved the adoption of React8, but it did have just as big of an impact on JavaScriptâif not moresoâthrough TypeScript. In one of my favorite examples of reviving a concept that many felt was obsolete, introducing the old idea of static typing to JavaScript has been a boon for improved developer experience, and even won over longtime critics of JS.
There are lots of nuances and details of how TypeScript made all the right choices Iâll skip over (raising the bar on whatâs possible with inference, and generics, and the whole brilliance of statically typing a non-compiled language9). But the reality is that TypeScript is here to stay, and once you buy into TypeScript youâll never go back10 11.
Summary: TypeScript isnât what anyone asked for, but ended up being what we needed all along.
Prediction: next decadeâs forecast calls for TypeScript, TypeScript, and even more TypeScript.
8 I keep hearing Angular is going to have its heyday again, but Iâll believe it when I see it. May the odds be ever in its favor.
9 Runtime typechecking is for chumps. Static typechecking is where itâs at.
10 2 examples of notable projects switching off TypeScript Iâm sick of hearing of: Svelteâs âabandoningâ of TS (they actually
didnâtâthey still encourage user TS usage; they just stopped running the TS compiler on internal code as an implementation detail), and Railsâ Turbo removing TS (I donât care about Railsâand DHH for that matterâafter years of being out-of-touch with reality).
11 As the maintainer of a popular TS project, I may be biased.
2020: Design Tokens are⌠what, again?
I know Iâm bad at blogging when I havenât written a single post on design tokens. But if youâve had the displeasure of having to talk to me in any form, I havenât shut up about them for the last 3+ years.
If you have never heard the term before, UX Lord has a great 6 minute explainer thatâs the complete idea. In fact, most devs have been using âdesign tokensâ without realizing it. The intent of design tokens is essentially codifying where the source of truth lies between design and dev, and seeks to rapidly accelerate cycle time between the two.
Iâm stealing something my buddy Nate Moore said to me privately, on Tailwindâs popularity, thatâs too good to keep to myself:
My long-running hypothesis has been that people turn to [Tailwind] because it has an opinionated take on design token management. The other stuff is incidental. Funny enough, I think the Tailwind team thinks the situation is flipped and everyone really cares about utility classes.
There are even more popular things in dev-land because they solve design token-related problems people have, even if some devs donât know what design tokens are (and often the library creators donât realize it, either).
But the current disconnect with devs and design tokens is not only the immaturity of the concept itself, but there is almost no tooling that handles it12. So itâs not devs to blame for not understanding this conceptâthereâs no sense in explaining an abstract concept to a dev, only to tell them ânow the solution is 100% on you, and you wonât get any heavy lifting done by a popular library.â The burden is still on designers (and hybrid designer/devs) to advocate for this AND build sensible tooling to make it possible.
Summary: design tokens are great⌠once people actually hear about them.
Prediction: the design token renaissance is coming! Tooling, integrationsâthe works.
12 Style Dictionary is basically the only common design token tool that exists, but it has a brutal learning curve and still requires quite a bit of manual code to string together. The alternative is Cobalt, my little library, which almost no one uses yet.
Wrap-up and hot takes
The past 10 years weâve seen some of programmingâs biggest leaps and bounds, ever. The web platform feels very different to develop for today than it did 10 years ago. And though weâre still collectively recovering from whiplash, I think itâs in the best place itâs ever been. Sure, we have our work cut out for us. And weâre not even close to understanding what the next 10 years will bring. But given all that, I still think weâre heading in the right direction overall.
Still, in the sake of making this a worthwhile thought experiment, Iâll restate my previous predictions, take them even further, and throw a few new ones in the mix:
-
React will define the next 10 yearsEvery JS framework will become a JSX framework
If the trend continues with Reactâs adoption, itâs only a matter of time before the dissidents cave and consolidate on JSX. Iâll even go one step further and say any new framework that doesnât bet on JSX is making a mistake13. Note that Iâm saying âJSXâ and not âReactââReact may still fall by the wayside. But I think it will take a 1:1 migration path to replace it. -
The next 10 years will see the (re) rise of vanilla CSSA new library will make using vanilla CSS even easier
Sure, Vue and Svelte allow<style>
tags, but donât lift a finger in bridging the gap between markup and CSS. A new library could solve that, while taking advantage of all the new features like layers, container queries, and @property defs. Iâm imagining something like Matthew Phillipsâ Corset, but taken even further, with a simpler syntax. Iâd love to see more libraries âget weirdâ with the raw power CSS has like Corset did. And I think thereâs a ton of untapped potential here. -
TypeScript usage will increaseTypeScript will be added to ECMAScript
OKâmaybe not that exciting a take, given this has been officially proposed and is in Stage 1. But my spicy prediction is that this proposal will be revisited within the next 10 years and pushed forward. Either that, or the Rust-powered TypeScript typechecker project will become so mature and good we wonât care if typechecking becomes part of V8 or not. -
Design token tooling will improveDesign tokens will become an essential part of the frontend pipeline
Maybe this isnât as spicy of a take, either, given I maintain the only tooling for the W3C Design Token format and am actively working on expanding it (as well as helping contribute to the DTCG spec). But I think the gaps will continue to fill in, and weâll see a lot more deep integrations between Figma14 and code (all from third parties). - (new) Weâll see the rise and fall of an AI programming metalanguage. ICYMI, AI had a breakthrough in 2022â2023, and people wonât shut up about it. In one short year we saw nearly everyone and their grandma trying to cash in on an AI-powered-whatever15. We havenât seen the end of it yet, and I think weâll see someone try and make a hot new metalanguage that incorporates AI to write code for you. I think itâll get some traction, then quickly turn into a dumpsterfire as we hit the technical ceiling of the recent LLM breakthrough and realize it doesnât work for production code (and wonât for a very long time). And weâll return once more to our primitive, non-AI-powered toolchains (at least until the next AI revolution).
- (new) JPEGXL is the future. Chrome and Firefox will come around. Youâll seeâyouâll all see!
-
(new) Qwik will replace React.
This is mostly wishful thinking on my part, but I think if anything will replace React at this point, itâs Qwik. It checks off all the boxesâitâs insanely performant, does more out-of-the-box than React, has SSR built-in, and even reduces client JS just by using it (âfast by defaultâ). While there have been other React-like frameworks (Preact, SolidJS, etc.), none have solved SSR as well, nor provided monumentally-better payoffs, as Qwik has. I think the biggest threat to Qwik is the scale of the project. But if the maintainers keep developing it, the skyâs the limit.
13 In fact, back in 2021, when we were developing the concept of Astro, I like to think one of my main contributions (other than the styling engine) was strongly advocating for a familiar JSX-like syntax for the new
.astro
format in our internal discussions (I call this the âstrawberryâkiwi strategyâ taken from old branding
playbooksâintroduce a new thing paired with a familiar thing). Iâve seen the JSX-like syntax often cited as a key factor why itâs so easy to jump on board with Astro.
14 I name Figma specificallyânot âdesign programsâ in generalâbecause Figma is eating the design world right now.
15 Yes, I did work at an AI startup for 2022â2023. And yes, I am cynical about AI. Are those 2 things related, you ask? (yes)
What do you think the next 10 years will bring?