DEV Community

Cover image for Why Frameworks are Bad
Hogne Titlestad
Hogne Titlestad

Posted on

Why Frameworks are Bad

For more than twenty years, I refined my professional skills by building applications, websites, and systems with JavaScript and a range of server-side scripting languages. Over this time, I watched frameworks rise from fleeting experiments to cornerstones of the development world, reshaping how we approach coding. In the early days, tools like Smarty templates appeared, designed to streamline PHP development by separating logic from presentation – a curious irony, given that PHP itself began as a tool for generating dynamic HTML layouts. Similarly, jQuery later burst onto the scene, simplifying JavaScript by offering reusable snippets and cross-browser consistency. It gained such traction that developers soon boasted "jQuery expertise" over foundational JavaScript proficiency, signaling a shift in priorities.

Initially, these frameworks felt like distant hums in my professional orbit – interesting but peripheral to my work. However, the tide soon turned. New developers arrived, each championing a framework with fervent enthusiasm, as if it were the definitive path forward. Before long, I found myself wading through framework-heavy codebases in collaborative projects, their presence weaving into the fabric of my daily work, whether I embraced them or not.

I never embraced frameworks myself. Instead, I found satisfaction in harnessing the raw, intrinsic power of the programming languages at my disposal. When a project demanded specific functionality, I sourced lightweight libraries, integrating them with precision to avoid the pitfalls of dependency bloat. This approach allowed me to maintain lean, independent projects that remained true to my vision of elegant, efficient code.

Framework enthusiasts often appear guided by a philosophy that diverges sharply from the core principles of programming craftsmanship. Rather than embracing the inherent flexibility and power of JavaScript, they seem fixated on a particular aesthetic – sleek, framework-driven designs that prioritize visual or structural trends over timeless functionality. This mindset leans heavily on conformity to industry fads and a desire for external validation, sidelining the clarity and creativity that come from directly wielding a programming language to solve problems. To them, JavaScript isn’t a versatile toolkit for building tailored solutions but a cumbersome hurdle to leap over, with frameworks serving as the vehicle to bypass its complexities entirely.

At its core, this approach suggests a subtle disdain for JavaScript itself – not as a language to master, but as an inconvenience to circumvent. Framework advocates often gravitate toward pre-packaged solutions that promise speed and alignment with fleeting industry standards, favoring prescribed methods over the deeper question of how best to address a problem. Their focus seems anchored in a time-bound belief about the “right” way to build software, shaped by the prevailing tools and conventions of the moment, rather than a universal pursuit of effective, enduring solutions. By adhering to a framework’s rigid templates and community-endorsed practices, they aim to meet deadlines and satisfy expectations while staying in step with their peers, even at the cost of stifling their own problem-solving instincts.

This reliance on frameworks reflects a broader tension in modern development: the allure of quick wins versus the discipline of foundational mastery. For these developers, frameworks aren’t just tools – they’re a worldview, one that often sacrifices adaptability for predictability. Yet, by outsourcing critical decisions to a framework’s ecosystem, they risk becoming disconnected from the very language that powers their work, trading long-term resilience for short-term convenience.

As time has passed, frameworks have begun to be heralded as the definitive way to work with JavaScript, eclipsing the language’s core strengths in the eyes of many. Job postings reflects this shift, increasingly seeking “React developers” or “Vue developers” rather than simply “JavaScript developers.” Curious about this trend, I explored frameworks like Vue and encountered something perplexing. These frameworks seemed to dismantle the harmony of JavaScript, CSS, and HTML, reshaping them into a convoluted blend of concepts that felt alien to their origins.

In Vue, JavaScript has been burdened with non-native abstractions, CSS has been infused with outdated paradigms already resolved by modern standards like CSS3 (such as variables and advanced styling). And HTML has been overloaded with scripting logic that belonged in a (shock and awe), scripting language. The result is a derivative, paradoxical structure that has left me questioning its purpose.

I remain skeptical of frameworks, and here's my reasoning.

It’s Not your tool – it’s a separate Path

When you set out to build a web application, you might seek a tool to accelerate development or simplify specific tasks. A framework, however, is not that tool. Rather than slotting seamlessly into your existing workflow, it demands a complete overhaul of your project’s architecture. Once you commit, you relinquish control, tethering your decisions to the framework’s ecosystem – its conventions, limitations, and the priorities of its developers. Your focus shifts from exploring JavaScript’s vast potential to navigating the framework’s predefined pathways, often at the expense of creative freedom.

That Path Can Shift Overnight

Frameworks are not static; they evolve, sometimes dramatically. When developers or their communities decide to pivot – whether to adopt new paradigms or phase out old ones – you’re left grappling with the consequences. Your once-stable project may require extensive refactoring to align with the framework’s latest direction, or, in the worst cases, a complete rebuild. This churn is a hallmark of framework-driven development. Had you rooted your work in core JavaScript, you’d be free to focus on innovating and delivering new features, unburdened by the need to overhaul your codebase to keep pace with someone else’s roadmap. When a framework’s evolution disrupts your work, it ceases to be an asset and becomes an obstacle.

Ultimately, my skepticism stems from a belief that frameworks often trade long-term clarity and autonomy for short-term convenience, leaving developers entangled in systems that prioritize trends over substance.

The Value of Scaffolding Isn’t Lost on Me

I’ve made no secret of my skepticism toward frameworks – my earlier points leave little doubt about that. Yet, I’m not blind to the potential advantages of using structured systems to support a project’s development. One concept that resonated with me early in my career was "graceful degradation," a principle that shaped how I think about building resilient, flexible code.

From Mozilla.org: "Graceful degradation is a design philosophy that centers around trying to build a modern website/application that will work in the newest browsers, but falls back to an experience that while not as good still delivers essential content and functionality in older browsers."

To me, graceful degradation suggests a mindset of adaptability – a way to layer enhancements onto a solid foundation without compromising its core integrity. In the context of development, this translates to using scaffolding: temporary or modular structures that bolster a project’s progress without becoming its backbone. Ideally, I should be able to add or remove these layers incrementally, introducing controlled complexity to accelerate milestones while keeping the underlying codebase lean and independent. This approach allows for pragmatic advancements – say, speeding up a feature’s delivery – while ensuring the project remains grounded in its original design.

However, the promise of scaffolding often gets lost in the reality of frameworks. Too frequently, their implementation feels less about supporting JavaScript and more about supplanting it. There’s an undercurrent of ambition – or perhaps ego – in the way some framework developers operate, as if their true goal isn’t to enhance the language but to redefine it entirely. Instead of offering tools to complement JavaScript’s strengths, they seem intent on crafting a new paradigm that overshadows it, obscuring the simplicity and power of the language itself. This overreach muddies the basic idea of scaffolding, turning what could be a helpful aid into a rigid, all-encompassing system that’s harder to escape than it is to adopt.

A Plea for Simplicity in a World of Complexity

Throughout my career, I’ve witnessed the creeping tide of scope bloat erode the elegance of software development. I’ve seen complexity pile up for its own sake – dependencies added carelessly, as if they were mere footnotes, transforming lean codebases into lumbering giants. These modern mammoths, weighed down by layers of unnecessary abstraction, struggle to achieve the nimble grace of a dragonfly, their bulk undermining both performance and maintainability.

Frameworks bear much of the blame for this shift. What were once lightweight, purpose-driven software packages have ballooned into unwieldy behemoths, demanding gigabytes of resources for minimal functionality. This isn’t just unmaintainable – it’s unsustainable, fostering a culture of excess that prioritizes expediency over excellence. Even operating systems, once models of efficiency, now groan under the weight of this complexity. With the rise of AI and advanced hardware, the trend seems poised to accelerate, masking inefficiency with raw computational power.

But I want to challenge that trajectory. I urge you to rediscover the power of simplicity – give vanilla JavaScript, CSS, and HTML5 a chance. These foundational technologies, when paired with a logical structure, provide everything you need to build robust, innovative solutions. Forget the allure of frameworks’ pre-packaged promises. Instead, turn to libraries and modules – discrete, purpose-built tools you can weave into your codebase to address specific needs without surrendering control. They empower you to enhance your work on your terms, preserving the integrity of your vision.

Picture a world unburdened by this complexity. Software could run smoothly on modest hardware, consuming far less energy while delivering blazing performance. The demands of today’s digital landscape could be met with efficiency and elegance, not waste. Yet, frameworks are only part of a broader issue: a pervasive tendency toward laziness, where convenience trumps care, and shortcuts breed inefficiency. We need a cultural shift – a movement of developers committed to pruning excess, championing clarity, and crafting tools and methods that prioritize simplicity without sacrificing capability.

This is my call to action: Strive to build your solutions on as thin – but strong – layers as possible. Be part of the movement of making computing elegant again – and not a constantly growing and finally swelling black hole.


If you like what you read here, you may want to join one of the groups I'm part of;

Top comments (0)