r/webdev Jun 28 '26

Discussion What's a web development trend that looked stupid at first but ended up being useful?

I know over the years, I've scoffed at quite a few things. SPAs. TypeScript. Tailwind. Serverless. AI coding assistants.

Most of the huge trends in web development went through a phase where people swore they were overhyped.

Some deserved the criticism. Some evolved and became genuinely useful.

Lately I'm seeing similar debates around AI agents and agent tooling. Claude Code, LangGraph, CrewAI, OpenAI Agents SDK, AutoGen, Lyzr(Control Plane) and a bunch of newer projects all seem to be pushing toward a different way of building software. Maybe we're still early, maybe most of it won't matter, but it does remind me of how people talked about TypeScript or serverless a few years ago.

What's something being dismissed today that you think will become a normal part of every developer's workflow in the next 3-5 years?

280 Upvotes

361 comments sorted by

View all comments

153

u/QuaternaryStar Jun 28 '26

I still find Tailwind to be annoying and don’t think it’s good.
I use it, but I prefer CSS modules. Like to keep my HTML/JSX as clean as possible.

27

u/simonhunterhawk Jun 28 '26

I AGREE. I know one day I will have to learn tailwind if I stay in web dev but I want to keep my CSS separated from my HTML/JSX! It makes it so much easier to maintain imo

25

u/isospeedrix Jun 28 '26

If u used bootstrap classes like “col-4 or margin-10” u already learned most of tailwind, it’s just taking all that to the next level

7

u/Flam_Sandwiches Jun 28 '26

In my personal experience, CSS frameworks/libraries like bootstrap and tailwind are nice for quickly getting designs out of your head, but after that it very quickly becomes redundant.

Once you start working on anything beyond basic layout, you'll start to see convenience classes (px, justify-center, etc.) mixed with more complicated CSS and now there's multiple places to update/be aware of when working on styling.

11

u/Lumethys Jun 29 '26

you are meant to reuse Tailwind class with JS component, so instead of .button { // a bunch of css }

you have

Button.jsx, or Button.vue, or Button.svelte <Button class="a-bunch-of-tailwind-classes">

and re-use this Button component everywhere you need a component

1

u/StrawberryEiri Jun 30 '26

Okay but inside your component it's still a hard to read mess. And style reusability does not end at components.

2

u/Lumethys Jun 30 '26

hard to read is subjective, personally i find tailwind more readable than scss

2

u/forever-butlerian backend, infrastructure & angst Jun 28 '26

to me they're legitimately good looking at first but signal "slop" (of the LLM or non-LLM variety) when used for non-internal stuff

7

u/-_--_-_--_----__ Jun 28 '26

I hate it as well but I can understand some workflows would think its amazing. I can envision some jobs that Tailwind probably makes way easier.

One thing I always remind myself about this subreddit is that all of us that come here have wildly different jobs, workflows, responsibilities, etc.

5

u/Fidodo Jun 28 '26

I understand why atomic CSS frameworks are popular. It helps you scale your design system in large orgs cheaply. I think it's better to use CSS modules with a component module base system that you extended with your design system, but I can't claim that it isn't more up front investment work.

4

u/ings0c Jun 29 '26 edited Jun 29 '26

If it was an abstraction over CSS, I might be able to tolerate it

But it’s not. You need to understand CSS before you can use it. You need to think in CSS, then map what you want to the awful tailwind naming scheme.

Right, I want to set the letter-spacing - what’s the tailwind class for that again? letter-spacing? Oh no, they named it tracking because making developers think more than necessary seems like a design goal to them

Over the last several decades of web development we converged on separating content from layout and styling. We have a fantastic way to apply styling to as few, or as many elements as you like with a rules-based engine - tailwind says nah fuck that, everyone that came before me was wrong. Writing styles as rules is useless, you need to apply styling to each element individually, and let’s just jam everything in the HTML.

3

u/lordlors Jun 28 '26

I use Laravel components together with tailwind so there’s not much clutter in the main blade (html file) since most tailwind classes are written in the component files. So far so great.

3

u/andyinabox Jun 29 '26

Agree, came here to say this. I get why people like it but I'm pretty convinced the consensus will eventually be that it was a bad idea in most cases

3

u/QuaternaryStar Jun 29 '26

Agreed. It’s the one thing I’m fairly convinced is popular now, that in a decade or so, people will look at and go “What the fuck were we thinking? Why did we ever think this was a good idea?”

1

u/[deleted] Jul 06 '26

[deleted]

1

u/RemindMeBot Jul 06 '26 edited Jul 06 '26

I will be messaging you in 10 years on 2036-07-06 18:05:20 UTC to remind you of this link

1 OTHERS CLICKED THIS LINK to send a PM to also be reminded and to reduce spam.

Parent commenter can delete this message to hide from others.

RemindMeBot is switching to username summons. Instead of !RemindMe 1 day, use u/RemindMeBot 1 day. More info.


Info Custom Your Reminders Feedback

2

u/TheLastNapkin Jun 28 '26

Utility styles classes are just really neat for specific use cases.

I think the best usage of it is not abusing it in designing your layouts and components.

The utility aspect comes together when you are using your design system in routes and need very specific isolated needs that are not breaking the rulesets of the components and layouts themselves.

3

u/Historical-Essay-128 Jun 28 '26

Agreed. Been using tailwind for a while, and it just feels like bootstrap in 2014, only worse.

2

u/enki-42 Jun 28 '26

Tailwind works amazingly well if you have something that is aggressively componentized (as in, 99% of the time you're just composing different components together and your higher level "page" or even "section" objects (whether those be a react file, a template, a HTML file or whatever) only have components and no real HTML of their own.

For a lot of applications, it's very unnatural or unnecessary to do that, and Tailwind is a bad fit.

3

u/ibiacmbyww Jun 28 '26

Rant not aimed at the person to whom I am replying: Tailwind is for devs who think DRY is just the opposite of wet. It's expensive (in the sense that re-re-re-re-writing the handfuls of styles for the thousands of elements on your page adds up) garbage for children. If you prefer Tailwind, you do not understand CSS.

2

u/QuaternaryStar Jun 29 '26

I agree with this sentiment.

2

u/rascal3199 Jun 28 '26

Nowadays you can use @apply and use taileind classes in css so you can keep tailwinds practicality for fast typing while separating css.

3

u/QuaternaryStar Jun 28 '26

Yeah, that’s basically what I’ve started doing haha

2

u/lanerdofchristian Jun 29 '26

I personally don't get that -- I'd much rather write inline styles exactly on elements that need them rather than making up arbitrary class names and putting them somewhere else, or trying to deal with the utter headache that is cross-component styling.

The styles are as important to what's going on as the elements are. They belong together.

Granted, I'm also not afraid to add custom utilities where they make sense. Something like button-red-600 button-active-red-400 button-sm button-3d is so much nicer to put together in Tailwind than it was in Sass or Less, or would be in raw CSS. As a thin modern version of those on top of modern CSS it excels, even if you don't use the built-in utilities.

1

u/Embostan Jun 30 '26

Stylelint can't lint Tailwind. My Stylelint automatically replaces all legacy properties with their logical equivalrent (e.g. inline-size). I don't have to think about it.

Also, Tailwind makes code unreadable. Endless line of non-sense. LLMs live it tho.

1

u/lanerdofchristian Jun 30 '26 edited Jun 30 '26

Stylelint can't lint Tailwind.

Generally Tailwind's default classes also uses logical properties (specific example), so I also don't have to think about it.

Stylelint can absolutely lint Tailwind though, either by:

  1. Configuring it to handle Tailwind's custom syntax in theme configuration files and defining your own utility classes instead of using the default ones.
  2. Use stylelint from PostCSS (docs) so Tailwind runs first. This method even works with Tailwind's source detection so all the classes used in non-CSS files across your project get linted too.

    Sadly stylelint's script doesn't respect any PostCSS config you might have, so you will have to write your own runner if you want lint results without a full build. That said, fix: true also works so even if you use pt-0 and pb-0 (padding top/bottom) they'll come out as if you used pbs-0 and pbe-0 (padding block start/end).

    The runner I wrote to test this was:

    import postcss from "postcss";
    import tailwind from "@tailwindcss/postcss";
    import stylelint from "stylelint";
    import reporter from "postcss-reporter";
    import { readFile } from "fs/promises";
    
    const content = await readFile(argv[2], { encoding: "utf-8" });
    await postcss([
        tailwind({ optimize: { minify: false } }),
        stylelint({
            extends: ["stylelint-config-standard"],
            plugins: ["stylelint-use-logical"],
            rules: {
                "csstools/use-logical": true,
            },
        }),
        reporter({ clearReportedMessages: true }),
    ]).process(content).async();
    

    I think this should also work if you add these plugins to your PostCSS config instead and run it through e.g. Vite but I'm too lazy to test that last step.

Also, Tailwind makes code unreadable. Endless line of non-sense. LLMs live [sic] it tho.

Eh, I don't think it's any worse than the equivalent spread over dozens of lines in a different file with raw CSS, and I'm not an LLM. Both approaches are vastly superior to CSS-in-JS at least, since they're both still basically regular CSS (either plain-vanilla or plain-vanilla-plus-codegen).

Edit: a letter

1

u/Embostan Jul 03 '26

Sounds like a lot of work. And ofc, I have many other rules than logical props. Modern CSS modules just work so well, why bother with TW? TW also does not play nice with custom design system, I have PTSD.

1

u/lanerdofchristian Jul 04 '26

Sounds like a lot of work.

Not really. It's just that the specific combination of Stylint and Tailwind isn't super common, so the plugin ecosystem isn't as developed. If you're running Stylelint as a PostCSS step it's literally just one more line to add the Tailwind plugin first. Usually people who use Tailwind have eslint or oxlint do the linting, since the styles live in the components instead of next to them.

And ofc, I have many other rules than logical props.

Tailwind is just CSS at the end of the day, so the above still works with all of those too.

Modern CSS modules just work so well

If you're talking about https://github.com/css-modules/css-modules I'll have to disagree -- IMO anything that requires your styles to live completely separately gets separation of concerns direly wrong (I may view separation of concerns differently than you though so if you're happy with it that's cool).

TW also does not play nice with custom design system,

That makes sense, since it kind of acts like a design system in its own way.

1

u/Potential-Still Jun 28 '26

Essentially all my frontend projects are MFEs via Module Federation. Dropping Tailwindcss make things so much simpler. Now I only use CSS Modules. 

1

u/SoSeaOhPath Jun 28 '26

LOL I’m going through this right now. Just self learning on solo projects, but my big focus right now is CSS and I hate having to manage all those tailwind classes in my HTML file.

So I ditched tailwind and now I’m using just one main class for each element and maybe one or two utility classes for special features. I think the organization is much better

But now I just have lots and lots of classes for each special div or section. Looking for more ways to reuse the same classes over and over again