Tailwind CSS in practice: why I still reach for it
I have been using Tailwind CSS across multiple projects for a few years now. This site is built with it. Landbound uses it. Every new project I start, I reach for it without much deliberation. Here is why, and where I think the criticisms are valid.
The speed argument is real
The biggest advantage is how fast you can build UIs. You stay in your component file, add utility classes, and the design takes shape in real time. There is no context switching between HTML and a separate CSS file, no naming things, no hunting for where a style is defined.
For someone who cares about building the product more than crafting artisanal CSS, this tradeoff is worth it.
Consistency without effort
Tailwind's spacing scale, color palette, and responsive breakpoints give you a design system for free. Using p-4 and p-6 instead of arbitrary pixel values means your spacing is consistent across the entire app without thinking about it. The design system is baked into the utility classes.
Where it gets messy
Long class strings are genuinely hard to read. A div with 15 utility classes is not pleasant to look at. I deal with this by extracting components aggressively. If a class string is getting long, that is usually a sign the element should be its own component.
The other criticism I hear is that it couples your styles to your markup. That is true, and I think it is fine. In a component-based architecture, the markup and styles for a component change together anyway. Separating them into different files just means you have to update two places instead of one.
Tailwind v4 improvements
Tailwind v4 simplified the setup significantly. No more tailwind.config.js for basic usage. The @theme directive in CSS handles custom tokens. The new CSS-first configuration feels cleaner and more natural than the JavaScript config file.
When I would not use it
For content-heavy sites where you do not control the HTML (like a CMS rendering markdown), Tailwind's utility approach does not fit well. You would end up writing a prose style override anyway. The @tailwindcss/typography plugin helps, but it is essentially traditional CSS with extra steps.
For tiny projects where you are writing 50 lines of CSS total, Tailwind is overkill. Just write the CSS.
The bottom line
Tailwind is a productivity multiplier for component-based web applications. It is not the best tool for every situation, but for the kind of work I do, it has earned its place in the stack.
Sources
Related posts
Why I built Omnibase: a universal database MCP server
I got tired of copy-pasting query results between DataGrip and AI agents. So I built an MCP server that gives AI agents secure, direct access to any database.
Delta libraries: how diffing works and which library to use
What delta libraries do, how diff algorithms work under the hood, and a practical comparison of the most popular options in the JavaScript ecosystem.
Offline-first apps: harder than it sounds
Building apps that work without internet is one of those things that seems straightforward until you actually try it. Here is what makes it hard and how to approach it.
Enjoying the blog? Subscribe via RSS to get new posts in your reader.
Subscribe via RSS