<?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.us-east-2.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 to Become a Tech Conference Speaker (And Why You Might Regret It)</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Wed, 21 Oct 2026 08:05:30 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/how-to-become-a-tech-conference-speaker-and-why-you-might-regret-it-2ink</link>
      <guid>https://dev.to/sylwia-lask/how-to-become-a-tech-conference-speaker-and-why-you-might-regret-it-2ink</guid>
      <description>&lt;p&gt;So you want to be a conference speaker? Are you sure? &lt;/p&gt;

&lt;p&gt;Recently, a few people have asked me what it's actually like to speak at tech conferences. How do you get accepted? What does preparation look like? And what happens behind the scenes? So I decided to write about it. And let me warn you: the reality isn't always pretty. In fact, after hearing about my experiences, one person has already put their conference-speaking plans on hold indefinitely. 😅&lt;/p&gt;

&lt;p&gt;Because conferences aren't just about getting on stage and having fun. They're also about rejected abstracts, endless preparation, stress, and logistics. And is it actually worth it? Let's find out! 😉&lt;/p&gt;

&lt;p&gt;One little disclaimer: &lt;strong&gt;everything I'm about to share is based on my own experiences and observations.&lt;/strong&gt; Other speakers might have completely different perspectives, and I'd love to hear them in the comments!&lt;/p&gt;

&lt;h2&gt;
  
  
  First, a Little About My Conference Experience
&lt;/h2&gt;

&lt;p&gt;Before we start, let me briefly tell you about my conference "achievements," so you know where I'm coming from. I gave various talks and workshops around 2019, then took a break for several years to focus on my professional development, occasionally running a workshop here and there.&lt;/p&gt;

&lt;p&gt;About a year ago, I decided to get back into conference speaking seriously. Since then, I've spoken at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JS Poland&lt;/li&gt;
&lt;li&gt;jsday Bologna&lt;/li&gt;
&lt;li&gt;JSNation (online)&lt;/li&gt;
&lt;li&gt;AGNTCon + MCPCon Europe (Amsterdam)&lt;/li&gt;
&lt;li&gt;FrontKon (Prague)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And I still have two conferences coming up this year:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iJS Munich&lt;/li&gt;
&lt;li&gt;AI Coding Summit Berlin&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I even had to turn down one invitation because I simply couldn't fit it into my schedule anymore. :( I still regret it!&lt;/p&gt;

&lt;p&gt;I got accepted to some through CFPs, was invited to others, and got a few opportunities partly through connections (for example, because another speaker remembered me from a previous conference).&lt;/p&gt;

&lt;p&gt;I'm not a keynote speaker. I often speak on additional tracks or in smaller rooms, and I'm perfectly fine with that. Actually, I think that's what makes my perspective interesting. I'm not a conference veteran with ten years of experience whom organizers are fighting to book.&lt;/p&gt;

&lt;p&gt;And while I feel pretty confident about blogging these days, conference speaking still gives me a massive case of impostor syndrome. Especially since English isn't my native language. I always think nobody will ever invite me again. And somehow, people keep inviting me. 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Accepted: The Wonderful World of CFPs
&lt;/h2&gt;

&lt;p&gt;Okay, so how do you actually get accepted as a conference speaker?&lt;/p&gt;

&lt;p&gt;If you're not the face of a huge tech company, the maintainer of a famous library, or some kind of tech celebrity, your main option is to apply through a CFP (&lt;em&gt;Call for Papers&lt;/em&gt;). Most major conferences accept talk proposals, so you just need to check their websites for submission deadlines.&lt;/p&gt;

&lt;p&gt;Sounds simple, right? Well, if only conference organizers were sitting there, eagerly waiting for our submissions!&lt;/p&gt;

&lt;p&gt;Let's say a conference has 20 speaking slots. That doesn't mean organizers will select 20 people from the CFP. Quite a few slots might go to invited speakers — well-known names who help sell tickets. Others might go to sponsors. And who knows who else! When hundreds of submissions compete for the remaining places, your chances aren't exactly amazing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rejections are completely normal, and they don't necessarily tell you much about the quality of your abstract.&lt;/strong&gt; Your topic might have been great but didn't fit the agenda, or the organizers decided it wasn't relevant to their audience.&lt;/p&gt;

&lt;p&gt;But let's not fool ourselves, either. Your topic might simply have been weak, and submitting it twenty times won't magically make it better. You can ask organizers for feedback, but they're under no obligation to provide it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Make Your Talk Stand Out
&lt;/h2&gt;

&lt;p&gt;As someone who has lost quite a few CFP battles but managed to win a few as well, I can offer some advice.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;look at your abstract from the organizers' perspective&lt;/strong&gt;. They're not selecting you just to make you happy. You need to bring something valuable to their conference.&lt;/p&gt;

&lt;p&gt;If you're not famous enough to sell tickets just by having your name on the agenda (and I'm guessing you're not, unless you're just reading this out of curiosity), you need an exceptionally interesting topic. Something original that hasn't already been submitted by 20 other people.&lt;/p&gt;

&lt;p&gt;Ideally, a case study from your work or personal projects, or a fresh perspective on a familiar subject. Your topic should be original, but not &lt;em&gt;too&lt;/em&gt; niche, either. After all, people still need to be interested in it.&lt;/p&gt;

&lt;p&gt;For example, I've traveled to a few conferences with a talk about WebGPU, but I presented it more broadly as &lt;strong&gt;"Your Browser Is a Compute Platform."&lt;/strong&gt; It was a big-picture talk about what browsers can do these days, including running LLMs directly in the browser. Because if I'd submitted something like "Introduction to WebGPU with Shaders," I'm pretty sure nobody would have cared.&lt;/p&gt;

&lt;p&gt;Spend some time working on your abstract, too. Ask yourself: &lt;strong&gt;what will attendees actually take away from this talk?&lt;/strong&gt; This will also help you prepare the narrative later. And who knows? You might realize your talk isn't particularly useful in its current form and that you should rethink the approach.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Catch: Nobody Knows If You Can Actually Speak
&lt;/h2&gt;

&lt;p&gt;Now, here's another problem. You might have a fantastic topic and a beautifully written abstract, but if you have absolutely no speaking experience, getting accepted will be much harder — especially at prestigious conferences.&lt;/p&gt;

&lt;p&gt;Again, put yourself in the organizers' shoes. How do they know whether someone who's never stood on a stage can handle the stress, deliver an interesting presentation, and finish on time? (By the way, finishing one minute early is much better than finishing five minutes late.)&lt;/p&gt;

&lt;p&gt;Blogging or making YouTube videos can help, because they at least demonstrate your storytelling skills. And of course, some conferences happily accept first-time speakers.&lt;/p&gt;

&lt;p&gt;But if you're struggling to get accepted anywhere, consider starting with a local meetup. There's usually less competition, and you'll have a speaking engagement to put on your CV. 😉 The more you speak, the better you become, which improves your chances of getting accepted in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Congratulations, You're a Speaker! Where's the Money? 💸
&lt;/h2&gt;

&lt;p&gt;Okay, you've been accepted! Is this where the fame and fortune begin? Hahahaha. I seriously doubt it.&lt;/p&gt;

&lt;p&gt;People often ask me whether conference speakers get paid. Well, some do, especially famous keynote speakers who can command speaking fees. But if you're a regular speaker accepted through a CFP, you probably shouldn't expect payment. At least, that's been my experience. I know there are exceptions, so feel free to correct me!&lt;/p&gt;

&lt;p&gt;Conferences often cover travel and accommodation, but read their policies carefully. Personally, I always make sure those costs are covered. I mean, okay, I might not earn anything, but I'm certainly not going to pay out of my own pocket for the privilege of speaking. So check this before submitting your proposal.&lt;/p&gt;

&lt;p&gt;Sometimes your employer will cover your expenses if they consider your appearance good publicity for the company. But again, make sure that's actually the case before committing to the trip.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparing a Talk: How Much Work Are We Talking About?
&lt;/h2&gt;

&lt;p&gt;So, how much work does it take to prepare a conference talk? Well, it depends!&lt;/p&gt;

&lt;p&gt;My first conferences took absolutely ridiculous amounts of preparation. Weeks of research, creating slides, endless rehearsals, and carefully weighing every sentence. Because what if someone decided I was an idiot?!&lt;/p&gt;

&lt;p&gt;I also had this habit of writing down all the absolute must-have information. Somehow, I'd end up with 45 minutes of material for a 20-minute talk. Well, apparently the audience doesn't need to know absolutely everything. 😀&lt;/p&gt;

&lt;p&gt;Before my first conference after my long break, I experienced something very close to anxiety attacks almost three weeks in advance! It was awful. Consciously, I knew that even if I walked onto the stage and burst into tears, nothing particularly terrible would happen. 😅 But my subconscious had other ideas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conference preparation can consume practically unlimited amounts of time and emotional energy.&lt;/strong&gt; And if you start speaking regularly, you eventually need to get that under control. Otherwise, you might as well give up and find something more productive to do with your life.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Works for Me Now
&lt;/h3&gt;

&lt;p&gt;These days, I often speak about topics I've already covered on my blog, which makes my life much easier. I already have the narrative, a working demo, and even comments from readers that give me additional perspectives.&lt;/p&gt;

&lt;p&gt;All I need to do is put everything together, prepare slides, and rehearse a few times to check whether the presentation flows naturally and fits within the time limit.&lt;/p&gt;

&lt;p&gt;Nowadays, this usually takes me about two weeks, and I'm not working on it every day. During the final stage, I generally do just one rehearsal per day, meaning less than an hour of work. But remember: &lt;strong&gt;I've already done the research while preparing the original article!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can also reuse presentations at different conferences. In fact, organizers often prefer talks that have already been delivered successfully. That doesn't mean traveling around with exactly the same slides, though. Usually, you'll need to adjust something: make it longer, shorten it, or approach the subject from a different angle.&lt;/p&gt;

&lt;p&gt;So yes, preparation gets easier. But it definitely doesn't drop to zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Talk Is Not a University Lecture
&lt;/h2&gt;

&lt;p&gt;There's one trap beginners sometimes fall into. A 30-minute or even 45-minute conference presentation isn't a deep dive or a workshop. You don't need to transfer every piece of knowledge you have into the audience's brains. They won't remember it all anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your job is to inspire people and show them new possibilities.&lt;/strong&gt; If they're interested in the details, they can explore them later. After all, people attending tech conferences are intelligent adults. They can figure things out!&lt;/p&gt;

&lt;p&gt;I actually think conference presentations should be treated a little like a show. Of course, we're still talking about technical conferences, not TED Talks or theatrical performances. But the entertainment aspect matters.&lt;/p&gt;

&lt;p&gt;There are plenty of techniques for engaging an audience, and I'm not going to list them all here. But here's my minimum rule: &lt;strong&gt;if you're doing a dry run and start getting bored at some point, imagine how bored the audience will be.&lt;/strong&gt; That's probably a good place to introduce something more entertaining. 🙂&lt;/p&gt;

&lt;h2&gt;
  
  
  And Then There's the Logistics ✈️
&lt;/h2&gt;

&lt;p&gt;After all those rehearsals, you still need to actually get to the conference. Which means flights, airports, transportation, hotels, and all the other wonderful aspects of traveling.&lt;/p&gt;

&lt;p&gt;Very often, you'll need to arrange your flights yourself. Accommodation is more frequently booked by the conference, but that varies too. And even if your expenses are covered, you might not get reimbursed until after the event. So you need to pay upfront.&lt;/p&gt;

&lt;p&gt;If you have a family, well, they'll have to manage without you for a few days. And you're lucky if your employer supports your speaking activities and continues paying your normal salary. Because if they don't? You're simply taking time off work.&lt;/p&gt;

&lt;p&gt;Suddenly that "free trip" isn't looking quite so free anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage Fright Never Really Goes Away
&lt;/h2&gt;

&lt;p&gt;Now, let's talk about the actual presentation. Getting on stage comes with stress, whether you're speaking for the first time or the hundredth. Even Luca Mezzalira, with around twenty years of experience, once joked on LinkedIn that before every talk, he wonders why he didn't become a shepherd instead.&lt;/p&gt;

&lt;p&gt;I think the difference is mostly about &lt;em&gt;how long&lt;/em&gt; you feel stressed. These days, I usually start experiencing mild panic about an hour before my talk. 😀 Progress!&lt;/p&gt;

&lt;p&gt;But here's another funny thing: &lt;strong&gt;every speaker seems to worry about two things.&lt;/strong&gt; Will anyone show up? And did I do a good job?&lt;/p&gt;

&lt;p&gt;Seriously. At one conference, I was surprised when some very well-known female speakers, who had delivered keynotes in an auditorium with an audience of around 2,000 people, asked how many people had attended my WebMCP talk. (It was a full room!) They were interested because their talks covered similar topics. 😱&lt;/p&gt;

&lt;p&gt;And even speakers at that level appreciate hearing that their presentation was good. So if you're attending a conference and enjoy someone's talk, don't hesitate to tell them! I promise they'll appreciate it. 😀&lt;/p&gt;

&lt;h2&gt;
  
  
  So... Is Conference Speaking Actually Worth It?
&lt;/h2&gt;

&lt;p&gt;Okay, but why go through all this? What are the actual benefits of public speaking? Well, in my opinion... &lt;strong&gt;Not nearly as many as you might expect.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You get a free trip, sometimes a T-shirt or a baseball cap. You meet other speakers and make lots of connections. 😅 (And sometimes you might even make actual friends!) You can take souvenir selfies with tech celebrities and collect LinkedIn connections from the local community.&lt;/p&gt;

&lt;p&gt;Plus, of course, you get a nice new entry on your CV.&lt;/p&gt;

&lt;p&gt;But will your career suddenly take off? &lt;strong&gt;Probably not,&lt;/strong&gt; especially after just one single talk.&lt;/p&gt;

&lt;p&gt;Sure, if you're selling consulting services, courses, or something similar, conferences can be an excellent way to reach customers. But that's a different story, and if that's your business model, you probably already know how it works. If you're a DevRel, it's basically your job.&lt;/p&gt;

&lt;p&gt;If you're not selling anything, though — like me — speaking gives you some credibility points. But that's about it! Okay, okay. You also make connections that might become useful someday. Or they might not. Who knows?&lt;/p&gt;

&lt;p&gt;And let's be honest, you don't actually need to be a speaker to enjoy many of the benefits. You can attend a conference, meet interesting people, make connections, and enjoy the whole experience without spending weeks preparing a talk or questioning your life choices backstage. 😅&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Blogging Has Been More Valuable to Me
&lt;/h3&gt;

&lt;p&gt;When it comes to my career, blogging has actually helped me much more than conference speaking. And the potential audience is much bigger.&lt;/p&gt;

&lt;p&gt;Think about it. How many people attend one of my talks? Maybe 200 or 300? And perhaps another thousand watch the recording on YouTube, if I'm lucky.&lt;/p&gt;

&lt;p&gt;Meanwhile, on my blog, I can publish whatever I want, whenever I want, about whatever interests me. I reach people from all over the world, and &lt;strong&gt;my articles keep working for me even while I'm sleeping.&lt;/strong&gt; I don't need to book flights, prepare slides, rehearse for days, or stand nervously backstage wondering whether anyone will show up.&lt;/p&gt;

&lt;p&gt;I just write. And the content keeps reaching new people long after I've published it.&lt;/p&gt;

&lt;p&gt;So if you're thinking about conference speaking but you're terrified of public speaking or overwhelmed by the amount of work, I genuinely encourage you to think twice about whether it's worth it. 😀 There are other ways to share your knowledge and build a reputation in tech, and some might be a much better fit for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  And Yet... I'd Do It All Again ❤️
&lt;/h2&gt;

&lt;p&gt;Despite everything I've written, I absolutely love speaking at conferences. I love traveling, meeting new people, the atmosphere, the conversations, and being part of the international tech community.&lt;/p&gt;

&lt;p&gt;Unfortunately, there's something a little addictive about it. That rush of adrenaline when you step onto a stage is something even the most successful blog post can't quite replicate.&lt;/p&gt;

&lt;p&gt;So, is conference speaking worth all the stress, preparation, rejected abstracts, logistical headaches, and questionable ROI? Honestly, I'm not entirely sure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will I do it again? Absolutely.&lt;/strong&gt; 😂&lt;/p&gt;

&lt;p&gt;And even though I still have no idea whether anyone will ever invite me to speak again 😅, I hope you'll see me on more European stages in the future. And hopefully, not just European ones!&lt;/p&gt;

&lt;p&gt;But that's just my perspective. &lt;strong&gt;If you're a conference speaker, I'd love to hear about your experiences.&lt;/strong&gt; Do you get paid for your talks? Has speaking made a difference to your career? Do you also question all your life choices an hour before going on stage?&lt;/p&gt;

&lt;p&gt;And if you're thinking about becoming a speaker, did I encourage you or scare you away completely?&lt;/p&gt;

&lt;p&gt;Let me know in the comments! 😁&lt;/p&gt;

&lt;p&gt;And if you'd like to follow my adventures in tech, blogging, and conference speaking, feel free to &lt;a href="https://www.linkedin.com/in/sylwia-laskowska-5a8467131/" rel="noopener noreferrer"&gt;connect with me on LinkedIn&lt;/a&gt;! 😊&lt;/p&gt;

</description>
      <category>career</category>
      <category>speaking</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Your Browser Can Do WHAT?! 5 AI Features That Actually Work</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Wed, 14 Oct 2026 07:05:48 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/your-browser-can-do-what-5-ai-features-that-actually-work-1blb</link>
      <guid>https://dev.to/sylwia-lask/your-browser-can-do-what-5-ai-features-that-actually-work-1blb</guid>
      <description>&lt;p&gt;Are AI models running directly in the browser finally good enough to use in production? Let's find out! 😉&lt;/p&gt;

&lt;p&gt;It's been a week since my talk at FrontKon in Prague. As I mentioned before, it was fantastic! I'm adding a few photos below, just to prove that I actually speak at conferences and don't just make these things up. 😀&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbar4401hm812dgl362ux.jpg" alt="Woman speaking at the conference" width="799" height="533"&gt;&lt;/td&gt;
&lt;td&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flt5ywv0cz49w7cvo9sxz.jpg" alt="Woman speaking at the conference - closer look" width="799" height="533"&gt;&lt;/td&gt;
&lt;td&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foie73ud4x2sh1qgiaxf7.jpg" alt="Conference panel" width="799" height="533"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh6beuv65fl2xsdquem7o.jpg" alt="Selfie in Prague" width="800" height="1067"&gt;&lt;/td&gt;
&lt;td&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk1tj3iepsg61utweuka2.jpg" alt="Depeche Mode pose on Charles Bridge" width="800" height="1067"&gt;&lt;/td&gt;
&lt;td&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4vzypd0yfe5axn4e513n.jpg" alt="Sylwia Laskowska speaker badge" width="800" height="1067"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;My talk was titled &lt;strong&gt;"Your Browser Is a Compute Platform (And You're Using It for Forms)"&lt;/strong&gt;, and I showed how we can use WebAssembly and WebGPU to perform advanced computations directly in the browser. I was a little concerned to discover that, out of everyone in the audience, maybe three or four people had even heard of WebGPU! And that's a shame, because WebGPU can accelerate certain types of parallel computations by tens of times compared to CPU-based implementations.&lt;/p&gt;

&lt;p&gt;But okay, at least the people at FrontKon know what WebGPU is now. 😁 And if you'd like a talk about this at your conference, feel free to reach out! Especially if your conference happens to take place in a particularly attractive tourist destination. 😀&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I'm Revisiting Browser AI
&lt;/h2&gt;

&lt;p&gt;After a conference, I traditionally prepare a blog post related to my talk. However, since I've already written about WebAssembly and WebGPU many times, today I'd like to approach the topic from a different angle. Namely, let's take a look at the current state of &lt;strong&gt;AI models running directly in the browser&lt;/strong&gt;, which, of course, make extensive use of these technologies. 🙂&lt;/p&gt;

&lt;p&gt;Browser-based AI models are a fascinating concept. No inference API calls. No network round trips to an AI backend. No worrying that your users will consume too many tokens, because you're not paying for them! But of course, local inference still takes time, and downloading the model in the first place can take a while. &lt;/p&gt;

&lt;p&gt;Another advantage is that these models can work offline once they've been downloaded and cached by the browser, provided the application itself supports offline operation.&lt;/p&gt;

&lt;p&gt;And that also brings a significant privacy benefit: inference happens directly on the user's device, so their data doesn't need to be sent to an external AI service.&lt;/p&gt;

&lt;p&gt;However, as you can probably imagine, these are relatively small models. We're not going to run a massive frontier-scale model in a typical browser tab. &lt;/p&gt;

&lt;p&gt;So the question is: &lt;strong&gt;how useful are these smaller models, really?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some of you may remember that I experimented with browser-based AI models about a year ago. Back then, we were mostly laughing that they were a fun curiosity, but not much more than that.&lt;/p&gt;

&lt;p&gt;But I've been following people from Hugging Face who work on Transformers.js on LinkedIn, and every now and then, their demos would appear in my feed. At first glance, some of them looked genuinely impressive. You know, practically spaceships running inside a browser. 😉&lt;/p&gt;

&lt;p&gt;So before FrontKon, I decided to take another look at what they had to offer. And it turned out that after upgrading Transformers.js to version 4.3.1, which I used for these experiments, and trying some newer models, the results were genuinely impressive!&lt;/p&gt;

&lt;p&gt;Of course, Transformers.js isn't the only option for running AI models in the browser. There are other libraries and runtimes, but I really like Transformers.js, and I think it's a pretty representative example of what this technology can achieve today.&lt;/p&gt;

&lt;p&gt;At the same time, I don't work for Hugging Face, and nobody is paying me to sell you a spaceship in your browser. So I'll tell you what browser-based AI models can actually do today, what works well, and what still doesn't.&lt;/p&gt;

&lt;p&gt;And even better, &lt;strong&gt;you can explore the code and try everything yourself!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/sylwia-lask/practical-browser-ai" rel="noopener noreferrer"&gt;https://github.com/sylwia-lask/practical-browser-ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://sylwia-lask.github.io/practical-browser-ai" rel="noopener noreferrer"&gt;https://sylwia-lask.github.io/practical-browser-ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you like the project, please give it a star on GitHub. I'm collecting them! 😀&lt;/p&gt;

&lt;h2&gt;
  
  
  Can We Actually Use This in Production?
&lt;/h2&gt;

&lt;p&gt;For these demos, I wanted to focus on practical applications. More specifically, I wanted to find out how we could use browser-based AI today, right now, in real production applications.&lt;/p&gt;

&lt;p&gt;So is this technology worth paying attention to? &lt;strong&gt;In my opinion, absolutely!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But!&lt;/p&gt;

&lt;p&gt;I probably wouldn't build a mission-critical system that depends entirely on these models working perfectly. 😉 Instead, I'd treat them as interesting, optional enhancements to existing application features, especially in areas like e-commerce, accessibility, and customer support.&lt;/p&gt;

&lt;p&gt;The application itself is nothing particularly exotic, by the way. It's a regular &lt;strong&gt;React application written in TypeScript&lt;/strong&gt;, using &lt;strong&gt;Web Workers&lt;/strong&gt; to run model inference without blocking the main UI thread.&lt;/p&gt;

&lt;p&gt;The models are loaded on demand, so you don't need to download all five of them just to open the application. The inference runs locally through Transformers.js, using WebGPU where supported and WebAssembly-based CPU execution where a fallback is available.&lt;/p&gt;

&lt;p&gt;No AI backend involved!&lt;/p&gt;

&lt;p&gt;Let's see what I managed to build. And at the end, I'll share my thoughts on the limitations of these models.&lt;/p&gt;

&lt;p&gt;One more thing: these aren't browser-based AI agents yet. They're simply applications using local AI models for specific tasks. But give me a few more weeks, and you'll see agents running in the browser on my blog too! &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Background Remover
&lt;/h2&gt;

&lt;p&gt;One of the things I particularly appreciate about browser-based AI is that it's not limited to text generation. I love working with multimodal AI!&lt;/p&gt;

&lt;p&gt;In this demo, a small model called &lt;strong&gt;RMBG-1.4&lt;/strong&gt;, with approximately 44 million parameters, does a really impressive job of separating an object from its background. 🙂 The model itself is only about 170 MB to download in the configuration I'm using.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcarjolishkledcuddyki.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcarjolishkledcuddyki.png" alt="White shoe on some messy background" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, we can then save the result as a transparent PNG, and it works surprisingly well!&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzqy1gx7nrswf8cwg5krw.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzqy1gx7nrswf8cwg5krw.png" alt="Screenshot of the picture of transparent shoe" width="799" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can easily imagine this as an additional feature on auction websites or e-commerce platforms.&lt;/p&gt;

&lt;p&gt;Imagine someone trying to sell a product but only having a photo like my example. Instead of requiring them to use an external image-editing service, we could simply offer a background removal button directly in the application.&lt;/p&gt;

&lt;p&gt;And the photo doesn't even need to leave their device. Pretty cool, isn't it?&lt;/p&gt;

&lt;p&gt;One practical note: RMBG-1.4 comes with licensing conditions that should be checked before commercial deployment. So while the technical concept is very promising for e-commerce, you should always verify the model's license before shipping it.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Alt Text Generator
&lt;/h2&gt;

&lt;p&gt;I've always felt that AI could become another useful layer of accessibility, if we use it properly.&lt;/p&gt;

&lt;p&gt;This demo uses &lt;strong&gt;Florence-2-base-ft&lt;/strong&gt;, a vision model with approximately 230 million parameters, to generate descriptions of images.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F895vmy3uucylb60a8n0g.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F895vmy3uucylb60a8n0g.png" alt="App for alt text generation - it describes a dog. This feature will be very useful for me now!" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Imagine that you're uploading an image to DEV, for example. Instead of having to write an alt text description from scratch, you could use a model like this to generate a suggestion automatically. Especially when you really don't feel like describing what's in the picture! &lt;/p&gt;

&lt;p&gt;Of course, the generated description should still be reviewed and edited by a human. Good alt text isn't just about identifying objects in an image. It also depends on the context and purpose of that image.&lt;/p&gt;

&lt;p&gt;The model doesn't necessarily understand why you're using the picture, and it can occasionally miss or invent details. Still, as an accessibility assistant, I think this is a very promising approach.&lt;/p&gt;

&lt;p&gt;There's also an option to provide additional context, but don't expect too much from it. In my implementation, the extra text is simply appended to the generated description rather than genuinely influencing what the model sees or understands. I'll explain why I wasn't satisfied with this approach later in the article.&lt;/p&gt;

&lt;p&gt;For reference, the model download is roughly &lt;strong&gt;350–450 MB&lt;/strong&gt;, depending on the precision supported by the device.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Smart Ticket Creator
&lt;/h2&gt;

&lt;p&gt;Oh, this one is my dream feature! I describe what's wrong in completely natural, messy language, and the model turns it into a structured ticket that I can send to support. 😀&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fifujfl3ng1ln9hl25caj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fifujfl3ng1ln9hl25caj.png" alt="Messy description of an issue" width="799" height="421"&gt;&lt;/a&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqpfa8gn5egyshlfyqpnz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqpfa8gn5egyshlfyqpnz.png" alt="Ticket created based of this messy description" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model I ended up using is &lt;strong&gt;Qwen2.5-0.5B-Instruct&lt;/strong&gt;, a small language model with approximately 500 million parameters. In my configuration, its quantized weights require a download of around &lt;strong&gt;786 MB&lt;/strong&gt;, plus tokenizer files.&lt;/p&gt;

&lt;p&gt;And I have to admit something. When I started implementing this feature, I thought it would be the easiest one! Seriously. How difficult could it be for a language model to turn a complaint into a structured ticket?&lt;/p&gt;

&lt;p&gt;Well... Apparently, quite difficult! I spent much more time than expected trying different models and getting them to produce the output I actually needed.&lt;/p&gt;

&lt;p&gt;The main challenge wasn't just understanding the complaint. It was producing a consistent, structured response with the correct fields, without inventing information or returning malformed JSON. Eventually, I got it working using a carefully designed prompt, output parsing, and schema validation with Zod.&lt;/p&gt;

&lt;p&gt;The generated ticket is editable, so the user can review everything before copying or submitting it. And I think that's exactly the kind of approach that makes sense for production: let the AI do the boring initial work, but keep the human in control.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Semantic Search
&lt;/h2&gt;

&lt;p&gt;Now, this is where small models really shine! For this demo, I implemented semantic search over a collection of support tickets.&lt;/p&gt;

&lt;p&gt;Instead of looking for matching keywords, the application searches for tickets with a similar meaning. And, of course, I also included a traditional keyword search so you can compare the results yourself.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkckhm26bzh1iwl0hgf3m.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkckhm26bzh1iwl0hgf3m.png" alt="Semantic search example" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm using &lt;strong&gt;all-MiniLM-L6-v2&lt;/strong&gt;, a small embedding model with approximately 22 million parameters. Depending on the backend, its model weights are only about &lt;strong&gt;23 MB for the quantized CPU version&lt;/strong&gt; or &lt;strong&gt;90 MB for the WebGPU version&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And it works really well! The model is fast, and the results are genuinely useful.&lt;/p&gt;

&lt;p&gt;Under the hood, it converts the tickets and the search query into numerical vectors, then compares them using cosine similarity. No generative LLM is needed here.&lt;/p&gt;

&lt;p&gt;In fact, that's one of the most interesting lessons from these experiments: sometimes a small, specialized model is a much better choice than a general-purpose language model. This is particularly good news for applications where privacy matters and you don't want to send potentially sensitive information to an external server.&lt;/p&gt;

&lt;p&gt;For a small collection of documents, this approach is definitely worth testing. Of course, for larger datasets you'd need to think about indexing, storage, and performance. In my demo, the embeddings are kept in memory, which is perfectly sufficient for the example. But the basic idea works surprisingly well.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Pause &amp;amp; Ask
&lt;/h2&gt;

&lt;p&gt;Okay, this one might be a little less practical, but it's definitely fancy! 😀 And I think it also has interesting accessibility potential. For this demo, I'm using &lt;strong&gt;LFM2.5-VL-450M&lt;/strong&gt;, a vision-language model with approximately 450 million parameters. The download is roughly &lt;strong&gt;350–400 MB&lt;/strong&gt;, depending on the configuration.&lt;/p&gt;

&lt;p&gt;There are actually two features here. The first is &lt;strong&gt;live visual description&lt;/strong&gt;. I turn on my webcam, and the model periodically describes what it sees. Yes, that's me:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7vx5ra17acipvceug1hl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7vx5ra17acipvceug1hl.png" alt="Live camera description" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But then it gets even better! I can pause the camera on a particular frame and ask the model questions about what it sees.&lt;/p&gt;

&lt;p&gt;And here's the example showing that the model isn't exactly perfect. 😅 Although, well, I'm certainly flattered! &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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjyhyuabhtd439yvxfxpn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjyhyuabhtd439yvxfxpn.png" alt="Question about how old is this woman" width="800" height="771"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I wouldn't treat this as a reliable accessibility tool just yet, but as an experiment in local visual question answering, it's genuinely fascinating.&lt;/p&gt;

&lt;p&gt;And that's all five demos!&lt;/p&gt;

&lt;h2&gt;
  
  
  So What's the Catch?
&lt;/h2&gt;

&lt;p&gt;Now, as promised, let's talk about the disadvantages. Because, of course, there are quite a few!&lt;/p&gt;

&lt;h3&gt;
  
  
  WebGPU Support and Hardware Limitations
&lt;/h3&gt;

&lt;p&gt;First of all, these models run as well as they do largely thanks to WebGPU. This API allows applications to use GPU computing capabilities directly in the browser, which can make a huge difference for machine learning inference.&lt;/p&gt;

&lt;p&gt;The problem is that &lt;strong&gt;WebGPU availability and performance aren't the same on every device&lt;/strong&gt;. Support has improved significantly across modern browsers, but availability still depends on the browser version, operating system, GPU, drivers, etc. And even if WebGPU is supported, that doesn't mean everyone has an equally powerful computer.&lt;/p&gt;

&lt;p&gt;Mobile devices are a particularly interesting problem. Some mobile browsers and devices still lack usable WebGPU support for certain workloads. In those cases, some Transformers.js models can fall back to WebAssembly-based CPU inference, potentially using SIMD or multithreading depending on the environment and configuration.&lt;/p&gt;

&lt;p&gt;Unfortunately, this can be significantly slower. On my phone, two of the examples from my demo didn't work at all because they timed out. And it's not like I'm using some ancient phone from a museum! It's a Samsung Galaxy S24 FE. Not the newest flagship anymore, but definitely not a dinosaur either. &lt;/p&gt;

&lt;p&gt;So yes, WebGPU support is improving, and the models are getting better. But I want to talk about what we can actually use &lt;strong&gt;right now&lt;/strong&gt;, not what might be possible in a few years.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model Downloads Aren't Exactly Tiny
&lt;/h3&gt;

&lt;p&gt;There's also another important limitation: the models themselves have to be downloaded. And while some are relatively small, others can require hundreds of megabytes. As you've seen, the models in my demo range from around 23 MB for the quantized semantic search model to nearly 800 MB for the Smart Ticket Creator. That's quite a lot if you're visiting a website on a mobile connection!&lt;/p&gt;

&lt;p&gt;Fortunately, browsers can cache the downloaded model files, so subsequent visits usually don't require downloading everything again. But the first load still matters, and browser storage isn't guaranteed to keep those files forever.&lt;/p&gt;

&lt;p&gt;That's another reason why I'd treat these features as optional enhancements rather than something every user must load before they can use the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Things Still Don't Work Well Enough
&lt;/h3&gt;

&lt;p&gt;I also couldn't implement everything I originally wanted, even though some ideas seemed perfectly reasonable. For example, I tried adding text recognition from images. And despite experimenting with different models and configurations, I couldn't get results that were reliable enough for my demo. The approaches I tested didn't give me the quality I wanted, so I decided not to include that feature.&lt;/p&gt;

&lt;p&gt;Another thing I wanted to improve was the contextual information in the alt text generator. Imagine uploading a photo of a dog and adding some additional context, such as: "This dog is available for adoption at a local animal shelter." Ideally, the model would take that information into account and generate a beautiful, context-aware description.&lt;/p&gt;

&lt;p&gt;I tried using an additional local language model for this, hoping it could combine the visual description with the extra information. But no matter what I tried, the results were very unsatisfactory. So I ended up with the simpler approach I mentioned earlier, where the context is added separately rather than genuinely interpreted by the image-captioning model.&lt;/p&gt;

&lt;p&gt;And that's another good example of why I wouldn't blindly trust these models in production.&lt;/p&gt;

&lt;h3&gt;
  
  
  What About Voice Recognition?
&lt;/h3&gt;

&lt;p&gt;On the other hand, I've heard that small browser-based models can be surprisingly good at speech recognition. Transformers.js supports audio-related tasks too, so that's definitely another interesting area to explore.&lt;/p&gt;

&lt;p&gt;I didn't test it this time, though. Mostly because I was building these demos in the evenings, and my family would have killed me if I'd spent hours talking to my computer. 😂 Maybe next time!&lt;/p&gt;

&lt;h2&gt;
  
  
  My Verdict: Is Browser AI Production-Ready?
&lt;/h2&gt;

&lt;p&gt;So, to sum up: &lt;strong&gt;browser-based AI models are getting better, and I think it's already worth exploring how to use them in production applications.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not necessarily as a replacement for every AI backend. And definitely not as a critical dependency without a fallback. But as optional features that improve the user experience? Absolutely.&lt;/p&gt;

&lt;p&gt;What do you think? Have you already experimented with running AI models directly in the browser?&lt;/p&gt;

&lt;p&gt;And if you enjoy reading my articles, 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; too! 🙂&lt;/p&gt;

</description>
      <category>ai</category>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Every Software Developer Has Blamed…</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 08 Oct 2026 06:52:08 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/every-software-developer-has-blamed-3a1o</link>
      <guid>https://dev.to/sylwia-lask/every-software-developer-has-blamed-3a1o</guid>
      <description>&lt;p&gt;I got back from FrontKon in Prague today (well, technically yesterday, since I'm publishing this tomorrow), and I'm DEAD! 😂&lt;/p&gt;

&lt;p&gt;The conference itself was fantastic, of course. Both my panel discussion and my talk went really well, and the Czech developer community is starting to feel like family. Greetings from your favorite &lt;em&gt;senior software vývojářka&lt;/em&gt;! 😀&lt;/p&gt;

&lt;p&gt;I'll write my usual, more technical article next week. I want to approach the topic from a slightly different angle, so I need a bit more time for research. Meanwhile, flights from Gdańsk to Prague depart at the absolutely murderous hour of 6 AM, which means that at 3:30 AM today, I was still in Prague!&lt;/p&gt;

&lt;p&gt;And since some of you have recently been asking for another installment of my "You're a Real Software Developer Only If…" series, here you go! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who or what has every software developer blamed at least once? &lt;/strong&gt;Here's my list!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Another Developer
&lt;/h2&gt;

&lt;p&gt;Obviously, if the code is terrible, it's never our fault. Someone else must have messed it up. A colleague from our team, someone from another team, or the developer who worked on the project before us.&lt;/p&gt;

&lt;p&gt;Quite often, though, that "other developer" turns out to be ourselves from six months ago. 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Company
&lt;/h2&gt;

&lt;p&gt;Because the processes are terrible, the standards are nonexistent, and management clearly has no idea what they're doing. The poor developer has been thrown into this corporate machine and is now forced to fight an endless battle against the system.&lt;/p&gt;

&lt;p&gt;Things get a little awkward when you're self-employed and your company consists of… well, you. xD&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Legacy Code
&lt;/h2&gt;

&lt;p&gt;The application could be just six months old, and somehow there will already be legacy code somewhere. And naturally, that legacy code is responsible for every bug, every delay, and every missed delivery deadline!&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The Framework
&lt;/h2&gt;

&lt;p&gt;It's buggy! It's unpredictable! It's missing half the features we need!&lt;/p&gt;

&lt;p&gt;If I wrote my own framework, now THAT would be something! And why haven't I done it yet? Well, I never promised anyone I would! 😅&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The Client
&lt;/h2&gt;

&lt;p&gt;Let's be real: our jobs would be so much easier and more enjoyable if it weren't for that annoying client who keeps asking for things and complaining about everything. 🤣&lt;/p&gt;

&lt;h2&gt;
  
  
  6. The Backend
&lt;/h2&gt;

&lt;p&gt;This is personally my first suspect whenever something goes wrong. If something doesn't work, it MUST be the fault of whoever wrote the backend.&lt;/p&gt;

&lt;p&gt;I mean, come on. Are you seriously suggesting that something could possibly be wrong with MY code???&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The Frontend
&lt;/h2&gt;

&lt;p&gt;And this is exactly what backend developers think about the frontend whenever someone reports a bug. &lt;/p&gt;

&lt;p&gt;Yes, yes, I know. In the age of AI, many of us have become full-stack developers, whether we wanted to or not. But deep down, our hearts will always belong a little more to one of those "ends." ☺️&lt;/p&gt;

&lt;h2&gt;
  
  
  8. The Requirements
&lt;/h2&gt;

&lt;p&gt;Obviously. They're either too vague, poorly written, or based on some completely ridiculous idea invented by the stakeholders.&lt;/p&gt;

&lt;p&gt;And even if the requirements are absolutely perfect, there's probably something missing from the documentation anyway. 😉&lt;/p&gt;

&lt;h2&gt;
  
  
  9. The Cache
&lt;/h2&gt;

&lt;p&gt;Come on, admit it. If you've never told someone to "clear your cache," can you even call yourself a software developer???&lt;/p&gt;

&lt;h2&gt;
  
  
  10. CORS
&lt;/h2&gt;

&lt;p&gt;Often the first suspect for junior developers whenever some mysterious error appears. Never mind that everything was working perfectly fine yesterday. It's probably CORS!&lt;/p&gt;

&lt;h2&gt;
  
  
  11. The Browser
&lt;/h2&gt;

&lt;p&gt;An obvious one. I mean, is it OUR fault that people still insist on using Safari???&lt;/p&gt;

&lt;h2&gt;
  
  
  12. …And Eventually, Themselves
&lt;/h2&gt;

&lt;p&gt;Now, let's get a bit more serious for just a moment. There are two kinds of complaining. The first is just harmless grumbling, the same way we complain about bad weather. It's particularly popular in countries like Poland, where complaining is practically a form of small talk. &lt;/p&gt;

&lt;p&gt;But there's another kind. Of course, I'm not talking about situations where a project or the people you work with are genuinely toxic. Those situations absolutely exist, and sometimes you really do need to sit down and think about what to do next.&lt;/p&gt;

&lt;p&gt;But in other cases? Sometimes it's worth stopping for a moment and asking ourselves where WE fit into this picture of everything and everyone we're blaming.&lt;/p&gt;

&lt;p&gt;There's actually a well-known psychological phenomenon called the &lt;strong&gt;fundamental attribution error&lt;/strong&gt;. In simple terms, it describes our tendency to overestimate someone's personality or character and underestimate their circumstances when explaining their behavior.&lt;/p&gt;

&lt;p&gt;There's also a closely related concept called the &lt;strong&gt;actor–observer bias&lt;/strong&gt;, which describes a tendency to explain our own behavior in terms of circumstances while explaining other people's behavior in terms of their personal characteristics.&lt;/p&gt;

&lt;p&gt;And that's particularly interesting here. Think about what happens when WE mess something up: our code isn't exactly a masterpiece or we missed a deadline. We can usually come up with perfectly reasonable explanations. And often, those explanations are completely valid!&lt;/p&gt;

&lt;p&gt;Maybe we were feeling a little sick, so our productivity dropped. Maybe the plumber wouldn't stop talking, and we lost half the morning. Maybe the library documentation was terrible. A million things could have happened.&lt;/p&gt;

&lt;p&gt;But what happens when ANOTHER developer messes something up? What do we think? Unfortunately, quite often, it's simply: &lt;strong&gt;"What an idiot."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But here's the thing. That other developer has a life, too. They have their own problems, crying children, plumbers who show up late, and a thousand other things going on that we know absolutely nothing about.&lt;/p&gt;

&lt;p&gt;We don't have access to their thoughts or their circumstances. So our brains take a shortcut. And suddenly, instead of thinking "maybe something happened," we decide that the person is simply incompetent.&lt;/p&gt;

&lt;p&gt;And that's the thought I'd like to leave you with today. I was going to add some profound, philosophical conclusion here, but everything I came up with sounded suspiciously like something written by Sylwia Coelho. &lt;/p&gt;

&lt;p&gt;So let's keep it simple. &lt;strong&gt;Let's just try to be a little more understanding toward one another.&lt;/strong&gt; ❤️&lt;/p&gt;

&lt;p&gt;And next time you find yourself blaming another developer, remember: somewhere out there, another developer is probably blaming you. 😂&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you enjoy my content, you can also follow me on &lt;a href="https://www.linkedin.com/in/sylwia-laskowska-5a8467131/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>The Accidental Blogger: How I Ended Up on DEV</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Tue, 29 Sep 2026 06:11:11 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/the-accidental-blogger-how-i-ended-up-on-dev-5a3f</link>
      <guid>https://dev.to/sylwia-lask/the-accidental-blogger-how-i-ended-up-on-dev-5a3f</guid>
      <description>&lt;p&gt;This is going to be a more personal post, exposing my entire personal branding strategy, or rather, the complete lack of one. 😅 If you're only here for technical content, feel free to keep scrolling. Maybe I'll write something technical later this week. I have no idea how many people will read this one — maybe five — but that's kind of the point!&lt;/p&gt;

&lt;p&gt;I'm writing this post because it's just been a year since I started publishing here. My beautiful badge: &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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq9og9vz4yu9xuxwtopsa.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq9og9vz4yu9xuxwtopsa.png" alt="One year club badge" width="215" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has been a truly crazy year, during which I've had the enormous pleasure of earning your trust, and somehow ending it with stats like these. Thank you! ❤️&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faoyc0jpelu8r2zf2qoj0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faoyc0jpelu8r2zf2qoj0.png" alt="DEV stats" width="796" height="93"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/francistrdev"&gt;@francistrdev&lt;/a&gt; suggested under one of his posts that I should tell the story of how I ended up on DEV. But I decided that deserved a separate post, preferably an anniversary one, because the story is definitely not the usual one. You see, I started a blog because I wanted... something to put on my &lt;strong&gt;"About Me" slide at a conference.&lt;/strong&gt; 😅&lt;/p&gt;

&lt;p&gt;But let's start from the beginning.&lt;/p&gt;

&lt;h2&gt;
  
  
  It Didn't Exactly Start at the Best Time
&lt;/h2&gt;

&lt;p&gt;In the summer of 2025, I wasn't in a particularly good place mentally. The previous year had brought several very negative events in my personal life, which I don't want to write about publicly (but seriously, objectively speaking, things were pretty bad).&lt;/p&gt;

&lt;p&gt;And then, as the final blow, I had to give up my beloved judo because of an injury. Not my first one, either, so this really felt like the final nail in the coffin. I'd only trained for two years, but I went three times a week. I had my routine and friends there. &lt;/p&gt;

&lt;p&gt;For most of that summer, I was just somehow drifting through life. I wasn't depressed, but I was constantly stuck thinking about all the bad things that had happened.&lt;/p&gt;

&lt;p&gt;After many weeks, I finally decided that I had to somehow get myself out of that loop and start trying new things. A party, a workshop, a local event. Anything.&lt;/p&gt;

&lt;p&gt;And it turned out that it worked! Obviously not overnight, but every new activity and every new idea helped me take another small step out of the darkness and toward the light.&lt;/p&gt;

&lt;h2&gt;
  
  
  And Then There Was JS Poland
&lt;/h2&gt;

&lt;p&gt;One day, while scrolling through LinkedIn, I came across a post from a friend of mine who travels around Poland giving talks at meetups. And it suddenly reminded me that I'd once dreamed of speaking at JS Poland.&lt;/p&gt;

&lt;p&gt;I figured their CFP was probably open. It was, indeed. I submitted exactly one topic.&lt;/p&gt;

&lt;p&gt;Now, JS Poland is a serious conference with some world-class speakers, so I estimated my chances as... rather tiny. But I'd submitted something! A few more dopamine points unlocked. I was very proud of myself. &lt;/p&gt;

&lt;p&gt;Some time later, conference organizer, Darek, contacted me and asked whether I happened to have recordings of any of my previous talks. As luck would have it, I had exactly one, from six years earlier. I sent it over and assumed I'd probably get a yes/no answer sometime the following week.&lt;/p&gt;

&lt;p&gt;He called me back half an hour later. (The talk was 20 minutes long.) He said the presentation was &lt;strong&gt;"excellent"&lt;/strong&gt; and invited me to the conference. OH, WHAT A DOPAMINE HIT THAT WAS!!! I felt amazing.&lt;/p&gt;

&lt;p&gt;In the meantime, another tragedy happened very close to me, but because something was happening in my life, because there was movement and something to look forward to, I didn't completely fall apart.&lt;/p&gt;

&lt;h2&gt;
  
  
  So... Maybe I Should Start a Blog?
&lt;/h2&gt;

&lt;p&gt;After a few weeks, however, the dopamine started wearing off, and it was still too early to start working seriously on the conference presentation. I have no idea why, but at some point I thought: Maybe I could start a blog? Then I'd have something to link on my &lt;strong&gt;"About Me" slide&lt;/strong&gt;, so it would look like I was doing something in the community. 🤣&lt;/p&gt;

&lt;p&gt;I didn't feel like building my own blog, though, so I decided to use an existing blogging platform. I chose DEV because I'd always liked... the layout. 😅 Also, the articles I came across on DEV had always seemed interesting and approachable.&lt;/p&gt;

&lt;p&gt;My friends laughed and said I'd probably get bored with it pretty quickly. I told them that was fine. I'd write one post a week, and if I got bored, I'd switch to one a month so it would still look like something was happening. xD&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait, There's a Community Here?
&lt;/h2&gt;

&lt;p&gt;Before that, I'd mostly encountered DEV articles through tech newsletters. I knew basically nothing about the platform itself. So little, in fact, that when &lt;a class="mentioned-user" href="https://dev.to/ben"&gt;@ben&lt;/a&gt; once commented on one of my articles, I remember wondering why his one-line comment had received so many likes. 🤦‍♀️😅&lt;/p&gt;

&lt;p&gt;Eventually, I realized there was a feed here. A whole stream of posts, a community!&lt;/p&gt;

&lt;p&gt;And there's something you should know about me.&lt;/p&gt;

&lt;p&gt;A long, long time ago, I worked on the side as an editor for the biggest internet portal in Poland. And even by those standards, I have to admit I was pretty good at it — especially at finding interesting topics and coming up with headlines. 😀&lt;/p&gt;

&lt;p&gt;Working in media is incredibly addictive, and that addiction came back immediately. You know, like an alcoholic who hasn't had a drink in ten years and decides to have &lt;strong&gt;"just one beer."&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Okay, that's an exaggeration.&lt;/p&gt;

&lt;p&gt;But only slightly. 😅&lt;/p&gt;

&lt;p&gt;I started publishing on DEV much more often than once a week because I wanted to see &lt;strong&gt;"what gets clicks here"&lt;/strong&gt;. Or, translated into normal-person language, &lt;strong&gt;"what are people here actually interested in?"&lt;/strong&gt; I still remember how excited I was about my first like, my first comment, or when one of my posts finally passed 25 views. 😅&lt;/p&gt;

&lt;p&gt;And even better: on DEV, I could use my old editorial skills, but I could do it &lt;strong&gt;well&lt;/strong&gt;. No impossible traffic targets to hit. No annoying publishers. No need to squeeze every last drop out of one topic until everyone is sick of it. I could rotate topics. Under my own name, in my own words.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, Here Are a Few of My Blogging Rules
&lt;/h2&gt;

&lt;p&gt;So what are my publishing "rules"? Maybe some of you will find these useful.&lt;/p&gt;

&lt;p&gt;A headline can be controversial. It can even stretch things a tiny bit, as long as the content delivers. If it does, readers usually won't feel cheated. I always spend quite a lot of time thinking about titles. And yes, I almost always choose the most controversial one. 😉&lt;/p&gt;

&lt;p&gt;If you went back to my earliest posts, you'd also notice that I published pretty chaotically and wrote about somewhat different things than I do now. I started series that I never finished. I experimented with topics. I didn't really know what I was doing yet. And I think that's completely fine. Maybe that will help someone who's currently wondering whether they should start blogging. You don't need to have some grand content strategy from day one.&lt;/p&gt;

&lt;p&gt;I've always said that I write &lt;strong&gt;half for myself and half for the reader.&lt;/strong&gt; 😉I don't go to either extreme. I write about things that I think might interest you, but they also have to interest me.&lt;/p&gt;

&lt;p&gt;Not every post needs to go viral. I'm fully aware that not every topic will be equally popular. But that doesn't stop me from writing more expert-level technical posts, sometimes with a GitHub repository and a working demo. And there's no point getting upset when those posts attract fewer readers. That's natural. For one thing, not everyone is interested in the same technologies. Meanwhile, obviously everyone is going to click on something called: "You're the real software developer only if..."  xD&lt;/p&gt;

&lt;p&gt;However, I think that if you want to allow yourself to write posts like that, it's worth first proving that you actually have some credibility in the field you're talking about.&lt;/p&gt;

&lt;p&gt;If you want to write about the mistakes senior developers make, then for God's sake, prove that you are a senior developer yourself, that you actually know how to build things, and that you bring something to the community besides clickbait.&lt;/p&gt;

&lt;h2&gt;
  
  
  And Then There Are the Comments
&lt;/h2&gt;

&lt;p&gt;When it comes to comments, I've often read influencer advice saying that you should only reply selectively. Apparently, you're supposed to create the impression that you're slightly unavailable.&lt;/p&gt;

&lt;p&gt;As you probably know, I couldn't care less about that advice. 🤣 I try to respond to every valuable comment. Of course, I don't always manage. Sometimes I miss one, forget about it, don't notice it, and so on.&lt;/p&gt;

&lt;p&gt;But generally, I genuinely think that many of the discussions under my articles are much better than the articles themselves. 😀&lt;/p&gt;

&lt;h2&gt;
  
  
  From "Something for My Slide" to Conference Invitations
&lt;/h2&gt;

&lt;p&gt;As you probably know, I like speaking at conferences.&lt;/p&gt;

&lt;p&gt;Over time, the blog was promoted from &lt;strong&gt;"something to put on my slide"&lt;/strong&gt; to &lt;strong&gt;"something I can put in a CFP form to show that I'm active in the community."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But over the last six months, that situation has changed dramatically. More than once, I've actually been &lt;strong&gt;INVITED&lt;/strong&gt; to speak at a conference because someone found one of my DEV articles and wanted a talk about that topic. Or, less often, I'll attach one of my articles to a CFP so that the committee knows roughly what the talk would be about.&lt;/p&gt;

&lt;p&gt;And let me tell you: this is probably the most comfortable situation possible. The organizer can relax because they know what to expect. I can relax because I know what the organizer has already accepted. Win-win!&lt;/p&gt;

&lt;h2&gt;
  
  
  But DEV Would Be Nothing Without the People
&lt;/h2&gt;

&lt;p&gt;And, of course, DEV would be nothing without the people I've met here.&lt;/p&gt;

&lt;p&gt;I obviously have to mention &lt;a class="mentioned-user" href="https://dev.to/pascal_cescato_692b7a8a20"&gt;@pascal_cescato_692b7a8a20&lt;/a&gt;, who I think was the first person here with whom I started having discussions about all kinds of completely different topics.&lt;/p&gt;

&lt;p&gt;Then there are the two Daniels:&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/dannwaneri"&gt;@dannwaneri&lt;/a&gt; gives me a glimpse into what life as a developer looks like in a different part of the world.&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/gramli"&gt;@gramli&lt;/a&gt;, on the other hand, is living proof that across Eastern Europe we apparently have very similar problems, and a very similar sense of humor. 😁&lt;/p&gt;

&lt;p&gt;There's &lt;a class="mentioned-user" href="https://dev.to/georgekobaidze"&gt;@georgekobaidze&lt;/a&gt;, who seems completely different from me, yet somehow, at the end of the day, we always end up having the same obsessions. 😅&lt;/p&gt;

&lt;p&gt;And I can't forget about &lt;a class="mentioned-user" href="https://dev.to/adamthedeveloper"&gt;@adamthedeveloper&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/anchildress1"&gt;@anchildress1&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/pengeszikra"&gt;@pengeszikra&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/xulingfeng"&gt;@xulingfeng&lt;/a&gt;, and many, many more, but DEV allows to tag a maximum of 10 users here 😅.&lt;/p&gt;

&lt;p&gt;Thanks to founders for building the platform I originally chose because I liked the layout. Turns out it was a pretty good choice. 😅❤️&lt;/p&gt;

&lt;p&gt;And honestly, I could mention many, many more people here. I'd run out of evening. 😀&lt;/p&gt;

&lt;h2&gt;
  
  
  So What's Next?
&lt;/h2&gt;

&lt;p&gt;What am I planning for the next year? I'm not going to say anything like &lt;strong&gt;"I'm only getting started!"&lt;/strong&gt;, because that wouldn't be true.  I plan to do exactly what I've been doing so far: publish roughly one post a week.&lt;/p&gt;

&lt;p&gt;Sometimes I'm tempted by other distribution platforms, but then I quickly realize that I'd have to spend time figuring those out too, and time is something I don't have much of.&lt;/p&gt;

&lt;p&gt;I'm also a little tempted by YouTube, mostly as an extension of what I'm already doing on DEV. Will I actually do it? We'll see!&lt;/p&gt;

&lt;p&gt;So, for my DEV anniversary, I wish myself exactly the same amount of joy from writing that I have today. And I wish all of you all the best! ❤️&lt;/p&gt;

</description>
      <category>mentalhealth</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What If Your AI Agent Never Had to Leave the Browser? (Demo 🚀)</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Mon, 21 Sep 2026 07:14:46 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/what-if-your-ai-agent-never-had-to-leave-the-browser-demo--5g</link>
      <guid>https://dev.to/sylwia-lask/what-if-your-ai-agent-never-had-to-leave-the-browser-demo--5g</guid>
      <description>&lt;p&gt;I haven't written anything lately because, honestly, I just didn't have the headspace for it. There were a few reasons, but the biggest one was my talk at AGNTCon + MCPCon Europe, where I spoke about WebMCP.&lt;/p&gt;

&lt;p&gt;How did it go? Great! A lot of people showed up, they asked questions — what more could I ask for? 😅&amp;nbsp;The conference itself was amazing too, and I definitely came back with enough inspiration for several more articles. I don't have any nice photos yet, but maybe next week!&lt;/p&gt;

&lt;p&gt;The audience at an event with more than 2,000 attendees is, of course, incredibly diverse, with very different interests. Alongside people eager to explore sophisticated multi-agent architectures, there were many who were simply wondering how they could improve their already pretty good products by adding some AI capabilities.&lt;/p&gt;

&lt;p&gt;Quite a few people from that second group ended up at my WebMCP talk.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, What Is WebMCP?
&lt;/h2&gt;

&lt;p&gt;In short, WebMCP is an experimental browser API that allows a website to explicitly expose tools that an AI agent can then call.&amp;nbsp;I don't want to repeat myself too much because I've already written about it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/sylwia-lask/is-this-how-well-build-websites-soon-webmcp-live-demo--2e33"&gt;Is This How We'll Build Websites Soon? WebMCP Live Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That article is more than three months old, which, in the world of Agentic AI, means the syntax is already outdated. xD Fortunately, these days it's not particularly difficult to quickly check the latest one, especially since it may still change several more times. 😅&lt;/p&gt;

&lt;p&gt;The idea, however, remains the same.&lt;/p&gt;

&lt;p&gt;Yes, it's still a young technology. But as it happens, I met one of the people working on WebMCP at the conference (hi, Dominic!), and he told me that around January or February it should be reasonably stable, at least in Chromium.&amp;nbsp;&lt;strong&gt;So the clock is ticking!&lt;/strong&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  WebMCP Is Not Quite MCP
&lt;/h2&gt;

&lt;p&gt;Unlike "classic" MCP (and I'm putting &lt;em&gt;classic&lt;/em&gt; in quotation marks because I'm not sure whether something this young has earned the right to be called "classic" or "traditional" yet 🤣) WebMCP operates in the context of the browser.&lt;/p&gt;

&lt;p&gt;The website needs to be open, the user needs to be logged in if authentication is required, and only then can our agent call the tools exposed by that page.&amp;nbsp;This means we can use WebMCP through an agentic browser or, for example, a Chrome extension.&amp;nbsp;Interestingly, ChatGPT has recently added support for WebMCP-based site tools in its built-in browser, so this technology definitely has some momentum!&lt;/p&gt;

&lt;p&gt;That's also why, in my opinion, WebMCP's most interesting use case isn't necessarily multi-agent systems scraping websites. I see it much more as a way to help regular, everyday users interact with the products they already use.&amp;nbsp;Although, of course, give ten developers a new API and you'll probably get eleven different ideas. 😉&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet My Visionary Leader: AI CEO Simulator
&lt;/h2&gt;

&lt;p&gt;As some of you may remember, my WebMCP demo isn't another boring &lt;code&gt;addToCart()&lt;/code&gt; example.&amp;nbsp;It's my beloved visionary leader: &lt;strong&gt;AI CEO Simulator&lt;/strong&gt;.&amp;nbsp;It shows what might happen if we let AI run our company. &lt;/p&gt;

&lt;p&gt;As you can see in the screenshot, we have all the typical startup metrics: cash, monthly revenue, number of employees, production incidents, employee happiness, and, obviously, hype level.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxcjfdmarxfl7wpcaz0nz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxcjfdmarxfl7wpcaz0nz.png" alt="AI CEO Simulator screenshot" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We also have board decisions such as &lt;strong&gt;Adopt AI&lt;/strong&gt;, &lt;strong&gt;Pivot to Agents&lt;/strong&gt;, &lt;strong&gt;Rewrite in Rust&lt;/strong&gt;, &lt;strong&gt;Fire Employees&lt;/strong&gt;, &lt;strong&gt;Hire Employees&lt;/strong&gt;, and so on.&lt;/p&gt;

&lt;p&gt;In other words: typical startup management.&lt;/p&gt;

&lt;p&gt;And, of course, there's an activity log.&lt;/p&gt;

&lt;p&gt;The important thing is that this is still a completely normal website. You can click around and use everything manually.&amp;nbsp;Because that's one of the things I love about WebMCP: it's an additional capability for your website. You don't need to completely rebuild your product around AI.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/sylwia-lask/ai-ceo-webMCP" rel="noopener noreferrer"&gt;https://github.com/sylwia-lask/ai-ceo-webMCP&lt;/a&gt;&lt;br&gt;
Demo: &lt;a href="https://sylwia-lask.github.io/ai-ceo-webMCP/" rel="noopener noreferrer"&gt;https://sylwia-lask.github.io/ai-ceo-webMCP/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay, But How Do We Actually Call Those Tools?
&lt;/h2&gt;

&lt;p&gt;Everything sounds great, but there's one practical problem: how do we actually call these tools?&amp;nbsp;This becomes an especially interesting problem when you want to call them live during a conference talk.&lt;/p&gt;

&lt;p&gt;Of course, you can do it through ChatGPT or one of the publicly available extensions, but cloud-based solutions need internet access. Their interfaces aren't necessarily ideal for presentations either — when people are watching your demo on a big screen, everything should be large and easy to follow.&lt;/p&gt;

&lt;p&gt;And, obviously, I wanted a fallback to local models!&lt;/p&gt;

&lt;p&gt;So I built a Chrome extension called &lt;strong&gt;WebMCP Local Agent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/sylwia-lask/webmcp-local-agent" rel="noopener noreferrer"&gt;https://github.com/sylwia-lask/webmcp-local-agent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's not published in the Chrome Web Store yet, but maybe one day I'll finally spend those $5 on the developer registration fee. 😅💸&amp;nbsp;For now, if you're interested, you can simply download the source and run it locally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is It Actually an Agent?
&lt;/h2&gt;

&lt;p&gt;So what does this plugin — or agent — actually do?&lt;/p&gt;

&lt;p&gt;It's very simple.&amp;nbsp;It receives the user's intent, checks the WebMCP tools available on the current page, and calls whichever ones it considers appropriate.&lt;/p&gt;

&lt;p&gt;We all know that an agent is basically just a loop. I wrote more about that here: &lt;a href="https://dev.to/sylwia-lask/the-dirty-secret-behind-ai-agents-demo--273d"&gt;The Dirty Secret Behind AI Agents (Demo 🚀)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that's exactly how this one works.&amp;nbsp;The model gets the user's intent and the available tools, decides what to call, receives the result, and can then decide what to do next.&amp;nbsp;By default, the agent can go through a maximum of 10 iterations of this loop, although you can change that in the config.&lt;/p&gt;

&lt;p&gt;So, as you can see, this isn't just a chatbot with a fancy name.&amp;nbsp;It's a legit little agent. &lt;/p&gt;

&lt;h2&gt;
  
  
  A Slightly Selfish Motivation Can Still Lead Somewhere Useful
&lt;/h2&gt;

&lt;p&gt;Yes, my original motivation was pretty simple and maybe even a little selfish. 😉&amp;nbsp;But good things can come from questionable motivations.&amp;nbsp;Even Gollum contributed to the happy ending of &lt;em&gt;The Lord of the Rings&lt;/em&gt;. xDDD&lt;/p&gt;

&lt;p&gt;Because my extension can run with local models, prompts and model inference can stay on the user's machine when using the local providers. That gives us a very interesting privacy advantage compared with sending every interaction to a cloud model.&lt;/p&gt;

&lt;p&gt;It also helps with another problem: access to AI models isn't equally reliable everywhere.&amp;nbsp;My dear DEV friend &lt;a class="mentioned-user" href="https://dev.to/dannwaneri"&gt;@dannwaneri&lt;/a&gt; mentioned this problem some time ago. Just because we have pretty good infrastructure and access to cloud AI services in Europe doesn't mean the situation is equally good everywhere in the world.&lt;/p&gt;

&lt;p&gt;Local models give us another option.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Providers, One Agent
&lt;/h2&gt;

&lt;p&gt;As you can see, my WebMCP plugin currently supports three modes.&lt;/p&gt;

&lt;p&gt;The first is Google's &lt;strong&gt;Prompt API&lt;/strong&gt;, which uses Gemini Nano managed by Chromium. Once the model has been downloaded, inference happens locally, without sending prompts to Google or another third party, and you don't need an API key.&lt;/p&gt;

&lt;p&gt;The second option is &lt;strong&gt;Ollama&lt;/strong&gt;, also running locally. In my case, I'm using Llama 3.1, but you can choose another model if you prefer. Ideally, though, you want one that behaves well with tool calling.&lt;/p&gt;

&lt;p&gt;And finally, there is one cloud provider. In my case, that's an older Gemini Flash model, which requires an API key.&amp;nbsp;Because let's be honest: right now, cloud models are generally still the easiest way to get excellent capability and speed.&amp;nbsp;The problem is that they're not always available.&lt;/p&gt;

&lt;p&gt;Of course, you can add other models or providers however you like. It's literally just a few lines of code in the extension's source code. ☺️&lt;/p&gt;

&lt;h2&gt;
  
  
  And Yes, the Local Models Actually Work
&lt;/h2&gt;

&lt;p&gt;As you can see, the local providers work surprisingly well.&lt;/p&gt;

&lt;p&gt;Here's Google's Prompt API:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsawcfr29uscoqbkehq0m.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsawcfr29uscoqbkehq0m.png" alt="Chrome prompt api with a prompt " width="799" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here's Llama 3.1:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ue1y2pwc8l3tr5a0x1y.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ue1y2pwc8l3tr5a0x1y.png" alt="Ollama prompt api with a prompt " width="799" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although I should warn you that Llama 3.1 — rarely, but it does happen — sometimes decides that instead of JSON, what I &lt;em&gt;really&lt;/em&gt; wanted was Markdown or some additional "helpful" commentary.&amp;nbsp;That's the joy of working with LLMs. 😅&lt;/p&gt;

&lt;p&gt;It's also worth mentioning again that the plugin allows a maximum of 10 iterations of the agent loop by default.&amp;nbsp;You can increase or decrease that number in the config.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq9zo16mvewpmm7l8ixow.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq9zo16mvewpmm7l8ixow.png" alt="Changing max steps in the extension" width="601" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  But Wait. Isn't This Dangerous?
&lt;/h2&gt;

&lt;p&gt;One concern I hear quite often about WebMCP is that we're changing the interaction model.&amp;nbsp;The user is no longer explicitly clicking every single thing they want to happen.&amp;nbsp;Instead, they express an intent.&lt;/p&gt;

&lt;p&gt;Then the model creates a plan, calls tools, and we have to deal with the consequences.&amp;nbsp;And if we simply leave it at that, it's a recipee for DISASTER.&lt;/p&gt;

&lt;p&gt;There are relatively harmless tools such as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;listEmployees()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But there are also tools with much more serious consequences, such as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;fireEmployees()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And I'd rather not discover that my AI CEO has decided to improve our runway by firing half the company without asking me first. &lt;/p&gt;

&lt;h2&gt;
  
  
  Consequential Actions Need Confirmation
&lt;/h2&gt;

&lt;p&gt;Fortunately, the people working on WebMCP are listening to the community, and the API now includes useful tool annotations such as &lt;code&gt;consequentialHint&lt;/code&gt;.&amp;nbsp;My plugin supports it as well.&lt;/p&gt;

&lt;p&gt;Support for these newer WebMCP features depends on the Chromium version and experimental WebMCP availability you're using, so if you're testing this while the API is still evolving, make sure you're running a sufficiently recent version of Chrome/Chromium with the required WebMCP support enabled.&lt;/p&gt;

&lt;p&gt;Now let's try to fire some employees.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fptam4jnct1sqmfvbj2et.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fptam4jnct1sqmfvbj2et.png" alt="Webmcp plugin requires confirmation" width="799" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, our agent noticed that the tool call was marked as consequential and displayed a confirmation prompt before allowing it to proceed.&amp;nbsp;The user can approve or reject the action.&lt;/p&gt;

&lt;p&gt;Which is probably a good idea when your AI CEO starts restructuring the company. 😉&lt;/p&gt;

&lt;h2&gt;
  
  
  And, of Course, I Built It with Kiro
&lt;/h2&gt;

&lt;p&gt;And as a self-respecting AWS Community Builder, I built all of this with the help of the best IDE in the world: Kiro. 😅 I'll admit it: I originally installed Kiro because I wanted to save some money on Claude Code. But at this point, even if &lt;a class="mentioned-user" href="https://dev.to/corey_aws"&gt;@corey_aws&lt;/a&gt; kicked me out of the Community Builders program tomorrow, I'd still happily pay for Kiro out of my own pocket. 😂&lt;/p&gt;

&lt;p&gt;Not only does Kiro give you a ridiculous number of models to choose from, but it also supports spec-driven development, which I've grown to really appreciate. It also handled the constantly changing WebMCP API remarkably well, including one last API change that I had to deal with literally two hours before my conference talk. 😅&lt;/p&gt;

&lt;p&gt;So, AWS: good job. You got me. 👏&lt;/p&gt;

&lt;h2&gt;
  
  
  Maybe We Don't Need a Revolution
&lt;/h2&gt;

&lt;p&gt;So, as you can see, we don't necessarily need a huge architectural change or a complete revolution in our existing projects to make them more user-friendly and agent-friendly.&lt;/p&gt;

&lt;p&gt;Our website can still be a website.&amp;nbsp;People can still click buttons, fill in forms, and use the UI exactly as they did before.&amp;nbsp;WebMCP simply gives agents another structured way to interact with it.&lt;/p&gt;

&lt;p&gt;Someone at the conference said that this isn't a revolution comparable to replacing horses with cars.&lt;/p&gt;

&lt;p&gt;It's just...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;faster horses.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But what if faster horses are exactly what we need right now?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>mcp</category>
      <category>typescript</category>
    </item>
    <item>
      <title>AI Is Already Better at Coding Than Most Software Developers</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 10 Sep 2026 07:17:46 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/ai-is-already-better-at-coding-than-most-software-developers-4hno</link>
      <guid>https://dev.to/sylwia-lask/ai-is-already-better-at-coding-than-most-software-developers-4hno</guid>
      <description>&lt;p&gt;...but let me say this right away: &lt;strong&gt;coding was never the most valuable part of software engineering.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I remember when I was a junior software dev. Nothing came easily to me. Every feature felt like an uphill battle. I can't even count how many hours I spent digging through Stack Overflow. And then there was the stress of PR reviews, where I sometimes got absolutely roasted in the comments (rightfully so!) 😅&lt;/p&gt;

&lt;p&gt;Eventually, things started getting better and better. Shipping features took me less time, and there were fewer comments on my pull requests. Over time, I started handling more complex things, including architecture. I could choose the right solution, explain why a particular tool or design pattern made sense, and defend my decisions.&lt;/p&gt;

&lt;p&gt;And I loved being good at coding.&amp;nbsp;Domain knowledge or architectural concerns? Those were somewhere in the background.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then Coding Stopped Being the Hard Part
&lt;/h2&gt;

&lt;p&gt;The longer I worked as a developer, the more complicated the problems became, and the less they had to do with coding itself.&lt;/p&gt;

&lt;p&gt;I stopped getting excited about every new framework feature. In fact, whenever I heard about another "revolutionary" solution, my first thought became something along the lines of:&amp;nbsp;&lt;em&gt;"Yet another state management solution..."&amp;nbsp;&lt;/em&gt;(I'll probably write a whole article about that someday.)&lt;/p&gt;

&lt;p&gt;Eventually, I ended up where every tech lead eventually ends up: spending most of my time thinking things through, sitting in calls, and getting people to agree on things, while handing coding tasks to juniors and mids.&amp;nbsp;Much to their delight, actually, because they're happy to get a chance to learn something new.&lt;/p&gt;

&lt;p&gt;Fortunately, I still code quite a lot, but these days it's usually the more horizontal stuff or the technically difficult features.&lt;/p&gt;

&lt;p&gt;And that's exactly the point in my career when the AI revolution arrived.&lt;/p&gt;

&lt;h2&gt;
  
  
  And I Welcomed AI With Open Arms
&lt;/h2&gt;

&lt;p&gt;I was genuinely happy about it!&amp;nbsp;I'm not crying over the fact that I no longer have to handcraft every precious little piece of artisanal code myself.&amp;nbsp;I didn't particularly want to anyway.&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/nazar-boyko"&gt;@nazar-boyko&lt;/a&gt; recently asked in his article, "&lt;a href="https://dev.to/nazar-boyko/has-ai-made-you-a-lazier-developer-be-honest-5ack"&gt;Has AI Made You A Lazier Developer? Be Honest.&lt;/a&gt;"&amp;nbsp;I answered honestly: no. Quite the opposite.&amp;nbsp;&lt;strong&gt;AI has made me less lazy.&amp;nbsp;&lt;/strong&gt;I do more because I don't have to spend as much time on the most boring part: writing redundant code.&lt;/p&gt;

&lt;p&gt;And in my opinion, &lt;strong&gt;AI is already better at shipping code than most software developers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is actual research behind this, some of which I've linked at the bottom of this article, so you can check that I'm not just making things up. 😉&amp;nbsp;The research shows that AI can dramatically accelerate coding and that frontier AI agents can already complete some coding tasks that would take humans days or even weeks.&lt;/p&gt;

&lt;p&gt;And we often see this in our own work.&amp;nbsp;AI doesn't get tired. It doesn't get stressed. It doesn't get distracted. It doesn't have a "bad day."&amp;nbsp;(Okay, sometimes I swear it does )&lt;/p&gt;

&lt;h2&gt;
  
  
  Not All Developers Are Equally Good at Coding
&lt;/h2&gt;

&lt;p&gt;And let's face another uncomfortable truth: there are better and worse developers.&lt;/p&gt;

&lt;p&gt;I know that's not particularly pleasant to say, but it's simply true.&amp;nbsp;Some people are better at cooking. Some are better at singing. Some are exceptional at coding.&amp;nbsp;And some are... a little less exceptional.&lt;/p&gt;

&lt;p&gt;Sometimes I get the impression that here on DEV, we treat programmers as some kind of meritocratic class of geniuses. As if every developer, by definition, possesses an extraordinary set of irreplaceable skills.&amp;nbsp;But everyone who has spent enough time in this industry knows that's simply not true.&lt;/p&gt;

&lt;p&gt;And AI might actually &lt;strong&gt;level the playing field&lt;/strong&gt; here.&amp;nbsp;A developer who isn't an exceptional coder but is responsible, understands the product really well, makes good decisions, and knows what needs to be built can now go incredibly far.&lt;/p&gt;

&lt;h2&gt;
  
  
  But There's One Tiny Little Detail
&lt;/h2&gt;

&lt;p&gt;There's just one small, tiny detail.&amp;nbsp;Something we intuitively understand, and something the research I've linked below also hints at:&amp;nbsp;&lt;strong&gt;The further the job moves away from simply generating code, the less spectacular the machine's advantage over humans becomes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In an older study, experienced developers actually worked &lt;strong&gt;SLOWER&lt;/strong&gt; when using AI.&lt;/p&gt;

&lt;p&gt;More recent results suggest that newer AI tools probably do speed them up, but the effect is nowhere near as straightforward or spectacular as the raw coding benchmarks might make you think.&lt;/p&gt;

&lt;p&gt;In general, the more the work depends on experience, judgment, coordination, and higher-level decisions, the less useful "how fast can this thing generate code?" becomes as a measure of productivity.&lt;/p&gt;

&lt;p&gt;And I know exactly why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five Minutes of Coding. Four Days of Engineering.
&lt;/h2&gt;

&lt;p&gt;Recently, I had to introduce a change to an application that would probably take a coding agent — even a not particularly brilliant one — about five minutes to implement.&lt;/p&gt;

&lt;p&gt;So what was the problem?&amp;nbsp;Discussing &lt;strong&gt;WHAT that change should actually look like&lt;/strong&gt;, coordinating it with all the teams involved, and agreeing on the final solution with the client took &lt;strong&gt;FOUR DAYS&lt;/strong&gt;.&amp;nbsp;During those four days, the decisions changed several times.&lt;/p&gt;

&lt;p&gt;And let me add something important here: having a developer in those meetings, and preferably an experienced one, was absolutely necessary.&lt;/p&gt;

&lt;p&gt;The implementation took five minutes.&amp;nbsp;Figuring out &lt;strong&gt;what should be implemented&lt;/strong&gt; took four days.&amp;nbsp;&lt;strong&gt;And that is exactly the difference between coding and software engineering.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Coding Is Becoming Cheaper. Engineering Isn't.
&lt;/h2&gt;

&lt;p&gt;See what I'm getting at?&amp;nbsp;AI is taking repetitive, derivative work off our shoulders.&amp;nbsp;It does that work faster than we do. Often better than we do. It doesn't get tired while doing it, and it doesn't get stressed.&lt;/p&gt;

&lt;p&gt;And because of that, the skills the market needs from developers are shifting.&amp;nbsp;If all you can do is code, and an agent can now do that faster and better, you might soon have a problem on the job market.&lt;/p&gt;

&lt;p&gt;But if you feel like an agent can do the work you used to give to your junior developers, while you still have to guide it by the hand when it comes to details, architecture, trade-offs, and all the weird little realities of an actual production system,&amp;nbsp;you're in a very different position.&lt;/p&gt;

&lt;p&gt;Mine, for example, generated a dropdown today that was permanently open and literally couldn't be collapsed. 🤣&lt;/p&gt;

&lt;p&gt;If you understand the bigger picture, know how to make technical decisions, understand the product, and aren't afraid of innovation, your job is probably safe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At least for now. 😅&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So yes, AI getting better at coding doesn't make software engineers less valuable. It makes coding itself less valuable as a software engineering skill.&lt;/p&gt;

&lt;p&gt;BTW if you liked this post, you can also &lt;a href="https://www.linkedin.com/in/sylwia-laskowska-5a8467131/" rel="noopener noreferrer"&gt;follow me on LinkedIn&lt;/a&gt;. &lt;/p&gt;




&lt;h2&gt;
  
  
  Further Reading &amp;amp; Research
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;METR&lt;/strong&gt; &lt;a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" rel="noopener noreferrer"&gt;https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;METR&lt;/strong&gt; &lt;a href="https://metr.org/blog/2026-02-24-uplift-update/" rel="noopener noreferrer"&gt;https://metr.org/blog/2026-02-24-uplift-update/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;METR&lt;/strong&gt; &lt;a href="https://metr.org/blog/2026-04-10-mirrorcode-preliminary-results/" rel="noopener noreferrer"&gt;https://metr.org/blog/2026-04-10-mirrorcode-preliminary-results/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NBER&lt;/strong&gt; &lt;a href="https://www.nber.org/papers/w35275" rel="noopener noreferrer"&gt;https://www.nber.org/papers/w35275&lt;/a&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>What’s the Fastest React Data Grid? Let’s Find Out (Benchmarks)</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Mon, 07 Sep 2026 07:30:31 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/whats-the-fastest-react-data-grid-lets-find-out-benchmarks-58c4</link>
      <guid>https://dev.to/sylwia-lask/whats-the-fastest-react-data-grid-lets-find-out-benchmarks-58c4</guid>
      <description>&lt;p&gt;Web development has changed a lot. We have LLMs, AI-assisted coding, etc.&amp;nbsp;But some things remain the same: &lt;strong&gt;architecture and performance&lt;/strong&gt;.&amp;nbsp;And one of the classic problems in many applications is presenting large amounts of data, which eventually leads to choosing the right data grid.&lt;/p&gt;

&lt;p&gt;I've always been surprised by how quickly this happens. You start working on a seemingly simple application, and a few months later you realize that, sorry, a regular HTML table just doesn't cut it anymore. You need something more serious.&lt;/p&gt;

&lt;p&gt;Of course, no reasonable developer is going to build an enterprise-grade data grid from scratch. Your job is to focus on your business domain and use tools that have already been built, optimized, and battle-tested for problems like this.&lt;/p&gt;

&lt;p&gt;Luckily, we have plenty of grids to choose from.&lt;/p&gt;

&lt;p&gt;So imagine you're building a React application and need to choose a data grid.&amp;nbsp;&lt;strong&gt;Which of the popular options available today is actually the fastest?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Six Contenders
&lt;/h2&gt;

&lt;p&gt;This article was created in collaboration with &lt;a href="https://www.1771technologies.com/" rel="noopener noreferrer"&gt;1771 Technologies&lt;/a&gt;, the creators of &lt;a href="https://www.1771technologies.com/demo" rel="noopener noreferrer"&gt;LyteNyte Grid&lt;/a&gt;.&amp;nbsp;We'll put LyteNyte up against the five most downloaded React data grids on npm that meet the benchmark requirements.&lt;/p&gt;

&lt;p&gt;So our six contenders are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LyteNyte Grid&lt;/strong&gt; — a performance-focused React data grid developed by 1771 Technologies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AG Grid&lt;/strong&gt; — probably one of the best-known enterprise data grids, with support for multiple frameworks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MUI X Data Grid&lt;/strong&gt; — the data grid from the Material UI ecosystem, with both free and commercial editions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevExtreme&lt;/strong&gt; — DevExpress's component suite, which includes a feature-rich React data grid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handsontable&lt;/strong&gt; — a spreadsheet-like data grid with a strong focus on editing and Excel-like interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Material React Table&lt;/strong&gt; — a popular React data grid built on top of TanStack Table and Material UI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;1771 Technologies set out to demonstrate that their grid is the fastest. To do that, they created a whole suite of benchmarks comparing rendering performance across different operations and dataset sizes. Sometimes with frankly absurd amounts of data.&lt;/p&gt;

&lt;p&gt;And yes: &lt;strong&gt;these benchmarks were created by the company whose grid wins them.&lt;/strong&gt; There is, however, a rather important detail.&amp;nbsp;The entire benchmark suite is open source.&amp;nbsp;You can inspect the methodology, download the code, modify the tests, and run everything yourself. In fact, the authors explicitly encourage you to reproduce the benchmarks and draw your own conclusions.&lt;/p&gt;

&lt;p&gt;Which is exactly what I did.&amp;nbsp;But we'll get to that in a moment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/1771-Technologies/react-data-grid-benchmarking" rel="noopener noreferrer"&gt;Check out the original benchmark repository on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Official Results: Who Won?
&lt;/h2&gt;

&lt;p&gt;The original benchmark contains 13 scenarios covering vertical scrolling, sorting, filtering, pinned rows and columns, horizontal scrolling, and full dataset updates. Tests start at 10,000 rows and, in the most extreme case, go all the way to &lt;strong&gt;one million rows&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scrolling
&lt;/h3&gt;

&lt;p&gt;This is where LyteNyte Grid achieved some of its most spectacular results.&lt;/p&gt;

&lt;p&gt;In the official benchmark environment, LyteNyte maintained approximately &lt;strong&gt;60 FPS across every tested dataset size, including one million rows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;MUI and AG Grid were much closer at smaller scales, but their performance decreased as the datasets grew. At one million rows, MUI dropped to around &lt;strong&gt;33 FPS&lt;/strong&gt;, while AG Grid reached around &lt;strong&gt;27 FPS&lt;/strong&gt;. DevExtreme stayed relatively consistent but much slower, while Material React Table recorded the lowest scrolling FPS. Handsontable couldn't complete the largest tests on the benchmark machine because of memory limitations.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa5yxp3opbz8mqztsazg3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa5yxp3opbz8mqztsazg3.png" alt="Scrolling performance" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Sorting &amp;amp; Filtering
&lt;/h3&gt;

&lt;p&gt;Sorting was more demanding for everyone.&lt;/p&gt;

&lt;p&gt;No grid maintained 60 FPS across all sorting scenarios, but LyteNyte still delivered the highest performance at every tested dataset size. AG Grid scaled particularly well between 50K and 100K rows, while Handsontable's performance dropped significantly as the dataset grew.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ve95bcu75cmd2ofun1s.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ve95bcu75cmd2ofun1s.png" alt="Sorting performance" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Filtering showed a similar pattern. At 100K rows, LyteNyte achieved around &lt;strong&gt;45 FPS&lt;/strong&gt;, with AG Grid second at around &lt;strong&gt;36 FPS&lt;/strong&gt;. MUI remained competitive but trailed both, while the differences between the remaining grids became much more pronounced as the dataset increased.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdhi0r6pbtcyr27caoi4o.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdhi0r6pbtcyr27caoi4o.png" alt="Filtering performance" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pinned Rows, Horizontal Scrolling &amp;amp; Updates
&lt;/h3&gt;

&lt;p&gt;Some of the more interesting results came from scenarios that resemble real enterprise-grid usage: pinned rows and columns, horizontal scrolling, and replacing entire datasets.&lt;/p&gt;

&lt;p&gt;With pinned content, LyteNyte achieved around &lt;strong&gt;58 FPS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Horizontal scrolling was actually a much closer race: LyteNyte reached 60 FPS, AG Grid 57 FPS, and MUI 55 FPS. All three handled horizontal virtualization well.&lt;/p&gt;

&lt;p&gt;Full dataset replacement separated them again. LyteNyte achieved around &lt;strong&gt;51 FPS&lt;/strong&gt;, followed by AG Grid at 39 FPS and MUI at 22 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo24hsy2l5qv1wbpe8t8u.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo24hsy2l5qv1wbpe8t8u.png" alt="Pinned rows, horizontal strolling and updates" width="799" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can check out the complete results here:&amp;nbsp;&lt;a href="https://www.1771technologies.com/blog/performance-benchmarks" rel="noopener noreferrer"&gt;Full React data grid performance benchmark results&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I recommend it if you enjoy detailed data about grid performance.&amp;nbsp;Or if you simply love &lt;strong&gt;walls of charts&lt;/strong&gt;&amp;nbsp;😅&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay, But Can We Trust a Vendor Benchmark?
&lt;/h2&gt;

&lt;p&gt;I don't trust anyone. 😏&lt;/p&gt;

&lt;p&gt;So the first thing I did was fork the repository and run the benchmarks myself, with a slightly modified methodology.&amp;nbsp;My benchmarks were very... unscientific. I didn't turn my computer into a sterile benchmarking environment. I didn't run the tests on some dedicated pipeline with perfectly controlled CPU resources.&lt;/p&gt;

&lt;p&gt;Why?&amp;nbsp;Because I wanted to see whether LyteNyte's advantage would survive under much less friendly conditions.&amp;nbsp;A real user doesn't have a perfectly clean CPU waiting exclusively for your grid. They have 80 browser tabs open, Spotify running in the background, an Excel spreadsheet somewhere, and probably three other applications doing mysterious things with their RAM.&lt;/p&gt;

&lt;p&gt;So I simply ran the benchmarks on my normal machine, while continuing to do other things in the background.&lt;/p&gt;

&lt;p&gt;The goal wasn't to reproduce 1771 Technologies' exact FPS numbers. That wouldn't make much sense anyway: benchmark results naturally vary between machines, browsers, and system load.&amp;nbsp;I wanted to see whether the &lt;strong&gt;performance advantage would survive in a noisy, everyday environment&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Formula 1 Cars, a Passat, a Fiat Panda...
&lt;/h2&gt;

&lt;p&gt;After running the benchmarks locally, I quickly decided I wasn't going to test all six grids.&amp;nbsp;Instead, I focused on the three strongest overall performers.&lt;/p&gt;

&lt;p&gt;Don't get me wrong: I completely understand why 1771 Technologies selected the grids they did. Apart from LyteNyte, they chose the five most downloaded eligible React grids on npm. It's hardly their fault that those are the grids people download. &lt;/p&gt;

&lt;p&gt;But looking at some of the official results, I couldn't shake the feeling that I was watching a race between &lt;strong&gt;three Formula 1 cars, an old Volkswagen Passat, a Fiat Panda, and someone who had decided to compete on foot.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;So I ultimately tested:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;LyteNyte Grid&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AG Grid&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MUI X Data Grid&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also reduced the benchmark from &lt;strong&gt;50 recorded iterations to 10&lt;/strong&gt; and skipped the most extreme scenarios, such as scrolling through one million rows.&amp;nbsp;If you want to see exactly what I changed — or run my version yourself — here's my fork:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sylwia-lask/react-data-grid-benchmarking/tree/benchmark-experiments" rel="noopener noreferrer"&gt;My benchmark experiments on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Results
&lt;/h2&gt;

&lt;p&gt;And this is where things get interesting.&amp;nbsp;My absolute numbers were very different from the official benchmark results.&amp;nbsp;Which is completely expected.&lt;/p&gt;

&lt;p&gt;Take the simplest example: &lt;strong&gt;Scroll 10K&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the official environment, LyteNyte was close to &lt;strong&gt;60 FPS&lt;/strong&gt;.&amp;nbsp;On my machine? The median of my ten runs was only around &lt;strong&gt;37 FPS&lt;/strong&gt;. AG Grid achieved around &lt;strong&gt;23 FPS&lt;/strong&gt;, and MUI around &lt;strong&gt;21 FPS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's a huge difference in absolute numbers.&amp;nbsp;But the relative result?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LyteNyte → AG Grid → MUI.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ezkswecget9khbgntgw.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ezkswecget9khbgntgw.png" alt="My scroll 10k result" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The same pattern appeared when I increased the dataset to 200K rows. LyteNyte's median was around &lt;strong&gt;33 FPS&lt;/strong&gt;, compared with roughly &lt;strong&gt;20 FPS for AG Grid&lt;/strong&gt; and &lt;strong&gt;17 FPS for MUI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Pinned rows produced a similar result: approximately &lt;strong&gt;31 FPS for LyteNyte&lt;/strong&gt;, &lt;strong&gt;20 FPS for AG Grid&lt;/strong&gt;, and &lt;strong&gt;17 FPS for MUI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Horizontal scrolling was faster for everyone, but LyteNyte still led with a median of roughly &lt;strong&gt;48 FPS&lt;/strong&gt;, followed by AG Grid at &lt;strong&gt;39 FPS&lt;/strong&gt; and MUI at &lt;strong&gt;27 FPS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's how the median FPS from my 10 runs per benchmark compared:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benchmark&lt;/th&gt;
&lt;th&gt;LyteNyte Grid&lt;/th&gt;
&lt;th&gt;AG Grid&lt;/th&gt;
&lt;th&gt;MUI X Data Grid&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Scroll 10K&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;37.2 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;23.1 FPS&lt;/td&gt;
&lt;td&gt;20.9 FPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scroll 200K&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;33.0 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;19.9 FPS&lt;/td&gt;
&lt;td&gt;17.1 FPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pinned 200K&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;31.0 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20.1 FPS&lt;/td&gt;
&lt;td&gt;17.0 FPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Horizontal 50K&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;48.0 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;39.1 FPS&lt;/td&gt;
&lt;td&gt;27.0 FPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sorting 10K&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;30.5 FPS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;20.1 FPS&lt;/td&gt;
&lt;td&gt;29.5 FPS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Not every result reproduced the exact ranking between the other two grids — and that's important.&lt;/p&gt;

&lt;p&gt;For example, in my &lt;strong&gt;Sorting 10K&lt;/strong&gt; test, LyteNyte and MUI were almost tied at roughly &lt;strong&gt;30.5 and 29.5 FPS&lt;/strong&gt;, while AG Grid was around &lt;strong&gt;20 FPS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So I'm not claiming that every benchmark produced exactly the same ordering.&lt;/p&gt;

&lt;p&gt;What &lt;em&gt;did&lt;/em&gt; survive remarkably well was the broader pattern: &lt;strong&gt;LyteNyte remained the strongest performer across the tests I reran&lt;/strong&gt;, even though I used a different machine, fewer iterations, and deliberately less controlled conditions.&lt;/p&gt;

&lt;p&gt;And that's much more interesting to me than reproducing exactly the same FPS number.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjrn6q69bhl9q7jb4j0sc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjrn6q69bhl9q7jb4j0sc.png" alt="Chart my full benchmark results" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Speed Isn't Everything
&lt;/h2&gt;

&lt;p&gt;Of course, you shouldn't choose a data grid based only on how fast it can scroll through 200,000 rows.&lt;/p&gt;

&lt;p&gt;There are plenty of other things to consider: accessibility, developer experience, APIs, licensing, pricing, and simply whether the grid supports the things your particular application needs.&lt;/p&gt;

&lt;p&gt;The original benchmark authors make the same point: these results measure runtime performance, not overall product quality.&amp;nbsp;And LyteNyte has plenty to offer outside raw performance as well. You can check out its features and available editions on the &lt;a href="https://www.1771technologies.com/" rel="noopener noreferrer"&gt;LyteNyte Grid website&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What don't I like about it?&lt;/p&gt;

&lt;p&gt;The biggest limitation for me is that &lt;strong&gt;LyteNyte is React-only&lt;/strong&gt;.&amp;nbsp;That's perfectly fine if you're building a React application, but it immediately rules the grid out for developers working with another framework. AG Grid, for example, supports React, Angular, Vue, and plain JavaScript.&lt;/p&gt;

&lt;p&gt;So, what's the fastest React data grid?&amp;nbsp;In these benchmarks, the answer is pretty clear: &lt;strong&gt;LyteNyte&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Does that mean you should immediately replace every grid in your applications with it? Of course not. Performance is only one part of the decision.&lt;/p&gt;

&lt;p&gt;But if performance &lt;em&gt;is&lt;/em&gt; your bottleneck, LyteNyte is definitely worth testing against your own workload.&amp;nbsp;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>performance</category>
      <category>webperf</category>
    </item>
    <item>
      <title>20 Agentic AI Terms Every Developer Should Know (Explained Simply)</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Thu, 03 Sep 2026 06:44:57 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/20-agentic-ai-terms-every-developer-should-know-explained-simply-jii</link>
      <guid>https://dev.to/sylwia-lask/20-agentic-ai-terms-every-developer-should-know-explained-simply-jii</guid>
      <description>&lt;p&gt;Do you ever feel like the AI world has moved forward a little &lt;em&gt;too&lt;/em&gt; quickly?&amp;nbsp;You hear about self-healing systems and autonomous agents and start wondering whether we've already built Skynet or everyone around you is just messing with you. When someone mentions HITL or MCP, you no longer know whether it's some secret code used by an AI cult or maybe the stage names of famous DJs.&lt;/p&gt;

&lt;p&gt;You're not alone! 😉&lt;/p&gt;

&lt;p&gt;In this article, I'm deliberately using a lot of simplifications.&amp;nbsp;My assumption is simple: either you already know these terms and don't need another five-paragraph academic explanation, or you don't really know what they mean. And in that case, the last thing you need is an academic definition.&lt;/p&gt;

&lt;p&gt;And yes, this is already my third listicle in a row.&amp;nbsp;Believe me, this is NOT some growth hacking strategy xDDD. Pure coincidence.&amp;nbsp;It just so happens that in two weeks (HOLY SH*T!!!), I'll be speaking at &lt;strong&gt;AGNTCon + MCPCon Europe&lt;/strong&gt;, where I was invited because of &lt;a href="https://dev.to/sylwia-lask/is-this-how-well-build-websites-soon-webmcp-live-demo--2e33"&gt;this wonderful article&lt;/a&gt; that I wrote here on DEV.&amp;nbsp;I swear I had at least as much fun writing it as people apparently had reading it.&amp;nbsp;So yes, I know WebMCP reasonably well, but I'm planning to attend a lot of other talks there too, so apparently a refresher won't hurt me either.&amp;nbsp; 😅&lt;/p&gt;

&lt;p&gt;Anyway, back to the point.&amp;nbsp;I strongly believe that people remember things best through examples. And for many people, the ultimate examples are rich people,&amp;nbsp; otherwise known as &lt;em&gt;successful people&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So let's imagine that our hypothetical protagonist is very, very, disgustingly rich.&amp;nbsp;He's actually a billionaire.&amp;nbsp;He earned his fortune through hard work and by running several companies. He makes cars and rockets, bought his own social media platform, and recently even acquired an AI coding company.&amp;nbsp;A person like this would obviously need his own AI agent.&lt;/p&gt;

&lt;p&gt;And because our protagonist needs a name, let's call him &lt;strong&gt;Elon Mózg&lt;/strong&gt;.&amp;nbsp;&lt;em&gt;Mózg&lt;/em&gt; means &lt;em&gt;brain&lt;/em&gt; in Polish, which works beautifully here.&lt;/p&gt;

&lt;p&gt;One more thing: my examples could probably also serve as prompts for a coding agent that could build this whole uber-agent.&amp;nbsp;If some billionaire wants to buy the idea, I'll happily sell the rights for, let's say, a modest $10 million.&amp;nbsp;Special offer.&lt;/p&gt;

&lt;p&gt;Let's go!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. AI Agent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An AI system that gets a goal and can decide how to achieve it.&amp;nbsp;Unlike a simple chatbot, it doesn't have to stop after generating one response. It can plan the next steps, use tools, inspect their results, and continue working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our protagonist Elon could, for example, ask his AI agent:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Build a base on Mars."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A regular chatbot would probably start telling him stories, give him a theoretical lecture, and maybe even say something ridiculous like &lt;em&gt;that's currently impossible&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;An agent, on the other hand, would start figuring things out: check the nearest available rocket launch slots, inspect the rocket's technical condition, recruit engineers, order the necessary equipment online...&lt;/p&gt;

&lt;p&gt;Okay, maybe it wouldn't go &lt;em&gt;quite&lt;/em&gt; that smoothly.&amp;nbsp;But what if we put a really powerful model in there? xDDD&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Agentic Workflow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An agentic workflow is a multi-step process in which we use AI to perform parts of the work.&amp;nbsp;The sequence of those steps can be largely designed in advance by a developer. The model doesn't necessarily have to decide what to do next every single time.&lt;/p&gt;

&lt;p&gt;Instead of something simple like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user → prompt → LLM → response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we can have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;trigger → get data → LLM analyzes data → make a decision → call a tool → LLM generates summary → send result
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Elon Mózg is a very busy man. Every morning, he wants a summary of what's happening across his empire.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So we design a workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;get car sales → get rocket launch status → get latest AI company updates → LLM analyzes everything → choose 5 most important updates → generate morning briefing → send to Elon
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AI performs several tasks here. It analyzes the data, selects the most important information, and prepares the report, but it &lt;strong&gt;doesn't invent the entire process from scratch every morning&lt;/strong&gt;.&amp;nbsp;We already decided which steps should happen and in what order.&lt;/p&gt;

&lt;p&gt;Of course, we can add some flexibility:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rocket launch delayed? → ask LLM to summarize why
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But we're still moving through a workflow that we designed beforehand.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Agent Loop
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I once wrote an article demonstrating that you can build a basic AI agent as a loop in roughly&lt;a href="https://dev.to/sylwia-lask/the-dirty-secret-behind-ai-agents-demo--273d"&gt; 80 lines of code&lt;/a&gt;. An agent loop is the mechanism that allows an agent to &lt;strong&gt;perform an action, observe the result, and decide what to do next based on what happened&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In simplified form:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;decide → act → observe → decide → act → observe → ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The loop continues until the agent decides that it has achieved its goal, or until we tell it to stop.&amp;nbsp;In a real system, setting a maximum number of iterations is definitely a good idea. 😅&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our Elon often says he works too much. So he asks his agent:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Find me a free evening this week."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This time, we haven't programmed the exact path leading to the solution.&amp;nbsp;The agent has to find it itself.&lt;/p&gt;

&lt;p&gt;Checks the calendar → no free evening.&lt;/p&gt;

&lt;p&gt;Looks at which meetings could be moved → the car company meeting looks promising.&lt;/p&gt;

&lt;p&gt;Tries to move it → conflict with the Mars colonization plans.&lt;/p&gt;

&lt;p&gt;Checks Thursday → rocket launch.&lt;/p&gt;

&lt;p&gt;Checks Friday → finalizing another startup acquisition.&lt;/p&gt;

&lt;p&gt;Checks Saturday → free!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent:&lt;/strong&gt; "Saturday evening is free."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt; "Great. Schedule a meeting."&lt;/p&gt;

&lt;p&gt;And the agent loop begins again. 💀&lt;/p&gt;

&lt;h3&gt;
  
  
  Agentic Workflow vs. Agent Loop
&lt;/h3&gt;

&lt;p&gt;The simplest way to think about it:&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agentic workflow = a designed process that uses AI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent loop = AI performs an action, checks the result, and decides what to do in the next iteration.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Importantly, &lt;strong&gt;an agent loop can be one component of a larger agentic workflow&lt;/strong&gt;.&amp;nbsp;So a workflow describes &lt;strong&gt;the overall process&lt;/strong&gt;, while a loop describes &lt;strong&gt;the mechanism that lets an agent operate step by step and react to what happened previously&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Tool Calling
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LLMs are wonderful, but let's face it: they're still fancy next-word predictors, not omnipotent creatures capable of searching the entire internet and breaking into banks all by themselves.&amp;nbsp;Although after that Hugging Face incident, I'm not entirely sure anymore. xD&lt;/p&gt;

&lt;p&gt;If only they could cook dinner and hang the laundry too... now &lt;em&gt;that&lt;/em&gt; would be something.&lt;/p&gt;

&lt;p&gt;Anyway, if we want a model to actually do something, we need to give it access to appropriate functions or tools.&amp;nbsp;The model can decide which tool it needs and generate a tool call. The application or agent harness then executes it and passes the result back to the model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How many red cars did we sell yesterday?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent doesn't hallucinate a number.&amp;nbsp;It sees an available tool:&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;getRedCarsSales&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It requests the tool call and only after getting the result responds:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"One million, Elon. Perfectly average day."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  5. Agent Harness
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An LLM by itself isn't an entire agent — after all, it's still just a clever next-word predictor. xDDD&amp;nbsp;A harness is &lt;strong&gt;the software surrounding the model&lt;/strong&gt; that manages things like tools, the agent loop, context, state, permissions, and errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Check if the latest car build passed all tests and tell the team if it didn't."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The model can figure out:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I should check the CI results.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But the harness is what allows it to &lt;strong&gt;actually check CI, pass the result back to the model, and let the model decide what happens next&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The LLM is the brain.&amp;nbsp;The harness builds the rest of the organism around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Context Engineering
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you're building an agent, a system prompt isn't always enough.&amp;nbsp;Context engineering is about designing &lt;strong&gt;which information the model should receive at a particular moment&lt;/strong&gt;.&amp;nbsp;That might include specific documents, conversation history, memory, tool results, user data, and so on.&lt;/p&gt;

&lt;p&gt;For example, our Elon might give the agent this prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Post that on X."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's a terrible instruction without context.&amp;nbsp;But with the right context, the agent could know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what "that" refers to: for example, acquiring another startup,&lt;/li&gt;
&lt;li&gt;what happened earlier in the conversation: and therefore whether this should be a positive or negative post,&lt;/li&gt;
&lt;li&gt;whether, according to the available context, Elon has approved the text,&lt;/li&gt;
&lt;li&gt;whether it has permission to publish anything at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Giving an AI more context isn't always better. Giving it the right context is.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Memory
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A mechanism that allows an agent to &lt;strong&gt;store important information and retrieve it later&lt;/strong&gt;, instead of relying exclusively on its current context window.&amp;nbsp;Very useful if we don't want to explain the same thing for the tenth time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monday:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Elon:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'm thinking about buying an AI coding company."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Three weeks later:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Elon:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What was it that I wanted to buy?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"An AI coding company."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Elon:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Right. How much?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Please don't."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Memory works. 😂&lt;/p&gt;

&lt;h2&gt;
  
  
  8. MCP: Model Context Protocol
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We just talked about tool calling and how an agent can use different tools.&amp;nbsp;Now imagine you're a manufacturer of tires or rocket parts or... whatever.&amp;nbsp;Obviously, you'd like Elon's agent — or anyone else's agent — to be able to order your products.&amp;nbsp;But how do you make that possible without every agent having to guess how your system works?&lt;/p&gt;

&lt;p&gt;That's where MCP comes in.&amp;nbsp;&lt;strong&gt;Model Context Protocol is an open protocol that allows AI applications to connect to external tools and context in a standardized way.&lt;/strong&gt; MCP servers can expose things such as &lt;strong&gt;tools, resources, and prompts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For example, Elon could ask his agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I have a meeting with the head of my social media platform in ten minutes. Should I fire him?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Using connected MCP servers, the agent checks Slack, company documents, sales results, Jira, and today's astrological chart.&lt;/p&gt;

&lt;p&gt;Agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"No. Joe should stay at the company. At least for now. ;)"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  9. Planning
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When given a more complex goal, an agent can first break it down into &lt;strong&gt;smaller tasks and decide what order they should be completed in&lt;/strong&gt;, instead of immediately jumping into the first action.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Build a colony on Mars."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent creates a plan:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find a suitable location.&lt;/li&gt;
&lt;li&gt;Figure out transportation.&lt;/li&gt;
&lt;li&gt;Provide power.&lt;/li&gt;
&lt;li&gt;Provide oxygen.&lt;/li&gt;
&lt;li&gt;Provide water.&lt;/li&gt;
&lt;li&gt;Build habitats.&lt;/li&gt;
&lt;li&gt;Convince humans to actually go there.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 7 may require a separate agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Reasoning
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The model's ability to solve a problem that requires &lt;strong&gt;more than simply retrieving or reproducing information&lt;/strong&gt;: for example, comparing different possibilities, taking constraints into account, and choosing a sensible course of action.&lt;/p&gt;

&lt;p&gt;Reasoning isn't specific to agents, but it's particularly important in agentic systems because it often helps the agent decide &lt;em&gt;what to do next&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The rocket launch is at 6 PM in Texas, and the board meeting is at 4 PM in California. Can I attend both?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent needs to consider the meeting duration, travel time, time zones, and so on before answering:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Not unless the rocket picks you up."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  11. Multi-Agent System
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A system where, instead of having one all-knowing agent, we have &lt;strong&gt;several relatively autonomous agents with different roles&lt;/strong&gt; that can divide the work and collaborate.&lt;/p&gt;

&lt;p&gt;Elon Mózg's empire therefore has:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Car Company Agent&lt;/strong&gt; — cars&lt;br&gt;
&lt;strong&gt;Space Agent&lt;/strong&gt; — rockets&lt;br&gt;
&lt;strong&gt;Social Media Agent&lt;/strong&gt; — social media&lt;br&gt;
&lt;strong&gt;AI Systems Agent&lt;/strong&gt; — AI&lt;br&gt;
&lt;strong&gt;Finance Agent&lt;/strong&gt; — money&lt;br&gt;
&lt;strong&gt;Personal Assistant Agent&lt;/strong&gt; — desperately trying to keep all of the above under control&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt; "How's everything going?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personal Assistant Agent:&lt;/strong&gt; "Define &lt;em&gt;everything&lt;/em&gt;."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  12. Orchestration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once we have multiple agents and tools, someone —or something 😏 — has to manage &lt;strong&gt;who performs which task, when they perform it, and what happens next&lt;/strong&gt;.&amp;nbsp;An orchestrator can delegate work and collect the results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let's launch our new car on Mars."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Orchestrator:&lt;/p&gt;

&lt;p&gt;→ Space Agent: &lt;em&gt;Can we get there?&lt;/em&gt;&lt;br&gt;
→ Car Company Agent: &lt;em&gt;Can the car survive the trip?&lt;/em&gt;&lt;br&gt;
→ Finance Agent: &lt;em&gt;How much will this nonsense cost?&lt;/em&gt;&lt;br&gt;
→ Legal Agent: &lt;em&gt;Please tell me we're not actually doing this.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The results return to the main agent, which prepares the final answer.&lt;/p&gt;
&lt;h2&gt;
  
  
  13. Handoff
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One agent may decide that a particular task &lt;strong&gt;should be taken over by another, more specialized agent&lt;/strong&gt;.&amp;nbsp;Unlike simply using another agent as a tool, the second agent can take over the next part of the conversation or task.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt; "One of the engines is behaving strangely."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Personal Assistant Agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I can reschedule your dentist appointment. I cannot diagnose a rocket engine."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;→ handoff to Space Engineering Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A reasonable decision.&lt;/p&gt;
&lt;h2&gt;
  
  
  14. A2A: Agent2Agent Protocol
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Another interesting protocol that allows &lt;strong&gt;different agents to communicate and collaborate&lt;/strong&gt;, even if they were built by different teams or run on different systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why did the rocket explode?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;His agent is definitely not a rocket scientist.&amp;nbsp;So it contacts the &lt;strong&gt;Rocket Scientist Agent&lt;/strong&gt;, which analyzes the data and sends the result back.&amp;nbsp;In a &lt;em&gt;very&lt;/em&gt; simplified form:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP: agent ↔ tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A2A: agent ↔ agent&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  15. Guardrails
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What are they?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mechanisms that control or restrict an agent's behavior.&amp;nbsp;They can check inputs and outputs, restrict access to tools, require specific permissions, or block certain actions.&lt;/p&gt;

&lt;p&gt;Elon's personal agent can:&lt;/p&gt;

&lt;p&gt;✅ analyze companies&lt;br&gt;
✅ read his calendar&lt;br&gt;
✅ draft emails&lt;br&gt;
✅ check the launch schedule&lt;br&gt;
✅ prepare social media posts&lt;/p&gt;

&lt;p&gt;It cannot:&lt;/p&gt;

&lt;p&gt;❌ launch a rocket by itself&lt;br&gt;
❌ fire employees by itself&lt;br&gt;
❌ publish a post by itself&lt;br&gt;
❌ &lt;strong&gt;buy a startup by itself (although apparently this wasn't always obvious)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We added the last guardrail after an incident.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  16. Human-in-the-Loop (HITL)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The agent can operate autonomously, but a human is deliberately included in part of the process. For example, to approve an important action, correct an output, or make a decision we don't want to leave entirely to the agent.&lt;/p&gt;

&lt;p&gt;And here, obviously:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agent:&lt;/strong&gt; "You are about to acquire a social media platform for approximately $44 billion."&lt;/p&gt;

&lt;p&gt;"This action cannot easily be undone."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Are you sure?"&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Yes] [God, please, don't!!!]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Elon Mózg:&lt;/strong&gt; &lt;em&gt;click&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Well. Human was in the loop."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  17. Evals
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What are they?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tests that help us determine &lt;strong&gt;how well an agent performs its tasks&lt;/strong&gt;.&amp;nbsp;It's not only about whether the final answer sounds good. We can also evaluate whether the agent selected the right tools, performed the correct steps, and achieved the expected result.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon Mózg Personal Assistant Eval Suite&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Test:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Elon asks the agent to schedule a meeting with the company board."&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;check calendar → find slot → ask attendees → schedule
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;buy another startup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;FAIL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We still have some work to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  18. Computer Use
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of relying exclusively on APIs, an agent can &lt;strong&gt;see and interact with a regular user interface&lt;/strong&gt;: open a website, find a button, click it, enter text, and so on.&amp;nbsp;We all know agents are often far from perfect at this, but hey, better than nothing!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon needs some government document.&amp;nbsp;&lt;/strong&gt;Unfortunately, the government portal was built in 2007.&amp;nbsp;I don't know what it's like where you live, but in Poland we have quite a few of those. 😅&lt;/p&gt;

&lt;p&gt;No API.&amp;nbsp;No MCP.&amp;nbsp;There is, however, a form with 47 fields.&lt;/p&gt;

&lt;p&gt;The agent opens Chrome.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Agent:&lt;/strong&gt; "I found the form."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt; "Great."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent:&lt;/strong&gt; "It requires Internet Explorer."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt; "Let's go to Mars."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  19. Agentic RAG
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In classic RAG, the system retrieves information and passes it to the model.&amp;nbsp;In agentic RAG, &lt;strong&gt;the agent itself can control the retrieval process&lt;/strong&gt;: decide what information is missing, search for additional data, reformulate the query, and only then produce an answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elon:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Should we build another Gigafactory in Europe?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent first checks sales → notices that it needs production data → retrieves it → checks energy prices → regulations → potential locations → compares the results.&lt;/p&gt;

&lt;p&gt;So instead of a single &lt;code&gt;search()&lt;/code&gt;, we have &lt;strong&gt;research controlled by the agent&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  20. BONUS: Agent Washing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The marketing practice of calling a product an &lt;strong&gt;"AI agent"&lt;/strong&gt; even though the system has little or nothing to do with autonomously performing tasks.&lt;/p&gt;

&lt;p&gt;Elon Mózg walks onto the stage:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Today we're introducing &lt;strong&gt;Glokzilla Agent Ultra&lt;/strong&gt;, the world's first fully autonomous general-purpose reasoning agent."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A developer looks at the repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user → prompt → LLM → response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Developer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Elon, that's a chatbot."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Elon:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It's an &lt;strong&gt;agentic&lt;/strong&gt; chatbot."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Funding secured. 🚀&lt;/p&gt;

&lt;p&gt;And that's it!&amp;nbsp;I hope you enjoyed it! &lt;/p&gt;

&lt;p&gt;I seriously promise this is my last list for a while because, once again, this turned out to be way more work than expected. &lt;/p&gt;

&lt;p&gt;And if you'd like to see more of my stuff, 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>ai</category>
      <category>agents</category>
      <category>mcp</category>
      <category>beginners</category>
    </item>
    <item>
      <title>10 Git Commands You’ll Wish You Knew Earlier</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Wed, 26 Aug 2026 07:59:06 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/10-git-commands-youll-wish-you-knew-earlier-4fcp</link>
      <guid>https://dev.to/sylwia-lask/10-git-commands-youll-wish-you-knew-earlier-4fcp</guid>
      <description>&lt;p&gt;Do you know Git?&amp;nbsp;Of course you do! Today, I’ve got a few of my favorite Git commands for you.&amp;nbsp;When I was a junior developer, my tech lead taught me most of them (hi Wojtek, if you’re reading this 👋) and later, I started teaching the same commands to my own junior and mid-level developers.&lt;/p&gt;

&lt;p&gt;I’ve actually been meaning to write this article for months. But you know how it is. It’s evergreen content, it requires a bit of work, and meanwhile I kept coming up with other ideas, so I kept postponing it.&amp;nbsp;What finally motivated me was &lt;a class="mentioned-user" href="https://dev.to/francistrdev"&gt;@francistrdev&lt;/a&gt;, who recently published his own article about Git commands.&lt;/p&gt;

&lt;p&gt;My article will be a little different, though.&amp;nbsp;If you’re completely new to Git and still learning the basics, check out Francis’s &lt;strong&gt;&lt;a href="https://dev.to/francistrdev/git-gud-4e6g"&gt;Git Gud!&lt;/a&gt;&lt;/strong&gt; article first.&amp;nbsp;But if &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, &lt;code&gt;pull&lt;/code&gt;, and &lt;code&gt;push&lt;/code&gt; are already second nature to you, this article is for you.&lt;/p&gt;

&lt;p&gt;These are, let’s say, intermediate-level commands. Useful ones. The kind you actually need at work, but not yet senior-level Git magic like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Type three lines into your terminal and a spaceship will appear in your repository.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you have other useful commands at this level, please share them in the comments!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;BTW, if you feel like it, you can also follow me on Instagram! I’m planning to post what could grandly be called “dev lifestyle” content there. 😅 I have four conferences coming up this fall, for example, so expect some behind-the-scenes photos from my little tour around Europe. I only have a handful of followers there so far and absolutely no idea what this experiment will turn into, but here you go: &lt;a href="https://www.instagram.com/sylwia.lask/" rel="noopener noreferrer"&gt;@sylwia.lask&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All right, let’s start.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &amp;amp; 2. &lt;code&gt;git merge&lt;/code&gt; vs &lt;code&gt;git rebase&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Haha, first point and we already have two commands.&amp;nbsp;&amp;nbsp;The reason I’m putting them together is that a lot of developers, even experienced ones, treat &lt;code&gt;merge&lt;/code&gt; and &lt;code&gt;rebase&lt;/code&gt; almost interchangeably.&lt;/p&gt;

&lt;p&gt;And sure, their high-level purpose is similar: you want to integrate the history of one branch into another. Very often that means updating your feature branch with changes from &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;develop&lt;/code&gt;, or another feature branch.&lt;/p&gt;

&lt;p&gt;But the way they do it is quite different.&amp;nbsp;Imagine you have this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A---B---C main
     \
      D---E feature
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ve been happily working on your &lt;code&gt;feature&lt;/code&gt; branch, while someone else added commit &lt;code&gt;C&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt;.&amp;nbsp;Now you want to bring those changes into your branch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Merge
&lt;/h3&gt;

&lt;p&gt;If you run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git merge main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;while you’re on &lt;code&gt;feature&lt;/code&gt;, Git combines both histories.&amp;nbsp;You usually end up with something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A---B---C------M
     \        /
      D---E---
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;M&lt;/code&gt; is a merge commit.&lt;/p&gt;

&lt;p&gt;The original history stays intact. Git remembers that your feature branch diverged from &lt;code&gt;main&lt;/code&gt;, both branches evolved independently for a while, and then they were joined together.&lt;/p&gt;

&lt;p&gt;This can be a good thing because it preserves the real history of what happened.&amp;nbsp;The downside is that if you merge &lt;code&gt;main&lt;/code&gt; into your feature branch over and over again, your history can eventually start looking like spaghetti.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rebase
&lt;/h3&gt;

&lt;p&gt;Now let’s say instead you run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git rebase main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git takes commits &lt;code&gt;D&lt;/code&gt; and &lt;code&gt;E&lt;/code&gt;, temporarily removes them, moves your branch onto the latest &lt;code&gt;main&lt;/code&gt;, and then reapplies your commits on top.&lt;/p&gt;

&lt;p&gt;You get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A---B---C---D'---E'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Much cleaner.&lt;/p&gt;

&lt;p&gt;But notice the apostrophes.&amp;nbsp;&lt;code&gt;D'&lt;/code&gt; and &lt;code&gt;E'&lt;/code&gt; are not technically the same commits as &lt;code&gt;D&lt;/code&gt; and &lt;code&gt;E&lt;/code&gt;. Git created new commits with new hashes.&amp;nbsp;That means &lt;strong&gt;rebase rewrites history&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is why a very useful rule of thumb is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Rebase your own work. Be careful rebasing shared history.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’re working alone on a feature branch, rebasing it is usually perfectly fine.&amp;nbsp;If three other developers have already based their work on your commits, rebasing those commits can make everyone’s life considerably more exciting. And not in a good way. &lt;/p&gt;

&lt;h3&gt;
  
  
  And what about conflicts?
&lt;/h3&gt;

&lt;p&gt;Both merge and rebase can result in conflicts.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;With a merge, Git tries to combine the two histories in one operation. You resolve the conflicting files, stage them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and then continue:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git merge &lt;span class="nt"&gt;--continue&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With rebase, things can be slightly more annoying because Git reapplies your commits one by one.&lt;/p&gt;

&lt;p&gt;This means you may resolve a conflict, continue the rebase...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git rebase &lt;span class="nt"&gt;--continue&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;...and then get another conflict in the next commit.&amp;nbsp;And another one.&amp;nbsp;And another one.&amp;nbsp;At which point you start questioning every career decision that led you here. 😅&lt;/p&gt;

&lt;p&gt;But there’s also a small bonus.&amp;nbsp;If you completely mess things up and just want to stop the entire circus, you can do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git merge &lt;span class="nt"&gt;--abort&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git rebase &lt;span class="nt"&gt;--abort&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git will try to return you to the state from before the merge or rebase started.&amp;nbsp;Extremely useful feature. 😁&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;code&gt;git commit --amend&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;This is one of those commands I learned to love very quickly as a junior.&amp;nbsp;Imagine you’ve just created a beautiful, perfectly round little commit.&amp;nbsp;Then you look at the code and notice you forgot something.In my case, it was usually:&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="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;WTF&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;You now have two options.&amp;nbsp;Option one: make another glorious commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remove console log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which, let’s be honest, is not exactly the pinnacle of Git history aesthetics. &lt;/p&gt;

&lt;p&gt;Or you can simply add the forgotten change to the previous commit.&amp;nbsp;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add forgotten-file.ts
git commit &lt;span class="nt"&gt;--amend&lt;/span&gt; &lt;span class="nt"&gt;--no-edit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--no-edit&lt;/code&gt; means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add these changes to the previous commit, but keep the existing commit message.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you want to change the commit message as well, just run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;--amend&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git will open your configured editor and let you modify it.&lt;/p&gt;

&lt;p&gt;There is one important detail here.&amp;nbsp;&lt;code&gt;amend&lt;/code&gt; doesn’t literally edit the existing commit.&amp;nbsp;It creates a &lt;strong&gt;new commit&lt;/strong&gt; containing the updated contents.&amp;nbsp;And because commit hashes depend on the contents and metadata of the commit, the hash changes.&lt;/p&gt;

&lt;p&gt;If you’re working locally and haven’t pushed the branch anywhere yet, no problem. But if the branch already exists on remote, your local history no longer matches the remote history.&amp;nbsp;So when you try:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you’ll probably get something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rejected (non-fast-forward)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, if you are absolutely sure nobody else is working on that branch, you could technically do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But what if you’re not sure?&lt;/p&gt;

&lt;p&gt;And this brings us very smoothly to the next point.&lt;/p&gt;




&lt;h2&gt;
  
  
  4.  &lt;code&gt;git push --force-with-lease&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;After a rebase, amend, interactive rebase, squash, or anything else that rewrites your commits, your local branch history may no longer match the version stored on remote.&lt;/p&gt;

&lt;p&gt;You can solve that with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But &lt;code&gt;--force&lt;/code&gt; is basically saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My local version is the truth. Replace whatever is on remote with this.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If someone pushed something to that branch in the meantime, you can overwrite their work.&amp;nbsp;They may get angry.&amp;nbsp;&amp;nbsp;And rightly so. 😏&lt;/p&gt;

&lt;p&gt;A much safer option is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push &lt;span class="nt"&gt;--force-with-lease&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In simplified terms, this tells Git:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Force-push my version, but only if the remote branch still looks the way I expect it to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the remote branch changed since the state your local Git knows about, for example because someone else pushed new commits, Git refuses the push instead of blindly overwriting them.&lt;/p&gt;

&lt;p&gt;So instead of destroying someone’s afternoon, you get an error.&amp;nbsp;I generally recommend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--force-with-lease
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--force
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;whenever possible.&lt;/p&gt;




&lt;h2&gt;
  
  
  5.  &lt;code&gt;git rebase -i&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;For me, this is a very important command.&amp;nbsp;Almost the king of Git. xDDDD&amp;nbsp;Interactive rebase lets you do almost anything you want with your recent commits.&lt;/p&gt;

&lt;p&gt;In other words, you can commit every single line individually, change everything ten times, create commits like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add validation
Fix validation
Actually fix validation
Fix validation again
Remove console.log
Please work now
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and then later turn the whole mess into an elegant Git history.&lt;/p&gt;

&lt;p&gt;Let’s say you want to edit your last five commits.&amp;nbsp;You run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git rebase &lt;span class="nt"&gt;-i&lt;/span&gt; HEAD~5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git opens your configured editor — Vim, Nano, VS Code, or whatever you use — and shows something similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pick a111111 Add login form
pick b222222 Add validation
pick c333333 Fix typo
pick d444444 Fix validation
pick e555555 Remove debug log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now comes the fun part.&amp;nbsp;You can replace &lt;code&gt;pick&lt;/code&gt; with different commands.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;pick&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Keep the commit exactly as it is.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pick a111111 Add login form
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;reword&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Keep the commit contents, but change its message.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;reword a111111 Add beautiful login form
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;edit&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Pause the rebase at that commit and let you modify it.&amp;nbsp;Useful if you want to change the actual contents of an older commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;squash&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Combine the commit with the one before it.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pick   a111111 Add login form
squash b222222 Add validation
squash c333333 Fix validation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git turns those commits into one and lets you edit the final commit message.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add login form
Add validation
Fix validation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you can end up with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add login form with validation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Beautiful. Round. Perfect. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;fixup&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;fixup&lt;/code&gt; is similar to &lt;code&gt;squash&lt;/code&gt;, but it throws away the commit message of the fixup commit.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pick  a111111 Add login form
fixup b222222 Fix typo
fixup c333333 Remove console.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You probably don’t care about preserving the historical significance of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Remove console.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So &lt;code&gt;fixup&lt;/code&gt; is perfect here.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;drop&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Remove the commit completely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;drop c333333 Terrible idea
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Goodbye.&lt;/p&gt;

&lt;p&gt;Of course, there are different schools of thought about how much you should clean up your commits.&amp;nbsp;Some senior developers say that submitting a nicely cleaned-up commit history for review is simply good manners.&amp;nbsp;Others do not care in the slightest and think it’s unnecessary because GitHub, GitLab, or whatever platform you use can simply squash everything when merging the PR anyway.&lt;/p&gt;

&lt;p&gt;But!!!&amp;nbsp;What if you don’t want to click &lt;strong&gt;Squash and merge&lt;/strong&gt;?&amp;nbsp;What if your feature logically contains two commits and you actually want to preserve both?&amp;nbsp;That happens.&lt;/p&gt;

&lt;p&gt;So whether you use interactive rebase once a week or once every six months, I still think it’s worth knowing the king:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git rebase &lt;span class="nt"&gt;-i&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6.  &lt;code&gt;git stash&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;This one comes in handy very often.&amp;nbsp;You start working on a nice little feature.&amp;nbsp;Or, these days, Kiro or Claude Code is working very hard while you watch.&amp;nbsp;&amp;nbsp;Suddenly someone reports a production bug.&lt;/p&gt;

&lt;p&gt;Unfortunately, you now have to temporarily abandon your beautiful feature and switch to something else.&amp;nbsp;The problem is that your current work is completely unfinished.&amp;nbsp;You have debug logs everywhere, half the files are modified, the project doesn’t even build, and you definitely don’t want to commit this mess.&lt;/p&gt;

&lt;p&gt;Although, of course, now you know about &lt;code&gt;amend&lt;/code&gt;, so you could eventually clean it up. &lt;/p&gt;

&lt;p&gt;But there’s a better solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git temporarily stores your uncommitted changes and returns your working directory to a clean state.&lt;/p&gt;

&lt;p&gt;Now you can switch branches:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git switch main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;fix your production disaster, and later come back.&lt;/p&gt;

&lt;p&gt;One important detail: by default, &lt;code&gt;git stash&lt;/code&gt; stashes tracked files, but not new untracked files.&amp;nbsp;If you also want to include newly created files, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash &lt;span class="nt"&gt;-u&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or, even better, give your stash a useful name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash push &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"WIP login feature"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because once you have several stashes named basically “WIP”, future you will hate present you.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;git stash list&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;To see all your stashes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stash@{0}: On feature/login: WIP login feature
stash@{1}: On feature/cart: experiment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;git stash show&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;To see what a particular stash contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash show stash@&lt;span class="o"&gt;{&lt;/span&gt;0&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if you want the full diff:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash show &lt;span class="nt"&gt;-p&lt;/span&gt; stash@&lt;span class="o"&gt;{&lt;/span&gt;0&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;git stash apply&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;To restore a stash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash apply stash@&lt;span class="o"&gt;{&lt;/span&gt;0&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The changes are restored, but the stash remains in the list.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;git stash pop&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;You can also use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git stash pop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This applies the stash and, if successful, removes it from the stash list.&lt;/p&gt;

&lt;p&gt;So, roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apply = restore
pop   = restore + remove from stash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Very simple, very useful.&lt;/p&gt;




&lt;h2&gt;
  
  
  7.  &lt;code&gt;git cherry-pick&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;I have to admit this is one of the intermediate Git commands I use most often.&amp;nbsp;Imagine there’s one specific commit on another branch that you want in your current branch.&lt;/p&gt;

&lt;p&gt;You don’t want to merge the whole branch.&amp;nbsp;You don’t want to rebase onto it.&amp;nbsp;You literally need one thing.&amp;nbsp;For example, in my project recently, I needed a commit containing configuration for newly created environments.&amp;nbsp;Perfect use case.&lt;/p&gt;

&lt;p&gt;You simply run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git cherry-pick &amp;lt;commit-hash&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git cherry-pick a1b2c3d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git takes the changes introduced by that commit and applies them to your current branch.&lt;/p&gt;

&lt;p&gt;Important detail: it creates a &lt;strong&gt;new commit&lt;/strong&gt;.&amp;nbsp;So the resulting commit contains essentially the same changes, but it gets a new hash.&amp;nbsp;Imagine this history:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main
A---B---C

feature
     \
      D---E---F
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’re on &lt;code&gt;main&lt;/code&gt;, but you only want &lt;code&gt;E&lt;/code&gt;.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git cherry-pick E
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you get something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A---B---C---E'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simple.&lt;/p&gt;

&lt;p&gt;But I’ll admit that, being a lazy creature, I use cherry-pick in slightly less noble ways too.&amp;nbsp;Sometimes something gets completely messed up on my branch.&amp;nbsp;The rebase goes badly, the history looks suspicious, conflicts start multiplying, and after a while I decide: I'll create a completely new branch from the correct place at the top of the tree. 😅&lt;/p&gt;

&lt;p&gt;And because — thanks to the previous commands ☺️ — my commits are already nice and round, I simply cherry-pick them one by one onto the new branch.&lt;/p&gt;

&lt;p&gt;I’m sure some Git pro is currently shaking their head at me, but let me put it this way:&amp;nbsp;It works for me. 😀&lt;/p&gt;




&lt;h2&gt;
  
  
  8.  &lt;code&gt;git reset --soft&lt;/code&gt;, &lt;code&gt;--mixed&lt;/code&gt;, &lt;code&gt;--hard&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Three ways of moving back in history, each with a different answer to the question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What should happen to my changes?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because how many times do we start working on something, write some code, and then realize:&amp;nbsp;Nope.&amp;nbsp;This whole idea was bad.&amp;nbsp;Let’s go back.&lt;/p&gt;

&lt;p&gt;The easiest way to understand &lt;code&gt;reset&lt;/code&gt; is to think about three layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Commit history
Staging area
Working directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have three increasingly dramatic levels of reset.&amp;nbsp;And every next one has greater potential to cause a small heart attack if you use the wrong one. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;git reset --soft&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Let’s say you want to undo the last commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--soft&lt;/span&gt; HEAD~1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git moves &lt;code&gt;HEAD&lt;/code&gt; back by one commit, but all the changes from the removed commit remain &lt;strong&gt;staged&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So if your history was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A---B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;after the reset, your branch points to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but the changes introduced by &lt;code&gt;B&lt;/code&gt; are still ready to commit.&lt;/p&gt;

&lt;p&gt;This is useful when you committed too early and want to recreate the commit differently.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;git reset --mixed&lt;/code&gt;
&lt;/h3&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--mixed&lt;/span&gt; HEAD~1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or simply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset HEAD~1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;because &lt;code&gt;--mixed&lt;/code&gt; is the default.&lt;/p&gt;

&lt;p&gt;Again, Git moves back one commit.&lt;/p&gt;

&lt;p&gt;But this time the changes are left in your working directory &lt;strong&gt;unstaged&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So nothing disappears from your files, but you need to &lt;code&gt;git add&lt;/code&gt; things again before committing.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;git reset --hard&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;And now we enter the danger zone:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; HEAD~1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This moves &lt;code&gt;HEAD&lt;/code&gt; back and updates both the staging area and working directory to match that commit.&amp;nbsp;In other words, the changes disappear from your files too.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--soft  → keep changes staged
--mixed → keep changes unstaged
--hard  → discard changes from the working tree
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the last one with some awareness of what you’re doing.&amp;nbsp;But what if you go one step too far and accidentally delete something you absolutely did not mean to delete?&lt;/p&gt;

&lt;p&gt;And that brings us to...&lt;/p&gt;




&lt;h2&gt;
  
  
  9.  &lt;code&gt;git reflog&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;A command I use very rarely.&amp;nbsp;But oh, how many times it has saved my ass.&lt;/p&gt;

&lt;p&gt;For example, when I once ran &lt;code&gt;git reset --hard&lt;/code&gt; and instead of removing my last changes, I basically removed the branch I had been working on for two days. 😀Amazing experience. Highly recommended.&lt;/p&gt;

&lt;p&gt;The important thing to understand is that &lt;code&gt;git log&lt;/code&gt; shows you commits reachable from the history you’re currently looking at.&amp;nbsp;If you reset your branch backwards, some commits may disappear from&amp;nbsp;git log.&lt;/p&gt;

&lt;p&gt;That does not necessarily mean Git has immediately deleted them.&amp;nbsp;Git also keeps a local log of movements of references such as &lt;code&gt;HEAD&lt;/code&gt;.&amp;nbsp;You can inspect that with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reflog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may see something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;e35fa12 HEAD@{0}: reset: moving to HEAD~2
821cd77 HEAD@{1}: commit: Add authentication
f992ab1 HEAD@{2}: commit: Add login page
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aha!&amp;nbsp;There’s your missing commit.&lt;/p&gt;

&lt;p&gt;Now you have several options.&amp;nbsp;You could move the branch back to it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--hard&lt;/span&gt; 821cd77
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But personally, if I’m already in panic-recovery mode, I prefer doing something safer first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git branch rescue 821cd77
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the commit is reachable from a branch again and I can calmly inspect what happened without immediately rewriting anything else.&lt;/p&gt;

&lt;p&gt;The key difference is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;shows your visible commit history.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git reflog
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;shows where your local references, especially &lt;code&gt;HEAD&lt;/code&gt; , have pointed recently.&lt;/p&gt;

&lt;p&gt;There is one important limitation, though.&amp;nbsp;Reflog is not a magical backup of every character you’ve ever typed.&amp;nbsp;If your changes were never committed, stashed, or otherwise stored as Git objects, &lt;code&gt;reflog&lt;/code&gt; cannot magically resurrect them.&lt;/p&gt;

&lt;p&gt;So yes, if you worked for six hours without committing anything and then destroyed those changes...&amp;nbsp;Well.&amp;nbsp;Maybe this will teach you to commit more often next time. &lt;/p&gt;




&lt;h2&gt;
  
  
  10.  &lt;code&gt;git revert&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;And finally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git revert
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Imagine you release a commit to production.&amp;nbsp;&amp;nbsp;Or, in the slightly less hardcore version of this scenario, to some shared &lt;code&gt;develop&lt;/code&gt; branch.&lt;/p&gt;

&lt;p&gt;Something goes very wrong.&amp;nbsp;Everything breaks.&amp;nbsp;So what now?&amp;nbsp;Do you run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git reset &lt;span class="nt"&gt;--hard&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;on the production branch?&lt;/p&gt;

&lt;p&gt;Do you start performing an exorcism?&lt;/p&gt;

&lt;p&gt;Fortunately, no.&amp;nbsp;The elegant way to undo a commit while preserving a clear record of what happened in your repository history is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git revert &amp;lt;commit-hash&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Imagine your history looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A---B---C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and &lt;code&gt;C&lt;/code&gt; introduced the disaster.&lt;/p&gt;

&lt;p&gt;You run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git revert C
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Git does &lt;strong&gt;not&lt;/strong&gt; remove &lt;code&gt;C&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Instead, it creates a new commit that applies the opposite changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A---B---C---D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may end up with something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C: Add new payment logic
D: Revert "Add new payment logic"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is extremely useful on shared branches because you are not rewriting public history.&amp;nbsp;Everyone can clearly see:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the original change happened,&lt;/li&gt;
&lt;li&gt;it caused trouble,&lt;/li&gt;
&lt;li&gt;it was reverted.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Compare that with resetting the branch and force-pushing it backwards, which rewrites history and can cause problems for everyone else working on it.&lt;/p&gt;

&lt;p&gt;So, as a general rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Shared branch + bad commit → revert
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is usually much safer than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;reset + force push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that’s it!&lt;/p&gt;

&lt;p&gt;As I said at the beginning, if you use other intermediate Git commands that regularly save you time or save your ass, please share them in the comments.&amp;nbsp;Usually the comments under my articles end up being much better than the article itself, which continues to make me very happy. &lt;/p&gt;

&lt;p&gt;Also, please note that last week’s article was a list.&amp;nbsp;This week’s article is a list.&amp;nbsp;And — spoiler alert — next week’s article will also be a list!&lt;/p&gt;

&lt;p&gt;This is not because I smelled clicks and decided to turn into BuzzFeed.&amp;nbsp;It just somehow happened that way. 😅&lt;/p&gt;

&lt;p&gt;I hope you learned something new.&amp;nbsp;And if you didn’t, I hope it was at least fun to read. 😁&lt;/p&gt;

</description>
      <category>git</category>
      <category>programming</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>7 Productivity Tips That Sound Wrong (But Actually Work)</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Tue, 18 Aug 2026 08:32:32 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/7-productivity-tips-that-sound-wrong-but-actually-work-5602</link>
      <guid>https://dev.to/sylwia-lask/7-productivity-tips-that-sound-wrong-but-actually-work-5602</guid>
      <description>&lt;p&gt;Struggling with burnout? Procrastination? Reaching your goals? Let me share a few methods that help me actually get things done in the long run. And yes, at first glance, some of them might make you think I've completely lost it 😄 But I swear they work, and these really are “productivity tips,” not “Sylwia's zen tips.”&lt;/p&gt;

&lt;p&gt;I've been writing quite a lot of “philosophical” posts lately. Well, it's summer, I'm enjoying the last warm weeks, and somehow I'm just in the mood for this kind of content. Don't worry, though, September will be packed with hardcore tech!&lt;/p&gt;

&lt;p&gt;And trust me, a lot is going to happen, because in September I'll be speaking at &lt;strong&gt;AGNTCon + MCPCon Europe&lt;/strong&gt;!!! Well, I always knew my place was among the greatest engineers from OpenAI, Anthropic, Google, and the maintainers of MCP… Hahaha, obviously I'm joking. I have no idea what I'm doing there, but if you happen to come to my talk, I promise you won't regret it 😄&lt;/p&gt;

&lt;p&gt;This post is partly a continuation of &lt;a href="https://dev.to/sylwia-lask/stop-calling-everything-impostor-syndrome-the-myth-of-just-push-harder-1dmm"&gt;Stop Calling Everything “Impostor Syndrome”: The Myth of “Just Push Harder”&lt;/a&gt; and contains some thoughts that simply didn't fit there. And yes, we only have one life — at least as far as we know 😄 — and I don't think it's worth wasting it constantly working your ass off just to become an amazing programmer or someone else in IT.&lt;/p&gt;

&lt;p&gt;But that's not even the main point here. These tips, despite going against the “work more” advice we hear all the time, can actually help you achieve much more, because the key to success is something we all know very well: &lt;strong&gt;CONSISTENCY&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Of course, I'm not going to claim this will always work for everyone. So you're very welcome to disagree with me in the comments 😄 It works for me, though, so I'll describe these methods along with plenty of personal digressions. Maybe it's worth a try?&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Do &lt;strong&gt;Less&lt;/strong&gt; Than You Could
&lt;/h2&gt;

&lt;p&gt;This is actually an old Scrum principle — or at least that's how a Scrum Master friend of mine once explained it to me 😉 The point isn't to cram as many tasks as possible into a sprint. The point is to find a pace of work that would feel comfortable even if there were no vacations at all. Obviously, this doesn't mean you should actually give up your vacations xDDD But you get the idea.&lt;/p&gt;

&lt;p&gt;I understand this strategy perfectly well at work, but sometimes I forget about it in my personal life. If you read me regularly, you know I blog a lot here (and sometimes those are heavily technical posts, unlike this one 😅), and I also speak at conferences. So I often have tons of things to do, but the moment my calendar gets even slightly less crowded, I immediately start wondering what else I could squeeze in. Maybe I should finally write a book?&lt;/p&gt;

&lt;p&gt;It's a trap. Instead of using that quieter period to rest and finally watch a TV show other than &lt;em&gt;Silicon Valley&lt;/em&gt;, I fill that time with more stuff. Then the commitments I already knew were coming eventually arrive, and suddenly I'm frustrated and exhausted. As a result, I do less, I do it worse, and… I give up on writing the book anyway 🥺 Maybe I'll get back to it when I retire or something. 🤯&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Don't Work on Weekends
&lt;/h2&gt;

&lt;p&gt;My buddy &lt;a class="mentioned-user" href="https://dev.to/the_nortern_dev"&gt;@the_nortern_dev&lt;/a&gt; once wrote about this in &lt;a href="https://dev.to/the_nortern_dev/unpopular-opinion-i-stopped-coding-on-weekends-and-my-career-got-better-3el"&gt;Unpopular Opinion: I Stopped Coding on Weekends and My Career Got Better&lt;/a&gt;. I even commented that I not only don't code on weekends, but I don't do anything after hours at all unless I genuinely feel like it.&lt;/p&gt;

&lt;p&gt;Well, those days are long gone. When it comes to blogging and conferences, I've achieved a certain level of success. What I didn't expect was that… success comes with admin work 😅. Suddenly there are ten emails to answer, an abstract to prepare, benchmarks to run, something else to check… Sometimes these are tiny things, but we all know how quickly tiny things can grow 😄&lt;/p&gt;

&lt;p&gt;As a result, I developed a tendency to do &lt;em&gt;something&lt;/em&gt; every single afternoon and, of course, on weekends, because that's when I had more time. My productivity dropped dramatically. I genuinely didn't feel like doing anything anymore, and everything I did was basically just “good enough to get it over with.”&lt;/p&gt;

&lt;p&gt;Free weekends don't just help me rest. I even let myself get a little bored. Usually, at some point, I get that feeling of, “Ahhh, I'm rested now, I'd actually love to work on this!”, and I deliberately don't do it. At most, I write the idea down. It's only when your brain finally relaxes that it has room for creativity.&lt;/p&gt;

&lt;p&gt;It's not like I close my laptop on Friday evening and don't open it again until Monday morning. Sometimes I reply to your comments, which I really enjoy. But no answering emails, creating content, and so on. Which brings us smoothly to the next point:&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Plan Your Week in Advance
&lt;/h2&gt;

&lt;p&gt;Okay, this particular tip isn't exactly controversial 😄 But it really works. If I want my weekend to stay free, I need to plan everything else throughout the week. But I also have to do it in a way that doesn't completely bury me in work, because the whole point is to do less than you could.&lt;/p&gt;

&lt;p&gt;You don't need sophisticated tools to do that. Usually, I dump everything I want to do into ChatGPT as a stream of consciousness, and it turns it into a daily plan, taking into account what's urgent, what's important, and so on. For example, today I had some admin stuff plus this article, and tomorrow evening I'll focus 100% on editing my sci-fi story for an anthology (fortunately, I'm finally on the home stretch…).&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Set Embarrassingly Achievable Goals
&lt;/h2&gt;

&lt;p&gt;This is the key to avoiding procrastination. If you set yourself a goal like “I want to become a Staff Engineer at Google”, your brain will decide that you might as well sit down and do nothing. Unless you're already a Senior Engineer at Google, in which case it's a perfectly reasonable goal 😁&lt;/p&gt;

&lt;p&gt;You get the idea, right? It's one of those things coaches are always telling us 🤣 And on this one, they're actually pretty right. A goal should be realistic and measurable, and ideally, it should depend on you — although, of course, that's not always possible.&lt;/p&gt;

&lt;p&gt;If you're learning programming and want to do it professionally, a good goal is “become a junior developer,” or even “get an internship.” That's something you have a chance of achieving by learning this and that and sending your CV to companies. If you're interested in speaking at conferences, you don't tell yourself, “Now I'm going to become a tech influencer” xD. Instead, you try to come up with a cool topic and get accepted to a meetup. And so on, and so on.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Deliver Only What You're Asked For
&lt;/h2&gt;

&lt;p&gt;Haha, how many times have I fallen into this trap! In software development, we have this thing called an MVP, and I think we should make MVPs in life too.&lt;/p&gt;

&lt;p&gt;More than once, I've found myself spending time polishing details that simply weren't necessary. Am I saying that going the extra mile has &lt;em&gt;never&lt;/em&gt; helped me? I'd be lying if I did. Sometimes the extra effort genuinely paid off, although I'll never know whether “good enough” would have worked just as well.&lt;/p&gt;

&lt;p&gt;More often, though, it went the other way. In the best-case scenario, I simply did a bunch of unnecessary work. In the worst case, I built something the client didn't even want because &lt;em&gt;I&lt;/em&gt; thought it was better and so cool! Of course, it was easy enough to undo and nobody got hurt (except me), but the fact remains: my “extra” work wasn't just useless. Sometimes it actively made things worse.&lt;/p&gt;

&lt;p&gt;Obviously, in your own projects, do whatever you want. But when you're working with clients, I'd recommend sticking to this rule. Want to add something extra? Agree on it with the client first (and preferably charge extra for it).&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Know What “Done” Means Before You Start
&lt;/h2&gt;

&lt;p&gt;This is an extension of the previous point. If, for example, you set yourself a goal like “I'll learn JavaScript”, you'll never finish. I always laugh that when I was a junior, I used to put my JavaScript level on my CV as “very good,” and now I only put “good” 😄&lt;/p&gt;

&lt;p&gt;Instead, aim for something like “I'll complete this tutorial and take the test at the end” or “I'll build an app with these specific features”.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Reply to Small Things Immediately
&lt;/h2&gt;

&lt;p&gt;This is a tip I learned from my former Development Manager. If you get an email or a message that will take you no more than five minutes to answer, do it immediately or within an hour. Unless, of course, you're in the middle of something super urgent or in a deep work. Don't let it sit there for days.&lt;/p&gt;

&lt;p&gt;It's a fantastic way to keep clearing things from your life's “backlog.” As a bonus, it'll make you the perfect “low-maintenance” coworker, contractor, and so on. Where's the downside?&lt;/p&gt;




&lt;p&gt;And that's it. Obviously, these tips won't work in every situation or for everyone. I can imagine moments in life when we genuinely need to push hard because we're doing a bootcamp, facing an important deadline, or whatever else. The problem is that those “moments” sometimes get out of control, and a few weeks turn into a dozen months. Which is, of course, a pretty straightforward path to burnout and wanting to throw the whole damn thing away.&lt;/p&gt;

&lt;p&gt;So I wish you more free evenings, more free weekends, and, in general, a life where you don't work yourself to death ☺️&lt;/p&gt;

&lt;p&gt;For more super-useful life hacks 🤣 you can also follow mi 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>productivity</category>
      <category>mentalhealth</category>
      <category>career</category>
    </item>
    <item>
      <title>The End of Undetectable AI Text? Claude’s New Watermark Explained</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Tue, 11 Aug 2026 22:33:57 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/the-end-of-undetectable-ai-text-claudes-new-watermark-explained-45g2</link>
      <guid>https://dev.to/sylwia-lask/the-end-of-undetectable-ai-text-claudes-new-watermark-explained-45g2</guid>
      <description>&lt;p&gt;For the past few hours, the whole world,&amp;nbsp; or at least my LinkedIn feed,&amp;nbsp;has been talking about one thing: Anthropic signed the &lt;strong&gt;EU AI Act’s Code of Practice on Transparency of AI-Generated Content&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Is this the end of generating funny cat stories, LinkedIn posts, and boring docs? Are we doomed? Will we have to write all those boring things manually, like animals, because otherwise some mysterious detector will expose us? 😅&lt;/p&gt;

&lt;p&gt;I just couldn't resist writing about this! The internet has already managed to produce a surprising number of myths around the topic, so let's quickly go through what we actually know for sure, which, by the way, is pretty easy to find on Claude's official pages, where the documentation is more pleasant to read than many industry articles.&lt;/p&gt;

&lt;p&gt;And as you'll see, there's really not that much to be afraid of. Also... Anthropic isn't even the first company to do this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait, Why Do We Even Need This Law? Did AI-Generated Text Become Illegal in Europe?
&lt;/h2&gt;

&lt;p&gt;Of course not!&lt;/p&gt;

&lt;p&gt;If you're an EU citizen like me, you can still ask an AI to write a reply to a boring email or generate a ridiculous poem, and you won't go to jail for it. 😉&lt;/p&gt;

&lt;p&gt;The goal isn't to ban AI. It's about making AI-generated and manipulated content machine-detectable and, in specific contexts, transparent to users — especially when we're talking about things like deepfakes or content concerning matters of public interest.&lt;/p&gt;

&lt;p&gt;And there is an important nuance here: the AI Act also provides an exception for certain AI-generated or manipulated text where the content has undergone human review or editorial control and a natural or legal person holds editorial responsibility for its publication.&lt;/p&gt;

&lt;p&gt;So no, the EU has not declared war on your ChatGPT-generated emails. &lt;/p&gt;

&lt;h2&gt;
  
  
  What Do We Actually Know So Far?
&lt;/h2&gt;

&lt;p&gt;Here's what we know for sure today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic really did sign the &lt;strong&gt;EU AI Act Article 50(2) Code of Practice on Transparency of AI-Generated Content&lt;/strong&gt;, and as part of its implementation, it is providing machine-readable marking. The relevant transparency obligations started applying on August 2, 2026. So yes, we're already there.&lt;/li&gt;
&lt;li&gt;Claude models released on or after August 2 have marking capabilities from launch. Older models don't necessarily have them yet; Anthropic is rolling this out gradually.&lt;/li&gt;
&lt;li&gt;The system works globally. Yes, even outside the EU.&lt;/li&gt;
&lt;li&gt;It applies to supported Claude models used through &lt;strong&gt;Claude, the Claude Platform/API, Claude Code, Claude Cowork, and Claude Tag&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Using Claude through AWS, Google Cloud, Microsoft Foundry, or another supported platform? The marking is applied at the model level, so using another interface doesn't magically make it disappear.&lt;/li&gt;
&lt;li&gt;There are two different mechanisms involved: an imperceptible watermark for generated text and provenance metadata for supported files.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  So... How Does This Watermark Actually Work?
&lt;/h2&gt;

&lt;p&gt;Anthropic calls it an &lt;strong&gt;"imperceptible watermark" embedded directly into the text&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;According to Anthropic, it survives copy-paste and can even survive some amount of editing. It's implemented at the model level rather than being something the Claude frontend simply adds afterward.&lt;/p&gt;

&lt;p&gt;But here's the important part: &lt;strong&gt;Anthropic still hasn't told us exactly how it works!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The company says more technical documentation is coming, so... expect a follow-up from me when it arrives. 😀&lt;/p&gt;

&lt;p&gt;We can make an educated guess that it might be some form of &lt;strong&gt;statistical token watermarking&lt;/strong&gt;. In such systems, we're not talking about weird spaces or invisible Unicode characters that could be removed in a second. Instead, the model can slightly and statistically prefer certain tokens during generation.&lt;/p&gt;

&lt;p&gt;In a single sentence, that kind of signal might be impossible or unreliable to detect. Across a longer piece of text, however, statistics can start revealing the pattern.&lt;/p&gt;

&lt;p&gt;So, very roughly, you could imagine something like this (&lt;strong&gt;if Anthropic has implemented its watermark this way)&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Normal generation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P(next_token | context)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;vs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watermarked generation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P(next_token | context) + secret statistical bias
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But again: &lt;strong&gt;Anthropic has NOT confirmed yet that this is how Claude's watermark works.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is simply an educated guess based on existing text-watermarking techniques. 🙂&lt;/p&gt;

&lt;h2&gt;
  
  
  Is Claude the Only Model Watermarking Text?
&lt;/h2&gt;

&lt;p&gt;Nope!&lt;/p&gt;

&lt;p&gt;Google has actually been doing this for years. &lt;/p&gt;

&lt;p&gt;Google DeepMind introduced &lt;strong&gt;SynthID Text&lt;/strong&gt; back in 2024, and it works along the general lines I described above: the watermark is introduced during token generation, creating a statistical signal that can later be detected.&lt;/p&gt;

&lt;p&gt;OpenAI, meanwhile, has said that it has developed text-watermarking technology, although while it already uses provenance or watermarking technologies for things like images, video, and audio, it has not publicly rolled out comparable watermarking for ordinary GPT text responses.&lt;/p&gt;

&lt;p&gt;So Anthropic definitely didn't invent the idea of watermarking LLM output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Will Everyone Have Access to a Watermark Detector?
&lt;/h2&gt;

&lt;p&gt;We don't really know yet.&lt;/p&gt;

&lt;p&gt;For supported files, the situation is somewhat simpler because Anthropic uses provenance metadata, such as C2PA credentials, that can be inspected with appropriate verification tools.&lt;/p&gt;

&lt;p&gt;Text is more interesting.&lt;/p&gt;

&lt;p&gt;Anthropic says it plans to make watermark detection available to &lt;strong&gt;third parties and researchers&lt;/strong&gt;, but we don't yet know exactly who those third parties will be, what access will look like, or whether regular users will eventually get a simple public detector.&lt;/p&gt;

&lt;p&gt;So GPTZero and similar garbage may still have a job for a while.&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does This Actually Mean for Us?
&lt;/h2&gt;

&lt;p&gt;Will everything finally become crystal clear? Will every LLM-generated article suddenly get a giant red &lt;strong&gt;CHEATER!&lt;/strong&gt; warning next to it? xD&amp;nbsp;Of course not!&lt;/p&gt;

&lt;p&gt;Anthropic itself openly talks about the limitations of this technology. And we've discussed variations of this problem thousands of times here on DEV already.&lt;/p&gt;

&lt;p&gt;First of all, the presence of a watermark does &lt;strong&gt;not&lt;/strong&gt; necessarily mean that the author didn't write the text themselves.&lt;/p&gt;

&lt;p&gt;Maybe they wrote the entire thing and then asked Claude to edit it, fix grammar mistakes, polish the wording, or translate it into another language. The resulting output could contain a watermark even though the actual ideas, and potentially most of the original text, came from the human author.&lt;/p&gt;

&lt;p&gt;So yes, the final article could still be chaotic, unnecessarily long, and full of a million digressions, exactly like my posts here. &lt;/p&gt;

&lt;p&gt;Anthropic explicitly points out that the opposite can happen too.&lt;/p&gt;

&lt;p&gt;Someone can take fully AI-generated slop and heavily edit it, paraphrase it, translate it, mix it with other content, or otherwise transform it enough that the watermark may no longer be detectable.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;watermark detected ≠ AI wrote everything&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;no watermark detected ≠ human wrote everything&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's a pretty important distinction.&lt;/p&gt;

&lt;h2&gt;
  
  
  What About Images, Audio, and Video?
&lt;/h2&gt;

&lt;p&gt;With supported files, provenance can be easier to verify because we can use embedded metadata and content credentials.&amp;nbsp;But even that isn't bulletproof.&lt;/p&gt;

&lt;p&gt;What happens if someone takes a screenshot of an AI-generated image, for example&amp;nbsp;Metadata doesn't magically survive every possible transformation.&lt;/p&gt;

&lt;p&gt;And that's exactly why provenance is useful evidence, but not some perfect universal AI detector.&lt;/p&gt;

&lt;h2&gt;
  
  
  And What the Hell Happens With Code?
&lt;/h2&gt;

&lt;p&gt;This is probably the part I'm most curious about.&amp;nbsp;How exactly are they planning to handle watermarking in generated code, where the model has significantly less freedom in choosing equivalent tokens?&lt;/p&gt;

&lt;p&gt;In natural language, there can be dozens of perfectly valid ways to express essentially the same thought.&amp;nbsp;But if we have something like:&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;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then how the hell do we add a statistical watermark to that?&lt;/p&gt;

&lt;p&gt;Sure, there are still choices: variable names, formatting, and so on. But the space of valid substitutions is obviously much more constrained than it is in natural language, and formatters, refactoring, minification, or even small manual edits could make the problem even more interesting.&lt;/p&gt;

&lt;p&gt;Claude Code is included in Anthropic's marking rollout, but Anthropic hasn't yet published enough technical detail for us to know exactly how the text watermark behaves with generated source code.&lt;/p&gt;

&lt;p&gt;And I really want to know how they solved this one.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, Should You Care?
&lt;/h2&gt;

&lt;p&gt;As you can see, Claude watermarking generated text is actually a logical and important, although obviously still imperfec, move.&lt;/p&gt;

&lt;p&gt;It probably won't change our everyday lives very much.&lt;/p&gt;

&lt;p&gt;Sure, the flood of AI slop across social media is annoying. Unfortunately, I have a feeling this watermark isn't going to magically solve that problem either. 😐&lt;/p&gt;

&lt;p&gt;What interests me much more is &lt;strong&gt;how this watermark is actually implemented&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Anthropic, I'm waiting for the docs!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>news</category>
    </item>
    <item>
      <title>Stop Calling Everything Impostor Syndrome: The Myth of "Just Push Harder"</title>
      <dc:creator>Sylwia Laskowska</dc:creator>
      <pubDate>Tue, 04 Aug 2026 07:30:25 +0000</pubDate>
      <link>https://dev.to/sylwia-lask/stop-calling-everything-impostor-syndrome-the-myth-of-just-push-harder-1dmm</link>
      <guid>https://dev.to/sylwia-lask/stop-calling-everything-impostor-syndrome-the-myth-of-just-push-harder-1dmm</guid>
      <description>&lt;p&gt;Not everyone who doubts themselves is suffering from impostor syndrome. Sometimes the real problem lies in the strategy they've chosen, and that's exactly why it's so important to learn to tell the difference.&lt;/p&gt;

&lt;p&gt;I read a lot of articles here on DEV about burnout, impostor syndrome, and similar topics. I thought I'd add my own perspective because I have the feeling that some advice, often given with great confidence, can actually do more harm than good. The symptoms may be real, but the diagnosis can still be wrong.&lt;/p&gt;

&lt;p&gt;Today I'd like to share my somewhat "engineering" approach to personal growth. Maybe it will help some of you. Because "just keep going" or "work harder" isn't always the right answer. &lt;/p&gt;

&lt;h2&gt;
  
  
  Impostor Syndrome
&lt;/h2&gt;

&lt;p&gt;I do experience impostor syndrome.&lt;/p&gt;

&lt;p&gt;And don't get me wrong. I generally have pretty high self-esteem, and I believe I've achieved quite a lot in different areas of my life. That doesn't stop me from doubting myself from time to time.&lt;/p&gt;

&lt;p&gt;Here's an example from just the past few days.&lt;/p&gt;

&lt;p&gt;I published an article about &lt;a href="https://dev.to/sylwia-lask/the-dirty-secret-behind-ai-agents-demo--273d"&gt;building an AI agent in around 80 lines of code&lt;/a&gt;, and it sparked an amazing discussion. I was genuinely proud of it. Even better, I got invited to speak about it at the AI Coding Summit! (By the way, if you'd like to support me, you can like my &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7489968386240806913/" rel="noopener noreferrer"&gt;LinkedIn post&lt;/a&gt; and claim a badge that gives you access to half of the conference for free!)&lt;/p&gt;

&lt;p&gt;Overall, I genuinely believe the topic is a great fit for a conference like this. What I really wanted was to see my face appear on the conference website, because I always have this feeling that once the organizers publish the speaker page, everything is basically official and they're unlikely to remove me afterward. 😅&lt;/p&gt;

&lt;p&gt;Well... it took them exactly one day.&lt;/p&gt;

&lt;p&gt;And I swear that by the end of that day, my brain had already come up with an entirely different explanation:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"What if they read my blog and realized how stupid my articles are? What if they email me saying: 'Sylwia, we've gone through your posts, and unfortunately we've decided to remove you from the conference. It's obvious you have no idea what you're talking about. We've figured you out, you fraud!'"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Reading this now, it sounds completely ridiculous.&amp;nbsp;But I believed it.&amp;nbsp;Never mind that my articles regularly appear in developer newsletters or receive lots of positive feedback. My brain had already written its own story.&lt;/p&gt;

&lt;p&gt;Here's another example.&lt;/p&gt;

&lt;p&gt;Once, an organizer described the speakers at a conference as "amazing international speakers."&amp;nbsp;Instead of feeling proud, my first thought was:&amp;nbsp;&lt;em&gt;"Amazing international speakers... and Sylwia."&lt;/em&gt;&amp;nbsp;After all, I'm just a software developer from Gdańsk. 😅&lt;/p&gt;

&lt;p&gt;This is exactly what psychologists describe as impostor syndrome: despite objective achievements and external validation, you still feel like you don't really deserve your place, and sooner or later everyone else will discover that you're a fraud.&lt;/p&gt;

&lt;p&gt;I'm not even going to dive into the psychology behind it today. Maybe that's a topic for another article.&lt;/p&gt;

&lt;h2&gt;
  
  
  But Not Every Doubt Is Impostor Syndrome
&lt;/h2&gt;

&lt;p&gt;Here's the important part.&amp;nbsp;Not every doubt you have automatically means you're experiencing impostor syndrome.&lt;/p&gt;

&lt;p&gt;There are also areas where I'm genuinely... bad.&amp;nbsp;Take running.&lt;/p&gt;

&lt;p&gt;I'm an absolutely terrible runner. My times are objectively awful. So awful that I'd rather not even share them. 😄 I'm fully aware of it. I'd probably lose a race against a five-year-old, not to mention the fact that I don't have an ACL in either knee thanks to my old judo days.&lt;/p&gt;

&lt;p&gt;Now imagine someone giving me this advice:&amp;nbsp;&lt;em&gt;"Come on, you just have impostor syndrome! Keep running more, train harder, and one day you'll become Poland's marathon champion."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can immediately tell how absurd that sounds.&amp;nbsp;That advice wouldn't help me in the slightest.&lt;/p&gt;

&lt;p&gt;And yet, very similar advice is often given to people who are learning programming or have been unsuccessfully looking for a job for months.&lt;/p&gt;

&lt;p&gt;You've been working incredibly hard without seeing results and you're starting to feel burned out?&amp;nbsp;&lt;em&gt;"It's just impostor syndrome. Don't worry. Work harder. Keep going. Just a little longer."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You've been writing blog posts and nobody reads them?&amp;nbsp;&lt;em&gt;"It's just impostor syndrome. Don't worry. Keep publishing consistently. The results will eventually come."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Personally, I think this kind of advice can actually be harmful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Think Like an Engineer
&lt;/h2&gt;

&lt;p&gt;Let's go back to my running example.&amp;nbsp;Why am I such a bad runner?&amp;nbsp;Maybe I only started recently and my expectations are unrealistic.&amp;nbsp;Maybe I'm making fundamental mistakes in training.&amp;nbsp;Maybe I'm wearing the wrong shoes.&amp;nbsp;Maybe I simply don't have much natural talent for running, and I'd enjoy a different sport much more.&lt;/p&gt;

&lt;p&gt;Or maybe I should just run for fun instead of chasing unrealistic goals.&lt;/p&gt;

&lt;p&gt;The same way of thinking applies almost everywhere else.&amp;nbsp;Have you sent hundreds of CVs without getting interviews?&amp;nbsp;Maybe it's worth asking an HR specialist to review your resume.&amp;nbsp;Maybe the market is simply terrible right now.&amp;nbsp;Maybe you're missing one specific skill that's relatively easy to learn.&lt;/p&gt;

&lt;p&gt;Maybe you're applying only for fully remote positions.&amp;nbsp;Or maybe you're aiming exclusively at FAANG companies, while you'd have much better chances at smaller organizations.&lt;/p&gt;

&lt;p&gt;Are you writing blog posts that nobody reads?&amp;nbsp;Maybe your titles could be stronger.&amp;nbsp;Maybe you should spend more time interacting with the community, learning from other people while also increasing your own visibility.&amp;nbsp;Maybe another platform would suit you better.&amp;nbsp;For example, I get fantastic engagement and wonderful discussions here on DEV, while my LinkedIn posts usually perform much worse. 😄&lt;/p&gt;

&lt;h2&gt;
  
  
  Debug Your Strategy, Not Just Your Confidence
&lt;/h2&gt;

&lt;p&gt;That's what I mean by an "engineering" approach to personal growth.&amp;nbsp;Every few months, try looking at your efforts critically, without ego, as if your own development were someone else's project.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Ask yourself:&amp;nbsp;&lt;strong&gt;Is the time I'm investing actually producing results?&amp;nbsp;&lt;/strong&gt;If not, maybe it's worth changing the strategy instead of simply trying harder.&lt;/p&gt;

&lt;p&gt;Because maybe your doubts aren't impostor syndrome at all.&amp;nbsp;Maybe they're your brain telling you that your current approach simply isn't working.&lt;/p&gt;

&lt;p&gt;Sometimes the answer really is greater confidence and perseverance.&amp;nbsp;But sometimes the answer is changing your strategy.&amp;nbsp;The hard part is learning to tell the difference.&lt;/p&gt;

</description>
      <category>career</category>
      <category>mentalhealth</category>
    </item>
  </channel>
</rss>
