1. Create a utility CSS system, use it, feels nice, publish an article around it why it might make sense and why it feels nice (which is probably a hindsight explanation)
2. People start using it, way more than ever expected.
3. Iterate on the product
That’s it. I’m pretty sure nothing about this was planned, the vendor-lockin wasn’t planned and just happened.
While your arguments about inconsistencies about semantic components in Catalyst vs semantic class names are right, it is highly likely your assumptions are missing a critical piece, because there are clearly many happy users.
If I had to summarize this I'd say don't fall victim to hype cycle and marketing. Make technical choices based on the problems.
I've worked on teams where CSS was a mysterious language with many gotchas. So I can see how Tailwind can help with this.
However, I wrote this article for the love of CSS, web standards, and the web in general. I think Tailwind's dishonest marketing tactics aren't doing good for the development community. Especially for young developers who are suddenly told that things like separation of concerns and good naming practises are a bad thing.
But in that instance, all of those css rules will still exist, but they’re stored in a separate css file and given a class name.
Having the reusability at the css class level means that someone else might break your component by updating the css.
With Tailwind, the reusability is at the component level. All the styles are self contained. No one can break your component accidentally.
He’s not saying “separation of concerns and good naming practices” are bad things, he’s saying that separation of concerns between HTML and CSS is mostly a false separation (it’s the same concern - making the UI look right) and that good naming practices are hard - best just do that in one place, the component that address the concern with both style and structure.
I think a lot of the complexity in CSS is accepted because of complexity in other parts of the stack. I've dug pretty deep into real-world use cases of many approaches to front end and ultimately, tailwind solves the #1 issue people encounter daily.
Fear Of Breaking Something Else Entirely
by never leaving the html tag for a secondary resource, confidence today is gained at the cost of future compound complexity.
as someone that specializes in design systems, tailwind breaks my heart because it it fairly reductive in expression. Truly white-labeling a product is not as simple as changing variables, it is more like a zen garden of css.
You seem to deliberately not present tailwinds strongest arguments. For example, you claim their is no next step to abstraction, but literally in the paragraphs before the ones you quoted they say to build reusable html+css components instead of trying to make css only abstractions. Which very clearly responds to your argument and complaint.
There are other places in your writing like this.
It's fine to think and claim they are wrong. But it would be a lot more persuasive if you take them at their best and knock them down, instead of being selective.
Overall take their absolute best case scenarios and reasons and show why you are still right.