We've been going about this all wrong!

One of the things that link all these tools is that they all seek to tame complex CSS. Another thing that links them is that they all fail at that goal to one extent or another.

Ok, that's a little provocative. It's also not quite true. It's not that these tools have failed us. The real problem is that we have failed to understand CSS at a very basic level. As long as we continue to do that, no tool will really be able to fully meet our needs at scale.

How's that for provocative?

CSS is likely not what you think it is

When I first learned frontend development, I was taught that there were three primary concerns; structure, style and behavior. And those concerns had corresponding languages to address them, namely HTML, CSS and JavaScript respectively.

This was great! One did not need to develop an intuition about the boundaries of concerns. If a file had a particular extension, it necessarily dealt with a particular concern. No additional thought needed!

It makes sense! It made so much sense, no one thought to question it for a very long time. But new paradigms have a tendency to reveal the boundaries of our previous paradigms.

Then an age of componentization was ushered in with the initial work of a standardized WebComponents specification, and frameworks such as React. The entire industry followed suit.

The Angular team, famously already deep into a rewrite of their massively popular framework, pivoted mid-stream to be fundamentally component oriented.