The Framework Paradox
Every year brings a new wave of frameworks, each promising to solve the problems of the last. React gives way to Vue, which yields to Svelte, which evolves into something new. And the cycle continues.
This isn’t a criticism of frameworks—they’re valuable tools that encode best practices and accelerate development. But there’s a paradox: the more we rely on frameworks, the more fragile our solutions become.
What Endures?
While frameworks change, fundamental principles remain constant:
-
Separation of Concerns: Whether you’re using React hooks or vanilla JavaScript, isolating business logic from presentation creates maintainable code.
-
Immutability and Pure Functions: These concepts predated modern frameworks and will outlive them.
-
Composition over Inheritance: This principle is as relevant in functional programming as it is in object-oriented design.
-
Performance Budgets: Fast code was important in 1995, and it’s critical in 2025.
Framework-Agnostic Engineering
At Emidium Science, we practice framework-agnostic engineering. This doesn’t mean avoiding frameworks—it means not being defined by them.
Our Approach:
1. Core Logic First
We build the heart of our systems in pure, testable functions that have zero framework dependencies. This business logic can be moved to any framework—or no framework—without modification.
// Framework-agnostic business logic
export function calculateOptimalDistribution(
resources: Resource[],
constraints: Constraint[]
): Distribution {
// Pure function logic
return optimizedDistribution;
}
2. Framework as Interface
Frameworks serve as the interface layer—the glue between our core logic and the outside world. Whether it’s React, Vue, or something that doesn’t exist yet, this layer should be thin and replaceable.
3. Standards Over Abstractions
We prefer web standards and platform APIs over framework-specific abstractions. Custom elements, Web Components, and modern JavaScript features provide stability that proprietary abstractions can’t match.
The Confidence of Principles
When you build on principles rather than frameworks, several things happen:
-
Migration Becomes Manageable: Moving to a new framework is a matter of rewiring the interface, not rewriting the logic.
-
Technical Debt Decreases: You’re not fighting deprecated APIs or forced upgrades.
-
Hiring Becomes Easier: You need engineers who understand principles, not just the latest framework du jour.
-
Longevity Increases: Your systems remain relevant and maintainable for years, not months.
Real-World Application
Consider a production system we built three years ago. While the frontend has migrated from React to Astro, and the backend has evolved from Express to Fastify, the core business logic remains unchanged—and still runs perfectly.
This wasn’t luck. It was intentional architecture:
- Business rules in pure TypeScript modules
- Data transformations as composable functions
- Side effects isolated at system boundaries
- Clear contracts between layers
The Balance
We’re not advocating for building everything from scratch. Modern frameworks provide immense value:
- Solved Problems: Routing, state management, and rendering are hard. Frameworks handle them well.
- Community and Ecosystem: Libraries, tooling, and knowledge-sharing accelerate development.
- Best Practices: Frameworks encode years of collective wisdom.
The key is using frameworks wisely—as tools that serve your architecture, not as the architecture itself.
Conclusion
Frameworks will continue to evolve. New paradigms will emerge. Technologies we can’t imagine today will become tomorrow’s standards.
But principles endure. By engineering with timeless principles at the foundation and treating frameworks as the changeable interface layer, we build systems that survive technological disruption.
The future is uncertain. But well-architected software, built on solid principles, will always find its place.
Interested in building systems that last? Let’s talk about your next project.