Hello, friend!
Today's an exciting day for me, professionally. I've just published my first-ever blog post on an industry publication!
The blog post is called “You Don’t Need A UI Framework”, and it's being published on Smashing Magazine.
The blog post is all about UI frameworks like Material UI and Bootstrap, tools that bundle up a bunch of styled UI components. When developers see these tools, we often think “Awesome! With these building blocks, I can slap together a professional-looking app with no design effort required!”. But, sadly, I think this is an unrealistic expectation.
I see these sorts of comments all the time. For example, this one, from two days ago on Hacker News:
Re: Graphic Design and UX - you can get pretty far by using a component library (Material, Semantic, etc)
If you've ever actually tried to use one of these tools to build a complete application, though, you've likely discovered that it's not quite so simple. And the end result probably isn't as professional-looking as you expected.
This isn't to throw shade at Material UI or any other component libraries. These tools do serve a purpose, and the folks who work on them are as heroic and awesome as every other OSS maintainer. I think we just expect wayyy too much out of these tools.
I dig into this idea, and share what I think is a better approach, in the article:
Check it out!
If you've been subscribed to this newsletter for a while, you might be wondering why this all sounds so familiar. I wrote a newsletter-only essay about this topic back in February 2021. Y'all had a lot to say about that email, and so this blog post incorporates much of the stuff I've learned from having those discussions!
I had originally planned on publishing this through my own blog, but when Smashing Mag reached out to see if I wanted to write for them, I just couldn't turn it down. I've been an avid Smashing Mag reader for years, and so it's a bit of a thrill to see my work under their red banner!
Whenever I write a blog post, I create a custom “OpenGraph” image. This is the image shown when sharing the post on platforms like Twitter. Because this blog post is being published on Smashing Mag, however, I won't be using the OG image I created for this post.
Just for fun, I thought I'd share it with y'all. Here it is!
My 3D mascot, with a raised eyebrow, saying “I have thoughts and I'm not afraid to share them!”
(It's probably good that I'm not actually using this social image 😅. It's even more ridiculous than most of them are.)
Over the years, I've created lots of these images. I design them in Figma, using the 3D mascot. Here's a quick slection of the more-recent posts:
The collection continues! Even more examples
It's definitely a bit more work to generate a brand-new image for every post, but I enjoy creating them too much to give it up!
That said, I do auto-generate images for the snippets on my blog, since I want to be able to churn them out with as little friction as possible.

Last week, I heard from a student in my CSS course who asked for a refund. They really enjoyed the course, but they were worried that CSS itself was about to become obsolete. They thought that no-code tools like Webflow would only get more powerful. Within 2-3 years, CSS would be generated entirely by these tools, no developers required.
I have thoughts about this too. And I'm not afraid to share them. 😄
First, you should know that this isn't a new sentiment. I've been hearing it since I started tinkering with web development, back in 2007!
It turns out, it goes back even further than that. Here's what Eric Meyer had to say:
Screenshot of a tweet: At a WWW Conference, I overheard one tech greybeard describe me to another as a “guy who wrote a pretty good book about a dead-end language.” The only book I’d written at that point was “CSS: The Definitive Guide”. It was early 2000.
Website builders aren't new. The first one I saw was Homestead. It came out in the late 90s. Webflow itself has been around for a decade!
So, why haven't these tools made front-end development redundant yet? What's the hold-up??
Let me tell you a quick story. A few years ago, I was working as a full-stack developer for a local startup. The startup needed dozens of "splash pages", landing pages that would collect contact information for a user. Initially, I was working on developing them, but the product team realized it was way more effective to have the designer use a no-code tool. Once the designer was comfortable with the tool, they worked much faster than I did, churning out these landing pages in lightning-fast time.
And yet, the company didn't fire me! I wasn't made redundant. It just freed up my time so I could focus on more complex work.
The splash pages I had been building were very, very simple. And no-code tools are very good at building simple pages. Honestly, I was glad to be able to hand off that work, and get back to more-interesting tasks.
It raises an interesting question, though: at some point, will no-code tools be used to build any front-end interface, no matter how complex?

The complexity-flexibility spectrum

The way I see it, there is an unavoidable tradeoff between complexity and flexibility. If you want a tool to be easy-to-use, it's not going to be very flexible. If you want a powerful tool that can solve thousands of different problems, it's not going to be simple.
There might someday be a no-code tool powerful enough to build a complex web application, but I imagine it would look a bit like an airplane cockpit, full of complex controls and dials and configurations. We tend to think that code is hard, and no-code is easy, but that's not actually set in stone. A sufficiently-complex no-code tool would require a sophisticated, technical professional to operate it.
I just don't see a way around it. If you want something powerful that isn't super generic, there's just a whole mountain of complexity that has to be dealt with somehow.
The hard part of writing CSS isn't learning how to type display: flex, it's understanding the complex rules and interactions in the Flexbox algorithm. You need to know this either way, if you want to build something intricate and custom. No-code tools might write your CSS for you, but they don't run it for you. Browsers still only understand CSS.
I think it's telling that website builders themselves aren't built using no-code tool. The team at Webflow decided to hire front-end developers to build their application, using React and writing CSS from scratch. They didn't try to use Webflow to build Webflow.
I actually think no-code tools will be much more disruptive on the back-end. Tools like Zapier can solve problems much more quickly than a back-end developer. And companies like Netlify and Vercel, by leveraging tools like AWS/GCP, are solving a bunch of hard DevOps problems.
To be clear, I don't think back-end development is on the verge of obsolescence. I think we'll all have plenty of work for many years to come. But I think we'll see a bigger impact on the back-end, since companies are more willing to accept generic solutions behind-the-scenes, where the users can't see how generic they are.
So yeah. I truly believe that CSS is one of the most future-proof skills you can learn.
A couple years ago, I decided to leave my job as a staff software engineer to pursue a new career in education. I thought about building a React course — I have a ton of experience teaching React, since I had been teaching at a React-focused coding bootcamp. And yet, I chose to focus my first course, CSS for JavaScript Developers, on CSS.
I picked CSS specifically because I believe it has longevity. I wanted to teach something that would still be valuable in 5 or 10 years. In a decade, we might all be writing UI components in Rust, or some other language that doesn't even exist yet… but I bet those components will still be styled in CSS. It's the only visual language the browser understands, aside from Canvas/WebGL, and I don't think that'll change anytime soon.

One more thing, before I wrap up!
In the last newsletter issue, I mentioned that I'm using MJML to compose my emails. So many of you replied, to let me know that you're interested in the subject! So I'll definitely be sharing my email flow in a future blog post. Stay tuned!
I also heard from a few people who encouraged me to keep the "View on web" link. Even if the email renders flawlessly, it can be useful to have a permanent online spot to find the email.
So, I'm happy to share, the “View on Web” link is back! You'll find it at the very bottom of this email.
Thanks for all the wonderful discussions 💖
-Josh
This email is an issue of Josh W Comeau's bi-weekly newsletter.
Subscribe to receive all future issues!