<?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: Surfing Devs</title>
    <description>The latest articles on DEV Community by Surfing Devs (@surfing_devs).</description>
    <link>https://dev.to/surfing_devs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2903844%2Fa1cd7bf7-1b03-48f9-8979-9d004b00cbce.png</url>
      <title>DEV Community: Surfing Devs</title>
      <link>https://dev.to/surfing_devs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/surfing_devs"/>
    <language>en</language>
    <item>
      <title>Introducing ivy: Bring the Legendary Ivy Lee Method to Your Slack Workspace</title>
      <dc:creator>Surfing Devs</dc:creator>
      <pubDate>Wed, 16 Apr 2025 17:35:03 +0000</pubDate>
      <link>https://dev.to/surfing_devs/introducing-ivy-bring-the-legendary-ivy-lee-method-to-your-slack-workspace-3ffe</link>
      <guid>https://dev.to/surfing_devs/introducing-ivy-bring-the-legendary-ivy-lee-method-to-your-slack-workspace-3ffe</guid>
      <description>&lt;p&gt;Hey Dev.to community! Today I'm excited to announce the launch of &lt;strong&gt;ivy&lt;/strong&gt; – a free Slack app that brings the power of the Ivy Lee productivity method directly to your team's workspace.&lt;/p&gt;

&lt;p&gt;Add it to slack in: &lt;a href="https://tryivy.app" rel="noopener noreferrer"&gt;https://tryivy.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Ivy Lee Method?
&lt;/h2&gt;

&lt;p&gt;For those unfamiliar, the Ivy Lee method is a century-old productivity technique that's brilliantly simple yet remarkably effective. In 1918, productivity consultant Ivy Lee suggested this approach to Charles M. Schwab, then president of Bethlehem Steel Corporation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;At the end of each workday, write down the six most important tasks to accomplish tomorrow&lt;/li&gt;
&lt;li&gt;Prioritize those six items in order of importance&lt;/li&gt;
&lt;li&gt;When you arrive tomorrow, concentrate only on the first task until it's finished&lt;/li&gt;
&lt;li&gt;Then move to the second task, and so on&lt;/li&gt;
&lt;li&gt;At the end of the day, move any unfinished items to a new list for tomorrow&lt;/li&gt;
&lt;li&gt;Repeat this process every working day&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This method has stood the test of time because it works—it reduces decision fatigue, encourages focus, and provides a clear structure for daily work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Built Ivy
&lt;/h2&gt;

&lt;p&gt;Many of us have tried using the Ivy Lee method with paper notebooks, to-do apps, or even just text files. But these approaches have limitations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Task lists aren't visible to your team&lt;/li&gt;
&lt;li&gt;There's no accountability or reminders&lt;/li&gt;
&lt;li&gt;Your priorities don't live where your work happens (in Slack!)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ivy solves these problems by bringing this legendary productivity method directly into your team's Slack workspace, making it simple to stay focused while keeping your colleagues in the loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🚀 Simple Task Definition&lt;/li&gt;
&lt;li&gt;⏰ Daily Check-ins&lt;/li&gt;
&lt;li&gt;✅ End-of-Day Reminders&lt;/li&gt;
&lt;li&gt;👥 Team Visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started with Ivy
&lt;/h2&gt;

&lt;p&gt;Getting started with Ivy is simple and free:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://tryivy.app" rel="noopener noreferrer"&gt;tryivy.app&lt;/a&gt; to add Ivy to your Slack workspace&lt;/li&gt;
&lt;li&gt;Follow the onboarding in the app home in Slack.&lt;/li&gt;
&lt;li&gt;Experience the power of focused, intentional work&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Free to Use
&lt;/h2&gt;

&lt;p&gt;Ivy is completely free to use. We believe in the power of this simple productivity method and want to make it accessible to as many teams as possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join Us on This Journey
&lt;/h2&gt;

&lt;p&gt;We've built Ivy because we believe that in today's distraction-filled work environment, techniques like the Ivy Lee method are more valuable than ever. By bringing this proven approach directly into Slack, we hope to help teams everywhere work with more focus, intention, and clarity.&lt;/p&gt;

&lt;p&gt;Visit &lt;a href="https://tryivy.app" rel="noopener noreferrer"&gt;tryivy.app&lt;/a&gt; today to bring the power of the Ivy Lee method to your team. We'd love to hear your feedback and experiences as you use Ivy to transform your productivity!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you tried the Ivy Lee method before? How has it worked for you? Share your experiences in the comments below!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>management</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Vibe Tech #1: Welcome and initial thoughts</title>
      <dc:creator>Surfing Devs</dc:creator>
      <pubDate>Sun, 06 Apr 2025 22:44:12 +0000</pubDate>
      <link>https://dev.to/surfing_devs/vibe-tech-1-welcome-and-initial-thoughts-jkh</link>
      <guid>https://dev.to/surfing_devs/vibe-tech-1-welcome-and-initial-thoughts-jkh</guid>
      <description>&lt;p&gt;&lt;strong&gt;Motivation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each day the AI tech space changes. Each day you wake up with news of a new model breaking benchmarks, a new game changing protocol or a dozen new tools that will make devs perform 10x faster. Do the test yourself, just follow a couple tech users on X or join some dev related subreddits.&lt;/p&gt;

&lt;p&gt;However it is yet not clear where we are heading and what the final picture will be in 1/1.5 years.&lt;/p&gt;

&lt;p&gt;This series is about filtering the noise, sharing some thoughts and experiences, and trying to predict the impact of this transition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The idea is not to use AI to do any of the writing.&lt;/li&gt;
&lt;li&gt;The end goal is try generate an audience that could lead to building a community and doing meetups.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Thoughts #1: Vibe Coding
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Assistant's code artifacts are low quality.&lt;/strong&gt; These LLMs were trained on existing open source code. Open source code is in general terms low quality. If most repos follow bad practices, they will outweigh best practices posts in the training data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Assistant's code artifacts are great for scripting, not for foundational code.&lt;/strong&gt; Code runs most of the time, which is great for one-off things. But most of the times dependency injection is wrong, parametrization is not optimal, and data classes are not well designed. You still need the senior dev to review the artifacts if you are building the foundation of your system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;For me the big leap was Copilot.&lt;/strong&gt; The original one, the autocomplete tool. Huge time saver for snippets. If you know what you want, writing a signature and see the function appear was great. Assistants are not a big leap from Copilot imho.&lt;br&gt;
Fine tuning on private codebase &amp;gt;&amp;gt; cursorrules. Prompting rules is not a super power in my experience. LLMs are not sensitive to them. Instead, training on private codebases will allow predictions to follow your practices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Big codebases are a problem.&lt;/strong&gt; Although context windows are increasing length, assistants are not able to properly add new code to existing codebases. A lot of duplicated code appears. Its funny that you can immediately tell in a codebase which snippets were written by cursor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A coding assistant is a junior dev sitting right next to you.&lt;/strong&gt; The experience with assistant coders (I use Claude Cursor) is similar to reviewing a PR from a junior dev. The type of comments you leave in that PR ("expose this as a constant", "use the function from this module instead", "remove this parameter and inject it to the constructor", etc) is the type of back and forth you have with the assistant to achieve the optimal implementation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Thoughts #2: Debugging vibe code
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Debugging is a pain with vibe code.&lt;/strong&gt; Debugging is at same level of importance as coding in dev's work. Assistants cannot debug. Copying an error trace to the LLM starts an endless loop of "Oh yes, let me fix that" that almost never works. I believe than trusting your codebase is a must for debugging. If you cannot debug you have a real problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Thoughts #3: Future dev pods&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Teams will need less people.&lt;/strong&gt; Tools that save time make teams require less hours to achieve things. Less hours means less people.
Seniority is still valuable. Seniority avoid all my concerns from vibe code I expose above. But every senior was once junior. If there is no more space for junior devs, how do we get seniors?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Thoughts #4: Startup world
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;More solo founders and small teams.&lt;/strong&gt; I believe this tech will encourage smaller teams to tackle bigger projects.&lt;br&gt;
Bootstrap &amp;gt;&amp;gt; VC back. All AI tools are cheap IMHO. If cursor was 200 USD/month, most users would pay it. You won't need a lot of money because you will need less people (not just devs, but designers, marketers, sales, etc).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Exponential amount of new startups.&lt;/strong&gt; Time to build will be crazy low. A lot of people will start to create new projects as it is short term and cheap.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Full time devs vs fractional devs.&lt;/strong&gt; I can envision a future in which a full time dev is not very required anymore as teams get lower and less human dependent. Maybe there is a world in which fractional devs is the standard, similar to fractional CTOs today. Working in multiple spaces and teams at the same time will be exciting. Context switching will be a challenge.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Final words&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Would love to hear feedback, questions and new thoughts. What this blogpost ends up being is uncertain to me, but will keep you posted.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>startup</category>
    </item>
    <item>
      <title>AI locators for Playwright 🚀</title>
      <dc:creator>Surfing Devs</dc:creator>
      <pubDate>Wed, 05 Mar 2025 13:15:17 +0000</pubDate>
      <link>https://dev.to/surfing_devs/ai-locators-for-playwright-5gmd</link>
      <guid>https://dev.to/surfing_devs/ai-locators-for-playwright-5gmd</guid>
      <description>&lt;p&gt;Today I'm excited to present &lt;a href="https://github.com/lila-team/ai-locators" rel="noopener noreferrer"&gt;&lt;code&gt;ai-locators&lt;/code&gt; for Playwright&lt;/a&gt;! 🚀&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// 👎 Say goodbye to this complexity
page.locator("//div[contains(@class, 'header')]//button[contains(@class, 'login') and not(@disabled) and contains(text(), 'Sign In')]");

// 🌟 And hello to this simplicity!
page.locator("ai=the login button in the header that says Sign In");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔗 Check it out: &lt;a href="https://github.com/lila-team/ai-locators" rel="noopener noreferrer"&gt;https://github.com/lila-team/ai-locators&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Let's face it - maintaining locators in Playwright tests can be a real headache! 🤕 They depend on how elements are positioned and declared in the frontend, which changes constantly and breaks your tests.&lt;/p&gt;

&lt;p&gt;Sure, you could follow best practices like maintaining test-ids or being consistent with roles and labels (check out these &lt;a href="https://playwright.dev/docs/best-practices#use-locators" rel="noopener noreferrer"&gt;best practices&lt;/a&gt;). But let's be real - developers want to move fast, and tests that are hard to maintain often get left behind! 🏃‍♂️💨&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 LLMs to the Rescue!
&lt;/h2&gt;

&lt;p&gt;Here's where the magic happens! ✨ This project uses LLMs to generate selectors based on the HTML content and your natural description of the elements you want to find.&lt;br&gt;
It's implemented as a custom selector engine so it fits perfectly into your existing Playwright codebase! 🧩&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// 🔍 Search the entire page
const element = page.locator("ai=the login button");
await element.click();

// 🎯 Search inside a container
const container = page.locators('.main-div');
const element = container.locator("ai=search input");
await element.fill("foobar");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🎨 Choose Your LLM!
&lt;/h2&gt;

&lt;p&gt;When registering the custom selector (check out our &lt;a href="https://github.com/lila-team/ai-locators" rel="noopener noreferrer"&gt;README&lt;/a&gt; for the how-to), you can pick your favorite LLM to power the magic - as long as it follows the OpenAI API! 🪄&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎉 Great news! ai-locators is available in both python and node! Give it a try and let us know what you think! 💭&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔗 Link to project: &lt;a href="https://github.com/lila-team/ai-locators" rel="noopener noreferrer"&gt;https://github.com/lila-team/ai-locators&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ai-locators&lt;/code&gt; is available for Python and for Node.&lt;/p&gt;

</description>
      <category>playwright</category>
      <category>llm</category>
      <category>opensource</category>
    </item>
    <item>
      <title>E2E testing challenges using Playwright</title>
      <dc:creator>Surfing Devs</dc:creator>
      <pubDate>Fri, 28 Feb 2025 13:54:54 +0000</pubDate>
      <link>https://dev.to/surfing_devs/e2e-testing-challenges-using-playwright-4gpe</link>
      <guid>https://dev.to/surfing_devs/e2e-testing-challenges-using-playwright-4gpe</guid>
      <description>&lt;p&gt;So you finally decided to implement e2e tests 🚀. You have a webapp with production traffic and you want to deploy safely knowing your &lt;strong&gt;high level features work&lt;/strong&gt;. Unit test is not a good plan time-wise ⏱️ while e2e tests will give you that coverage you want to continue moving fast 🏃.&lt;/p&gt;

&lt;p&gt;You choose Playwright. &lt;a href="http://playwright.dev/" rel="noopener noreferrer"&gt;Playwright&lt;/a&gt; is currently the default e2e testing framework out there.&lt;/p&gt;

&lt;p&gt;Initial implementation goes well 👍. Playwright is simple and straightforward. Locators are easy to declare and you add a couple tests to your CI/CD pipeline. You feel safer now and continue with fast speed 🧘‍♀️.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One month later 📅&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You realize you are spending too much time fixing your e2e tests . Locators need to be updated all the time. Navigation changed. Interaction with DOM elements changed. Fixing tests start to slow you down. 😩&lt;/p&gt;

&lt;p&gt;Next steps? Hire QA? Remove tests and pray? Go low level unit testing instead? Standardize FE elements? 🤨&lt;/p&gt;

&lt;h3&gt;
  
  
  Low level implementation for high level features: the GAP
&lt;/h3&gt;

&lt;p&gt;The problem with Playwright or similar frameworks (Cypress, Selenium, etc) is that they work with implementation details. Locators are literal the implementation of the objects you want to interact with.&lt;/p&gt;

&lt;p&gt;You might encounter these:&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="c1"&gt;// Deeply nested CSS selector that depends on exact DOM structure&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.main-container &amp;gt; div.row &amp;gt; div.col-md-8 &amp;gt; form &amp;gt; div:nth-child(3) &amp;gt; button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Selecting elements based on their exact position in a list&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ul.dropdown-menu &amp;gt; li:nth-child(2)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Relying on internal implementation IDs from a component library&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;[id="select2-dropdown-results-9-4"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Using XPath that depends on exact HTML structure&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xpath=//div[contains(@class, "sidebar")]/ul/li[3]/div/button&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;Devs will change these aspects of the components daily. Your tests won't be robust to those changes.&lt;/p&gt;

&lt;p&gt;This is the result of &lt;strong&gt;testing high level features with low level frameworks&lt;/strong&gt; 😳. &lt;strong&gt;Ideally your test shouldn't break if functionality is still there, regardless if the button was changed to a different &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;.&lt;/strong&gt; You don't want to test &lt;strong&gt;how&lt;/strong&gt; it was implemented, you want to test &lt;strong&gt;what&lt;/strong&gt; your users will be doing. &lt;/p&gt;

&lt;h3&gt;
  
  
  Introducing Lila
&lt;/h3&gt;

&lt;p&gt;If you got this far and agree with this, let me introduce &lt;a href="https://github.com/lila-team/lila" rel="noopener noreferrer"&gt;Lila&lt;/a&gt;, a new testing framework for fast moving teams I'm developing.&lt;/p&gt;

&lt;p&gt;Lila remains high level for doing proper high level testing. Your tests declare what your users will do, without using how it was implemented 😎. Lila has AI Agents 🤖 that will try complete the instructions with the available implementation, making it robust to your everyday dev changes.&lt;/p&gt;

&lt;p&gt;Without more spam, you can find more information in its repo: &lt;a href="https://github.com/lila-team/lila" rel="noopener noreferrer"&gt;https://github.com/lila-team/lila&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Final thoughts
&lt;/h3&gt;

&lt;p&gt;Would love to hear in the comments if this problem resonates with you, or if you found good engineering practices to keep Playwright stable over time or if you think a tool like Lila would work.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>qa</category>
      <category>playwright</category>
      <category>ai</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
