<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sylwia Laskowska</title>
    <description>The latest articles on DEV Community by Sylwia Laskowska (@sylwia-lask).</description>
    <link>https://dev.to/sylwia-lask</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3535771%2Fe22860d5-274b-43c9-819b-56b162e5bd5a.jpeg</url>
      <title>DEV Community: Sylwia Laskowska</title>
      <link>https://dev.to/sylwia-lask</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sylwia-lask"/>
    <language>en</language>
    <item>
      <title>How Are Developers Actually Using AI At Work?</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Wed, 27 May 2026 07:11:18 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/how-are-developers-actually-using-ai-at-work-4g9c</link>
      <guid>https://dev.to/sylwia-lask/how-are-developers-actually-using-ai-at-work-4g9c</guid>
      <description>&lt;p&gt;JSNation is coming soon, and besides my talk (I’ll drop the link in the comments so I don’t spam you with it for the tenth time 😅), there are also discussion rooms. And somehow, I got invited to two of them.&lt;/p&gt;

&lt;p&gt;Now, a normal person would probably stop for a second and think: “Do I even have time for this?”, “Is it worth it?”, “Should I maybe not overcommit myself for once?”. Meanwhile, in classic Sylwia fashion, I replied almost instantly: “Oh, that sounds amazing! Sure, sign me up for everything!” 😎&lt;/p&gt;

&lt;p&gt;And that’s how I ended up in a discussion room called “The New Senior Engineer: Builder, Reviewer or Orchestrator?”.&lt;/p&gt;

&lt;p&gt;Now, my career advisor, ChatGPT, always tells me: “Sylwia, please get your life together. And if you insist on doing ten things at once, at least reuse the content.” 😅 So instead of coming up with all the conclusions myself, I thought: why not ask the DEV community?&lt;/p&gt;

&lt;p&gt;But before I ask the big question — what should a Senior Engineer become in the AI era — I think there’s another, more interesting one first: how are you &lt;em&gt;actually&lt;/em&gt; using AI at work?&lt;/p&gt;

&lt;p&gt;Not in conference demos. Not in viral Twitter threads. Not in “my AI agent rewrote Kubernetes during lunch” stories. I mean real work. Real projects. Real teams.&lt;/p&gt;

&lt;p&gt;Of course, feel free to jump straight into the comments (you know I love talking with you all ❤️), but first, a few observations from my side.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Above Everything
&lt;/h2&gt;

&lt;p&gt;At least that’s the image the internet gives us. Conference titles. Newsletter headlines. LinkedIn prophets.&lt;/p&gt;

&lt;p&gt;Matteo Collina opens a 100k-line PR for Node.js and people panic. &lt;/p&gt;

&lt;p&gt;Someone rewrites an entire React application to Svelte in two weeks. Hundreds of thousands of files. &lt;/p&gt;

&lt;p&gt;The creator of Bun rewrites it from Zig to Rust in one evening, while casually mentioning he also went on a date that night. (Am I the only one getting weird associations here? 😅)&lt;/p&gt;

&lt;p&gt;Armies of agents replacing development teams. Agents opening PRs for other agents to review. Everything automated. And somewhere in the middle of all this, the Senior Engineer becomes some kind of AI shepherd, occasionally checking whether the robots are heading straight into a cliff.&lt;/p&gt;

&lt;p&gt;Honestly, it’s both fascinating and mildly terrifying. Sometimes it makes you wonder whether we should all reconsider our career choices and maybe sign up for hairdressing school before the robots learn that too 😅&lt;/p&gt;

&lt;p&gt;But then I stop for a second and think: I actually work in this industry. I know a lot of developers. And real life often looks… very different.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Excitement to Cost Optimization
&lt;/h2&gt;

&lt;p&gt;A friend of mine works at a huge tech corporation. One of those companies you definitely know — and probably either love or hate 😄&lt;/p&gt;

&lt;p&gt;Of course they started using AI tools very early, including Copilot. But things really escalated once they got proper coding agents — I think Claude Code.&lt;/p&gt;

&lt;p&gt;At first, the company was completely mesmerized. They bought the most expensive plans possible and encouraged people to use AI aggressively. If someone hit token limits, management basically said: “Don’t worry, we’ll buy more. It’s revolutionary!”&lt;/p&gt;

&lt;p&gt;My friend happened to be building a new application from scratch and honestly — he loved it. The amount of code generated was absurd. Normally, building something like that would take months with an entire team. Now? A few days and huge chunks of the system already existed.&lt;/p&gt;

&lt;p&gt;And because he’s genuinely an excellent developer, he became very good at noticing the exact moment Claude started going completely off the rails. Interestingly, this often happened around 5 PM. Apparently the AI wanted to clock out too 😅&lt;/p&gt;

&lt;p&gt;But after a few months, the excitement slowly started fading. Turns out that while AI &lt;em&gt;sometimes&lt;/em&gt; makes development dramatically faster, it definitely doesn’t always.&lt;/p&gt;

&lt;p&gt;And then came the second surprise: the company actually calculated how much all this AI usage was costing. Suddenly everyone discovered that — surprise, surprise — unlimited AI agents aren’t exactly cheap 😄&lt;/p&gt;

&lt;p&gt;So now there are discussions about limits, optimization, and reducing token usage. At this rate, maybe hiring interns will eventually become the cheaper option again 😂&lt;/p&gt;

&lt;p&gt;And honestly, we’re already seeing this trend more and more. Wasn’t it Meta that introduced some kind of “tokenmaxxing” culture where people were rewarded for using fewer tokens?&lt;/p&gt;

&lt;h2&gt;
  
  
  And Finally, My Own Story
&lt;/h2&gt;

&lt;p&gt;Now let’s move to my world.&lt;/p&gt;

&lt;p&gt;A massive international institution. An enterprise ship that takes three years to turn right. A place where privacy is treated almost like religion. So naturally, people were extremely skeptical about LLMs for a long time.&lt;/p&gt;

&lt;p&gt;But eventually AI arrived there too, which honestly makes me think these tools are now basically everywhere 😄&lt;/p&gt;

&lt;p&gt;So: do coding agents massively accelerate development in enterprise legacy systems?&lt;/p&gt;

&lt;p&gt;Well… that’s where things become complicated.&lt;/p&gt;

&lt;p&gt;Sure, there are tasks where AI is genuinely useful. Simple bugs. Small features. Boilerplate work. But on some tasks? It completely collapses.&lt;/p&gt;

&lt;p&gt;The agent reads library code. It crawls through the application. It searches half the repository. And still somehow understands absolutely nothing 😅&lt;/p&gt;

&lt;p&gt;Sometimes I literally have to tell it: “Maybe check that weird file written by a junior developer seven years ago.” Or: “Our UI library has some very specific legacy quirks, maybe investigate that direction.”&lt;/p&gt;

&lt;p&gt;And honestly? After 2.5 years in this project, I’m simply faster than the AI agent in many debugging scenarios.&lt;/p&gt;

&lt;p&gt;Not because I’m smarter. Not because AI is useless. But because enterprise systems accumulate context, history, weird decisions, tribal knowledge, hidden dependencies and architectural scars over many years. And I have that context. The AI usually doesn’t.&lt;/p&gt;

&lt;p&gt;And I honestly doubt my project is unique here. A huge percentage of software running the world today is enterprise legacy that survived far longer than anyone originally planned — and is still actively evolving 😄&lt;/p&gt;

&lt;p&gt;So maybe, somehow, I’ll actually survive as a programmer until retirement after all. And maybe I won’t need to learn hairdressing.&lt;/p&gt;

&lt;p&gt;Which is probably good news for humanity, because I’d be terrible at it 😅&lt;/p&gt;

&lt;p&gt;But now I’m genuinely curious: what does AI usage actually look like in your work?&lt;/p&gt;

&lt;p&gt;Million-line AI PRs? Daily battles with legacy systems? Token optimization? Or maybe something completely different?&lt;/p&gt;

&lt;p&gt;BTW, If you like my posts, feel free to follow me on &lt;a href="https://www.linkedin.com/in/sylwia-laskowska-5a8467131/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>ai</category>
    </item>
    <item>
      <title>Every Developer Is Lying About Something — And AI Won’t Fix It</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 21 May 2026 07:06:41 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/every-developer-is-lying-about-something-and-ai-wont-fix-it-4im0</link>
      <guid>https://dev.to/sylwia-lask/every-developer-is-lying-about-something-and-ai-wont-fix-it-4im0</guid>
      <description>&lt;p&gt;Yes, all of us are lying. And you are probably lying too. Let me prove it 😉&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Oh, I have so many article topics in my head right now. The really exciting kind. But this week absolutely steamrolled me 😅 I finally finished preparing my JSNation talk, and at the same time two other amazing opportunities appeared — one professional, and one that feels more like a childhood dream coming true ☺️ But I don’t want to jinx it yet.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And just so it doesn’t sound like everything magically works out for me — I’ve also had a few CFPs rejected recently. The ones I actually cared about! But honestly? That’s just part of the game. One conference may reject your talk this year and happily accept another one from you the next.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;So yes, the really big topics will have to wait a little bit longer 🙂 Which doesn’t mean this one is trivial.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We talk about AI everywhere now, as if it’s going to solve all our problems. But as we’ve already noticed, there’s no AI without humans, and behind every “smart” model there’s still some human being — at least for now 😉&lt;/p&gt;

&lt;p&gt;Which is probably why, in practice, coding agents do speed things up… but not nearly as much as many people expected. Some studies even suggest they slow developers down.&lt;/p&gt;

&lt;p&gt;Because the real problem is often not the code itself. The real problem is the people writing or generating that code.&lt;/p&gt;

&lt;p&gt;And unfortunately, all of us lie in one way or another. Sometimes to others. Sometimes to ourselves.&lt;/p&gt;




&lt;h2&gt;
  
  
  Some Developers Lie About Knowing What They’re Doing
&lt;/h2&gt;

&lt;p&gt;One of the best developers I know once confessed something to me.&lt;/p&gt;

&lt;p&gt;This guy is genuinely brilliant. The kind of engineer companies fight over. He currently works on optimizing drivers for LLMs, gets promoted constantly, and even in this lovely “tech crisis” era, he still had multiple job offers to choose from when he considered switching jobs.&lt;/p&gt;

&lt;p&gt;And yet, every single time he joins a new project, he feels like a complete idiot.&lt;/p&gt;

&lt;p&gt;Everybody else seems productive. People are delivering tickets. Writing code. Moving confidently through the project. Meanwhile, he sits there staring at the codebase wondering:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What exactly is happening here?&lt;/em&gt;&lt;br&gt;
&lt;em&gt;What are we even building?&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Why does this work like this?&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Why are we implementing it this way and not differently?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And then he starts asking questions.&lt;/p&gt;

&lt;p&gt;Usually, it turns out nobody really knows what they’re doing, why they’re doing it, or whether they’re even solving the right problem in the first place.&lt;/p&gt;

&lt;p&gt;It reminds me of that old joke about lumberjacks cutting down a forest. Eventually, the team leader climbs the tallest tree, looks around, and screams:&lt;/p&gt;

&lt;p&gt;“Guys! We’re cutting down the wrong forest!”&lt;/p&gt;

&lt;p&gt;And the workers below shout back:&lt;/p&gt;

&lt;p&gt;“Who cares? We’re making great progress!”&lt;/p&gt;

&lt;p&gt;And honestly, no LLM will save us here. Especially if we never even ask the right questions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Others Lie About Knowing &lt;em&gt;How&lt;/em&gt; To Do Something
&lt;/h2&gt;

&lt;p&gt;This is basically an extension of the previous problem.&lt;/p&gt;

&lt;p&gt;A less experienced developer picks up a task and confidently says:&lt;br&gt;
“Yeah, I know how to do this.”&lt;/p&gt;

&lt;p&gt;Unfortunately, what they often mean is:&lt;br&gt;
“I hope I’ll somehow figure it out.” 😅&lt;/p&gt;

&lt;p&gt;In reality, they may not know how to solve the problem, which tools to use, what architecture makes sense... or even what prompt to write to get useful help from a coding agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But they’re afraid to ask.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because how will they look in front of the team? What will the manager think? The tech lead?&lt;/p&gt;

&lt;p&gt;Best-case scenario: they eventually ask questions… just way too late.&lt;/p&gt;

&lt;p&gt;Worst-case scenario: they never ask at all and deliver something completely wrong. Which often isn’t even caught properly because…&lt;/p&gt;




&lt;h2&gt;
  
  
  Someone Else Is Lying About Having Time
&lt;/h2&gt;

&lt;p&gt;Now we’re entering senior and leadership territory 😅&lt;/p&gt;

&lt;p&gt;The motivations differ. Some people build their self-worth around being “the reliable one.” Others are terrified of losing status, influence, or even their job.&lt;/p&gt;

&lt;p&gt;So they keep taking on more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the hardest tasks,&lt;/li&gt;
&lt;li&gt;endless meetings,&lt;/li&gt;
&lt;li&gt;refinements,&lt;/li&gt;
&lt;li&gt;estimations,&lt;/li&gt;
&lt;li&gt;discussions with support,&lt;/li&gt;
&lt;li&gt;discussions with business,&lt;/li&gt;
&lt;li&gt;code reviews,&lt;/li&gt;
&lt;li&gt;architecture decisions,&lt;/li&gt;
&lt;li&gt;documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And let’s be honest. Something eventually has to break.&lt;/p&gt;

&lt;p&gt;Human beings are not made of steel. Nobody can operate at 100% forever.&lt;/p&gt;

&lt;p&gt;So what happens?&lt;br&gt;
People start half-listening during calls. Code reviews become rushed. Documentation quietly dies in a corner somewhere.&lt;/p&gt;

&lt;p&gt;But they still refuse to admit — either to others or to themselves — that they’re simply overloaded.&lt;/p&gt;




&lt;h2&gt;
  
  
  Some Developers Lie About How Long Things Will Take
&lt;/h2&gt;

&lt;p&gt;I see this constantly with more advanced juniors and mids.&lt;/p&gt;

&lt;p&gt;They throw around hilariously optimistic estimates with absolute confidence.&lt;/p&gt;

&lt;p&gt;And sure — if they could work uninterrupted for eight straight hours, the application contained no legacy code, edge cases didn’t exist, and other humans never interacted with the system… then maybe the estimate would actually be correct 😄&lt;/p&gt;

&lt;p&gt;Then sprint review arrives, and suddenly everybody is shocked that the team didn’t deliver everything.&lt;/p&gt;

&lt;p&gt;But this is not the only problem with estimations.&lt;/p&gt;

&lt;p&gt;I once worked with an especially funny senior developer.&lt;/p&gt;

&lt;p&gt;He treated estimations like sacred truth. He would aggressively defend his numbers during planning sessions, insisting that this specific task was definitely extremely complicated. The rest of the team usually suspected it wasn’t &lt;em&gt;that&lt;/em&gt; bad, but eventually we’d surrender just to end the discussion.&lt;/p&gt;

&lt;p&gt;And then — at least three separate times — he personally picked up the exact task he had massively overestimated… and finished it in about an hour.&lt;/p&gt;

&lt;p&gt;Which basically meant the estimation discussion itself took longer than implementing the feature 😅&lt;/p&gt;

&lt;p&gt;Did this experience change his behavior?&lt;/p&gt;

&lt;p&gt;Absolutely not.&lt;/p&gt;




&lt;h2&gt;
  
  
  And Some Lie About Knowing Everything Best
&lt;/h2&gt;

&lt;p&gt;These are probably the most dangerous ones.&lt;/p&gt;

&lt;p&gt;I avoid people who say things like:&lt;/p&gt;

&lt;p&gt;“Use THIS technology and ONLY this technology because everything else is garbage.”&lt;/p&gt;

&lt;p&gt;Insert your favorite holy war here:&lt;br&gt;
Angular vs React, Java vs Python, Rust vs literally anything else 😄&lt;/p&gt;

&lt;p&gt;I never write like that myself. Even when I publish something titled &lt;em&gt;“I Love Tailwind. Sorry Not Sorry”&lt;/em&gt;, I still talk about its downsides and explain where it absolutely doesn’t make sense.&lt;/p&gt;

&lt;p&gt;If one day I start claiming some technology is objectively perfect for every possible situation, please leave a comment saying:&lt;/p&gt;

&lt;p&gt;“Sylwia, go touch grass immediately.” 😅&lt;/p&gt;

&lt;p&gt;Honestly, I’ve always wondered where this sense of absolute certainty comes from.&lt;/p&gt;

&lt;p&gt;Because not all of these people are even paid influencers. Some genuinely seem emotionally attached to technological holy wars. Others maybe only know one stack deeply, so everything else automatically feels “bad.”&lt;/p&gt;

&lt;p&gt;And while this behavior is very common among tech influencers, you absolutely see it inside companies too.&lt;/p&gt;

&lt;p&gt;The problem is that this kind of certainty can seriously damage projects. People stop questioning decisions. Other developers become afraid to speak up. Stakeholders assume “the confident person” must be right simply because they sound convinced.&lt;/p&gt;

&lt;p&gt;Best-case scenario: you end up with an annoying developer who knows more about frameworks than the actual business domain.&lt;/p&gt;

&lt;p&gt;Worst-case scenario: you end up with a terrible stack choice and spaghetti architecture held together by ego.&lt;/p&gt;




&lt;h2&gt;
  
  
  People Are Just… People
&lt;/h2&gt;

&lt;p&gt;Of course, I’m not innocent either.&lt;/p&gt;

&lt;p&gt;I’ve used many of these lies myself in the past. Maybe I’m older now. Maybe slightly wiser. Or maybe I just recognize these patterns more easily.&lt;/p&gt;

&lt;p&gt;But I’m definitely still lying somewhere too. Maybe not to others — maybe to myself.&lt;/p&gt;

&lt;p&gt;Because a lot of our problems in software development aren’t really technical problems at all. They’re deeply human problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ego,&lt;/li&gt;
&lt;li&gt;insecurity,&lt;/li&gt;
&lt;li&gt;fear of looking stupid,&lt;/li&gt;
&lt;li&gt;fear of admitting mistakes,&lt;/li&gt;
&lt;li&gt;fear of saying “I don’t know.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And honestly, I don’t have some magical solution for this. We’re not going to require three years of therapy from every developer before allowing them into a sprint planning meeting 😄&lt;/p&gt;

&lt;p&gt;But I &lt;em&gt;have&lt;/em&gt; noticed one thing.&lt;/p&gt;

&lt;p&gt;Very often, admitting you don’t know something, openly discussing uncertainty during planning, or simply saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Sorry, I still don’t understand this. Could you explain it one more time?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;doesn’t make people see you as a worse developer.&lt;/p&gt;

&lt;p&gt;Quite often, the opposite happens.&lt;/p&gt;

&lt;p&gt;Suddenly communication inside the team improves. Other people start asking questions too. Conversations become more honest. Problems get discovered earlier.&lt;/p&gt;

&lt;p&gt;Seriously. Try it at least once. You might be surprised 🙂&lt;/p&gt;

&lt;p&gt;So… what kinds of developer lies do &lt;em&gt;you&lt;/em&gt; see most often in your team?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
    </item>
    <item>
      <title>4 Tiny Mistakes That Secretly Destroy App Performance</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 14 May 2026 06:04:15 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/4-tiny-mistakes-that-secretly-destroy-app-performance-3cgo</link>
      <guid>https://dev.to/sylwia-lask/4-tiny-mistakes-that-secretly-destroy-app-performance-3cgo</guid>
      <description>&lt;p&gt;Ok, I’m back from my short vacation and returning with some useful content 😄 As you know, from time to time I write posts for you in the style of articles like &lt;a href="https://dev.to/sylwia-lask/stop-installing-libraries-10-browser-apis-that-already-solve-your-problems-35bi"&gt;Stop Installing Libraries: 10 Browser APIs That Already Solve Your Problems&lt;/a&gt; — which I honestly love writing, and I know you enjoy them too 🙂 &lt;/p&gt;

&lt;p&gt;Today I want to approach the topic from a slightly different angle. I’m going to show you a few interesting things that might accidentally be making your app &lt;em&gt;much&lt;/em&gt; slower, even though they often look completely innocent at first glance. And the best part? Some of them can be fixed surprisingly quickly. Also, these are the kinds of issues Claude Code or Codex probably won’t immediately point out when you ask them “why is my app slow” 😅&lt;/p&gt;

&lt;p&gt;Usually, we develop our applications on powerful machines with fast CPUs, plenty of RAM, and fast internet. Unfortunately, real users often live in a completely different reality. Some of them absolutely have modern hardware, but there will &lt;em&gt;always&lt;/em&gt; be somebody using an old laptop, a cheap Android phone, weak WiFi, or mobile internet from the depths of hell 😅&lt;/p&gt;

&lt;p&gt;And suddenly it turns out your app is painfully slow for 10–30% of users.&lt;/p&gt;

&lt;p&gt;And that’s where the war for milliseconds begins 😀&lt;/p&gt;

&lt;p&gt;Every example in this article is something I either personally encountered in a real project or heard about from another developer, so these are definitely not hypothetical scenarios. Check whether some of these things are secretly happening in your own application 👀&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Meanwhile, I’m slowly preparing for my JSNation conference talk. If you want to support me (or just see me awkwardly talking in my garden 😄), you can give me a like &lt;a href="https://www.linkedin.com/posts/everyone-has-worked-with-a-legacy-app-ugcPost-7460371625947897856-z64B?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACBIGJABwz0qrMhjd-mEKrpauBXqa_cSD9M" rel="noopener noreferrer"&gt;here&lt;/a&gt;. And if you want to watch my full talk completely FOR FREE, you can grab a free badge &lt;a href="https://gitnation.com/badges/jsnation-2026/sylwia_laskowska_154511" rel="noopener noreferrer"&gt;here&lt;/a&gt;. HOW COOL IS THAT 😄&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But enough self-promotion, let’s get to the point!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Custom headers → preflight requests
&lt;/h2&gt;

&lt;p&gt;This is exactly why it’s worth attending conferences. Sometimes you hear about problems there that you would probably never randomly google yourself 😀&lt;/p&gt;

&lt;p&gt;One of my colleagues talked about this issue during his presentation. His team was trying to understand why their application felt slow for some users. Naturally, the backend was blamed first. Poor backend, as always 😅&lt;/p&gt;

&lt;p&gt;But eventually they noticed something interesting in the network tab: &lt;code&gt;OPTIONS&lt;/code&gt; requests appearing before almost every API call. Some of them were taking hundreds of milliseconds.&lt;/p&gt;

&lt;p&gt;So what exactly is happening here?&lt;/p&gt;

&lt;p&gt;This is related to CORS. Browsers sometimes send an additional &lt;code&gt;OPTIONS&lt;/code&gt; request before the actual API call. This is called a preflight request and usually happens for “non-simple” requests — for example when using methods like &lt;code&gt;PUT&lt;/code&gt; or &lt;code&gt;DELETE&lt;/code&gt;, but also when adding custom headers.&lt;/p&gt;

&lt;p&gt;And yes, even a completely innocent &lt;code&gt;GET&lt;/code&gt; request can suddenly become &lt;em&gt;two&lt;/em&gt; network calls because somebody added &lt;code&gt;X-Feature-Whatever&lt;/code&gt; three years ago 😅&lt;/p&gt;

&lt;p&gt;In their case, the funniest part was that the custom header wasn’t even used anymore. It was some ancient historical leftover from years earlier. Nobody knew why it existed. Nobody questioned it. It simply survived every refactor like an immortal enterprise relic 😀&lt;/p&gt;

&lt;p&gt;If you’re curious, I actually prepared (together with Claude Code 😅) a small repo showing this behavior here:&lt;br&gt;
&lt;a href="https://github.com/sylwia-lask/preflight-options" rel="noopener noreferrer"&gt;https://github.com/sylwia-lask/preflight-options&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's see the screens (please appreciate my high graphic skills!):&lt;/p&gt;

&lt;p&gt;GET request without custom header:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fan1gvvc65916s5c2z6rx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fan1gvvc65916s5c2z6rx.png" alt="GET request without custom header" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GET request with custom header:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq92ohavn47hz1gsu2emf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq92ohavn47hz1gsu2emf.png" alt="GET request with custom header containing preflight request" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And honestly, this kind of thing happens &lt;em&gt;all the time&lt;/em&gt; in large projects. Somebody adds a custom header for feature flags, debugging, localization, analytics, or “temporary” metadata… and then the header survives for the next four years.&lt;/p&gt;

&lt;p&gt;Of course, sometimes custom headers are completely justified. But if you only use them for frontend-only logic, there are often better alternatives like query params, cookies, local state, or configuration endpoints fetched once during startup.&lt;/p&gt;

&lt;p&gt;Individually, one extra request may not look catastrophic. But if your app performs dozens of calls during startup, especially on slower mobile connections, this suddenly becomes very noticeable.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Code splitting that does absolutely nothing
&lt;/h2&gt;

&lt;p&gt;Sometimes the problem isn’t the network itself but the gigantic JavaScript bundle we load during startup. And this is usually the moment where everybody says:&lt;/p&gt;

&lt;p&gt;“But how? We’re already doing code splitting! We use lazy loading everywhere!”&lt;/p&gt;

&lt;p&gt;Yeah… about that 😄&lt;/p&gt;

&lt;p&gt;I once audited an Angular application that looked very well structured at first glance. It had modules everywhere, lazy loading, proper architecture, all the “best practices.”&lt;/p&gt;

&lt;p&gt;And yet the application loaded painfully slowly.&lt;/p&gt;

&lt;p&gt;Fortunately, we have tools like &lt;code&gt;webpack-bundle-analyzer&lt;/code&gt;, &lt;code&gt;source-map-explorer&lt;/code&gt;, &lt;code&gt;rollup-plugin-visualizer&lt;/code&gt;, or &lt;code&gt;@next/bundle-analyzer&lt;/code&gt; that allow us to see what’s &lt;em&gt;actually&lt;/em&gt; happening inside our bundles.&lt;/p&gt;

&lt;p&gt;And what did we discover?&lt;/p&gt;

&lt;p&gt;Yes, the application was split into modules…&lt;/p&gt;

&lt;p&gt;…except each module was like 2 KB 😅&lt;/p&gt;

&lt;p&gt;Because almost everything important lived inside one gigantic shared module that was imported absolutely everywhere, meaning most of the application still ended up inside the main bundle anyway 😀&lt;/p&gt;

&lt;p&gt;Congratulations, your app is now split into 400 beautifully separated files that all load at startup.&lt;/p&gt;

&lt;p&gt;This is also not the only weird case I’ve seen. I’ve already encountered situations where the app technically “lazy loaded” modules while still downloading almost the entire application every single time 😄&lt;/p&gt;

&lt;p&gt;For example, something like this looks perfectly fine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;admin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;loadChildren&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./admin/admin.module&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AdminModule&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Looks clean. Looks modern. Looks optimized.&lt;/p&gt;

&lt;p&gt;Until you discover that &lt;code&gt;AdminModule&lt;/code&gt; imports a massive shared module containing half the application 😅&lt;/p&gt;

&lt;p&gt;So yeah — just because you use &lt;code&gt;import()&lt;/code&gt; or lazy modules does &lt;em&gt;not&lt;/em&gt; automatically mean your bundles are healthy. Always check what is actually being downloaded by the browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Unnecessary runtime dependencies
&lt;/h2&gt;

&lt;p&gt;This is another extremely common problem, especially in projects where nobody really controls what npm packages people install 😅&lt;/p&gt;

&lt;p&gt;In my current project, importing a new dependency is practically treated like a sacred ritual that requires approval from the wisest architects of the kingdom (which basically means me and two or three coworkers 😀). But in many projects, people install libraries completely thoughtlessly.&lt;/p&gt;

&lt;p&gt;And then suddenly your application contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;three analytics SDKs,&lt;/li&gt;
&lt;li&gt;two date libraries,&lt;/li&gt;
&lt;li&gt;all Moment.js locales,&lt;/li&gt;
&lt;li&gt;the entire Lodash package because somebody needed one utility function,&lt;/li&gt;
&lt;li&gt;Firebase imported globally,&lt;/li&gt;
&lt;li&gt;three icon packs,&lt;/li&gt;
&lt;li&gt;and some “tiny lightweight helper package” that quietly imports half the internet 😀&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I once saw an application loading three different date libraries at the same time. The funniest part? The app barely even handled dates 😅 Apparently every developer simply had their own preferred religion.&lt;/p&gt;

&lt;p&gt;Another classic example is importing Lodash like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;_&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lodash&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;debounce&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lodash/debounce&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The difference may look small, but over time these things accumulate &lt;em&gt;a lot&lt;/em&gt;. Especially in enterprise applications that grow for years.&lt;/p&gt;

&lt;p&gt;And unfortunately, tree shaking is not magic 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Huge background images
&lt;/h2&gt;

&lt;p&gt;This one sounds almost too obvious, right?&lt;/p&gt;

&lt;p&gt;Everybody already knows giant images are bad.&lt;/p&gt;

&lt;p&gt;…except people still keep shipping giant images 😄&lt;/p&gt;

&lt;p&gt;Recently, during the WeAreDevelopers podcast, we discussed which government websites loaded the fastest. Surprisingly, the UK completely dominated everybody else. Why? I’ll probably write a separate article about this later, but generally speaking, the site was just extremely simple. Very little visual noise, lots of informational text, simple layout, SSR, minimal unnecessary assets.&lt;/p&gt;

&lt;p&gt;The second fastest was the US government website.&lt;/p&gt;

&lt;p&gt;It followed almost exactly the same principles… except it loaded a fancy large image during startup 😅&lt;/p&gt;

&lt;p&gt;And suddenly the large contentful paint became noticeably worse.&lt;/p&gt;

&lt;p&gt;The funny thing about large background images is that they often look harmless on developer hardware with fast internet. But on slower devices they can absolutely destroy perceived performance.&lt;/p&gt;

&lt;p&gt;Fortunately, there are many ways to improve this: use AVIF or WebP, compress aggressively, avoid massive hero images above the fold, lazy load non-critical visuals, and preload only truly critical assets.&lt;/p&gt;

&lt;p&gt;And honestly?&lt;/p&gt;

&lt;p&gt;Sometimes the fastest image is simply… no image 😀&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;Application optimization is obviously an endless topic, and this article only scratches the surface. But I think one of the most important things to understand is that performance problems are often death by a thousand cuts.&lt;/p&gt;

&lt;p&gt;One unnecessary header.&lt;/p&gt;

&lt;p&gt;One oversized dependency.&lt;/p&gt;

&lt;p&gt;One “temporary” shared module.&lt;/p&gt;

&lt;p&gt;One background image nobody questioned.&lt;/p&gt;

&lt;p&gt;Individually, none of these things look catastrophic. Together, they create an application that feels sluggish — especially on older devices or slower mobile networks.&lt;/p&gt;

&lt;p&gt;And the really scary part?&lt;/p&gt;

&lt;p&gt;Most of these decisions looked perfectly reasonable when they were originally introduced 😅&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>angular</category>
      <category>react</category>
      <category>frontend</category>
    </item>
    <item>
      <title>I Love Tailwind. Sorry Not Sorry</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Mon, 04 May 2026 08:54:09 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/i-love-tailwind-sorry-not-sorry-5cfh</link>
      <guid>https://dev.to/sylwia-lask/i-love-tailwind-sorry-not-sorry-5cfh</guid>
      <description>&lt;p&gt;I’m going on a short vacation this week, so this post is coming out a bit earlier than usual. I actually had a different, more “useful” topic in mind — something educational, something responsible. But then I came across this fascinating article: &lt;a href="https://dev.to/freshcaffeine/i-dont-like-tailwind-sorry-not-sorry-50b5"&gt;I don’t like Tailwind. Sorry not sorry&lt;/a&gt; written by &lt;a class="mentioned-user" href="https://dev.to/freshcaffeine"&gt;@freshcaffeine&lt;/a&gt; , and I couldn’t get it out of my head.&lt;/p&gt;

&lt;p&gt;So I decided to write a response instead.&lt;br&gt;
Useful content will have to wait 😄&lt;/p&gt;

&lt;p&gt;I actually agree with many of the points in the original article — especially around learning fundamentals. I just have a different perspective shaped by a different kind of work.&lt;/p&gt;

&lt;p&gt;Let me start with a small disclaimer: I’ve written a lot — and I mean &lt;em&gt;a lot&lt;/em&gt; — of handcrafted CSS in my life. Entire design systems. In fact, I got my first job in IT mostly thanks to my CSS skills, because my programming skills at the time were… let’s say “a work in progress” 😉&lt;/p&gt;

&lt;p&gt;There was even a period when I made extra money building simple websites for clients. People literally paid me for delivering clean, aesthetic CSS. &lt;/p&gt;

&lt;p&gt;So in theory, I should be the first person to defend handcrafted CSS and criticize Tailwind for polluting HTML.&lt;/p&gt;

&lt;p&gt;And yet… I’m not.&lt;/p&gt;

&lt;p&gt;Despite all its flaws, I love Tailwind. Deeply, sincerely, and yes — unapologetically.&lt;br&gt;
Because it gives us something incredibly valuable in real-world development: &lt;strong&gt;speed and predictability&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pumpkin pie: homemade or store-bought?
&lt;/h2&gt;

&lt;p&gt;The author of the original article uses a pumpkin pie analogy. Handcrafted CSS is like baking a pie from scratch — roasting the pumpkin, making the dough, carefully preparing everything with love. Tailwind, on the other hand, is like using pre-made ingredients. You open a can, use ready-made crust, assemble everything quickly. Sure, it’s still a pie, but not quite like the one your grandma would make.&lt;/p&gt;

&lt;p&gt;It’s a nice analogy. It really is.&lt;/p&gt;

&lt;p&gt;The problem is — most businesses are not running artisan bakeries.&lt;br&gt;
They’re running factories.&lt;br&gt;
And those factories aren’t even in the pie business.&lt;/p&gt;

&lt;p&gt;In reality, business rarely needs a handcrafted pie. Honestly, it often doesn’t even need a “semi-handmade” one. What it really wants is mass production: something that’s sweet enough, looks good enough, doesn’t cause stomachache, and can be delivered fast. If you can add a small decorative touch on top to make it feel slightly more unique — great. But even that is optional.&lt;/p&gt;

&lt;p&gt;And there’s no point being offended by this. We can absolutely build beautiful, handcrafted CSS when we want to. But most of the time, businesses choose speed — because they are selling a product, not CSS.&lt;/p&gt;

&lt;p&gt;I’m not building a piece of art.&lt;br&gt;
I’m building software that five teams won’t break next week.&lt;/p&gt;




&lt;h2&gt;
  
  
  Repetition isn’t always a bug
&lt;/h2&gt;

&lt;p&gt;One of the arguments against Tailwind is that everything starts to look the same. And honestly — that’s true.&lt;/p&gt;

&lt;p&gt;But here’s the thing: very often, that’s exactly what the client wants.&lt;/p&gt;

&lt;p&gt;Back when I was building websites for clients, the happiest ones were those who got three templates to choose from and a bit of customization on top. They didn’t want a masterpiece. They wanted something clean, modern, and effective — something that sells.&lt;/p&gt;

&lt;p&gt;Tailwind is often simply &lt;em&gt;good enough&lt;/em&gt; for that.&lt;/p&gt;

&lt;p&gt;And in many cases, &lt;strong&gt;good enough delivered fast beats perfect delivered late&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  “Messy HTML”
&lt;/h2&gt;

&lt;p&gt;Yes — if you just throw classes around randomly, your HTML will look messy.&lt;/p&gt;

&lt;p&gt;But let’s be honest: if we’re “craft-oriented developers,” we can organize our components properly, right? In real projects, that long Tailwind class list usually lives inside a component anyway. You don’t copy-paste that everywhere.&lt;/p&gt;

&lt;p&gt;Also:&lt;/p&gt;

&lt;p&gt;HTML is “noisy”? Sure.&lt;br&gt;
But at least the rules are right next to what they affect.&lt;/p&gt;

&lt;p&gt;I’ve seen plenty of “beautiful” CSS codebases where styling logic was scattered across multiple files, overridden in unexpected places, and impossible to trace without jumping through five layers of abstraction. I’ll take explicit over “hidden magic” any day.&lt;/p&gt;




&lt;h2&gt;
  
  
  Junior developers and “not learning CSS”
&lt;/h2&gt;

&lt;p&gt;I actually agree with one part: Tailwind doesn’t replace learning CSS. I even wrote about that in my article: &lt;a href="https://dev.to/sylwia-lask/is-learning-css-a-waste-of-time-in-2026-nj3"&gt;Is Learning CSS a Waste of Time in 2026?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But the argument that Tailwind is somehow “hurting juniors” always makes me smile a bit.&lt;/p&gt;

&lt;p&gt;On one hand, we have mass layoffs in tech and endless discussions about AI replacing developers. On the other, we worry that juniors might not learn CSS because things are… too easy?&lt;/p&gt;

&lt;p&gt;Let’s be real for a second.&lt;/p&gt;

&lt;p&gt;“Junior” doesn’t mean “child.” These are adults. If someone wants to grow as a frontend developer, learning CSS is part of the job. It’s not some hidden, mystical knowledge. And we don’t need to choose our entire tech stack based on making things harder just so people are forced to learn.&lt;/p&gt;

&lt;p&gt;Also — I’ve seen plenty of experienced developers who still struggle with CSS after years in the industry. At that point, I’d honestly rather have them use Tailwind and ship something consistent than fight yet another specificity war.&lt;/p&gt;

&lt;p&gt;Tailwind doesn’t create bad developers.&lt;br&gt;
Lack of fundamentals does.&lt;/p&gt;




&lt;h2&gt;
  
  
  About “craft”
&lt;/h2&gt;

&lt;p&gt;There’s this idea that writing CSS is a form of craftsmanship — something closer to art, something deeply satisfying.&lt;/p&gt;

&lt;p&gt;And yes, it can be.&lt;/p&gt;

&lt;p&gt;But the last few years — especially with the rise of LLMs — have made it pretty clear where our “craft” actually sits in the bigger picture. In most business applications, CSS is not art. It’s not painting. It’s not sculpture.&lt;/p&gt;

&lt;p&gt;It’s closer to baking pumpkin pies at scale.&lt;/p&gt;

&lt;p&gt;There will always be places where handcrafted work matters — just like there are bakeries selling beautiful, artisanal cakes. But if you’re selling paper clips and organizing a corporate event, you’re probably not baking everything from scratch. You’re ordering something decent that gets the job done.&lt;/p&gt;

&lt;p&gt;And that’s fine.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I actually like Tailwind
&lt;/h2&gt;

&lt;p&gt;Let’s be clear — Tailwind is not perfect. It has trade-offs.&lt;/p&gt;

&lt;p&gt;But it solves very real problems.&lt;/p&gt;

&lt;p&gt;It gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;speed&lt;/strong&gt; — you don’t context-switch between files every 10 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;predictability&lt;/strong&gt; — no guessing what some class name means&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;consistency&lt;/strong&gt; — especially across large teams&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;simple selectors&lt;/strong&gt; — which are often easier for browsers to process than deeply nested CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;less dead code&lt;/strong&gt; — thanks to modern build setups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And most importantly:&lt;/p&gt;

&lt;p&gt;It removes ambiguity.&lt;/p&gt;

&lt;p&gt;The real problem in large codebases isn’t that CSS isn’t “beautiful” enough.&lt;br&gt;
It’s that it becomes inconsistent, fragile, and slow to evolve.&lt;/p&gt;

&lt;p&gt;I’ve never seen a project fail because CSS wasn’t handcrafted enough.&lt;br&gt;
I’ve seen plenty fail because things were inconsistent and took forever to build.&lt;/p&gt;




&lt;h2&gt;
  
  
  When handcrafted CSS still makes sense
&lt;/h2&gt;

&lt;p&gt;I don’t think Tailwind (or something similar) should replace handcrafted CSS everywhere.&lt;/p&gt;

&lt;p&gt;There are cases where writing CSS by hand is not just useful — it’s the better choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design systems and shared UI foundations&lt;/strong&gt; — where you need full control and long-term consistency&lt;br&gt;
&lt;strong&gt;Highly custom or experimental UI&lt;/strong&gt; — where utility classes start to fight you instead of helping&lt;br&gt;
&lt;strong&gt;Performance-critical interfaces&lt;/strong&gt; — where you want precise control over what gets shipped&lt;br&gt;
&lt;strong&gt;Learning and understanding the fundamentals&lt;/strong&gt; — because at some point, abstractions always leak&lt;/p&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Tailwind isn’t about replacing CSS.&lt;br&gt;
It’s about making frontend development survivable at scale.&lt;/p&gt;

&lt;p&gt;And no — this post is not sponsored by Tailwind. (But if someone from Tailwind happens to read this… feel free to reach out 😄)&lt;/p&gt;

&lt;p&gt;And what do you guys think? Are you Team Tailwind or more into 'craft' CSS? Or maybe something in between?&lt;/p&gt;

&lt;p&gt;Thanks for reading! If you enjoyed this post, I'd love to have you follow me here on &lt;a href="https://www.linkedin.com/in/sylwia-laskowska-5a8467131/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>css</category>
      <category>tailwindcss</category>
      <category>frontend</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Is Software Development Just a Side Quest? A Jira Story</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 30 Apr 2026 06:01:20 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/is-software-development-just-a-side-quest-a-jira-story-4ng3</link>
      <guid>https://dev.to/sylwia-lask/is-software-development-just-a-side-quest-a-jira-story-4ng3</guid>
      <description>&lt;p&gt;How much time did you spend this week moving tickets in Jira (or other tracking tool) instead of actually coding?&lt;/p&gt;

&lt;p&gt;I sometimes have this feeling that my main job is not development anymore — it’s just moving things between columns.&lt;/p&gt;

&lt;p&gt;I always say that a software developer, by nature, is lazy. That’s why we became developers in the first place — to automate everything. So maybe expecting us to not only do our actual work, but also carefully maintain every single detail in Jira… is a bit optimistic.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Quick “what’s up with me” section. My recent article&lt;br&gt;
&lt;a href="https://dev.to/sylwia-lask/most-apps-are-slower-than-they-need-to-be-heres-why-live-demo-2hh8"&gt;Most Apps are Slower Than They Need To Be&lt;/a&gt;&lt;br&gt;
ended up going way beyond DEV — different newsletters, and it even got me invited to a podcast at &lt;a href="https://www.youtube.com/watch?v=qE4QmV1EIDc" rel="noopener noreferrer"&gt;WeAreDevelopers&lt;/a&gt; 🎤 First podcast in my life. Chaos, tangents… pretty much 100% me 😅&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And here’s a fun part: the technical article that opened those doors had almost 6x fewer views than this one:&lt;br&gt;
&lt;a href="https://dev.to/sylwia-lask/youre-a-real-software-developer-only-if-2mo8"&gt;You're a Real Software Developer Only If...&lt;/a&gt; Well, turns out we all enjoy a good laugh more than GPU acceleration demos. Can’t argue with reality 😄&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Anyway, back to the topic.&lt;/p&gt;

&lt;p&gt;I’m a senior developer. Not officially a tech lead in my current company, but in practice I do a lot of that work, next to coding. Coordinating developers' work, answering questions, helping unblock people. And it’s not just the team — there are stakeholders, testers, other teams.&lt;/p&gt;

&lt;p&gt;And the app? It’s a government system. So if something breaks, it’s not “oh no, someone couldn’t watch a show” (haha yes, I'm refering to &lt;a class="mentioned-user" href="https://dev.to/adamthedeveloper"&gt;@adamthedeveloper&lt;/a&gt; and his famous &lt;a href="https://dev.to/adamthedeveloper/youre-not-building-netflix-stop-coding-like-you-are-1707"&gt;You're Not Building Netflix&lt;/a&gt; post 😁). The consequences can be very real.&lt;/p&gt;

&lt;p&gt;After a day like that, the last thing I feel like doing is carefully updating every field in Jira.&lt;/p&gt;

&lt;p&gt;Don’t get me wrong — I actually like having a tracking tool. I can’t imagine working without one, especially in a bigger team. Tasks need to exist somewhere, priorities need to be visible, things shouldn’t disappear into Slack threads.&lt;/p&gt;

&lt;p&gt;I also create tickets myself all the time, or ask for them to be created. I want things tracked. I want a history. I want clarity.&lt;/p&gt;

&lt;p&gt;But for me, a ticket should have three states: todo, in progress, done.&lt;/p&gt;

&lt;p&gt;Everything else is… negotiable.&lt;/p&gt;

&lt;p&gt;Stories? Epics? Fine. If it helps someone manage the process, I can live with that.&lt;/p&gt;

&lt;p&gt;But then come the extra fields. The additional statuses. The “just one more thing” because it will make the report nicer. Because the burn-down chart will look better. Because someone somewhere wants a cleaner dashboard.&lt;/p&gt;

&lt;p&gt;And slowly, without really noticing, we turn Jira into something that requires more mental effort than the actual development.&lt;/p&gt;

&lt;p&gt;We’re basically the boiling frog at this point. One more field. One more status. One more small tweak. Until suddenly nobody really knows what goes where anymore, what needs to be updated, and why.&lt;/p&gt;

&lt;p&gt;And then, of course, developers get blamed for “not keeping Jira up to date”.&lt;/p&gt;

&lt;p&gt;At some point it starts feeling like development itself is just a side quest. If we didn’t have to deal with code at all, imagine how perfect our Jira boards could be. Beautiful burn-down charts. Perfectly filled tickets. Absolute harmony 😄&lt;/p&gt;

&lt;p&gt;The funny thing is — the best developers I know are often the ones who engage with this the least. Not because they don’t care, but because their focus is somewhere else. On solving real problems.&lt;/p&gt;

&lt;p&gt;I’m still managing it somehow. But I definitely feel the friction.&lt;/p&gt;

&lt;p&gt;So I’m curious — is it just me?&lt;/p&gt;

&lt;p&gt;Do you also feel this kind of frustration sometimes? Or did you actually manage to find a system that works without turning Jira into a full-time job?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
    </item>
    <item>
      <title>If AI Existed in 2011, Would We Still Have the Modern Web?</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Wed, 22 Apr 2026 08:04:46 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/if-ai-existed-in-2011-would-we-still-have-the-modern-web-408g</link>
      <guid>https://dev.to/sylwia-lask/if-ai-existed-in-2011-would-we-still-have-the-modern-web-408g</guid>
      <description>&lt;p&gt;Imagine it’s 2011. The web is mostly server-rendered PHP templates, maybe a bit of jQuery if you’re feeling fancy, or sometimes no JavaScript at all. Interactivity is limited, everything is a request-response loop, and the idea of complex client-side apps isn’t really mainstream yet. It works, it’s predictable, and honestly… nobody is panicking 😄&lt;/p&gt;

&lt;p&gt;Now imagine that into this world, suddenly, we drop modern AI. Not some early experimental models, but something close to what we have today — &lt;strong&gt;LLMs, coding agents, tools that generate entire features from prompts&lt;/strong&gt;. Codex, Claude Code, all that magic. The kind of tools that can scaffold half your app before you even finish your coffee ☕&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Quick side note before I continue, because I’m way too excited not to mention this 😄 I’ll be speaking at JSNation 2026, which still feels a bit surreal. It’s one of those conferences where all the big JavaScript minds show up… and apparently also me 😉&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Don’t worry though — I won’t bring shame to the DEV community 😅 I’m bringing my talk “Rewrite or Refactor? How to Safely Move Legacy Apps to Modern Frameworks,” which I’ve already tested on stage. If you’re curious, you'll be able to watch it here: &lt;a href="https://gitnation.com/badges/jsnation-2026/sylwia_laskowska_154511" rel="noopener noreferrer"&gt;https://gitnation.com/badges/jsnation-2026/sylwia_laskowska_154511&lt;/a&gt;. And honestly, even if you’re not a frontend dev but you like my articles, you’ll probably enjoy it anyway — it’s basically a “spoken article” 😄&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Also, to celebrate, I bought a non-alcoholic beer and somehow woke up feeling like I had a huge hangover. So yes, new achievement unlocked.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;So back to the thought experiment. What actually happens next? Do we accelerate into the modern web faster, because suddenly everyone has a superpowered assistant? Or do we get something much less exciting — &lt;strong&gt;a world where AI keeps reinforcing what already works&lt;/strong&gt; and we never quite feel the need to move beyond it?&lt;/p&gt;

&lt;p&gt;Because here’s the uncomfortable question: &lt;strong&gt;what if AI doesn’t accelerate progress as much as we think… but instead quietly stabilizes it? 👀&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Is Brilliant — As Long As You Stay on Known Ground
&lt;/h2&gt;

&lt;p&gt;I’m not an AI expert, and I’m not going to pretend I am. I use LLMs daily, I know what RAG is, I understand inference, matrix multiplication, sampling — enough to work with it comfortably. But I never really thought about AI in terms of shaping the &lt;em&gt;direction&lt;/em&gt; of technology, not just speeding it up.&lt;/p&gt;

&lt;p&gt;That changed when I started working more with WebAssembly and WebGPU. And something became obvious pretty quickly.&lt;/p&gt;

&lt;p&gt;LLMs are extremely good at things like Rust, standard frontend work, typical patterns — &lt;strong&gt;anything with lots of existing examples&lt;/strong&gt;. You ask for a simple feature, like downloading an image, and you get clean, idiomatic code almost instantly. It honestly feels like cheating 😄&lt;/p&gt;

&lt;p&gt;But the moment you move into newer territory, like WebGPU and WGSL shaders, things start to break down. Mistakes become frequent, assumptions are off, APIs get mixed up. You stop trusting the output and go back to manual coding, debugging everything yourself like it’s 2010 again.&lt;/p&gt;

&lt;p&gt;And it’s not because AI is “bad.” It’s because &lt;strong&gt;it simply hasn’t seen enough of it&lt;/strong&gt;. WGSL has only been around since roughly 2021. Compared to decades of web dev patterns, that’s basically nothing.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Optimizes for What Exists
&lt;/h2&gt;

&lt;p&gt;This is where the whole thing flips a bit. We like to think AI helps us write better code and make smarter decisions. But in practice, &lt;strong&gt;it mostly guides us toward what is most common, most represented, most reinforced by data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It doesn’t think like a senior engineer. It doesn’t evaluate trade-offs or long-term consequences. &lt;strong&gt;It pattern-matches.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s why it will often default to React on the frontend — not because it’s always the best choice, but because it’s everywhere. Angular or Vue might be a better fit in some cases, but AI doesn’t “prefer” them. It just hasn’t seen them as much.&lt;/p&gt;

&lt;p&gt;If you’re experienced, you catch this and adjust. But if you’re tired, under pressure, or just want to get things done (so… most of us most of the time 😅), you go with what it gives you. It works, it compiles, ship it.&lt;/p&gt;

&lt;p&gt;And that’s the subtle shift: &lt;strong&gt;AI isn’t just helping you code — it’s quietly influencing how we all code.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  From Exploration to Convenience
&lt;/h2&gt;

&lt;p&gt;Before AI, web development was rarely about comfort. It was about pain 😄&lt;/p&gt;

&lt;p&gt;PHP templates worked — until they didn’t. We needed interactivity, so we started hacking things with JavaScript. Then jQuery appeared to manage the chaos. Then SPAs happened, because managing state on the client became unavoidable. Frameworks evolved, patterns evolved, everything kept moving forward.&lt;/p&gt;

&lt;p&gt;There was always friction. And that friction forced people to think, experiment, and sometimes try things that weren’t yet mainstream.&lt;/p&gt;

&lt;p&gt;Now imagine removing most of that friction. You can get a working solution almost instantly, without digging too deep. And when that happens, something subtle shifts. You stop asking &lt;strong&gt;“is this the best way?”&lt;/strong&gt; and start asking &lt;strong&gt;“does this already work?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And once that mindset kicks in, exploration slowly starts to disappear.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cognitive Miser Meets AI
&lt;/h2&gt;

&lt;p&gt;There’s also a very human factor here. We’re what psychologists call “cognitive misers,” which basically means we avoid unnecessary thinking whenever possible. If there’s an easier path, we take it.&lt;/p&gt;

&lt;p&gt;AI is the ultimate easy path — which is exactly why it’s so powerful 😄&lt;/p&gt;

&lt;p&gt;But it also creates a feedback loop. AI suggests common solutions, developers implement them, those solutions become even more common, and AI becomes even more confident in suggesting them again.&lt;/p&gt;

&lt;p&gt;Breaking out of that loop requires effort. And effort is exactly what we’re trying to avoid when using AI in the first place.&lt;/p&gt;




&lt;h2&gt;
  
  
  Back to 2011
&lt;/h2&gt;

&lt;p&gt;So let’s go back to that original scenario. You’re a developer in 2011, building a web app. You have access to a powerful AI assistant trained on everything that existed at the time: PHP templates, early JavaScript, server-side rendering patterns.&lt;/p&gt;

&lt;p&gt;You ask it how to build a feature, and it gives you a clean, working solution — in PHP. It’s fast, it’s familiar, and it solves your problem.&lt;/p&gt;

&lt;p&gt;Would you really push for a completely new paradigm, like client-side apps? Would you experiment with something that doesn’t yet exist, when the current approach already works and is fully supported by your tools?&lt;/p&gt;

&lt;p&gt;Or would you just… ship? 😄&lt;/p&gt;

&lt;p&gt;If enough people choose to just ship, something interesting happens. Not a dramatic collapse — just a quiet lack of movement.&lt;/p&gt;

&lt;p&gt;And suddenly, &lt;strong&gt;the future doesn’t get built as quickly as it could have.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Risk
&lt;/h2&gt;

&lt;p&gt;I don’t think AI will replace developers. That’s the obvious discussion, and honestly, the less interesting one.&lt;/p&gt;

&lt;p&gt;The more interesting possibility is that &lt;strong&gt;AI makes us extremely efficient at continuing in the same direction we’re already going.&lt;/strong&gt; Not because it’s wrong, but because it’s shaped by the past and optimized around it.&lt;/p&gt;

&lt;p&gt;And if we’re not careful, we might start optimizing everything — our tools, our workflows, even our decisions — &lt;strong&gt;around what already exists, instead of pushing toward what doesn’t yet.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A Different Perspective
&lt;/h2&gt;

&lt;p&gt;On the other hand… when it comes to innovation, things are accelerating like crazy. New ideas are moving faster than ever. What used to take years now happens in months.&lt;/p&gt;

&lt;p&gt;But innovation has always been driven by a relatively small group — the ones exploring new tools and pushing boundaries.&lt;/p&gt;

&lt;p&gt;The rest of us?&lt;/p&gt;

&lt;p&gt;We sit down every day and work with what’s already there. Stable, supported, well-documented. The kind of stack AI understands really well.&lt;/p&gt;

&lt;p&gt;So yes — innovation is speeding up. But at the same time, AI might be making it easier than ever for everyone else to stay exactly where they are.&lt;/p&gt;

&lt;p&gt;And that’s exactly why I hope I’m wrong.&lt;/p&gt;




&lt;p&gt;So now I’m really curious — what do you think?&lt;/p&gt;

&lt;p&gt;If AI had existed in 2011, would we have built the modern web faster… or would we still be comfortably sitting in &lt;code&gt;index.php&lt;/code&gt;? 😄&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you made it this far, maybe consider giving me a like or even a follow on &lt;br&gt;
&lt;a href="https://www.linkedin.com/posts/sylwia-laskowska-5a8467131_jsnation-share-7452279325313179648-xQfn?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACBIGJABwz0qrMhjd-mEKrpauBXqa_cSD9M" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; 🙂&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I’ll admit — I’m definitely not a LinkedIn master 😄 My reach there isn’t amazing (I usually just post links to my articles, often with a delay xD). But I think I might have an idea for some shorter-form content there…&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>discuss</category>
      <category>programming</category>
    </item>
    <item>
      <title>Most Apps Are Slower Than They Need to Be — Here’s Why (Live Demo🛸)</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 16 Apr 2026 07:05:26 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/most-apps-are-slower-than-they-need-to-be-heres-why-live-demo-2hh8</link>
      <guid>https://dev.to/sylwia-lask/most-apps-are-slower-than-they-need-to-be-heres-why-live-demo-2hh8</guid>
      <description>&lt;p&gt;We’re a quarter into the 21st century, and the browser has quietly evolved into something much more than just a UI layer. It can run complex computations, leverage the GPU, process audio, simulate physics, and even run machine learning models. And yet… most of the time, we still treat it like a tool for forms and dashboards.&lt;/p&gt;

&lt;p&gt;I wanted to show what happens when we actually take advantage of what the platform already gives us.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The jsday conference in Bologna has just come to an end, and it was honestly amazing. If you’re wondering whether it’s worth attending events like this — it absolutely is. It’s an endless source of inspiration, far beyond what you get from articles or tutorials. If you have a minute, I’d really appreciate a like on my &lt;a href="https://www.linkedin.com/posts/sylwia-laskowska-5a8467131_a-week-ago-i-was-in-bologna-at-jsday-and-ugcPost-7449401735439171586-vVn5?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACBIGJABwz0qrMhjd-mEKrpauBXqa_cSD9M" rel="noopener noreferrer"&gt;LinkedIn post&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vww16ej6l6yf8agrwip.jpg" alt="Woman speaking at converence" width="800" height="800"&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftir3m191i8xtstkjdyr5.jpg" alt="Woman standing near conference banner" width="800" height="800"&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv1e6dk1qlw17hoiebyqa.jpg" alt="Icecream" width="800" height="1067"&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you’ve been following my posts, you probably know that my talk was about WebGPU and WebAssembly, and what we can gain by using them in the browser.&lt;/p&gt;

&lt;p&gt;So what are these two technologies, and why does it make more sense to talk about them together rather than separately?&lt;/p&gt;

&lt;p&gt;They are complementary by design. WebAssembly runs on the CPU and allows us to execute low-level, compiled code directly in the browser. WebGPU, as the name suggests, gives us access to the GPU — not in some abstracted, limited way, but in a relatively direct and powerful form.&lt;/p&gt;

&lt;p&gt;If you want a deeper dive, I’ve written more about them here:&lt;br&gt;
WASM → &lt;a href="https://dev.to/sylwia-lask/will-webassembly-kill-javascript-lets-find-out-live-demo-43ln"&gt;https://dev.to/sylwia-lask/will-webassembly-kill-javascript-lets-find-out-live-demo-43ln&lt;/a&gt;&lt;br&gt;
WebGPU → &lt;a href="https://dev.to/sylwia-lask/why-webgpu-feels-like-the-future-of-the-web-live-demo--2bjh"&gt;https://dev.to/sylwia-lask/why-webgpu-feels-like-the-future-of-the-web-live-demo--2bjh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But instead of talking about them in isolation, I wanted to show a concrete example of what happens when you combine them.&lt;/p&gt;

&lt;p&gt;Because I’m not a fan of theory without practice, I built a small demo.&lt;/p&gt;

&lt;p&gt;👉 Repo: &lt;a href="https://github.com/sylwia-lask/text-goes-boom" rel="noopener noreferrer"&gt;https://github.com/sylwia-lask/text-goes-boom&lt;/a&gt;&lt;br&gt;
👉 Live demo: &lt;a href="https://sylwia-lask.github.io/text-goes-boom/" rel="noopener noreferrer"&gt;https://sylwia-lask.github.io/text-goes-boom/&lt;/a&gt;&lt;br&gt;
(Fair warning — especially the JS canvas benchmark can get your CPU quite warm 😅)&lt;/p&gt;

&lt;p&gt;What does it do? You type text into an input field. The text is converted into particles. And when you click and drag your mouse across it… the text explodes.&lt;/p&gt;

&lt;p&gt;Completely useless? Yes. Slightly addictive? Also yes 😅&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvw208qpa3yvwtellp9tb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvw208qpa3yvwtellp9tb.png" alt="App screenshot" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What’s happening under the hood?
&lt;/h2&gt;

&lt;p&gt;First, the text from the input is rendered into an image bitmap using plain JavaScript and Canvas 2D. This is exactly the kind of task where the classic browser APIs are already perfectly sufficient, and there’s no real reason to move it elsewhere — especially for a demo like this.&lt;/p&gt;

&lt;p&gt;Next, the bitmap is passed to WebAssembly. This is where I run a deliberately “somewhat over-engineered” algorithm that maps the image into particles. I wanted WASM to actually have something meaningful to do, and let’s be honest — it also just looks cooler this way. Out of curiosity, I benchmarked it against an equivalent implementation written in JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcd7budb10l30lj7tqoo5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcd7budb10l30lj7tqoo5.png" alt="WASM vs JS benchmark. WASM is 2.5x fater" width="495" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, this is where we get the first tangible gain. WebAssembly is roughly 2–3× faster in this case. And this isn’t even a best-case scenario — I put quite a bit of effort into optimizing the JavaScript version as well, just to make things fair and not give Rust an easy win.&lt;/p&gt;

&lt;p&gt;In this particular demo, the difference doesn’t matter that much because this step only runs once during rebuild. But it’s not about this one case — it’s about the order of magnitude. What happens if you need to perform a similar operation hundreds or thousands of times? That’s where this starts to become very real.&lt;/p&gt;

&lt;p&gt;And then comes the part where things get interesting.&lt;/p&gt;

&lt;p&gt;The particles are passed to WebGPU — and this is where the browser really starts to flex.&lt;/p&gt;

&lt;p&gt;The “classic” JavaScript + Canvas 2D implementation starts struggling on my machine at around 40k particles.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgvsj6iokt6tccsjoih2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgvsj6iokt6tccsjoih2.png" alt="App canvas 2d implementation" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Frame rate drops, everything slows down, and you can feel the limits pretty quickly.&lt;/p&gt;

&lt;p&gt;Meanwhile, WebGPU… doesn’t even flinch.&lt;/p&gt;

&lt;p&gt;More than 500,000 particles. Each with its own physics. Smooth animation. Stable FPS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfwj8eih8u0j33qg269z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfwj8eih8u0j33qg269z.png" alt="WebGPU renders more than 500k particles" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this point it stops being a small optimization and starts feeling like a completely different class of capability. The same browser, the same app, the same machine — but a totally different level of performance, simply by using the right tool for the job.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where does this actually matter?
&lt;/h2&gt;

&lt;p&gt;This is obviously not your typical frontend CRUD setup. You probably don’t need WebGPU to build a dashboard or a form, and in many cases the real bottleneck is the network, not computation.&lt;/p&gt;

&lt;p&gt;But there are entire classes of problems where this approach makes a huge difference: real-time data visualization, physics simulations, graphics-heavy interfaces, audio processing, games, image or video transformations, and of course — matrix-heavy workloads like machine learning and LLMs running directly in the browser.&lt;/p&gt;

&lt;p&gt;And the funny thing is, you don’t need this… until suddenly you really do. A product evolves, requirements grow, performance becomes an issue, or you want to move part of the workload from the backend to the client. That’s when things start getting interesting.&lt;/p&gt;




&lt;h2&gt;
  
  
  One more thing
&lt;/h2&gt;

&lt;p&gt;If you take a look at the repository, you might notice something important.&lt;/p&gt;

&lt;p&gt;This is just a regular React app.&lt;/p&gt;

&lt;p&gt;There’s no exotic architecture, no “from another planet” stack. Yes, there’s Rust compiled to WASM and there are WebGPU shaders — but they’re simply embedded into a standard frontend setup. The rest of the app looks exactly like something you could start in your project tomorrow.&lt;/p&gt;

&lt;p&gt;That was intentional. I wanted to show that this isn’t some distant, experimental playground reserved for niche use cases. It’s something you can already integrate into real-world applications — incrementally, when you actually need it.&lt;/p&gt;

&lt;p&gt;Of course, WebGPU is not yet universally supported, so you’ll need a fallback strategy. But at this point, for a large portion of users, there’s little reason not to start exploring it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final thought
&lt;/h2&gt;

&lt;p&gt;The browser is no longer just a place where we render UI.&lt;/p&gt;

&lt;p&gt;It’s a serious compute platform — one that already gives us access to both CPU and GPU, right out of the box.&lt;/p&gt;

&lt;p&gt;You don’t need WebAssembly or WebGPU in every project. Most of the time, you’ll be perfectly fine without them.&lt;/p&gt;

&lt;p&gt;But the moment you start hitting performance limits, or your problem shifts from “moving data around” to “actually computing things”… you might realize that the platform already had the solution all along.&lt;/p&gt;

&lt;p&gt;And all you had to do was use it. 🚀&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>webassembly</category>
      <category>webgpu</category>
    </item>
    <item>
      <title>You’re a Real Software Developer Only If…</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 09 Apr 2026 21:07:21 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/youre-a-real-software-developer-only-if-2mo8</link>
      <guid>https://dev.to/sylwia-lask/youre-a-real-software-developer-only-if-2mo8</guid>
      <description>&lt;p&gt;Uff, I’m finally done with my talk at jsDay 2026!&lt;/p&gt;

&lt;p&gt;And honestly? It went &lt;strong&gt;at least good&lt;/strong&gt;. People showed up, they asked questions… what more could you want? 😄&lt;/p&gt;

&lt;p&gt;During the talk, I felt like I was &lt;em&gt;among my people&lt;/em&gt; — that beautiful species of nerds who laugh at programming jokes without needing them explained ❤️&lt;/p&gt;

&lt;p&gt;I’ll write a proper recap next week, but for now, a quick story from yesterday.&lt;/p&gt;




&lt;p&gt;I was sitting at the airport in Munich.&lt;br&gt;
For five hours.&lt;/p&gt;

&lt;p&gt;Not exactly the plan.&lt;/p&gt;

&lt;p&gt;I was supposed to have a one-hour layover and be enjoying the Italian sun by 5 PM. Instead, my first flight got delayed, I missed the connection, and… well.&lt;/p&gt;

&lt;p&gt;Luckily, there was another flight later that day. Six hours later…&lt;/p&gt;

&lt;p&gt;But as we say in Poland: &lt;em&gt;every cloud has a silver lining.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I used that time to add &lt;strong&gt;fallbacks for absolutely EVERYTHING&lt;/strong&gt; in my presentation. (Yes, I even installed service workers last minute — and it saved me later like crazy 🔥)&lt;/p&gt;

&lt;p&gt;I also definitely hit my daily cardio goal trying to navigate that absurdly large airport.&lt;/p&gt;

&lt;p&gt;And when boredom finally kicked in, I started writing this post.&lt;/p&gt;




&lt;p&gt;This is also a small tribute to &lt;a class="mentioned-user" href="https://dev.to/hadil"&gt;@hadil&lt;/a&gt; and her brilliant post:&lt;br&gt;
&lt;a href="https://dev.to/hadil/youre-a-real-javascript-developer-only-if-294c"&gt;You're the real JavaScript Developer Only If...&lt;/a&gt;. I’ve wanted to write something like this for months. And since I haven’t written anything in this style in a while… I’ve earned it 😄&lt;/p&gt;




&lt;h2&gt;
  
  
  You’re a real developer only if:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  💥 You’ve broken production at least once
&lt;/h3&gt;

&lt;p&gt;There’s even a Polish saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Kto produkcji nie wy*ebie, ten nie zazna szczęścia w niebie”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Loosely translated into English:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“If prod you’ve never slain, dev heaven you won’t gain.”&lt;/em&gt; 😄&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🐛 You’ve fixed a bug… completely by accident
&lt;/h3&gt;

&lt;p&gt;Something sat in TODO for months (or years), and suddenly… it just works.&lt;/p&gt;

&lt;p&gt;Or you changed something totally unrelated and magically fixed another issue.&lt;/p&gt;

&lt;p&gt;No idea why. No idea how.&lt;br&gt;
You just slowly back away and hope it stays that way.&lt;/p&gt;




&lt;h3&gt;
  
  
  🤯 At least once during debugging you thought:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“This makes absolutely no sense.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And instead of stepping back and thinking…&lt;br&gt;
you added &lt;strong&gt;more logs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And then more logs.&lt;/p&gt;

&lt;p&gt;And then one final &lt;code&gt;console.log("WHAT IS GOING ON")&lt;/code&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧨 You were afraid to touch code that looks terrible… but works
&lt;/h3&gt;

&lt;p&gt;Because deep down you know:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This is held together by vibes and legacy decisions.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And if you touch it, something &lt;em&gt;completely unrelated&lt;/em&gt; will break.&lt;/p&gt;




&lt;h3&gt;
  
  
  💻 You wrote code that worked perfectly locally…
&lt;/h3&gt;

&lt;p&gt;…and exploded in production&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;different environment&lt;/li&gt;
&lt;li&gt;missing env variable&lt;/li&gt;
&lt;li&gt;timezone issues&lt;/li&gt;
&lt;li&gt;race conditions&lt;/li&gt;
&lt;li&gt;or just… vibes again&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🗑️ You accidentally dropped a database
&lt;/h3&gt;

&lt;p&gt;Maybe not the whole thing. Maybe just a table. Maybe just &lt;em&gt;half&lt;/em&gt; the data.&lt;/p&gt;

&lt;p&gt;But still. Character development.&lt;/p&gt;




&lt;h3&gt;
  
  
  🖥️ You’ve said:
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“It works on my machine.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And you meant it. With full confidence.&lt;/p&gt;




&lt;h3&gt;
  
  
  🔄 You blamed the backend (if you’re frontend)…
&lt;/h3&gt;

&lt;p&gt;or the frontend (if you’re backend)&lt;/p&gt;

&lt;p&gt;Preferably both, within the same debugging session.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 During one debugging session you thought:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;first: &lt;em&gt;“I’m an idiot.”&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;then: &lt;em&gt;“Wait… I’m a genius.”&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sometimes multiple times in a loop.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final verdict
&lt;/h2&gt;

&lt;p&gt;If you answered “yes” to most of these:&lt;br&gt;
👉 congratulations, you’re definitely a software developer.&lt;/p&gt;

&lt;p&gt;If about half:&lt;br&gt;
👉 you just need more experience.&lt;/p&gt;

&lt;p&gt;If less than two:&lt;br&gt;
👉 what are you even doing here? Go write more code 😄&lt;/p&gt;




&lt;h2&gt;
  
  
  Your turn 👇
&lt;/h2&gt;

&lt;p&gt;What would YOU add to this list?&lt;/p&gt;

&lt;p&gt;Because I’m 100% sure we’ve all got at least one story that would fit perfectly here 😄&lt;/p&gt;

</description>
      <category>jokes</category>
      <category>devlive</category>
    </item>
    <item>
      <title>9 Things You’re Overengineering (The Browser Already Solved Them)</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 02 Apr 2026 07:53:11 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/9-things-youre-overengineering-the-browser-already-solved-them-o99</link>
      <guid>https://dev.to/sylwia-lask/9-things-youre-overengineering-the-browser-already-solved-them-o99</guid>
      <description>&lt;p&gt;I love writing philosophical essays — thoughts about code, work, all that stuff. I also love deep technical dives. But I know &lt;em&gt;you&lt;/em&gt; love my lists of cool features that not everyone has heard about yet 😄&lt;/p&gt;

&lt;p&gt;What’s up with me? This week I’m preparing for a conference, fighting performance issues, and trying to get at least somewhat ready for the upcoming holidays 😉 &lt;/p&gt;

&lt;p&gt;Something nice happened too. I enjoy writing — not just technical articles, but in general. Last summer my life changed quite a bit, and to keep my sanity I started writing a sci-fi story, which I submitted to a Polish science fiction foundation competition. I didn’t win, but my story made it pretty far — around 13th place out of 179 submissions. Considering it was my first attempt at this kind of writing… it could have gone worse 😄&lt;/p&gt;

&lt;p&gt;And speaking of sci-fi — the kind happening right in front of us 😉 Today I’ve prepared a batch of things the browser can already do, which honestly didn’t fit in my head not that long ago. A lot of these are still not that widely known, and yet many of them are already supported across modern browsers. Have fun!&lt;/p&gt;




&lt;h2&gt;
  
  
  1. “Let me just run this later” → &lt;code&gt;requestIdleCallback&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;At first I thought this API was pointless. It basically lets you run some code when nothing interesting is happening. Ok… cool… but why would I care? &lt;/p&gt;

&lt;p&gt;Turns out — there are tons of use cases. For example, collecting data about how the user behaves on your page — definitely not something you want to do while your 200 components are rendering 😅 Or loading less important data, preprocessing something, generating images in the background. &lt;/p&gt;

&lt;p&gt;Honestly, there are probably as many use cases as there are developers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;trackUserScrolling&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User scrolled. This changes everything.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;requestIdleCallback&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;requestIdleCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;trackUserScrolling&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;trackUserScrolling&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; modern browsers (historically missing in Safari, so fallback is still a good idea)&lt;/p&gt;




&lt;h2&gt;
  
  
  2. “Why is my input not highlighting???” → &lt;code&gt;:focus-within&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;It’s easy to style an element that has focus. But what if you want to style the parent div? For example, make it pink, add some flowers 😉 You can write 40 lines of JavaScript… or just use &lt;code&gt;:focus-within&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Works. No listeners. No bugs. No suffering.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.form-field&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#ccc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.form-field&lt;/span&gt;&lt;span class="nd"&gt;:focus-within&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;hotpink&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-field"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Type something meaningful..."&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; basically everywhere that matters&lt;/p&gt;




&lt;h2&gt;
  
  
  3. “Let’s show offline mode” → &lt;code&gt;navigator.onLine&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Have you ever built a PWA? Because I have, and the eternal problem is what to do when the user loses connection (e.g. they’re in the wilderness or just walked into an elevator 😄). You can write a bunch of complicated ifs, or just listen to &lt;code&gt;offline&lt;/code&gt; and &lt;code&gt;online&lt;/code&gt;. On &lt;code&gt;offline&lt;/code&gt; you can store data in IndexedDB, and when the user is back online, send it to the server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;offline&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are offline. Time to panic.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;online&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You're back. Panic cancelled.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; widely supported (but “online” ≠ “your backend works” 😅)&lt;/p&gt;




&lt;h2&gt;
  
  
  4. “Smooth animation, but make it cursed” → &lt;code&gt;requestAnimationFrame&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;We’ve all seen this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can &lt;em&gt;feel&lt;/em&gt; this is not the best idea 😉 It just lags. Luckily we have &lt;code&gt;requestAnimationFrame&lt;/code&gt;, which is synced with the browser repaint cycle, so things are actually smooth.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;animate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transform&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`translateX(&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px)`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;animate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;animate&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; everywhere&lt;/p&gt;




&lt;h2&gt;
  
  
  5. “This card should adapt… but only here” → container queries
&lt;/h2&gt;

&lt;p&gt;This feature feels almost unfair. I’m at a point in my career where I barely write CSS anymore (well, except for occasional moments like the one I described here: &lt;a href="https://dev.to/sylwia-lask/is-learning-css-a-waste-of-time-in-2026-nj3"&gt;Is learning CSS a waste of time in 2026?&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;But there was a time when I wrote &lt;em&gt;a lot&lt;/em&gt; of it. And wow — how much I would have given to apply media queries to a specific element instead of the whole viewport. Now we finally can. The component becomes self-aware, and we can go grab a coffee.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card-wrapper&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;container-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@container&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;400px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; modern browsers (add fallback if needed)&lt;/p&gt;




&lt;h2&gt;
  
  
  6. “Random ID, what could go wrong?” → &lt;code&gt;crypto.getRandomValues&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how bugs are born. It looks like “good enough” crypto from AliExpress and works… until it doesn’t. First of all, it depends on the engine implementation — we don’t really know what’s happening under the hood. Some patterns are absolutely possible, and with enough IDs you’re basically asking for duplicates.&lt;/p&gt;

&lt;p&gt;Luckily, we now have a simple native solution. It’s not a silver bullet, but &lt;code&gt;crypto.getRandomValues&lt;/code&gt; is pretty solid — much better entropy, no weird patterns, dramatically reduces the chance of collisions. The browser just does it properly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Uint8Array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;crypto&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getRandomValues&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bytes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Secure-ish ID:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; widely supported&lt;/p&gt;




&lt;h2&gt;
  
  
  7. “We need a modal” → &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;It’s honestly nice that browsers finally stepped up and said: fine, here’s your modal 😄 No more installing 12KB libraries just to open a dialog that users love so much. This one is also accessible by default, so win-win.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dialog&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"modal"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Are you sure you want to deploy on Friday?&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"modal.close()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Cancel&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"alert('Good luck 😬')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Deploy&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dialog&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"modal.showModal()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Open modal&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; modern browsers&lt;/p&gt;




&lt;h2&gt;
  
  
  8. “Voice input would be cool…” → Speech API
&lt;/h2&gt;

&lt;p&gt;Are you already installing transformers.js because you need speech recognition? Relax — turns out the browser has something for that too. Well… at least Chromium does 😄 So if you can “encourage” users to use Chrome, Edge, or something similar, you’re good. Personally, I’d still be careful with production use, but for demos? Why not.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SpeechRecognition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
  &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SpeechRecognition&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;webkitSpeechRecognition&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;SpeechRecognition&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;recognition&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;SpeechRecognition&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;recognition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onresult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You said:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;transcript&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nx"&gt;recognition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; mostly Chromium&lt;/p&gt;




&lt;h2&gt;
  
  
  9. “Will this CSS explode?” → &lt;code&gt;@supports&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s a modern solution to the classic “it works on my machine” — at least in CSS 😉 You don’t have to guess whether something will break your layout. Just wrap it in &lt;code&gt;@supports&lt;/code&gt;. There is a small catch — while support is very good, it’s not literally everywhere, so ironically… we could use &lt;code&gt;@supports&lt;/code&gt; for &lt;code&gt;@supports&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@supports&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;backdrop-filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;blur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;backdrop-filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;blur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; very good&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ But don’t get me wrong
&lt;/h2&gt;

&lt;p&gt;Libraries are great. Sometimes you absolutely need them. But sometimes… you’re installing a dependency for something the browser solved years ago. Before installing anything, just ask yourself (or Google): “Is the browser already smarter than me here?” Sometimes the answer is yes. And that’s… perfectly fine 😄&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>css</category>
      <category>browser</category>
    </item>
    <item>
      <title>How I Almost Burned Out Doing Everything “Right”</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 26 Mar 2026 08:51:08 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/how-i-almost-burned-out-doing-everything-right-31j6</link>
      <guid>https://dev.to/sylwia-lask/how-i-almost-burned-out-doing-everything-right-31j6</guid>
      <description>&lt;p&gt;Today I wanted to write a philosophical essay about AI. Or maybe something more technical. But once again, I decided to go for something personal.&lt;/p&gt;

&lt;p&gt;This is a reflection from the past few days, and I just need to write it down before the thoughts escape. You’ll soon see what I mean and why this is important to me.&lt;/p&gt;

&lt;p&gt;On DEV, there are often posts about productivity or burnout. Sometimes even takes like &lt;strong&gt;burnout isn’t really burnout&lt;/strong&gt;, just lack of direction, and &lt;strong&gt;impostor syndrome is not a syndrome at all&lt;/strong&gt;, just gaps in knowledge.&lt;/p&gt;

&lt;p&gt;Usually, when I come across something like that, I’m the first to comment:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Guys, let’s be kinder to ourselves. Life is not about running ourselves into the ground in the name of some higher purpose or mythical growth.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;We shouldn’t push ourselves to exhaustion&lt;/strong&gt; — especially since it often leads to the exact opposite of what we want.&lt;/p&gt;

&lt;p&gt;Well… I can be very wise like that. But as it turns out, I don’t always follow my own advice.&lt;/p&gt;

&lt;p&gt;Because I found myself right on the edge of serious overload. And as we all know, that’s a straight road to burnout if it lasts long enough.&lt;/p&gt;




&lt;h2&gt;
  
  
  How It Sneaks Up on You
&lt;/h2&gt;

&lt;p&gt;Let me start with this: I have a good job. It’s interesting, socially meaningful, and on a normal day, the workload is very reasonable. However, we have a roadmap, and I knew before that February and March would be heavier.&lt;/p&gt;

&lt;p&gt;On top of that, I have a normal life — family, shopping, cooking, managing a million little things.&lt;/p&gt;

&lt;p&gt;These are my baseline responsibilities.&lt;/p&gt;

&lt;p&gt;Then I added a few more things.&lt;/p&gt;

&lt;p&gt;New Year’s resolutions: nothing crazy, just half an hour of exercise a day and some light dieting — intermittent fasting, small deficit. Sounds reasonable, right?&lt;/p&gt;

&lt;p&gt;Then there’s my DEV blog. I publish one post per week. I genuinely love it. Writing doesn’t stress me at all — I swear it feels just as enjoyable to write as it is (hopefully) to read. It’s like a much more interesting version of Facebook for me 😄&lt;/p&gt;

&lt;p&gt;But still — even if something is enjoyable, it takes time.&lt;/p&gt;

&lt;p&gt;At the end of January, my talk got accepted for jsday in Bologna. The topic is quite challenging (WebGPU + WASM), and I set the bar high for myself — I wanted to prepare really good demos. At first, I went into full stress + research mode, but now I’m mostly excited.&lt;/p&gt;

&lt;p&gt;Then at work, I was offered a side project. Usually, I say no. This time it sounded interesting, short, and a good opportunity to learn something new. And yes, also earn some extra money.&lt;/p&gt;

&lt;p&gt;Why not?&lt;/p&gt;

&lt;p&gt;Then came an offer to write a collaboration article on DEV. I reject 99.9% of those. Not because the products are bad — usually they’re great. But they’re often not aligned with what I actually do, and I don’t have time to prepare this articles properly.&lt;/p&gt;

&lt;p&gt;This one, however, was perfectly aligned with my topics. It could be genuinely valuable. So maybe it’s not a sin to earn some extra money writing?&lt;/p&gt;

&lt;p&gt;Funny how often that thought appeared.&lt;/p&gt;




&lt;h2&gt;
  
  
  Everything Was “Fine” — Until It Wasn’t
&lt;/h2&gt;

&lt;p&gt;Notice something important:&lt;/p&gt;

&lt;p&gt;Every single one of these things was small.&lt;br&gt;
Interesting.&lt;br&gt;
Reasonable.&lt;br&gt;
Even exciting.&lt;/p&gt;

&lt;p&gt;Everything was fine until early March.&lt;/p&gt;

&lt;p&gt;Then I started feeling slightly irritated.&lt;/p&gt;

&lt;p&gt;Then more often I would just sit and not even know what to start with, even though I had plenty of things to do.&lt;/p&gt;

&lt;p&gt;Work got heavier, as expected. People started calling more often with different questions. I was getting more and more annoyed.&lt;/p&gt;

&lt;p&gt;The side project dragged on. More stress, more discussions, more negotiations. All normal things — but definitely not helping my situation.&lt;/p&gt;

&lt;p&gt;The collaboration article turned out to be much harder than expected. Another research rabbit hole. The article is still not published — although I’m not giving up on it yet.&lt;/p&gt;

&lt;p&gt;So I tried to be smart about it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The “Let Me Combine Everything” Phase
&lt;/h2&gt;

&lt;p&gt;I started thinking how to kill multiple birds with one stone.&lt;/p&gt;

&lt;p&gt;That’s how this article was born:&lt;br&gt;
&lt;a href="https://dev.to/sylwia-lask/why-are-we-still-doing-gpu-work-in-javascript-live-webgpu-benchmark-demo-4j6i"&gt;https://dev.to/sylwia-lask/why-are-we-still-doing-gpu-work-in-javascript-live-webgpu-benchmark-demo-4j6i&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It was supposed to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a conference demo&lt;/li&gt;
&lt;li&gt;a DEV article&lt;/li&gt;
&lt;li&gt;a test case for the plugin&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course… something didn’t work there either.&lt;/p&gt;

&lt;p&gt;At that point, I was already feeling mentally worse and worse. I was tired of any kind of activity.&lt;/p&gt;

&lt;p&gt;I realized that for weeks I had been doing something after work every single day — often for many hours. I could count on one hand the evenings when I actually did nothing.&lt;/p&gt;

&lt;p&gt;But all those things had to be finished, right?&lt;/p&gt;

&lt;p&gt;I started struggling more and more with priorities. Motivation was dropping.&lt;/p&gt;

&lt;p&gt;And of course, life happened on top of that — random &lt;em&gt;side quests&lt;/em&gt;. Family visiting for the weekend. Accountants not finishing taxes on time, so I had to call and follow up…&lt;/p&gt;

&lt;p&gt;At the same time, I rejected two more interesting opportunities — including one from a good friend. He said he’d call again in April… but a lot can change in business by then.&lt;/p&gt;

&lt;p&gt;In other words: an abundance of opportunities.&lt;/p&gt;




&lt;h2&gt;
  
  
  When It Hits
&lt;/h2&gt;

&lt;p&gt;At some point, it wasn’t just about feeling tired in the evening.&lt;/p&gt;

&lt;p&gt;I started waking up tired.&lt;/p&gt;

&lt;p&gt;I was going to sleep at 22:00 — which is very unlike me, because I’m a night owl.&lt;/p&gt;

&lt;p&gt;I even started wondering if I had some weird virus. Or maybe spring fatigue? 😄&lt;/p&gt;

&lt;p&gt;Then came something more worrying.&lt;/p&gt;

&lt;p&gt;I started feeling like the quality of my work was dropping. Maybe not objectively. Maybe only in my head. But the thought itself was unsettling.&lt;/p&gt;

&lt;p&gt;And then…&lt;/p&gt;

&lt;p&gt;I got something like mild PTSD from the Teams notification sound 😅&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Helped
&lt;/h2&gt;

&lt;p&gt;I knew I had to change something, or this would end badly — both physically and mentally.&lt;/p&gt;

&lt;p&gt;Funny enough, what helped me was… an LLM. In this case, ChatGPT.&lt;/p&gt;

&lt;p&gt;Of course, it’s not a replacement for a psychologist. But for smaller crises, it can be surprisingly helpful — just by organizing your thoughts.&lt;/p&gt;

&lt;p&gt;I described my situation. It processed everything logically and helped me build a “recovery plan”.&lt;/p&gt;

&lt;p&gt;And here’s the important part:&lt;/p&gt;

&lt;p&gt;I had many things that &lt;em&gt;had&lt;/em&gt; to be done. I couldn’t just drop everything or go on vacation.&lt;/p&gt;

&lt;p&gt;So instead, it suggested something simple:&lt;/p&gt;

&lt;p&gt;Remove everything that is not a priority right now.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Part That Surprised Me
&lt;/h2&gt;

&lt;p&gt;Remember the exercise and intermittent fasting? Those were the first things to go.&lt;/p&gt;

&lt;p&gt;They seem harmless. Healthy. Reasonable. But the model immediately “picked up” that this is not the time to stick to New Year’s resolutions.&lt;/p&gt;

&lt;p&gt;I hesitated… but deep down I knew it was the right call.&lt;/p&gt;

&lt;p&gt;A week or two break from exercise won’t destroy a habit. I still move, I walk, I’m active.&lt;/p&gt;

&lt;p&gt;Intermittent fasting can wait. Worst case, I’ll go to the conference a bit chubbier 😄 (just kidding — it really doesn’t matter)&lt;/p&gt;

&lt;p&gt;Everything that is not urgent can wait.&lt;/p&gt;

&lt;p&gt;For the rest — no need for perfection. Good enough is enough.&lt;/p&gt;

&lt;p&gt;If I like blogging, I can write lighter things for a while.&lt;/p&gt;

&lt;p&gt;No new commitments. No competitions or hackathons, even if they’re tempting.&lt;/p&gt;

&lt;p&gt;And most importantly:&lt;/p&gt;

&lt;p&gt;Sleep and recovery are not optional.&lt;/p&gt;




&lt;h2&gt;
  
  
  It’s a Process
&lt;/h2&gt;

&lt;p&gt;It’s not like everything suddenly became perfect.&lt;/p&gt;

&lt;p&gt;I’m still tired.&lt;/p&gt;

&lt;p&gt;But after putting things in order — both in my head and in my life — my passions started coming back.&lt;/p&gt;

&lt;p&gt;I’m excited about the conference again. I genuinely want to show people cool things.&lt;/p&gt;

&lt;p&gt;And just recently, nothing really excited me anymore.&lt;/p&gt;

&lt;p&gt;Fun fact: It’s not even the first time I’ve been in a situation like this. In the past, after long periods of overload, I would just completely shut down — months of doing nothing after work, whether it was games or just watching series. This time, I caught it earlier.&lt;/p&gt;




&lt;h2&gt;
  
  
  One More Observation
&lt;/h2&gt;

&lt;p&gt;There’s one pattern I noticed.&lt;/p&gt;

&lt;p&gt;Several times, I said yes to something because of “extra money”.&lt;/p&gt;

&lt;p&gt;Not because I needed it. It didn’t really change my financial situation.&lt;/p&gt;

&lt;p&gt;And now?&lt;/p&gt;

&lt;p&gt;I’ll probably need a few days off to recover.&lt;/p&gt;

&lt;p&gt;So in the end… I’ll break even 😄&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;I want to say this one more time:&lt;/p&gt;

&lt;p&gt;Every single thing I took on was small.&lt;br&gt;
Reasonable.&lt;br&gt;
Positive.&lt;br&gt;
With a clear end in sight.&lt;/p&gt;

&lt;p&gt;And still — I got overloaded.&lt;/p&gt;

&lt;p&gt;So what happens if someone pushes like this not for weeks, but for months or years?&lt;/p&gt;

&lt;p&gt;And then reads that burnout is their fault, because they woke up too late or learned the wrong way?&lt;/p&gt;




&lt;h2&gt;
  
  
  Take Care of Yourself
&lt;/h2&gt;

&lt;p&gt;Your physical and mental health matter the most.&lt;/p&gt;

&lt;p&gt;If you want to succeed in anything, it’s better to do less, but consistently.&lt;/p&gt;

&lt;p&gt;If you need to sprint — make sure there’s a clear finish line, and a recovery phase afterwards.&lt;/p&gt;

&lt;p&gt;And remember:&lt;/p&gt;

&lt;p&gt;Plans are for you.&lt;br&gt;
Not the other way around.&lt;/p&gt;

&lt;p&gt;If something clearly doesn’t work — recalibrate.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>productivity</category>
      <category>mentalhealth</category>
    </item>
    <item>
      <title>The Email That Nearly Stopped Me From Becoming a Developer</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Wed, 18 Mar 2026 10:15:29 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/the-email-that-nearly-stopped-me-from-becoming-a-developer-3n77</link>
      <guid>https://dev.to/sylwia-lask/the-email-that-nearly-stopped-me-from-becoming-a-developer-3n77</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/wecoded-2026"&gt;2026 WeCoded Challenge&lt;/a&gt;: Echoes of Experience&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I stood on stage in front of a nearly full cinema hall that had been converted into a conference venue for the day. My slides filled the enormous screen behind me. Bright white lights shone straight into my face, making it almost impossible to see the audience.&lt;/p&gt;

&lt;p&gt;I had been preparing for this talk for several weeks. Not because the topic was difficult. Quite the opposite — I knew it very well.&lt;/p&gt;

&lt;p&gt;But there was something else in the back of my mind.&lt;br&gt;
How do I convince the audience to trust me?&lt;/p&gt;

&lt;p&gt;I am not a programming celebrity. My last public talk had been more than five years earlier, and I was pretty sure nobody remembered it. And, if I'm being honest, I don't exactly look like the stereotypical senior developer or team lead.&lt;/p&gt;

&lt;p&gt;More like: &lt;em&gt;“Where did she even come from?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Of course, all of this existed only in my head. Conference audiences are usually wonderful and supportive.&lt;/p&gt;

&lt;p&gt;Still, the thought kept returning. There had to be a simple way to win them over. &lt;/p&gt;

&lt;p&gt;And then I realized I had the perfect story.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbew6thzcfrohro2bnsn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqbew6thzcfrohro2bnsn.jpg" alt="Me on JS Poland stage" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I began my talk about migrating legacy systems to modern frameworks.&lt;/p&gt;

&lt;p&gt;I started with a few sentences I had memorized — a classic tip for public speakers: memorize the beginning, and the rest will flow.&lt;/p&gt;

&lt;p&gt;Then I said:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I actually know quite a lot about legacy systems.&lt;br&gt;
I built my first website when I was twelve.&lt;br&gt;
HTML 4.01. Framesets. Visitor counter. Guestbook.&lt;br&gt;
No CSS.&lt;br&gt;
But who needs CSS when you can have falling snow in winter?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On the slide behind me appeared a screenshot of that ancient website — or rather a reconstruction of it, because the original had disappeared somewhere in the depths of the early internet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faitxi6sp8cnzrdqlm4k5.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faitxi6sp8cnzrdqlm4k5.gif" alt="Website from 2000 year with 9 planets" width="600" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The audience burst out laughing and applauded.&lt;/p&gt;

&lt;p&gt;I breathed out in relief.&lt;/p&gt;

&lt;p&gt;After that, everything flowed easily. The presentation went well — even I have to admit that, and believe me, I am my own harshest critic. A few people came up to talk afterward, some congratulated me, and a couple even quoted parts of my talk later on LinkedIn.&lt;/p&gt;

&lt;p&gt;It was a wonderful moment.&lt;/p&gt;

&lt;p&gt;But to understand why that joke worked so well, we need to go much further back in time.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Internet at the Turn of the Millennium
&lt;/h2&gt;

&lt;p&gt;Poland, late 90s.&lt;/p&gt;

&lt;p&gt;Our first PC ran some old version of Windows that had to be installed from floppy disks. The monitor was a huge CRT beast that took up half the desk. &lt;/p&gt;

&lt;p&gt;Connecting to the internet was a whole ritual back then.&lt;/p&gt;

&lt;p&gt;First you clicked the dial-up icon. Then the modem began its strange mechanical symphony — screeches, whistles, and metallic noises that sounded like two robots arguing through a telephone line.&lt;/p&gt;

&lt;p&gt;While the modem was working, the phone line was dead. If someone tried to call us, they would just hear an endless busy signal.&lt;/p&gt;

&lt;p&gt;And the internet was expensive.&lt;/p&gt;

&lt;p&gt;I had a strict limit: fifteen minutes per day. If the phone bill was too high at the end of the month, my punishment was simple — no internet the following month.&lt;/p&gt;

&lt;p&gt;And as you probably remember, pages loaded painfully slowly back then.&lt;/p&gt;

&lt;p&gt;After yet another expensive month, my father announced that he was deeply disappointed in this whole internet thing. If he had known I would just waste time browsing strange websites, he never would have arranged access in the first place. Maybe it was time to disconnect it altogether.&lt;/p&gt;

&lt;p&gt;I was terrified.&lt;/p&gt;

&lt;p&gt;But that threat also inspired me.&lt;/p&gt;

&lt;p&gt;If I loved the internet so much, maybe I should create something on it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building My First Website
&lt;/h2&gt;

&lt;p&gt;I downloaded an HTML course onto the hard drive — reading tutorials online was out of the question with our connection limits.&lt;/p&gt;

&lt;p&gt;I still remember how exciting it felt. I studied the tags and built my first pages with flushed cheeks and total concentration.&lt;/p&gt;

&lt;p&gt;CSS either didn't exist yet or wasn't widely used, because I didn't touch it at all. Everything relied on attributes like &lt;code&gt;fontSize&lt;/code&gt; and &lt;code&gt;fontColor&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;One of the biggest design achievements of the time was something called &lt;strong&gt;framesets&lt;/strong&gt; — splitting the screen into multiple HTML files and navigating the site that way.&lt;/p&gt;

&lt;p&gt;The topic of the site was obvious to me. I was fascinated by space, especially the Solar System — which, at the time, still had nine planets. 🥹&lt;/p&gt;

&lt;p&gt;Eventually I needed hosting and a domain name. Naturally they had to be free — we are talking about a website built by a twelve-year-old.&lt;/p&gt;

&lt;p&gt;To his credit, when my dad saw how passionate I had become, he quietly stretched the fifteen-minute internet rule so I could keep learning.&lt;/p&gt;

&lt;p&gt;Finally, my creation went live.&lt;/p&gt;

&lt;p&gt;I was incredibly proud.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Email
&lt;/h2&gt;

&lt;p&gt;So did I live happily ever after, climbing the ladder of a successful programming career?&lt;/p&gt;

&lt;p&gt;Not quite.&lt;/p&gt;

&lt;p&gt;A few days or maybe weeks after launching the site, I sent the link to my cousin, who was a year older and also loved computers. My cousin had a friend — three or four years older than me — who, in my eyes, was a true computer genius.&lt;/p&gt;

&lt;p&gt;He probably was objectively good. A few years later he went on to study computer science at one of the best universities in Poland.&lt;/p&gt;

&lt;p&gt;And, if I'm being honest, I also had a bit of a crush on him. Apparently I have always had a soft spot for nerds. 😅 (To be honest, today I don't even remember his name.)&lt;/p&gt;

&lt;p&gt;A few days later he sent me a long email.&lt;/p&gt;

&lt;p&gt;In polite language, he absolutely destroyed my website.&lt;/p&gt;

&lt;p&gt;He wrote things like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This website is cluttering the internet.”&lt;br&gt;
“You can immediately tell it was made by a twelve-year-old.”&lt;br&gt;
“You should probably just delete it.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I remember staring at the screen in silence. My face went hot.&lt;/p&gt;

&lt;p&gt;I didn't delete the website.&lt;/p&gt;

&lt;p&gt;But I also didn't keep learning to program.&lt;/p&gt;

&lt;p&gt;Quite the opposite — the email discouraged me so much that I completely stopped. And I had such ambitious plans back then.&lt;/p&gt;

&lt;p&gt;If I had shown that message to my parents, they probably would have laughed it off. But I was too embarrassed, so I kept it to myself.&lt;/p&gt;

&lt;p&gt;Until now.&lt;/p&gt;




&lt;h2&gt;
  
  
  Coming Back
&lt;/h2&gt;

&lt;p&gt;Looking back today, I don't even blame that boy.&lt;/p&gt;

&lt;p&gt;If he somehow remembered sending that email, he would probably shake his head in disbelief.&lt;/p&gt;

&lt;p&gt;Eventually, as you can see, I returned to programming. By the time I was fourteen, I was already building websites that didn't just clutter the internet — they even earned me a bit of money.&lt;/p&gt;

&lt;p&gt;And yet sometimes I still wonder what might have happened if that message hadn't clipped my wings.&lt;/p&gt;

&lt;p&gt;Maybe I would have become a professor at MIT.&lt;/p&gt;

&lt;p&gt;Maybe the next Mark Zuckerberg. 🤣&lt;/p&gt;

&lt;p&gt;Of course I'm joking. Most likely my career would have turned out exactly the same as it did — which, honestly, is not bad at all.&lt;/p&gt;

&lt;p&gt;But I still think about that twelve-year-old girl staring at the screen.&lt;/p&gt;

&lt;p&gt;And sometimes I wonder how many future developers end their story right there.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Small Lesson
&lt;/h2&gt;

&lt;p&gt;Constructive criticism is one of the most valuable things we can receive as developers.&lt;/p&gt;

&lt;p&gt;But there is a difference between helping someone grow and convincing them they should never have started in the first place.&lt;/p&gt;

&lt;p&gt;Every developer begins with something imperfect. Something messy. Something amateur.&lt;/p&gt;

&lt;p&gt;Something like a twelve-year-old’s website with framesets, a guestbook, and falling snow.&lt;/p&gt;

&lt;p&gt;The lucky ones simply never receive an email telling them to delete it.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>wecoded</category>
      <category>dei</category>
      <category>career</category>
    </item>
    <item>
      <title>Why Are We Still Doing GPU Work in JavaScript? (Live WebGPU Benchmark &amp; Demo🚀)</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 12 Mar 2026 10:51:33 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/why-are-we-still-doing-gpu-work-in-javascript-live-webgpu-benchmark-demo-4j6i</link>
      <guid>https://dev.to/sylwia-lask/why-are-we-still-doing-gpu-work-in-javascript-live-webgpu-benchmark-demo-4j6i</guid>
      <description>&lt;p&gt;JavaScript has been the main language of the web for years. Its popularity probably surprised even its creator, Brendan Eich, who famously built the first version of the language in just about a week.&lt;/p&gt;

&lt;p&gt;One of the reasons JavaScript became so dominant is the sheer power of the browser. From a single application — the browser — we can access hundreds of millions of websites and applications. No need to download or install anything. That's huge part of the success.&lt;/p&gt;

&lt;p&gt;And browser vendors have been working incredibly hard to make JavaScript faster and faster. Modern engines are extremely optimized. But there is still one fundamental limitation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript runs on the CPU.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So what about tasks that are perfect for the GPU?&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;WebGPU&lt;/strong&gt; enters the scene. 🚀&lt;br&gt;
Let’s take a look at what it can actually do — and when it really makes sense to use it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;By the way — my &lt;a href="//jsDay.it"&gt;jsDay&lt;/a&gt; talk is getting closer and closer! I’ll be speaking there about **WebGPU + WebAssembly&lt;/em&gt;&lt;em&gt;, which is exactly the kind of things you see in this article: GPUs in the browser, compute shaders, and pushing the web a bit further than usual.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;To celebrate that (and maybe calm my pre-conference nerves a little 😅), I recorded a short promo reel for the talk which you can find &lt;a href="https://www.linkedin.com/posts/grusp_jsday26-javascript-webgpu-activity-7437146450838437888-E0qs?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAACBIGJABwz0qrMhjd-mEKrpauBXqa_cSD9M" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you feel like watching it and dropping a like, I’d really appreciate it.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;And if you’re coming to **jsDay&lt;/em&gt;&lt;em&gt;, come say hi after the talk!&lt;/em&gt; 🙂&lt;/p&gt;


&lt;h2&gt;
  
  
  A Quick Note Before We Start
&lt;/h2&gt;

&lt;p&gt;I already wrote about WebGPU in another article, so I won’t repeat the full introduction here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/sylwia-lask/why-webgpu-feels-like-the-future-of-the-web-live-demo--2bjh"&gt;Why WebGPU Feels Like the Future of the Web (Live Demo)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But let’s briefly recap one important thing.&lt;/p&gt;

&lt;p&gt;WebGPU is not just about graphics — although it does that beautifully.&lt;br&gt;
It also gives us something extremely powerful:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;access to GPU compute.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  CPU vs GPU (Quick Reminder)
&lt;/h2&gt;

&lt;p&gt;This will be obvious to most of you, but let's make a quick distinction for beginners and those who slept through their first semester of college:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CPUs&lt;/strong&gt; are great at doing a few complex things one after another.&lt;br&gt;
In the browser, that usually means &lt;strong&gt;JavaScript or WebAssembly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPUs&lt;/strong&gt; are great at doing simple things &lt;strong&gt;massively in parallel&lt;/strong&gt;.&lt;br&gt;
And in the browser, the API that lets us use them is &lt;strong&gt;WebGPU&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That’s why GPUs are so good at tasks where the &lt;strong&gt;same operation needs to be repeated thousands or millions of times&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  I Wanted to Test It Myself
&lt;/h2&gt;

&lt;p&gt;If you read my posts regularly, you probably know I don’t like taking things on faith. I prefer to try myself. 🙂&lt;/p&gt;

&lt;p&gt;So I built a small application that benchmarks &lt;strong&gt;JavaScript vs WebGPU&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These are not super-academic benchmarks where the exact same algorithm is implemented line-by-line in different systems. I probably wouldn't have gotten a PhD from MIT thanks to them. 😅&lt;/p&gt;

&lt;p&gt;Instead, I tried something more practical:&lt;/p&gt;

&lt;p&gt;I tested how both technologies behave when they solve the &lt;strong&gt;same problem in a way that is natural for them&lt;/strong&gt;, without intentionally favoring either one.&lt;/p&gt;

&lt;p&gt;You can explore everything here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub repo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sylwia-lask/webgpu-bench" rel="noopener noreferrer"&gt;https://github.com/sylwia-lask/webgpu-bench&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live demo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://sylwia-lask.github.io/webgpu-bench/" rel="noopener noreferrer"&gt;https://sylwia-lask.github.io/webgpu-bench/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to play with it yourself. 😄&lt;/p&gt;


&lt;h2&gt;
  
  
  Scenario 1 — Particle Simulation
&lt;/h2&gt;

&lt;p&gt;The first test was a &lt;strong&gt;particle simulation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you read about WebGPU online — or ask ChatGPT — this is usually presented as a classic example of GPU superiority.&lt;/p&gt;

&lt;p&gt;Each particle has two properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;position &lt;code&gt;(x, y)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;velocity &lt;code&gt;(vx, vy)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every frame we update it like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;vx&lt;/span&gt;
&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;vy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if the particle hits the screen border, we reverse the velocity to simulate a bounce.&lt;/p&gt;

&lt;p&gt;Pseudo-code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="n"&gt;particle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;vel&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;vel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;vel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;vel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;vel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So the compute shader effectively performs something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;vel&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s basically &lt;strong&gt;two float additions per particle&lt;/strong&gt; (plus a bounce check).&lt;/p&gt;




&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;Surprisingly… &lt;strong&gt;there was almost no difference&lt;/strong&gt; between the JavaScript and WebGPU implementations. Both versions produced very similar FPS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0b7fhrc8hsbdv6zswrva.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0b7fhrc8hsbdv6zswrva.png" alt="JS vs WebGPU benchmark: particles. In this case there is almost no difference between JS and GPU version." width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Meanwhile, the WebGPU version required &lt;strong&gt;much more boilerplate code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why does that happen?&lt;/p&gt;

&lt;h3&gt;
  
  
  1️⃣ The algorithm is extremely simple
&lt;/h3&gt;

&lt;p&gt;The particle update does only &lt;strong&gt;2–4 floating point operations per thread&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;GPUs really shine when the work is &lt;strong&gt;compute-heavy&lt;/strong&gt;, not when it’s this lightweight.&lt;/p&gt;




&lt;h3&gt;
  
  
  2️⃣ Canvas 2D also ends up on the GPU
&lt;/h3&gt;

&lt;p&gt;This is something many frontend developers don’t realize.&lt;/p&gt;

&lt;p&gt;Even when you use &lt;strong&gt;Canvas 2D&lt;/strong&gt;, the browser often renders it using GPU acceleration.&lt;/p&gt;

&lt;p&gt;Browsers like Chrome or Edge internally use systems like &lt;strong&gt;Skia&lt;/strong&gt; or &lt;strong&gt;Dawn&lt;/strong&gt;, which eventually issue draw calls to the GPU.&lt;/p&gt;

&lt;p&gt;So in practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebGPU → you talk directly to the GPU&lt;/li&gt;
&lt;li&gt;Canvas 2D → the browser talks to the GPU for you&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the browser is &lt;strong&gt;very well optimized&lt;/strong&gt; for things like &lt;code&gt;fillRect()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So the CPU version isn’t as “CPU-only” as people often think.&lt;/p&gt;




&lt;h3&gt;
  
  
  Could GPU Win Here?
&lt;/h3&gt;

&lt;p&gt;Probably yes — but only if we made the simulation more complex.&lt;/p&gt;

&lt;p&gt;For example, something like &lt;strong&gt;n-body gravity&lt;/strong&gt;, where every particle attracts every other particle. That would dramatically increase the amount of math.&lt;/p&gt;

&lt;p&gt;But honestly… I was too lazy to implement that. 😅&lt;/p&gt;




&lt;h2&gt;
  
  
  Scenario 2 — Matrix Multiplication
&lt;/h2&gt;

&lt;p&gt;Now let’s look at something GPUs absolutely love.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Matrix multiplication.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Despite the scary name, the idea is simple. Imagine two grids of numbers. To compute one cell in the result matrix:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;we take one &lt;strong&gt;row&lt;/strong&gt; from the first matrix&lt;/li&gt;
&lt;li&gt;one &lt;strong&gt;column&lt;/strong&gt; from the second matrix&lt;/li&gt;
&lt;li&gt;multiply numbers pairwise&lt;/li&gt;
&lt;li&gt;add the results together&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[1 2]     [5 6]
[3 4]  ×  [7 8]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To compute the top-left cell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1×5 + 2×7 = 19
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this operation must be repeated &lt;strong&gt;for every cell in the result matrix&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For large matrices, that quickly becomes &lt;strong&gt;millions of multiplications&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Which is exactly the kind of workload GPUs were designed for.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Result
&lt;/h2&gt;

&lt;p&gt;Here the result was very clear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WebGPU absolutely crushes JavaScript.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2lx47w5xrp9e7ezs3fm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk2lx47w5xrp9e7ezs3fm.png" alt="JS vs WebGPU benchmark: matrix multiplication. WebGPU smashes JavaScript, it is couple of times faster." width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the larger the matrices get, the bigger the difference becomes.&lt;/p&gt;

&lt;p&gt;This makes perfect sense:&lt;/p&gt;

&lt;p&gt;Matrix multiplication is essentially &lt;strong&gt;the same simple operation repeated thousands or millions of times&lt;/strong&gt; — the exact scenario where GPUs shine.&lt;/p&gt;

&lt;p&gt;And let's remember it's one of the most important operations in computer science. Matrix multiplication is heavily used in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;computer graphics&lt;/li&gt;
&lt;li&gt;physics simulations&lt;/li&gt;
&lt;li&gt;scientific computing&lt;/li&gt;
&lt;li&gt;and of course… our beloved &lt;strong&gt;LLMs&lt;/strong&gt; 🤖&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Scenario 3 — Image Processing Pipeline
&lt;/h2&gt;

&lt;p&gt;The third benchmark tested something closer to traditional graphics work: an &lt;strong&gt;image processing pipeline&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here the GPU once again &lt;strong&gt;completely dominates&lt;/strong&gt; the CPU implementation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figmrqvpljru706j4k7ln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figmrqvpljru706j4k7ln.png" alt="JS vs WebGPU benchmark: image pipeline. WebGPU smashes JavaScript, it is couple of times faster." width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This kind of workload is very natural for GPUs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every pixel can be processed independently&lt;/li&gt;
&lt;li&gt;the same operation is applied to thousands or millions of pixels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which again fits the GPU execution model perfectly.&lt;/p&gt;




&lt;h2&gt;
  
  
  So Should We Replace JavaScript With WebGPU?
&lt;/h2&gt;

&lt;p&gt;Of course not. 🙂&lt;/p&gt;

&lt;p&gt;WebGPU is powerful — but it only makes sense for certain types of problems. In general, WebGPU shines when you need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;perform &lt;strong&gt;many simple operations&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;on &lt;strong&gt;large amounts of data&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;in parallel&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For regular application logic, JavaScript remains the perfect tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  There Are Still Some Practical Limitations
&lt;/h2&gt;

&lt;p&gt;WebGPU is also still a relatively &lt;strong&gt;young technology&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you control the environment and can require users to run modern browsers, you can absolutely start experimenting with it.&lt;/p&gt;

&lt;p&gt;But if you’re building something for a wide audience — where someone might open your app in a strange Android browser from 2018 — you should probably be careful.&lt;/p&gt;

&lt;p&gt;Or implement a fallback, for example using WebGL.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Boilerplate Problem
&lt;/h2&gt;

&lt;p&gt;If you check the repository, you’ll notice that WebGPU requires quite a bit of setup.&lt;/p&gt;

&lt;p&gt;You need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;request an adapter&lt;/li&gt;
&lt;li&gt;request a device&lt;/li&gt;
&lt;li&gt;create buffers&lt;/li&gt;
&lt;li&gt;configure pipelines&lt;/li&gt;
&lt;li&gt;manage command encoders&lt;/li&gt;
&lt;li&gt;and so on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s a lot of boilerplate.&lt;/p&gt;

&lt;p&gt;Yes, coding agents like Claude or ChatGPT can help with this.&lt;/p&gt;

&lt;p&gt;But here’s a small warning ⚠️&lt;/p&gt;

&lt;p&gt;WebGPU is still new, and &lt;strong&gt;LLMs are not always great at generating correct WebGPU code&lt;/strong&gt;. Sometimes you will still need to go back to the classic developer workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reading documentation&lt;/li&gt;
&lt;li&gt;browsing GitHub issues&lt;/li&gt;
&lt;li&gt;debugging things manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just like in the good old days. 😄&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The question is no longer &lt;strong&gt;whether&lt;/strong&gt; WebGPU will become important.&lt;/p&gt;

&lt;p&gt;The real question is &lt;strong&gt;how soon we will need it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Because WebGPU is essentially a new, modern standard for working with GPUs in the browser.&lt;/p&gt;

&lt;p&gt;And for the kinds of problems GPUs were designed to solve — it can be incredibly powerful. 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>webgpu</category>
    </item>
  </channel>
</rss>
