For a long time, I thought UI libraries were the solution to messy frontends.
They weren’t.
What actually fixed my projects was better components.
The problem with heavy UI libraries
UI libraries feel great at the start:
Fast setup
Good-looking defaults
Lots of components
But as projects grow, cracks appear:
Overriding styles becomes painful
Components don’t fit real product needs
Updates break custom logic
Bundle size keeps growing
You spend more time fighting the library than shipping features.
What “better components” actually mean
Better components are:
Copy-paste friendly
Dependency-light
Predictable
Easy to modify
They don’t try to be universal.
They solve your product’s problems.
This is why approaches like Tailwind + component-first design scale so well.
My current approach
Instead of importing everything, I:
Build small, reusable components
Keep logic close to UI
Avoid unnecessary abstractions
Optimize for clarity over cleverness
Frameworks change.
Good components survive.
When UI libraries DO make sense
I’m not anti-library.
UI libraries work well for:
Internal tools
MVPs
Prototypes
Solo projects with short timelines
But for long-term products, component ownership matters.
Final thought
If your UI feels messy, it’s rarely a CSS problem.
It’s usually a component design problem.
Build fewer abstractions.
Build better components.
Top comments (0)