<?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: gary killen</title>
    <description>The latest articles on DEV Community by gary killen (@gary_killen37).</description>
    <link>https://dev.to/gary_killen37</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%2F1845213%2F3cdc188e-88d3-461b-ab19-87b1d746a590.png</url>
      <title>DEV Community: gary killen</title>
      <link>https://dev.to/gary_killen37</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gary_killen37"/>
    <language>en</language>
    <item>
      <title>My Experience Switching from VS Code to WebStorm (And Why I Still Use Both)</title>
      <dc:creator>gary killen</dc:creator>
      <pubDate>Tue, 30 Jun 2026 20:31:35 +0000</pubDate>
      <link>https://dev.to/gary_killen37/my-experience-switching-from-vs-code-to-webstorm-and-why-i-still-use-both-192h</link>
      <guid>https://dev.to/gary_killen37/my-experience-switching-from-vs-code-to-webstorm-and-why-i-still-use-both-192h</guid>
      <description>&lt;h2&gt;
  
  
  My Experience Switching from VS Code to WebStorm (And Why I Still Use Both)
&lt;/h2&gt;

&lt;p&gt;For years, &lt;strong&gt;VS Code&lt;/strong&gt; was my go-to editor.&lt;/p&gt;

&lt;p&gt;Like many developers, I loved its speed, huge extension marketplace, and the ability to customize just about everything. Every new project started the same way: open VS Code, install a few extensions, and start coding.&lt;/p&gt;

&lt;p&gt;Then I decided to give &lt;strong&gt;WebStorm&lt;/strong&gt; a serious try.&lt;/p&gt;

&lt;p&gt;I expected to spend a week with it before going back to VS Code.&lt;/p&gt;

&lt;p&gt;That didn't happen.&lt;/p&gt;

&lt;p&gt;Today, WebStorm has become my primary IDE for most of my projects—but I haven't completely left VS Code behind.&lt;/p&gt;

&lt;p&gt;Here's why.&lt;/p&gt;




&lt;h2&gt;
  
  
  First Impressions
&lt;/h2&gt;

&lt;p&gt;The first thing I noticed was that WebStorm felt... complete.&lt;/p&gt;

&lt;p&gt;With VS Code, I was used to installing extensions before I felt productive.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESLint&lt;/li&gt;
&lt;li&gt;Prettier&lt;/li&gt;
&lt;li&gt;Auto Rename Tag&lt;/li&gt;
&lt;li&gt;Path IntelliSense&lt;/li&gt;
&lt;li&gt;Git integrations&lt;/li&gt;
&lt;li&gt;Better Imports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WebStorm already had most of the features I relied on built in.&lt;/p&gt;

&lt;p&gt;Instead of spending time configuring my editor, I was spending time writing code.&lt;/p&gt;

&lt;p&gt;That was a surprisingly nice change.&lt;/p&gt;




&lt;h2&gt;
  
  
  Auto Imports Are Incredible
&lt;/h2&gt;

&lt;p&gt;This is probably my favorite feature.&lt;/p&gt;

&lt;p&gt;When building React or Next.js applications, I constantly create new components, hooks, and utility functions.&lt;/p&gt;

&lt;p&gt;In VS Code, auto imports generally work well, but every now and then I'd find myself fixing an import path or manually searching for a module.&lt;/p&gt;

&lt;p&gt;In WebStorm, the IDE almost always knows exactly what I'm trying to import.&lt;/p&gt;

&lt;p&gt;It doesn't sound like a huge feature until you've experienced it every day.&lt;/p&gt;

&lt;p&gt;When you're importing dozens of files throughout a project, those little moments add up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Refactoring Feels Smarter
&lt;/h2&gt;

&lt;p&gt;One area where WebStorm really impressed me was refactoring.&lt;/p&gt;

&lt;p&gt;Whether I'm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Renaming files&lt;/li&gt;
&lt;li&gt;Moving folders&lt;/li&gt;
&lt;li&gt;Extracting functions&lt;/li&gt;
&lt;li&gt;Renaming variables across an entire project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything feels safe and intentional.&lt;/p&gt;

&lt;p&gt;I don't have to wonder whether changing one file is going to break imports somewhere else.&lt;/p&gt;

&lt;p&gt;The IDE takes care of that for me.&lt;/p&gt;

&lt;p&gt;As my projects have grown larger, that's become more valuable than I expected.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keyboard Shortcuts Make Me Faster
&lt;/h2&gt;

&lt;p&gt;At first, I thought learning a completely new set of shortcuts would slow me down.&lt;/p&gt;

&lt;p&gt;Instead, it had the opposite effect.&lt;/p&gt;

&lt;p&gt;Once I got used to WebStorm's navigation shortcuts, I found myself touching the mouse less and less.&lt;/p&gt;

&lt;p&gt;Some of my most-used shortcuts include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search Everywhere&lt;/li&gt;
&lt;li&gt;Find Usages&lt;/li&gt;
&lt;li&gt;Go to Definition&lt;/li&gt;
&lt;li&gt;Navigate Between Files&lt;/li&gt;
&lt;li&gt;Refactor This&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After a few weeks, I noticed I was spending less time looking for things and more time actually building features.&lt;/p&gt;




&lt;h2&gt;
  
  
  Project Navigation Is Excellent
&lt;/h2&gt;

&lt;p&gt;One thing I didn't fully appreciate until I switched was how much time I spent navigating a project.&lt;/p&gt;

&lt;p&gt;Modern applications aren't small anymore.&lt;/p&gt;

&lt;p&gt;A typical Next.js project might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Components&lt;/li&gt;
&lt;li&gt;Hooks&lt;/li&gt;
&lt;li&gt;API Routes&lt;/li&gt;
&lt;li&gt;Server Actions&lt;/li&gt;
&lt;li&gt;Utility Functions&lt;/li&gt;
&lt;li&gt;Database Models&lt;/li&gt;
&lt;li&gt;Configuration Files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WebStorm makes navigating large projects feel effortless.&lt;/p&gt;

&lt;p&gt;Instead of wondering where something lives, I can usually find it in seconds.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where VS Code Still Wins (For Me)
&lt;/h2&gt;

&lt;p&gt;Even though WebStorm has become my main IDE, I still use VS Code.&lt;/p&gt;

&lt;p&gt;There are a couple of reasons why.&lt;/p&gt;

&lt;h2&gt;
  
  
  GraphQL Development
&lt;/h2&gt;

&lt;p&gt;Some of my projects use GraphQL, and I've found that my current workflow with GraphQL mutations is simply smoother in VS Code.&lt;/p&gt;

&lt;p&gt;The extensions I'm using fit my workflow well, so I haven't felt a strong reason to move those projects over.&lt;/p&gt;

&lt;p&gt;Sometimes the best tool is simply the one that gets out of your way.&lt;/p&gt;

&lt;h2&gt;
  
  
  CodeRabbit
&lt;/h2&gt;

&lt;p&gt;Another reason I keep VS Code installed is the CodeRabbit extension.&lt;/p&gt;

&lt;p&gt;I really like having AI-assisted code reviews directly inside the editor.&lt;/p&gt;

&lt;p&gt;It's become a useful part of my workflow when reviewing changes before pushing commits.&lt;/p&gt;




&lt;h2&gt;
  
  
  It's Not About Picking a Side
&lt;/h2&gt;

&lt;p&gt;One thing I've learned is that developers sometimes treat editors like sports teams.&lt;/p&gt;

&lt;p&gt;You're either Team VS Code or Team WebStorm.&lt;/p&gt;

&lt;p&gt;I don't really see it that way.&lt;/p&gt;

&lt;p&gt;Different tools solve different problems.&lt;/p&gt;

&lt;p&gt;For me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WebStorm&lt;/strong&gt; is where I build most of my React and Next.js applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VS Code&lt;/strong&gt; is still my choice for GraphQL projects and when I want to use extensions like CodeRabbit.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don't think using two editors makes me less productive.&lt;/p&gt;

&lt;p&gt;If anything, it lets me choose the best environment for the task at hand.&lt;/p&gt;




&lt;h2&gt;
  
  
  Will I Go Back to VS Code Full-Time?
&lt;/h2&gt;

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

&lt;p&gt;After spending enough time with WebStorm, it's hard to give up features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intelligent refactoring&lt;/li&gt;
&lt;li&gt;Project-wide navigation&lt;/li&gt;
&lt;li&gt;Built-in tooling&lt;/li&gt;
&lt;li&gt;Reliable auto imports&lt;/li&gt;
&lt;li&gt;Excellent code intelligence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those little productivity improvements add up over the course of a day.&lt;/p&gt;

&lt;p&gt;That said, I don't see any reason to uninstall VS Code either.&lt;/p&gt;

&lt;p&gt;It's still an excellent editor, and for certain projects it fits my workflow perfectly.&lt;/p&gt;




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

&lt;p&gt;Switching editors won't magically make you a better developer.&lt;/p&gt;

&lt;p&gt;What it &lt;em&gt;can&lt;/em&gt; do is remove small points of friction from your daily workflow.&lt;/p&gt;

&lt;p&gt;For me, WebStorm helped me spend less time configuring my tools and more time writing code.&lt;/p&gt;

&lt;p&gt;At the same time, VS Code continues to earn a place on my machine because of its flexibility and extension ecosystem.&lt;/p&gt;

&lt;p&gt;In the end, the best editor isn't the one everyone else recommends.&lt;/p&gt;

&lt;p&gt;It's the one that helps &lt;strong&gt;you&lt;/strong&gt; build software more efficiently.&lt;/p&gt;




&lt;h2&gt;
  
  
  What About You?
&lt;/h2&gt;

&lt;p&gt;Are you using &lt;strong&gt;VS Code&lt;/strong&gt;, &lt;strong&gt;WebStorm&lt;/strong&gt;, &lt;strong&gt;Cursor&lt;/strong&gt;, &lt;strong&gt;Zed&lt;/strong&gt;, or another editor altogether?&lt;/p&gt;

&lt;p&gt;I'd love to hear what keeps you coming back to your IDE of choice. Drop a comment below!&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>webstorm</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Common Next.js Errors (and How I Solved Them)</title>
      <dc:creator>gary killen</dc:creator>
      <pubDate>Tue, 30 Jun 2026 19:21:32 +0000</pubDate>
      <link>https://dev.to/gary_killen37/common-nextjs-errors-and-how-i-solved-them-193o</link>
      <guid>https://dev.to/gary_killen37/common-nextjs-errors-and-how-i-solved-them-193o</guid>
      <description>&lt;h2&gt;
  
  
  Common Next.js Errors (and How I Solved Them)
&lt;/h2&gt;

&lt;p&gt;If you've spent any amount of time building with Next.js, you've probably discovered that learning React is only half the battle. The other half is staring at an error message that makes absolutely no sense—until you finally figure it out hours later.&lt;/p&gt;

&lt;p&gt;I've been building projects with Next.js over the past several months, and while the framework is incredible, I've hit my fair share of confusing errors. The good news? Every one of them taught me something valuable.&lt;/p&gt;

&lt;p&gt;Here are some of the most common Next.js errors I ran into and how I eventually solved them.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;ReferenceError: document is not defined&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;This was one of the first errors that completely confused me.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ReferenceError: document is not defined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first, I thought something was wrong with my code. The problem wasn't my code—it was &lt;em&gt;where&lt;/em&gt; it was running.&lt;/p&gt;

&lt;p&gt;Next.js renders pages on the server before sending them to the browser. Since the server doesn't have access to browser APIs like &lt;code&gt;document&lt;/code&gt; or &lt;code&gt;window&lt;/code&gt;, trying to use them immediately causes this error.&lt;/p&gt;

&lt;h3&gt;
  
  
  What caused it?
&lt;/h3&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;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerWidth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code executes during server-side rendering, where &lt;code&gt;window&lt;/code&gt; doesn't exist.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I fixed it
&lt;/h3&gt;

&lt;p&gt;I moved the browser-specific code inside a &lt;code&gt;useEffect()&lt;/code&gt; hook.&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;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;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="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerWidth&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, if necessary, I checked whether the code was running in the browser before accessing &lt;code&gt;window&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Lesson Learned
&lt;/h3&gt;

&lt;p&gt;If you're using browser APIs, make sure your code only runs on the client.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Environment Variables Returning &lt;code&gt;undefined&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Few things are more frustrating than seeing this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MONGODB_URI&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;…and getting:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;In my case, I had simply forgotten to create or correctly configure my &lt;code&gt;.env.local&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;Other times, I changed an environment variable but forgot to restart the development server.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Debugging Checklist
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Is the variable inside &lt;code&gt;.env.local&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Did I restart &lt;code&gt;npm run dev&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Does the variable need the &lt;code&gt;NEXT_PUBLIC_&lt;/code&gt; prefix?&lt;/li&gt;
&lt;li&gt;Did I accidentally misspell the variable name?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💡 Lesson Learned
&lt;/h3&gt;

&lt;p&gt;Environment variables are loaded when the development server starts—not while it's already running.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Hydration Errors
&lt;/h2&gt;

&lt;p&gt;Hydration errors can look intimidating.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hydration failed because the initial UI does not match what was rendered on the server.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This usually means the HTML generated on the server doesn't match what React renders in the browser.&lt;/p&gt;

&lt;p&gt;Common causes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using &lt;code&gt;Date.now()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;Math.random()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Rendering different content on the client&lt;/li&gt;
&lt;li&gt;Reading from &lt;code&gt;localStorage&lt;/code&gt; during rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How I fixed it
&lt;/h3&gt;

&lt;p&gt;Instead of rendering dynamic values immediately, I waited until the component mounted.&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;mounted&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setMounted&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;setMounted&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;mounted&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💡 Lesson Learned
&lt;/h3&gt;

&lt;p&gt;The first render should produce the same output on both the server and the client.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. MongoDB Connection Problems
&lt;/h2&gt;

&lt;p&gt;Database errors always seemed more complicated than they actually were.&lt;/p&gt;

&lt;p&gt;Sometimes the error looked 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;MongoServerError: authentication failed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Other times:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;querySrv ECONNREFUSED
&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 plaintext"&gt;&lt;code&gt;MONGODB_URI is undefined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The fixes were usually simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Double-check the connection string.&lt;/li&gt;
&lt;li&gt;Verify the username and password.&lt;/li&gt;
&lt;li&gt;Confirm your IP address is allowed in MongoDB Atlas.&lt;/li&gt;
&lt;li&gt;Make sure your internet connection isn't blocking DNS lookups.&lt;/li&gt;
&lt;li&gt;Verify your environment variables.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💡 Lesson Learned
&lt;/h3&gt;

&lt;p&gt;Database errors are often configuration problems rather than coding problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. &lt;code&gt;Module not found&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Everyone has seen this one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Module not found
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sometimes I had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Misspelled an import&lt;/li&gt;
&lt;li&gt;Used the wrong file extension&lt;/li&gt;
&lt;li&gt;Imported from the wrong folder&lt;/li&gt;
&lt;li&gt;Forgotten to install a package&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  My Debugging Checklist
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Does the file actually exist?&lt;/li&gt;
&lt;li&gt;Is the import path correct?&lt;/li&gt;
&lt;li&gt;Is the package installed?&lt;/li&gt;
&lt;li&gt;Did I restart the development server?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💡 Lesson Learned
&lt;/h3&gt;

&lt;p&gt;Most "module not found" errors are caused by simple oversights. Start with the basics before assuming something is seriously broken.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. React Hook Errors
&lt;/h2&gt;

&lt;p&gt;One of my favorites:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Invalid hook call
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usually this happened because I accidentally placed a hook:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inside an &lt;code&gt;if&lt;/code&gt; statement&lt;/li&gt;
&lt;li&gt;Inside a loop&lt;/li&gt;
&lt;li&gt;Inside another function&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React hooks must always be called in the same order.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Incorrect
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loggedIn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Correct
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;loggedIn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// do something&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;loggedIn&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💡 Lesson Learned
&lt;/h3&gt;

&lt;p&gt;Always call hooks at the top level of your component.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Importing a Server Component into a Client Component
&lt;/h2&gt;

&lt;p&gt;This one took me a while to understand.&lt;/p&gt;

&lt;p&gt;With the App Router, Next.js separates components into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server Components&lt;/li&gt;
&lt;li&gt;Client Components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I needed state, event handlers, or browser APIs, I had to mark the component with:&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use client&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;Otherwise, Next.js assumed it was a Server Component.&lt;/p&gt;

&lt;h3&gt;
  
  
  💡 Lesson Learned
&lt;/h3&gt;

&lt;p&gt;Not every component should be a Client Component. Add &lt;code&gt;'use client'&lt;/code&gt; only when you actually need client-side features.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Images Not Loading
&lt;/h2&gt;

&lt;p&gt;I eventually discovered that Next.js doesn't automatically allow images from every domain.&lt;/p&gt;

&lt;p&gt;The fix was adding the domain to &lt;code&gt;next.config.js&lt;/code&gt;.&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;images&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;remotePatterns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💡 Lesson Learned
&lt;/h3&gt;

&lt;p&gt;If you're using the &lt;code&gt;next/image&lt;/code&gt; component with external images, make sure the image domain is configured.&lt;/p&gt;




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

&lt;p&gt;When I first started with Next.js, every error felt like I had broken something beyond repair.&lt;/p&gt;

&lt;p&gt;Over time, I realized that these errors weren't telling me I was a bad developer—they were teaching me how the framework actually works.&lt;/p&gt;

&lt;p&gt;Understanding concepts like server-side rendering, client-side rendering, hydration, and environment variables made debugging much less intimidating.&lt;/p&gt;

&lt;p&gt;The biggest improvement in my development skills didn't come from memorizing APIs.&lt;/p&gt;

&lt;p&gt;It came from solving bugs.&lt;/p&gt;

&lt;p&gt;Every confusing error forced me to understand another piece of how modern web applications work.&lt;/p&gt;

&lt;p&gt;And honestly, that's where the real learning happens.&lt;/p&gt;




&lt;h2&gt;
  
  
  What About You?
&lt;/h2&gt;

&lt;p&gt;What's the most frustrating Next.js error you've encountered?&lt;/p&gt;

&lt;p&gt;Share it in the comments—I’d love to hear your debugging stories and how you solved them.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>How I Use AI Without Letting It Think for Me</title>
      <dc:creator>gary killen</dc:creator>
      <pubDate>Mon, 13 Apr 2026 12:56:51 +0000</pubDate>
      <link>https://dev.to/gary_killen37/how-i-use-ai-without-letting-it-think-for-me-12gd</link>
      <guid>https://dev.to/gary_killen37/how-i-use-ai-without-letting-it-think-for-me-12gd</guid>
      <description>&lt;h1&gt;
  
  
  How I Use AI Without Letting It Think for Me
&lt;/h1&gt;

&lt;p&gt;AI is one of the most powerful tools I’ve added to my workflow as a developer. It can write code, explain concepts, and even help debug errors in seconds. But I learned pretty quickly that if I rely on it too much, I stop improving.&lt;/p&gt;

&lt;p&gt;This post isn’t about avoiding AI—it’s about using it &lt;em&gt;without losing your ability to think&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem: When AI Becomes a Crutch
&lt;/h2&gt;

&lt;p&gt;When I first started using AI, I used it for everything.&lt;/p&gt;

&lt;p&gt;If I got stuck on a bug, I asked AI. If I didn’t understand something, I asked AI. If I needed to build something, I asked AI.&lt;/p&gt;

&lt;p&gt;And to be fair, it worked… at least on the surface.&lt;/p&gt;

&lt;p&gt;But over time, I started noticing a pattern. I was solving problems without really understanding them. I was copying code that I couldn’t confidently explain. When something broke and I didn’t immediately use AI, I felt stuck. My confidence dropped because I wasn’t sure I could figure things out on my own anymore.&lt;/p&gt;

&lt;p&gt;That’s when it clicked: AI wasn’t actually making me better—it was making me dependent.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Shift: AI as a Tool, Not a Brain
&lt;/h2&gt;

&lt;p&gt;The mindset that changed everything for me was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI should support my thinking, not replace it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once I started seeing AI as a tool instead of an answer machine, everything felt different. I stopped treating it like an expert I blindly trust and started treating it more like a junior assistant—helpful, but not in charge.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Actually Use AI (Without Losing My Skills)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  I Try First, Then Ask for Help
&lt;/h3&gt;

&lt;p&gt;Now, whenever I run into a problem, I don’t immediately jump to AI. I take a moment to read the error, think through what might be going wrong, and try at least one approach on my own.&lt;/p&gt;

&lt;p&gt;Even if I fail, that effort matters. It forces me to engage with the problem instead of skipping past it.&lt;/p&gt;

&lt;p&gt;When I finally do ask AI for help, I’m not starting from zero. I can compare its suggestions with my own thinking, and that’s where real learning happens.&lt;/p&gt;




&lt;h3&gt;
  
  
  I Ask for Guidance, Not Answers
&lt;/h3&gt;

&lt;p&gt;I also changed the way I ask questions.&lt;/p&gt;

&lt;p&gt;Instead of saying “fix this code,” I’ll ask things like, “What should I check here?” or “Why might this be failing?” Sometimes I’ll even ask for a hint without the full solution.&lt;/p&gt;

&lt;p&gt;That small shift keeps me involved in the process. I’m still the one solving the problem—AI is just helping me think it through.&lt;/p&gt;




&lt;h3&gt;
  
  
  I Don’t Copy What I Don’t Understand
&lt;/h3&gt;

&lt;p&gt;One rule I try to stick to is simple: if I don’t understand it, I don’t use it.&lt;/p&gt;

&lt;p&gt;When AI gives me code, I slow down and go through it line by line. I try to rewrite parts of it in my own way and ask myself if I could recreate it from scratch later.&lt;/p&gt;

&lt;p&gt;If the answer is no, I know I need to spend more time understanding it before moving on.&lt;/p&gt;




&lt;h3&gt;
  
  
  I Use AI to Learn, Not Replace Learning
&lt;/h3&gt;

&lt;p&gt;Where AI really shines is in explaining things.&lt;/p&gt;

&lt;p&gt;When I’m stuck on a concept, I’ll use it to break things down, simplify documentation, or show the same idea from different angles. Sometimes one explanation just clicks better than another.&lt;/p&gt;

&lt;p&gt;But I don’t stop there. I make sure to actually apply what I’ve learned on my own, because that’s what makes it stick.&lt;/p&gt;




&lt;h3&gt;
  
  
  I Question What AI Tells Me
&lt;/h3&gt;

&lt;p&gt;One of the most important habits I’ve built is not blindly trusting AI.&lt;/p&gt;

&lt;p&gt;It’s helpful, but it’s not perfect. So I test its suggestions, question its reasoning, and look for edge cases where things might break.&lt;/p&gt;

&lt;p&gt;Instead of treating AI like a source of truth, I treat it like a second opinion. That mindset alone makes a huge difference.&lt;/p&gt;




&lt;h3&gt;
  
  
  I Let AI Handle the Boring Stuff
&lt;/h3&gt;

&lt;p&gt;There are still places where I lean on AI heavily—and that’s intentional.&lt;/p&gt;

&lt;p&gt;I use it for repetitive or low-value tasks like writing boilerplate code, renaming variables, or generating simple functions. Things that don’t really contribute to my growth.&lt;/p&gt;

&lt;p&gt;But when it comes to core logic, architecture decisions, or problem-solving, I try to do that work myself. That’s where the real learning happens.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Rule I Follow
&lt;/h2&gt;

&lt;p&gt;If I had to sum everything up in one sentence, it would be this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If AI disappeared tomorrow, I should still be able to solve my problems.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s the line I try not to cross.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Changed After This Approach
&lt;/h2&gt;

&lt;p&gt;Since changing how I use AI, I’ve noticed a real difference.&lt;/p&gt;

&lt;p&gt;I understand my code more deeply. I can debug issues faster, even without help. I feel more confident building things from scratch. And overall, I’m learning faster—because I’m actually thinking through problems instead of skipping them.&lt;/p&gt;

&lt;p&gt;AI didn’t slow me down. It just stopped replacing the part that matters most: my brain.&lt;/p&gt;




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

&lt;p&gt;AI isn’t the problem. Over-reliance is.&lt;/p&gt;

&lt;p&gt;If you use it intentionally, it can speed up your learning without taking anything away from you.&lt;/p&gt;

&lt;p&gt;So the next time you’re stuck, don’t rush to copy the answer.&lt;/p&gt;

&lt;p&gt;Pause for a moment. Think it through. Try something.&lt;/p&gt;

&lt;p&gt;Then, if you need it, let AI help you—not think for you.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
