Framework Fatigue: The Real Reason Developers Get Angry About New Tech
blog.raed.dev
blog.raed.dev
1. New Thing gets traction, 2. New Thing gets hailed as Next New Thing, 3. Everyone jumps on board and New Thing is The Only Thing you should be using, 4. New Thing Fatigue sets in as various things about New Thing aren't so great after all, 5. Everyone moves on to Next New Thing because maybe that really is the Next New Thing.
Rinse and repeat.
For those who have been in the game for as long as me (I'm not a proper dev but 30 years "doing web stuff" makes me an interested onlooker), it's a fairly tedious cycle to watch come and go over many iterations. It's one of the reasons I try and stick with boring old PHP + HTML + CSS + a sprinkling of JS for the stuff I do.
YMMV but the point is, it's everso tedious and unsettling to those involved trying to figure out what the next thing to focus on should be.
> YMMV but the point is, it's everso tedious and unsettling to those involved trying to figure out what the next thing to focus on should be.
I think it would all be fine, if people could just accept they're are part of this turning wheel, but instead they'll kick and shout that "No, but it's different this time, this time we really found the silver bullet" while you continue to look at them changing from HypedThing to HypedThing, repeating the marketing pitch while running into new walls.
I'll get jumped but whatever: Currently this is happening with for example TypeScript, where some people are so into it, they don't see it as just another "Compile to JS" language that will eventually be replaced by something else once the hype wheel starts turning yet again.
In case of TypeScript, they might be right - given its peculiar positioning and staying power, as well as indirect effects from resurgence of popularity around type systems (Rust, type annotations being leveraged in LLMs, etc.), it wouldn't surprise me if at some point, browsers (read: Google) decided to start supporting it as first-class language. A decade down the line, it might be that JavaScript will end up being compiled down to TypeScript instead of the other way around.
If WASM still exists in some flavor at that point, but TypeScript ends up being the target for JS instead somehow, we can assume we probably have other, way worse issues in the world to deal with, because something clearly went wrong.
Every framework starts from scratch pretending all done before belongs to the trash can, much like that multi-year discussion re: Raku being better than Perl just because has "say" instead of "print". The net outcome of that? the complete irrelevance of both.
Dear nerd-framework author, can you all invest 5 minutes in a cross compiler/converter, strive for compatibility and not reinventing the wheel when native JS performs the very same thing?
I do not care at. All about how shiny and whizzbang your new toy is, mine works fine, it solves my problems, and requires no improvements for my use requirements. I'm not investing a sizable fraction of my limited life to rewrite in the hip new framework du jour. I'll keep the code that works and the tools that aren't broken.
I also deeply do not want to be associated with the cargo cult ya-yas that think they're so clever and smart for suggesting rust. Thoroughly disgusting behavior. I don't want to use a language where I get that kind of response to simple questions.
C is fine. It will keep working for a very, very long time.
> After years of observing these cycles, I think it comes down to one word: employability.
> Developers want to keep getting paid for what they already know and use. We worry that today’s optional technology will become tomorrow’s job requirement.
However, that's not the real reason for the "fatique" or anger from the seasoned developers. The anger stems from the fact that we've seen all of this so many times before and it seems we're unnecessarily burning cycles on something that is spinned as "innovation", but pragmatically is a distraction.
This anger is further fueled by junior developers jumping directly on the new frameworks and disregarding the "old tech" as some sort of legacy.
At the same time all the implementation details fly under the radar, and the mountain of dependencies keeps increasing in size.
If it didn't work with the previous one, do we really think it will work with the next one that wants even less money? Hint: The workers are the same since the winning bid cannot be won by a single taxi company. There will be a big company that has no drivers and they in turn will hire all the local taxi companies to do the actual work. They will do the same mistakes of setting the incentives wrong and we will end up with non function disabled people transport. Again. It's not even the first circle coming round. It just keeps happening.
Our brain don't like to break accumulated "knowledge" to replace it. Especially if it's just to recreate a different mess without a global improvement in insight. And if this occurs too often.. it feels as breaking your leg every time your bones heals..
I don't get angry when I read a new topic, even if complicated, it's a motivating pleasure even.. but trying to reverse yet another vaguely specified build system .. not so much.
I don't do much frontend work these days, and when I need something, vanilla JS and CSS serve me just fine. Yet, I get angry or saddened by new things in web space all the time, and yes, sometimes even "offended to the bone that this new generation of developers is just running in circles" - that's because even if I don't work with frontend myself, I will be on the receiving end of all the bloated webshit garbage. Will be, and am - like everyone, I already am drowning in kaka felota.
Take SPAs: yes, they have a place, and frameworks can be used correctly and efficiently. But they mostly aren't, and instead, almost every single website I use - news sites, bank sites, online stores, e-mail services, blogs - they are all now steaming pile of half-broken garbage. Shmaybe they look cuter, and are easier to use with fat fingers on a tiny phone, but they're also less functional than generation before, and take longer to do anything. We've been through couple iterations of SPA-fication, and each one made things worse.
No, the true reason I get angry about new tech, is that new tech is shit, and I'm going to be force-fed that shit, because everything is going digital, everything is being written by juniors, and the market at this stage is structurally unable to make things better, or take feedback. So each time I see a new turd get a spike in popularity, I know that one year for now, I will be suffering at the receiving end of it.
Yes.
Or put another way: new shitty frameworks let teams of average competence to handle more challenging tasks, raising the complexity cut-off above which the shit pile collapses on itself and the product never gets published. This is not a good thing, because in practice, this means more garbage software being produced, and competing against older software that - by definition - had to be not shit just to see the light of day. Thing is, more and cheaper garbage always wins on the market because it's cheaper to make (= more money on polishing the turd and marketing the heck out of it). Overall result: instead of fewer good offerings, we have a glut of garbage ones.
It always puzzled me that we haven’t collectively invented some ways to skip all this “complexity” like e.g. ERP/CRM/CMS platforms do. Instead every team figuratively rewrites their whole stack from scratch in assembly. Even google sheets can publish a document and make it dynamically work faster and easier than any real-world webapp. I get your ideas, but we all are missing something here.
Consider, we've pretty much solved the problem of quickly creating good GUIs for software with RAD tools in the 1990s/2000s. But that was on the desktop. Then the web happened, and then mobile happened, and we couldn't port RAD tools to them because the web platform, having been created with documents in mind, was fundamentally incompatible with ideas behind GUI. We've collectively spent the last 20 years simultaneously trying to paper over this incompatibility, while slowly pushing the underlying platform to be more app-friendly.
Today, the platform is still torn between the document and app paradigm, and we've managed to begin replicating the most basic features of RAD tools of yore, but all on top of a mile-high heap of bloat. But the Earth didn't stop in its tracks for those 20 years - the world underwent the digital transition in that period, businesses had to make do with whatever tools were available, no matter how shitty, and thus we've been experiencing a high-paced churn, with services being constantly upgraded as old hacks stopped working, and new ones promised (often falsely) to be less shitty than those before.
Maybe it'll all settle one day. The web will slow its evolution, and people will have time to clean up all the mess, and then we'll finally dig ourselves out of this big regression in software quality, capabilities, and production time, relative to the RAD times. But until then, we suffer. Transitional periods suck.
Every ORM or new database adjacent thingy has to invent a new WhateverQL. Kinda sorta like SQL but not the same (and usually less powerful) so you have to learn its syntax if you want to use it.
And same thing with structured document and each type having their own pathing syntax: xmlpath, jsonpath, css selectors. I was going to write at least yaml is using jsonpath but it got me to this other Thing-du-jour: config file formats.
It is possible that many people avoid thinking explicitly about these trade-offs then they are upset. But if you worked in the field more than 6 years you should have seen the pattern.
I worked with people that preferred 10 years old, stable technology and they did not have surprises. There were some downsides, but I think these types of companies are there.
I've never been hired for a framework, nor have I ever hired for a framework.
So. Je m'oppose the employability claim.
However, I do get annoyed when everything is gotta be in <X> lang or we're using <Y> tech that is designed for a different use-case, because someone read a few too many whitepapers or blog posts and has chosen a technology because it's new and shiny and hypey, with minimal thought as to whether or not it's actually useful for your given situation.
Before anyone asks I’m not advocating for React here, and also far from being new to this game. Btw, do you count Vue as old or new? Which version? Is 3 “established”? Would you hire a Rails guy for Zend?
Scary as it sounds, this happens more than most people realize because it stems from directed marketing in structures where financiers are making the decisions and the engineers are just expected to adapt. I don't know about the developer arena, but in industrial automation (my field) new tech and software gets pushed frequently based on whether or not a bean counter said it would improve efficiency, not because it was tested in that specific environment. It's a constant headache for integrators. The number of times I have had to sit and listen to a room full of salesmen explain to me why we're suddenly using Y when X was working just fine is ridiculous. They see in dollars, and to them, testing the new software or component in the working environment prior to making the call is a waste of dollars when weighed against how many dollars they will save with expedited implementation.
It's maddening, and probably the prime factor that makes my job unpleasant.
The "adopting a tech with minimal thought" bit was about high level decision making.
I have no particular thoughts on Vue's newness or oldness because front-end JS is a frantic treadmill that I'm glad to not be involved in.
As for "would I hire a Rails guy for Zend?"
As I said, unless I'm desperately patching holes in a sinking boat, where I need you to jump right in and man the bilges with your indepth $framework knowledge, I hire first and foremost for a proven ability and willingness to learn and an attitude that makes you a good team fit.
You could be Rasmus Lerdorf and I'd reject you if you weren't interested in learning new things, and I'd reject you if you were an asshat, even if you're the best Zend developer ever, because if you're an asshat, you're going to lower the productivity of my team.
So would I hire a "Rails guy" for Zend? Yes. It's not like a Ruby framework is so massively different to a PHP framework that you need 10 years of Zend to make the transition.
But then, I'm biased,I self-taught in Python, focused on Django 1.0, got hired by a Java shop, started in Tapestry, then Wicket, then focused on backend, then went to RH to work on an K8s operator built on Vert.x, then ended up working at a Python shop 15 years after my previous in-depth usage of Python, working on a Django 4.0 app, and then FastAPI apps, even though I'm not a "FastAPI guy" nor a "Django guy".
Funnily enough though, I am a "Kafka guy", but now so are a bunch of my colleagues because I focus on sharing the knowledge.
To be clear, I wasn't hired to be a Django guru, or a FastAPI one, I was hired to implement code that satisfies business needs, in a manner that involves Django or FastAPI.
And yep, I've learned a shit ton about modern Django, but I've been productive since day 1. Because I enjoy learning and want to learn.
So yeah, I'm totally hiring that Rails person for Zend work if they've got the right mindset and the right fit.
edit: typos
Once you became a master it's not like things stood still, you were constantly refining your techniques and innovating; but something I've noticed about master craftsmen is that they are extremely conservative in their tools.
Even if they know that theoretically a new tool would allow them to do something with greater ease, they have already put in the time to learn to do that thing with the tooling they have, and they understand that, if they are ever considering adopting a new tool, the tradeoff has to be immensely in its favour.
Often they will adapt the tools they've already spent perhaps decades using, rather than a completely foreign tool. They build a deep mental and physical model of how these things work, and it allows them both a social prestige in demonstrating their ability to do something that others can't with the same tools, and clarity of purpose to not spend their time constantly overwriting their prior knowledge.
You can see this in programming with, for instance, really serious C programmers, who've had decades to internalise the craft and to this day can do anything they need to with C89, or particularly C99.
I think that humans have an inherent need to acquire this feeling of mastery over a domain. Consciously or not, I think webdevelopers have their morale sapped by the constant demand that they relearn how to do the most basic parts of their craft with entirely new tools every few years. Because of this cycle, they are robbed of both the inherent fulfillment of truly learning a craft, and the social prestige that comes with it. That's why it's so irksome to have the newly minted college graduate pushing these new shiny things constantly, it undermines the opportunity to experience gaining true mastery of the domain, both in terms of having to constantly relearn new skills, and in destroying any social prestige which comes with what little deep knowledge of "legacy" systems the developer has accumulated through practicing their craft.
This situation runs totally counter to the human spirit in my estimation.
It happens way too often that even the "latest" version of the documentation (assuming it exists) contains code that outright does not compile, does not work or yields deprecation warnings. I get the motto is "move fast and break things", okay, but at least don't make me curse at you while trying to get started on your project.
Also, when you introduce breaking changes or deprecate something, please give a healthy amount of "common patterns of X gotta be done like Y now", and a decent changelog. Don't make version upgrades even more painful than they already are, or at least try to provide shims.
Jokes aside, the real value is in the fundamentals. Frameworks (or even simple languages like Go) can be learned to use efficiently in a matter of days. Good fundamentals make this process smoother.
Many companies who use React will not consider your CV. React is as fundamental as JavaScript itself so omitting it in a CV is red flag. And learning modern React ecosystem from the scratch is no easy undertaking even for experienced developer.
Considering future employability when choosing a tech stack is definitely a valid concern and it should be clear for everyone involved. Using unconventional technologies makes it harder to hire people, because many developers will afraid to hurt their CVs.
> And learning modern React ecosystem from the scratch is no easy undertaking even for experienced developer.
feels like a pretty strong statement to me.
I've seen a few snippets here and there of various JS frameworks over the years and they could be summed up as "reactive programming for browsers" - which doesn't seem particularly groundbreaking.
So I assume that I just don't know where the difficulty comes from. My question is then: where is the nonobvious complexity of learning React?
Ofcourse you can pick up another stack much easier if you already know another. But that is not interesting if all you do is compare number of matches on the CV.
Strong disagree on this. Modern Angular and Vue work almost identically to React. The details are different, but the principles the same. For an experienced dev, that knowledge should translate directly.
The ecosystem is also not that bit. React Router and some state management tools are the only React-specific libraries one really needs. The rest you can lookup.
The trickiest tooling in the JavaScript ecosystem has always been the build tooling, and that's largely shared across frameworks.
I don't see a scenario where this is likely, other than if you're contributing directly to the react codebase.
Wow, that's very delusional. React is very popular but can't be compared to JS. JS is THE scripting language of the web with backwards compatibility going back to 3 decades ago. You NEED JS if you want interactivity in your website. React is nowhere near there. React won't disappear but it is likely that at some point it will become the new jQuery (present in many websites, used sometimes and regularly maintained) and people will use simpler tech like svelte
As such, new frameworks keep coming out as people decide to build something small and focused, and that keeps growing and becomes a framework.
It is bound to continue, as it should.
One should neither get too excited nor too upset, but some of those announcements will sound funny to anyone who's been around for a while (in general it is mostly rehashing all the same ideas from 70s onward).
In Python projects I also find people use the output of pip freeze to generate their requirements.txt so it contains indirect dependencies and these never get removed. I just removed numpy from the requirements.txt of a web app - if was a dependency of an obsolete dependency.
> One should neither get too excited nor too upset, but some of those announcements will sound funny to anyone who's been around for a while (in general it is mostly rehashing all the same ideas from 70s onward).
its also frustrating and annoying. People really should learn something of the history of their field. Do people have no curiosity?
These days, I would actually complain about the opposite problem that there are not enough new frameworks, given that most current popular frameworks are pretty bad and are literally outdated by 8+ years.
Unfortunately, the tech industry is quite crony now so only frameworks that are built by ex-Google or ex-Facebook engineers have any chance of mainstream adoption... All the others have been gas-lit out of existence... Also, these ex-FAANG engineers who actually have a shot at getting any serious eyeballs are too busy living their best life to be toiling away coding open source frameworks. Many of them never cared much for coding anyway.
Our socioeconomic system is such that the people who hoard ALL the opportunities couldn't be bothered to seize a fraction of them... And those who have all the motivation in the world to build something meaningful have literally zero opportunities to do so.
So someone sets out to "fix" some aspect of this, discovers that their new design was incomplete, and then all of this weirdness seeps back in to "fix" the problems that arise, and then the cycle starts over.
I had hoped that WASM would provide an opportunity to invite more disciplined designers to accomplish something in the browser, but that never happened. I've often wondered why. I've tried to make use of WASM on the server side, but I have to admit that it is limited and clumsy and leads to heaps of unpleasant and risky code.
I suspect the reason it hasn’t become commonplace to build web UIs with it is because your average frontend dev isn’t too familiar with those languages or their UI libraries nor writing a browser compatible rendering backend for them.
If I need to pass strings, structs, bytes etc I have to allocate memory inside the WASM instance, serialize the data into this memory, pass the memory offset as a parameter to the function that should operate on it, deserialize the data and then clean up the mess. This is awkward, error prone and risky.
Yes, I do use WASM from a high level language that has automatic memory management. That's why this old fashioned messing about manually with memory allocation and doing pointer arithmetic seems like such a huge step back.
Yes, there are people that make plugin frameworks. And yes, one of the things they have to do is to hold their nose and just accept that this is the ugly reality of using WASM. It doesn't mean that this isn't a terrible design flaw. It is.
1. Those who start and end with employability
2. Those who build products
There is sometimes some overlap, like people who use react native or can’t go deeper than react or jquery to build things and yet still build original polished products. The overlap though is generally shallow and certainly isn’t universal because when shipping a product there are things that matter more than aesthetics.
For people who build products new frameworks and code style is an often irrelevant aside. It’s all about what to write and not how to write it. How to write the code almost never seems to come up until measuring for performance or security.
For the people only interested in employability, regardless of candidate versus management, these framework discussions are critical. Things tend to focus on basic literacy.
Most frameworks exist on the right side, a more abstract and less detail-oriented way of accomplishing task X in environment Y, but as a layer above the details it's really just one person or a group of people's opinion on one specific way to do that, doesn't necessarily reflect the inner workings, and is largely an arbitrary choice about how to structure something (this is all by design, that's why these tools are made).
New frameworks come along with supposed new ideas, but they rarely change the nature of the details (in fact as a layer above they usually cannot), hence the "Seen it all before" feeling. Maybe you've not seen the new structure before, but you likely already know how it works underneath, and likely have seen tens of other people's opinions on how to name X, structure Y, and organise Z.
Getting angry about New Tech is rarely getting angry about New Tech, it's just being tired of "New" tech that sits at the same layer, solves the same 'problems' but with different words but is seen as a serious revolution. Not that new approaches and ideas aren't beneficial, and sometimes they do catch the wind and become almost a standard. But they're still just layers above the details below.
Of course the "How things work" side is also really a result of human decision-making, so down to something like the speed of light it's all just human decisions about how to structure something, but the lower level you get the more permanent the knowledge is. It doesn't change week to week on a whim, it's likely not a short-term trend but a slow and (hopefully) considered evolution of thinking.
Can it be coincidence that the word "revolution" means both a fast, radical social change but also for celestial bodies a complete cycle that brings you back to the same place you started?
And what's really important - when you talk about the induced risks many teams have no clue about them...
Then again I didn't even know people got mad at new tech. Why would a new JS framework make me upset? It's like getting mad at your friend for making a chess engine when stockfish exists, who cares enough about it?
Making a chess engine (or anything!) when others exist when the goal is wanting to get into learning how chess engines work is very different to making one with the explicit intention of releasing it into the public domain as a tool/dependency that is used by thousands or millions, needs constant updates and support, works differently than the others while accomplishing the same underlying goals, looks mostly similar but also different enough to be annoying, and is arguably just a different opinion (not necessarily worse or better) on how to structure a project at roughly the same level of abstraction.
Frameworks also are not just tools in the sense that you use them to accomplish a task N times, they end up as a foundational layer in a project, with the benefits and costs of that.
I don't switch platforms on a whim, because I like to deliver value to my users and tackling problems that actually matter.
If I'm constantly switching to a "better" platform, that's all I'm doing. And in the process I'm wasting time learning the new platforms and getting marginal returns, most of the time. Smart bosses will see right through that, sooner or later, and there goes your employability in your current job.
If, on the other hand, you're inteersted in job hopping every time you learn a new platform, all the power to you. Just make damn sure you don't jump on the wrong bandwagon.
JS also had some things missing that led to many of the frameworks being created in the first place. There was no native package manager or even standardized module imports. Imports had to be handled as HTML globals. Awful for dependency management. At any rate that's partly why we saw the original AngularJS get so popular or tools like Bower, Grunt, Backbone, Handlebars, etc get built and popular before churning out for more end-to-end solutions like Next.js.
JQuery continues to be a reliable library for <1K line web sites. Beyond that complexity, JQuery continues to be a spaghetti code nightmare. It's not wrong to write a SPA. I worked on Trello for years and it was and is a fantastic SPA that produced value to millions of users. But you'll hear no end to grumpy curmudgeons that think SPAs should not exist. Just take everything you hear on HN with a grain of salt.
I remain a React fan after using it for 10 years, but I think it's great when another tool gets a fanbase too that takes a different philosophical approach like HTMX or Solid.
The thing that changed for me is probably to stop blaming my tools and learn to apply things I learn from other places to my current work and tools. That's a lot of space in itself.
I do still keep tabs on things that I don't use but curious about, like GPU advancements and prices even though I don't work in the field or do any serious gaming. Similarly for front-end frameworks--I dabble with them for hobby projects but isn't my day job. Back-end to me seems less sensitive to frameworks, if you get the database schema and SQL right along with some reasonably plain/sane code/dataflow it's probably alright.
I sometimes find myself wishing I needed to use hot new thing, but I can't justify it. e.g. Rust is cool but do I really need that? My day job uses Ruby which is so much slower than other gc languages--wish I had proper static typing though. My bar of acceptability is much lower for tools and raised for how I use them.