<?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: Brad Traversy</title>
    <description>The latest articles on DEV Community by Brad Traversy (@bradtraversy).</description>
    <link>https://dev.to/bradtraversy</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%2F137487%2F6d6a2ec4-2729-4ade-8f2a-bc5f82055bd7.png</url>
      <title>DEV Community: Brad Traversy</title>
      <link>https://dev.to/bradtraversy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bradtraversy"/>
    <language>en</language>
    <item>
      <title>12 Important Concepts All Software Developers Should Know</title>
      <dc:creator>Brad Traversy</dc:creator>
      <pubDate>Wed, 23 Sep 2026 13:08:08 +0000</pubDate>
      <link>https://dev.to/bradtraversy/12-important-concepts-all-software-developers-should-know-1lfj</link>
      <guid>https://dev.to/bradtraversy/12-important-concepts-all-software-developers-should-know-1lfj</guid>
      <description>&lt;p&gt;Artificial intelligence (AI) is changing what it means to spend a day developing software. Less time goes into typing code, and more goes into planning, reading, reviewing, and testing it. But writing less code doesn't mean you can afford to understand less of it.&lt;/p&gt;

&lt;p&gt;Prefer to watch? &lt;a href="https://www.youtube.com/watch?v=IJ-FAcYq_08" rel="noopener noreferrer"&gt;Here’s the video version on YouTube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I think reading code is becoming one of the most important development skills. When an agent hands you a feature spread across several files, the real question isn't whether it looks convincing. It's whether you understand what it does, what data it touches, and why those changes belong in your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding code matters more than memorizing it
&lt;/h2&gt;

&lt;p&gt;Functions, loops, conditionals, and data types are still essential. Without those fundamentals, you're going to struggle to follow what an AI tool generates, much less judge whether it's right. What's becoming less useful is trying to memorize every method in a language or every option in a framework. Most developers were looking that stuff up anyway.&lt;/p&gt;

&lt;p&gt;The useful shift is from remembering syntax to understanding behavior. You need to recognize what a function expects, trace what happens after a user clicks a button, and notice when a seemingly small change reaches into unrelated parts of the application. Those abilities help you direct an agent instead of just accepting its output.&lt;/p&gt;

&lt;p&gt;That doesn't mean you need to master software architecture before touching AI. These are concepts to keep learning while you build. Each one gives you another way to inspect generated code, ask better questions, and catch problems before they turn into a debugging marathon.&lt;/p&gt;

&lt;h2&gt;
  
  
  These 12 concepts give you a practical review checklist
&lt;/h2&gt;

&lt;p&gt;The concepts connect to one another, but they answer different questions. The first three explain how a program moves through work. The next three explain what its pieces can access and change. Abstraction, modularity, and architecture describe its organization, while the final three make you look beyond a single, successful execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Control flow tells you what actually runs
&lt;/h3&gt;

&lt;p&gt;Control flow is the order in which your code executes. What happens first? What happens next? Which path runs when a condition is true, and which path runs when it isn't? Conditionals, loops, and exception-handling blocks all shape that path.&lt;/p&gt;

&lt;p&gt;AI can generate code that looks clean while getting the sequence wrong. A function might return too early, skip validation, or handle an error somewhere that doesn't actually cover the failing operation. None of those problems necessarily makes the code look messy.&lt;/p&gt;

&lt;p&gt;When reviewing a change, follow the execution rather than scanning for familiar syntax. Walk through the successful path, then take the alternate branches. If you can't explain how execution reaches a particular operation, you don't yet understand whether that operation is safe or even reachable.&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%2F87glsfswzyub1ky43rrk.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%2F87glsfswzyub1ky43rrk.png" alt="A form submission branches on valid input: invalid input shows an error and stops; valid input saves the user and returns success." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Validation determines which branch runs. Invalid input stops before the save operation.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Data flow connects a feature across files
&lt;/h3&gt;

&lt;p&gt;Data flow describes where information comes from, where it goes, and how it changes along the way. A common web application flow begins with a user filling out a form. That data travels through an application programming interface (API), reaches a database, returns as &lt;strong&gt;JSON&lt;/strong&gt; (JavaScript Object Notation), and appears in the user interface (UI).&lt;/p&gt;

&lt;p&gt;That's one feature, but it may involve several files and several transformations. Looking at each file separately can hide the connection between what the user entered and what the application ultimately displays.&lt;/p&gt;

&lt;p&gt;Trace a meaningful value all the way through. What did the form submit? What did the server receive? What was stored, and what came back? When AI generates multiple files at once, following that journey helps turn a pile of changes into a feature you can actually understand.&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%2Ftedwaapbzz3hap7itqi2.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%2Ftedwaapbzz3hap7itqi2.png" alt="A form sends data to an API and database, and JSON returns to update the interface." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Follow the data from the form to the API and database, then back to the interface.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Error flow reveals what happens off the happy path
&lt;/h3&gt;

&lt;p&gt;Error flow is what happens when something goes wrong. A request fails, a required value is missing, a user submits bad data, or a database query throws an error. Real applications have to handle these situations, not just the version where every dependency behaves perfectly.&lt;/p&gt;

&lt;p&gt;This is a recurring weakness in generated code: the happy path works, but an unexpected condition makes everything fall apart. A feature can look finished during a quick test while still leaving users stuck when a request fails.&lt;/p&gt;

&lt;p&gt;For each likely failure point, ask where the error goes next. Does something catch it? Does the interface stop showing a loading state? Does the user or developer receive a useful message? Knowing that an exception exists isn't enough. You need to understand how the application responds to it.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Scope determines where values are available
&lt;/h3&gt;

&lt;p&gt;Scope describes where variables, functions, and other values can be accessed. If a variable is created inside a function, you generally can't use it outside that function. The value belongs to a particular context, not automatically to the entire program.&lt;/p&gt;

&lt;p&gt;This matters when AI introduces a value in one place and tries to use it somewhere else. It also matters during refactoring. Moving a block of code can break it because something it previously had access to is no longer available.&lt;/p&gt;

&lt;p&gt;When a value appears in generated code, ask where it was created and where it can be accessed. Also check who can change it. Those questions help you distinguish a genuinely available dependency from an assumption that only worked in the code's original location.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Input and output define what a piece of code promises
&lt;/h3&gt;

&lt;p&gt;Most useful pieces of code take something in and produce something. A function might accept a user identifier and return a user record. An endpoint might accept form data and return a success message. A component might receive properties and render part of the interface.&lt;/p&gt;

&lt;p&gt;The basic review question is simple: What does this need, and what does it produce? That gives you a concrete way to evaluate a function without getting distracted by how polished its implementation looks.&lt;/p&gt;

&lt;p&gt;Check whether the caller supplies the arguments the function expects. Then check whether the returned data matches what the next piece of code needs. AI-generated pieces can each seem reasonable in isolation while disagreeing at the boundary. Understanding inputs and outputs lets you spot that mismatch.&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%2Fhdf36u5id6p5qowc48ad.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%2Fhdf36u5id6p5qowc48ad.png" alt="getUser accepts user ID 42 and returns a user record with that ID and the name Brad." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Check the inputs a function expects and the output its caller receives.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. State explains what changes over time
&lt;/h3&gt;

&lt;p&gt;State is data that changes as the application runs. It includes the logged-in user, a shopping cart, form values, a loading status, and information stored in a database. It's the application's changing picture of what's happening.&lt;/p&gt;

&lt;p&gt;A lot of bugs appear when that picture stops matching reality. AI might put state in the wrong place, duplicate it, or update one representation while forgetting another. The result is an application that behaves as if something is true when it no longer is.&lt;/p&gt;

&lt;p&gt;Pay attention to where state lives, who can update it, and what should react when it changes. Don't stop at finding the assignment that updates a value. Follow the consequences: which parts of the application depend on that value, and will they now reflect the same situation?&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%2F6aud5vsc9nx6l8ytcpak.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%2F6aud5vsc9nx6l8ytcpak.png" alt="Two shopping carts compare stale and synchronized state: quantity is two in both, but total items shows one on the left and two on the right." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The quantity changes to two. The badge must reflect the same state instead of keeping its old value.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Abstraction should hide complexity, not hide the explanation
&lt;/h3&gt;

&lt;p&gt;Abstraction puts complicated work behind something simpler to use. A user-creation function might validate input, hash a password, save a database record, and return the new user. The calling code doesn't need to repeat all those operations every time it creates an account.&lt;/p&gt;

&lt;p&gt;AI creates abstractions constantly: helpers, services, hooks, middleware, and utilities. Good abstractions make behavior easier to use and reuse. Bad ones make you jump through five files just to understand a straightforward operation.&lt;/p&gt;

&lt;p&gt;There's a balance here. Too little abstraction leaves repeated complexity everywhere. Too much adds layers that don't earn their place. When an agent introduces a helper or service, ask what complexity it removes and whether the resulting code is genuinely easier to follow. A new file isn't automatically an improvement.&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%2Fj1gecc42369ftyd89b1q.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%2Fj1gecc42369ftyd89b1q.png" alt="A createUser call hides validation, password hashing, saving, and returning the user behind one interface." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;One clear interface can coordinate several implementation steps.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Modularity gives each piece a clear job
&lt;/h3&gt;

&lt;p&gt;Once you've separated logic into pieces, modularity asks where those pieces should live and what each should own. Real projects usually need more organization than one massive file, but splitting code randomly doesn't solve the problem either.&lt;/p&gt;

&lt;p&gt;A typical application separates responsibilities along these lines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Routes handle incoming requests.&lt;/li&gt;
&lt;li&gt;Controllers or handlers decide what happens next.&lt;/li&gt;
&lt;li&gt;Models deal with data.&lt;/li&gt;
&lt;li&gt;Components handle the user interface.&lt;/li&gt;
&lt;li&gt;Utilities contain reusable helper logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point isn't to force every project into exactly that arrangement. It's to give each piece a recognizable job. That makes a codebase easier to navigate, review, and work on with other people.&lt;/p&gt;

&lt;p&gt;For AI-assisted development, modularity helps you notice misplaced logic. A feature may work while putting a responsibility somewhere that will make the next change harder. Review where the code landed, not just whether it runs.&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%2Fl3icb8k89quvrli7j3a7.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%2Fl3icb8k89quvrli7j3a7.png" alt="Separate modules handle routes, request coordination, data access, UI rendering, and reusable helpers." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Give each module a clear responsibility.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Architecture gives you the map for directing an agent
&lt;/h3&gt;

&lt;p&gt;Architecture is the application's overall structure. Where does the front end live? Where is the back end? How does the database fit in? How do those parts communicate, and which parts own which responsibilities?&lt;/p&gt;

&lt;p&gt;You don't need to be a software architect to understand the basic shape of what you're building. But you do need that map to point AI in the right direction. Adding an endpoint and changing how information appears on screen are different requests, even when they contribute to the same feature.&lt;/p&gt;

&lt;p&gt;Abstraction simplifies a piece of logic. Modularity organizes the pieces. Architecture explains how the whole application fits together. I think these are especially important because AI can solve an immediate problem without protecting the project's long-term structure. It may duplicate an existing capability, introduce an unnecessary layer, or put otherwise valid logic in the wrong place.&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%2Fuuya1s8txtyo5vkkrlfr.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%2Fuuya1s8txtyo5vkkrlfr.png" alt="A frontend exchanges requests and responses with a backend, which queries a database and receives results." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A typical web application separates its interface, server logic, and stored data.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Side effects make a function bigger than its return value
&lt;/h3&gt;

&lt;p&gt;A side effect occurs when code changes something outside itself. Updating a database, writing a file, sending an email, and modifying state all count. Returning a value is only part of what such a function does.&lt;/p&gt;

&lt;p&gt;A pure function, by contrast, calculates its result from its inputs without changing the world around it. That makes its behavior easier to reason about. You can focus on what goes in and what comes out without also tracing external changes.&lt;/p&gt;

&lt;p&gt;AI often mixes calculation and side effects together. When reviewing a function, don't assume its return value tells the whole story. Ask whether it merely computes something or also changes something elsewhere. Those hidden consequences are often where surprising behavior starts, especially when another part of the application depends on what changed.&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%2Fvuebgrtvtx5k2mi6atpm.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%2Fvuebgrtvtx5k2mi6atpm.png" alt="A pure addition returns five, while saving a user changes the database outside the function." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Look beyond the return value for changes to state, files, databases, or other systems.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  11. The request-response cycle makes web frameworks less mysterious
&lt;/h3&gt;

&lt;p&gt;In a web application, a user action can cause the browser to send a request. The server receives it, runs some code, perhaps talks to a database, and sends a response back. Understanding that cycle gives you a foundation for understanding a huge amount of web development.&lt;/p&gt;

&lt;p&gt;Frameworks such as &lt;strong&gt;Express&lt;/strong&gt;, &lt;strong&gt;Laravel&lt;/strong&gt;, &lt;strong&gt;Django&lt;/strong&gt;, and &lt;strong&gt;Rails&lt;/strong&gt; differ in syntax and conventions, but much of their work follows this same pattern: receive a request, do some work, and return a response. Learning the pattern makes unfamiliar framework code less intimidating.&lt;/p&gt;

&lt;p&gt;This also connects to &lt;strong&gt;HTTP&lt;/strong&gt; (Hypertext Transfer Protocol) methods and status codes, along with &lt;strong&gt;REST&lt;/strong&gt; (Representational State Transfer) APIs. When AI generates endpoint code, understand what request it accepts, what work happens on the server, and what the response communicates. Otherwise, you're reviewing only the middle of the interaction.&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%2F5e935h03wgschu0bilmi.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%2F5e935h03wgschu0bilmi.png" alt="A browser requests users slash 42; the server looks up the user and returns a 200 OK JSON response for rendering." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The browser makes a request, the server does the work, and the response updates the interface.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  12. Concurrency makes timing part of correctness
&lt;/h3&gt;

&lt;p&gt;Concurrency means multiple activities happen during overlapping periods of time. Several requests may be running, users may be editing data simultaneously, or background jobs may be processing while the interface refreshes. Software doesn't always move through one neat line of work.&lt;/p&gt;

&lt;p&gt;I ran into this with &lt;a href="https://vidpipe.ai" rel="noopener noreferrer"&gt;VidPipe&lt;/a&gt;, a project that converts videos into articles. Its queue could have one job processing, another waiting, another failing, and another finishing just as the interface tried to update. I spent a week working through an issue around that behavior.&lt;/p&gt;

&lt;p&gt;That's what makes concurrency tricky: code can work once and fail when operations overlap. You don't need to become an expert immediately, but you do need to ask what happens when timing gets messy. A successful run proves that one sequence worked. It doesn't prove that every overlapping sequence will.&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%2F2jnu8hxdwixt6us46a7c.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%2F2jnu8hxdwixt6us46a7c.png" alt="Three jobs overlap in time. Job B finishes before the earlier-started Job A, while Job C fails." width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Overlapping jobs can complete in a different order from the one in which they started.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A serious AI workflow keeps the decisions with you
&lt;/h2&gt;

&lt;p&gt;The difference between agentic coding and blindly accepting generated code isn't simply which tool you use. It's whether you can evaluate the decisions that tool makes. Asking for a feature and hoping the result doesn't break anything leaves the most important judgment unmade.&lt;/p&gt;

&lt;p&gt;A more deliberate workflow lets you say, "This logic belongs in a service, not a component," or, "This helper is unnecessary because we already have one." You can trace data, challenge a state update, and ask what happens when a request fails or two jobs finish together. Those are concrete interventions, not vague requests to make the code better.&lt;/p&gt;

&lt;p&gt;You don't have to master all twelve concepts before building with AI. I certainly haven't mastered every corner of them. Keep learning them through the code you're already reading, testing, and debugging. The better you understand the application's behavior and structure, the better you can prompt, review, and direct the agent.&lt;/p&gt;

&lt;p&gt;AI can write the feature; you still have to know whether it belongs in your codebase.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was adapted from &lt;a href="https://www.youtube.com/watch?v=IJ-FAcYq_08" rel="noopener noreferrer"&gt;12 Important Concepts In the Age of AI Software Development&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>javascript</category>
    </item>
    <item>
      <title>AI Hype Has Become Unbearable</title>
      <dc:creator>Brad Traversy</dc:creator>
      <pubDate>Tue, 22 Sep 2026 10:16:49 +0000</pubDate>
      <link>https://dev.to/bradtraversy/ai-hype-has-become-unbearable-5fgh</link>
      <guid>https://dev.to/bradtraversy/ai-hype-has-become-unbearable-5fgh</guid>
      <description>&lt;p&gt;If I see another thumbnail saying “This changes everything” an hour after a new AI model comes out, I’m going to lose it.&lt;/p&gt;

&lt;p&gt;There’s a lot of interesting technology to learn. But telling people they’re being left behind unless they learn another 500 tools isn’t getting them excited. It’s making them want to leave the industry.&lt;/p&gt;

&lt;p&gt;I’m saying this as someone who teaches this stuff and wants to keep learning it. I want to see what people are building and understand how these tools work. But I’m tired of digging through the hype just to find out what a tool actually does.&lt;/p&gt;

&lt;p&gt;I talked about this in &lt;a href="https://www.youtube.com/watch?v=0isk_iLFCdk" rel="noopener noreferrer"&gt;AI Hype Has Become Unbearable on YouTube&lt;/a&gt;, because the way we present this technology affects whether people want to learn it at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every release can’t change everything
&lt;/h2&gt;

&lt;p&gt;What prompted this was &lt;a href="https://typesafe.ai/" rel="noopener noreferrer"&gt;Jev&lt;/a&gt;, a newly released model that interested me. It’s built to return structured decisions that software can use directly, rather than generate a text response. You give it context and specific questions, and it returns things like a choice between options or a score, along with probabilities. That makes it interesting for tasks like routing a request to the right place in a workflow. I want to explore where that approach is useful in practice.&lt;/p&gt;

&lt;p&gt;I wanted to spend some time with it and potentially make a crash course once I understood it. But the reaction on YouTube, X, and blogs was already turning me off.&lt;/p&gt;

&lt;p&gt;When every release changes everything, eventually you stop caring. It becomes the boy who cried wolf. The technology might be worth learning, but you’re rolling your eyes before you even click play.&lt;/p&gt;

&lt;p&gt;That also makes it harder for people trying to teach without the hype. I’ve made crash courses on Claude Code, Cursor, and OpenClaw, along with my Blueprint workflow video. Those were straightforward Traversy Media tutorials: showing you how to use something.&lt;/p&gt;

&lt;p&gt;Sometimes those videos get lumped in with the exact content I’m frustrated by. People see AI in the title and immediately tune out. I understand the fatigue, but I’d ask people to judge the actual content. There’s a difference between teaching someone a workflow and declaring that their entire career changed this morning.&lt;/p&gt;

&lt;p&gt;I’m not anti-AI. I’m tired of the hype around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Show me what happens when something needs to change
&lt;/h2&gt;

&lt;p&gt;The launch-day videos often follow the same format. A model comes out, someone gives it a prompt, it builds something in one shot, and we skip to the finished result. Then comes a benchmark and a lot of excitement.&lt;/p&gt;

&lt;p&gt;What I want to see is what happens when you need to change something.&lt;/p&gt;

&lt;p&gt;Put the tool into an existing project with bugs and decisions made six months ago. Show how it handles the change, where it gets confused, and what you have to do to get the work finished. That’s where I’d actually be using it.&lt;/p&gt;

&lt;p&gt;A one-shot demo can be interesting. It just doesn’t tell me enough to judge how useful the tool will be in my own work.&lt;/p&gt;

&lt;p&gt;If a model came out an hour ago, you can share your first impressions. But saying it changes everything takes experience and actual use cases. That’s why I don’t rush to teach brand-new technology. I need to use it before I feel comfortable explaining it to someone else.&lt;/p&gt;

&lt;p&gt;My OpenClaw crash course came out six months after its release because I needed that time with it. By then, the hype had died down, but I had something useful to teach.&lt;/p&gt;

&lt;h2&gt;
  
  
  I understand why creators are struggling
&lt;/h2&gt;

&lt;p&gt;I’ve seen people whose work I’ve enjoyed for years get pulled into this style of content. I’ve probably made videos that could be perceived that way myself, so I’m not putting myself on a pedestal.&lt;/p&gt;

&lt;p&gt;I also don’t suddenly lose respect for established educators because they’re trying to find their footing. People like &lt;a href="https://www.youtube.com/@academind" rel="noopener noreferrer"&gt;Max from Academind&lt;/a&gt;, &lt;a href="https://www.youtube.com/@programmingwithmosh" rel="noopener noreferrer"&gt;Mosh&lt;/a&gt;, and &lt;a href="https://www.youtube.com/@NetNinja" rel="noopener noreferrer"&gt;Net Ninja&lt;/a&gt; deserve respect for the work they’ve put into helping people learn.&lt;/p&gt;

&lt;p&gt;We built learn-to-code platforms from nothing and put our hearts into them. Now the industry is changing, and it can feel like the thing we worked so hard to build is being phased out. I understand why people don’t know where to go next.&lt;/p&gt;

&lt;p&gt;The first two years of my YouTube channel, I made absolutely nothing. I did it because I loved it. Even though it eventually became a business, teaching was the reason I started.&lt;/p&gt;

&lt;p&gt;I’m still figuring out where I fit into all this, too. I want to keep teaching useful things without feeling like every video needs an exaggerated claim to get someone’s attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  You don’t have to replace a workflow that works
&lt;/h2&gt;

&lt;p&gt;Social media makes it look like you have to use every new model immediately and rebuild your workflow every week.&lt;/p&gt;

&lt;p&gt;If what you’re using works, keep using it.&lt;/p&gt;

&lt;p&gt;When something catches your attention, try it on a task you actually need to do. See whether it helps. If it does, add it to your workflow. You don’t need to adopt it just because everyone is talking about it.&lt;/p&gt;

&lt;p&gt;Take benchmarks with a grain of salt, too. A model generating some weird game better than another model doesn’t necessarily make it more useful for your projects. What matters is how it performs on the work you need help with.&lt;/p&gt;

&lt;p&gt;I don’t want the marketing to turn people off AI altogether. There’s plenty worth exploring. But you can be interested without treating every release as an emergency.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want to keep teaching
&lt;/h2&gt;

&lt;p&gt;Using AI well involves more than opening a prompt and saying, “Build me an app.”&lt;/p&gt;

&lt;p&gt;There’s context management, skills, subagents, code review, CI/CD, and how you put those things together into a workflow. There’s a lot of technical material to teach.&lt;/p&gt;

&lt;p&gt;It’s harder to turn that work into a video than a conventional coding tutorial. When I’ve written the code beforehand, I know what’s going to happen. With AI, there’s waiting, and the results can be unpredictable. I think that’s part of why so much content falls back on quick demos.&lt;/p&gt;

&lt;p&gt;But it is possible to teach this stuff properly. I’ve made a 16-hour coding-with-AI course, and the response from people taking it has been encouraging. I want to do more of that kind of work.&lt;/p&gt;

&lt;p&gt;I also want to keep teaching coding. I love it, and I still believe people need the fundamentals. The format may change. Shorter, focused tutorials around particular concepts make sense to me, with longer courses for larger projects. You need to understand what you’re building, even if you don’t memorize every bit of syntax.&lt;/p&gt;

&lt;p&gt;If I’m excited about a tool, I want to explain why and show where I actually use it. If it falls short, I want to show that, too. There’s enough interesting technology out there without exaggerating what it can do.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Traditional Coding vs Agentic Coding: The Flow State Problem</title>
      <dc:creator>Brad Traversy</dc:creator>
      <pubDate>Sun, 20 Sep 2026 14:19:20 +0000</pubDate>
      <link>https://dev.to/bradtraversy/traditional-coding-vs-agentic-coding-the-flow-state-problem-57p5</link>
      <guid>https://dev.to/bradtraversy/traditional-coding-vs-agentic-coding-the-flow-state-problem-57p5</guid>
      <description>&lt;p&gt;One of the things I've always enjoyed about coding is getting completely locked into a problem. You know what you're building, each small obstacle leads to the next decision, and you stop noticing how much time has passed.&lt;/p&gt;

&lt;p&gt;With agentic coding, I don't always get that feeling. I can produce more code and still feel less connected to the project.&lt;/p&gt;

&lt;p&gt;I don't think that means AI ruined coding. I use it every day. But the way many of us start using it replaces the tight feedback loop that made coding satisfying with a prompt, a wait, a notification, and a context switch.&lt;/p&gt;

&lt;p&gt;The workflow deserves a closer look.&lt;/p&gt;

&lt;p&gt;Prefer to watch? I walk through these workflows in &lt;a href="https://www.youtube.com/watch?v=aVvRELbjcNU" rel="noopener noreferrer"&gt;my video on traditional coding, agentic coding, and flow state&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why manual coding makes it easier to stay involved
&lt;/h2&gt;

&lt;p&gt;When you write code manually, you move through a fairly tight loop: think, write, run, observe, adjust.&lt;/p&gt;

&lt;p&gt;You start with a feature and work through the details. Which files need to change? How does the data move through the application? What should happen when someone submits the form?&lt;/p&gt;

&lt;p&gt;Then you write enough code to try it. Maybe it works. Maybe it throws an error. Maybe it technically works but doesn't behave the way you imagined. Whatever happens, you have something to respond to.&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%2Fp6j5ygi37psf7c3w7wfh.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%2Fp6j5ygi37psf7c3w7wfh.png" alt="A circular feedback loop connecting Write, Run, Observe, and Adjust." width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Each result gives you something to respond to, keeping the next decision close to the last one.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That loop can repeat dozens of times while you build a feature. As you get into it, you stop consciously moving between planning, coding, and testing. You're just solving the problem in front of you.&lt;/p&gt;

&lt;p&gt;Manual coding has plenty of interruptions too. Builds take time, documentation sends you down rabbit holes, and sometimes you're simply stuck. But the work itself keeps asking you to make the next decision.&lt;/p&gt;

&lt;p&gt;For me, that involvement has always been part of the reward. Getting a difficult feature working feels good because I experienced the little decisions and breakthroughs that got it there.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when an agent takes over
&lt;/h2&gt;

&lt;p&gt;With an agent, the planning may look similar. You have an idea, a project plan, and a feature to build. Then you describe the feature and hand it off.&lt;/p&gt;

&lt;p&gt;Now you wait.&lt;/p&gt;

&lt;p&gt;You're probably not going to sit there watching the agent work. You check your email, open another tab, or move to another project. Desktop tools make that especially easy. Project A is running, so you prompt project B. While that's running, you start something in project C.&lt;/p&gt;

&lt;p&gt;Eventually, project A finishes. Now you have to remember what you asked for, what you expected, and which parts of the application might be affected. You review the changes, test the result, and find something that needs adjusting.&lt;/p&gt;

&lt;p&gt;You send another prompt. While you're doing that, project C finishes.&lt;/p&gt;

&lt;p&gt;In the beginning, this can feel like having superpowers. You have several agents working at once, and things that once took days appear in minutes. The amount of output is exciting.&lt;/p&gt;

&lt;p&gt;But I've found that it can also leave me scattered. Instead of spending two hours working through one difficult problem, I spend those hours repeatedly remembering where I left off in several different problems.&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%2Fyopn1025cos22zuuaazi.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%2Fyopn1025cos22zuuaazi.png" alt="An illustrative two-hour timeline contrasts sustained focus on one problem with repeated switches between five projects." width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;An illustration of fragmented attention, not measured productivity data. The colored rows represent different projects.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The work is moving, but I'm never fully settled into any of it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI coding gives your brain repeated opportunities to leave.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Each project has details you need to keep in your head: the current feature, the relevant files, the unresolved questions, and the decisions that brought you here. Returning to a project means rebuilding enough of that understanding to judge what the agent did.&lt;/p&gt;

&lt;p&gt;You reread files. You forget why an approach was chosen. You overlook a change that conflicts with an earlier decision. None of those moments seems like a big deal on its own, but together they can make the whole process tiring.&lt;/p&gt;

&lt;p&gt;Your attention also starts following notifications. You switch because an agent finished, rather than because you reached a sensible stopping point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bigger handoffs can weaken your understanding
&lt;/h2&gt;

&lt;p&gt;The other thing I notice is a loss of ownership.&lt;/p&gt;

&lt;p&gt;That doesn't mean you did nothing because an agent wrote the code. You had the idea, planned the work, directed the agent, and decided whether the result was acceptable. Those are real contributions.&lt;/p&gt;

&lt;p&gt;But the bigger the task you hand off, the more decisions arrive without your involvement.&lt;/p&gt;

&lt;p&gt;An authentication feature might include choices about the user model, validation, error handling, session management, and how the interface responds. If all of that appears in one large diff, you have a lot to understand before you can confidently accept it.&lt;/p&gt;

&lt;p&gt;You can review the result, but you didn't follow how those decisions developed. That difference becomes noticeable when something needs to change. You may know the feature works without knowing where its assumptions live.&lt;/p&gt;

&lt;p&gt;One-shotting an entire application takes this further. You can end up with something that looks convincing while leaving you with a codebase you barely understand.&lt;/p&gt;

&lt;p&gt;For me, that distance affects both the quality of the work and how satisfying it feels to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  A workflow that keeps me involved
&lt;/h2&gt;

&lt;p&gt;I don't have a perfect system that will put everyone into a flow state. I'm still figuring this out myself.&lt;/p&gt;

&lt;p&gt;But a few changes have helped me stay closer to the code without giving up the useful parts of AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep each task small enough to understand and review
&lt;/h3&gt;

&lt;p&gt;Instead of asking an agent to build an entire authentication system, I might start with the user model. I review it and check that the fields match what the application needs. Then I ask for the registration endpoint, test it, and review that change before moving on.&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%2Fc77lu7jk8tn8930dnewn.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%2Fc77lu7jk8tn8930dnewn.png" alt="Separate prompts for creating a user model and a registration endpoint, with checkpoints to review, run, test, and read the code." width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Smaller requests create opportunities to understand and redirect the implementation before moving on.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The exact size of a task depends on the project. An experienced developer working in a familiar codebase may be comfortable handing off a complete feature. Someone learning the stack may need smaller steps.&lt;/p&gt;

&lt;p&gt;The point is to choose a checkpoint you can meaningfully review. If the result is too large for you to understand the important decisions, the handoff was probably too large.&lt;/p&gt;

&lt;p&gt;Notice the difference between "build authentication" and "create the registration endpoint using this user model." The second request connects you to the structure of the software. You're thinking about what the application needs and how the pieces fit together.&lt;/p&gt;

&lt;p&gt;That's one reason fundamentals still matter. You need to understand models, routes, endpoints, components, and data flow well enough to ask useful questions and recognize when the implementation is wrong.&lt;/p&gt;

&lt;p&gt;Some people will say this defeats the purpose. If the agent can build the entire feature, why break it into smaller requests?&lt;/p&gt;

&lt;p&gt;Because generating the most code in the shortest time isn't always my goal. I also want to understand what I'm building and be able to change it myself.&lt;/p&gt;

&lt;p&gt;This is the thinking behind &lt;a href="https://github.com/aiblueprinthq/ai-blueprint" rel="noopener noreferrer"&gt;AI Blueprint&lt;/a&gt;, the open-source AI coding workflow framework I built. It gives the agent a structure for planning and building one feature at a time, with specs, project context, and completed history kept in readable files alongside the code. You can inspect the workflow and adapt it to your own projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ai-blueprint.dev" rel="noopener noreferrer"&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%2Flzh639326uatr4jfcn7y.png" alt="The AI Blueprint website showing its one-feature workflow from specification through implementation, checking, and completion." width="800" height="425"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The &lt;a href="https://ai-blueprint.dev" rel="noopener noreferrer"&gt;AI Blueprint website&lt;/a&gt; shows how the workflow fits together. The &lt;a href="https://github.com/aiblueprinthq/ai-blueprint" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt; has the source and setup instructions.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You don't have to use my exact setup. It's one example of putting these ideas into practice; the part that matters is choosing checkpoints that keep you involved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stay with the project while the agent works
&lt;/h3&gt;

&lt;p&gt;When the agent starts processing, I try not to automatically jump into something unrelated.&lt;/p&gt;

&lt;p&gt;There's usually something useful I can do within the same project. I can read the surrounding code, think through an edge case, prepare a test, or check the current task against the plan.&lt;/p&gt;

&lt;p&gt;I don't need to watch every line appear. I just want to keep the problem fresh enough that I can make sense of the result when it arrives.&lt;/p&gt;

&lt;p&gt;If I'm waiting on project A, immediately loading project B into my head makes it harder to return. Staying with project A gives me a better chance of keeping some continuity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Review while the context is fresh
&lt;/h3&gt;

&lt;p&gt;When the agent finishes, I look at the diff and test the behavior before moving on.&lt;/p&gt;

&lt;p&gt;Did it solve the problem I asked it to solve? Did it change unrelated files? Does the implementation fit the existing code? Do I understand the decisions well enough to work on it manually?&lt;/p&gt;

&lt;p&gt;If something needs adjusting, I'd rather catch it now, while I still remember what I wanted and why.&lt;/p&gt;

&lt;p&gt;Letting complicated agent tasks pile up creates another kind of backlog. The code may be written, but I still have to understand and verify it. Leaving that until later doesn't remove the work; it gives me more to reconstruct when I return.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use parallel agents without following every notification
&lt;/h3&gt;

&lt;p&gt;I'm not against parallel agents. They can be useful when they're investigating related parts of a project or handling work I can review at a planned checkpoint.&lt;/p&gt;

&lt;p&gt;The problem is having several unrelated projects compete for my attention throughout the day.&lt;/p&gt;

&lt;p&gt;The number of agents matters less than what their work demands from me. Several agents contributing to one clear goal may be manageable. Three agents working on three different applications can leave me constantly switching between unrelated decisions.&lt;/p&gt;

&lt;p&gt;I want to choose when I review background work, rather than let every completion notification choose for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm trying to preserve
&lt;/h2&gt;

&lt;p&gt;The workflow I'm aiming for feels closer to working with a fast pair programmer. The agent handles a lot of implementation, while I stay involved in the decisions and feedback.&lt;/p&gt;

&lt;p&gt;Will that produce as much raw code as opening ten tabs and handing off ten features? Probably not. But the amount of code generated tells me very little about whether I'm building something good.&lt;/p&gt;

&lt;p&gt;I care about whether the result works, whether I understand it, and whether I can maintain it without asking an agent to explain my own application every time I return.&lt;/p&gt;

&lt;p&gt;I'd also be lying if I said this gives me exactly the same satisfaction as writing code manually. It doesn't. But it feels much better than handing off huge tasks and coming back to a pile of changes.&lt;/p&gt;

&lt;p&gt;I know the product better. I can jump in and work on a feature myself because I understand where things are and why they were built that way.&lt;/p&gt;

&lt;p&gt;If you've been getting more output from AI while enjoying the work less, try changing the size of the handoff. Pick a checkpoint you can understand, stay with the project while the agent works, and review the result before moving on.&lt;/p&gt;

&lt;p&gt;That's the experiment I'm still running: finding how much I can delegate while keeping the involvement that made me enjoy coding in the first place.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Adapted from my video, &lt;a href="https://www.youtube.com/watch?v=aVvRELbjcNU" rel="noopener noreferrer"&gt;Traditional Coding vs Agentic Coding: The Flow State Problem&lt;/a&gt;. Workflow illustrations are frames from the video. The AI Blueprint screenshot is from its website.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
    <item>
      <title>I've Changed My Opinion On Vibe Coding</title>
      <dc:creator>Brad Traversy</dc:creator>
      <pubDate>Mon, 18 May 2026 15:35:01 +0000</pubDate>
      <link>https://dev.to/bradtraversy/ive-changed-my-opinion-on-vibe-coding-4ad8</link>
      <guid>https://dev.to/bradtraversy/ive-changed-my-opinion-on-vibe-coding-4ad8</guid>
      <description>&lt;p&gt;As I said in this &lt;a href="https://www.youtube.com/watch?v=4V5G3wtrmhg" rel="noopener noreferrer"&gt;video&lt;/a&gt;, I used to be pretty skeptical of vibe coding. Watching people ship apps without understanding a single line of what was generated always felt like a disaster waiting to happen, especially when beginners hit the first real bug and have no idea where to start. And the idea that you can build successful software or SaaS without learning software development? I never bought that for a second.&lt;/p&gt;

&lt;p&gt;That said, my opinion has shifted a bit. The models are better, I've been using &lt;strong&gt;Claude Code&lt;/strong&gt;, &lt;strong&gt;GPT-5.5&lt;/strong&gt;, and &lt;strong&gt;OpenClaw&lt;/strong&gt; in a much more serious way, and I've seen firsthand where AI can actually carry real weight. The catch is that it only works when you already understand what you're doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vibe coding is the extreme end of the AI coding spectrum
&lt;/h2&gt;

&lt;p&gt;There's a real spectrum when it comes to coding with AI. On one end, you have one-shot prompting with platforms like &lt;strong&gt;Lovable&lt;/strong&gt;. On the other, you have autocomplete in &lt;strong&gt;VS Code&lt;/strong&gt;. Somewhere in the middle is the sweet spot: let the agent write the code, but you still make the architectural decisions, write the specs, and test the result.&lt;/p&gt;

&lt;p&gt;That middle ground is what I actually teach in my AI course, and it's a lot different from what I mean by vibe coding.&lt;/p&gt;

&lt;p&gt;Vibe coding, to me, is when you're barely looking at the code at all. You're going off the vibes instead of the syntax, and for a long time I was totally against that. I still think a lot of people confuse "using AI" with "understanding software," and those are not the same thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better models changed the equation, not the rules
&lt;/h2&gt;

&lt;p&gt;A big part of why I've softened is simple: the models are just better now. &lt;strong&gt;Claude Opus 4.7&lt;/strong&gt; with &lt;strong&gt;Claude Code&lt;/strong&gt;, &lt;strong&gt;GPT-5.5&lt;/strong&gt; with &lt;strong&gt;Codex&lt;/strong&gt;, and even &lt;strong&gt;OpenClaw&lt;/strong&gt; with &lt;strong&gt;GPT-5.5&lt;/strong&gt; are all good enough that, if you know how to direct them, they can do a lot of the heavy lifting.&lt;/p&gt;

&lt;p&gt;I'm seeing less hallucination, more first-try success, and a lot less need to babysit every line the way I would have with something like &lt;strong&gt;GPT-5.3&lt;/strong&gt;. That matters.&lt;/p&gt;

&lt;p&gt;But the model getting better is only half the story. The other half is that I've learned how to work with these systems more effectively. I know how to manage context and memory, how to map out documentation and spec files, and how to steer the model toward the outcome I want.&lt;/p&gt;

&lt;p&gt;That's exactly why I'm not willing to pretend the tool alone is enough. Better output does not erase the need for actual judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Foundation still decides who can use AI well
&lt;/h2&gt;

&lt;p&gt;I'm not budging on this part: vibe coding is not okay under any circumstance if you do not have a foundation in software development and architecture. If you do not understand the basics, AI does not magically create them for you.&lt;/p&gt;

&lt;p&gt;A few things make up that foundation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;How the web actually works&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You need to understand requests, responses, status codes, and what happens between the browser and the server. Without that, you're just guessing at what the app is doing.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;How data is structured&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You need to understand how to model data, how relationships work, and what an index is. If the data model is fuzzy, the app will be fuzzy too.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;How to read code, not just write it&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You need enough hand-written code under your belt that you can read code and actually see what it's doing, instead of skimming past it like noise.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;How debugging feels in real life&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You need to have been burned by enough bugs to recognize bad patterns. That kind of pattern recognition does not come from prompting.&lt;/p&gt;

&lt;p&gt;You do not need a CS degree. You do not need to memorize sorting algorithms. You do not need to be a genius. But you do need to have built things from scratch, broken them, fixed them, and learned what failure looks like.&lt;/p&gt;

&lt;p&gt;That confidence is the dangerous part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beginners should use AI to learn faster, not skip learning
&lt;/h2&gt;

&lt;p&gt;I am not saying beginners should stop using AI tools. That ship has sailed, and fighting it is the wrong move. The better move is to change what you use them for.&lt;/p&gt;

&lt;p&gt;Use AI to accelerate learning, not to bypass it.&lt;/p&gt;

&lt;p&gt;There's a huge difference between those two things, and that difference is where most people go wrong. If you're new, let the model explain the code it generates. Type it out yourself. Break it on purpose. Then figure out why it broke.&lt;/p&gt;

&lt;p&gt;That process is where the actual growth happens, and it's also why the developers who will do well over the next few years are not just the ones who can prompt well. They're the ones who can prompt well, read code, design systems, and debug under pressure.&lt;/p&gt;

&lt;p&gt;The AI handles the typing. You still have to handle the thinking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vibe coding works best after you've earned the right to trust it
&lt;/h2&gt;

&lt;p&gt;Once you're past the learning stage, vibe away. Seriously. If you already have the foundation, AI can be an incredible force multiplier, and I've been using it that way in my own workflow and in my home lab with eight machines managed by &lt;strong&gt;OpenClaw&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But it should not become your entire workflow for every project. If you rely on it for everything, you will forget too much and become too dependent on it. That's where the trouble starts.&lt;/p&gt;

&lt;p&gt;My position now is simpler than my old one. I am not against vibe coding anymore. I just think it should be a tool, not the whole system.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The AI handles the typing. You still have to handle the thinking.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that is the whole line between useful and dangerous: let &lt;strong&gt;Claude&lt;/strong&gt;, &lt;strong&gt;GPT-5.5&lt;/strong&gt;, and the rest speed you up, but never let them replace the part of the job that actually makes you a developer.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was adapted from &lt;a href="https://www.youtube.com/watch?v=4V5G3wtrmhg" rel="noopener noreferrer"&gt;I've Changed My Opinion On Vibe Coding&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>I Built DevSheets.io - A Modern Cheat Sheet Site for Developers (And Why We Still Need Them)</title>
      <dc:creator>Brad Traversy</dc:creator>
      <pubDate>Mon, 13 Oct 2025 11:37:53 +0000</pubDate>
      <link>https://dev.to/bradtraversy/i-built-devsheetsio-a-modern-cheat-sheet-site-for-developers-and-why-we-still-need-them-31bp</link>
      <guid>https://dev.to/bradtraversy/i-built-devsheetsio-a-modern-cheat-sheet-site-for-developers-and-why-we-still-need-them-31bp</guid>
      <description>&lt;p&gt;We've all been there. You're deep in a coding session, need to remember that one Git command, or the syntax for a CSS flexbox property. You Google it, click the first result, and... ads everywhere. Outdated information. Slow loading. Ten paragraphs before getting to the actual answer.&lt;/p&gt;

&lt;p&gt;That's why I built &lt;a href="https://devsheets.io" rel="noopener noreferrer"&gt;DevSheets.io&lt;/a&gt; - a modern, fast, and clean cheat sheet platform designed the way developers actually work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Existing Cheat Sheets
&lt;/h2&gt;

&lt;p&gt;Don't get me wrong - there are some great resources out there. But many suffer from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Information overload without structure&lt;/strong&gt; - Everything on one massive scrollable page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outdated content&lt;/strong&gt; - Still showing jQuery examples in 2025&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terrible UX&lt;/strong&gt; - Intrusive ads, slow loading, poor mobile experience&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No search&lt;/strong&gt; - Finding specific commands means Ctrl+F through walls of text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted something that felt native to how we actually code - quick, focused, and just works. I have been creating educational content on web dev and other tech topics for years and I have taken the stuff that people often struggle with, and put it into short, concise sheets that are easy to understand.&lt;/p&gt;

&lt;p&gt;It does not cost a dime and there are not even any advertisements. It is completely free to view all 50+ sheets.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes DevSheets Different
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Clean, Focused Design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Each cheat sheet is organized logically with a clear table of contents. No distractions, no ads. Just the information you need.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Modern Tech Coverage&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We focus on technologies developers actually use in 2025:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Router v7 (with the new Library and Framework modes)&lt;/li&gt;
&lt;li&gt;TanStack Query for server state management
&lt;/li&gt;
&lt;li&gt;Docker commands and orchestration&lt;/li&gt;
&lt;li&gt;Modern JavaScript patterns (async/await, modules, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Estimated Read Time &amp;amp; Difficulty&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Every sheet shows how long it'll take to reference and the complexity level. Planning to learn TypeScript? You'll know it's a 10-minute intermediate-level reference before you dive in.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Built for Speed&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The entire site is optimized for performance. No bloat, instant navigation, works great on mobile when you're pair programming and need a quick reference.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;p&gt;For the tech-curious, here's what powers DevSheets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: React 19, Next.js 15, TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend &amp;amp; DB&lt;/strong&gt; - Next.js, Prisma, PostgreSQL (Neon)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling&lt;/strong&gt;: Clean, responsive CSS with Tailwind CSS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DevOps&lt;/strong&gt; - Vercel, Github Actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content&lt;/strong&gt;: Structured data that's easy to update and maintain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Icons&lt;/strong&gt;: Custom SVG icons for each technology as well as Heroicons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm also considering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dark mode toggle (because of course)&lt;/li&gt;
&lt;li&gt;Downloadable PDFs for offline reference&lt;/li&gt;
&lt;li&gt;Community contributions for niche technologies&lt;/li&gt;
&lt;li&gt;Interactive examples for certain concepts&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I'm Sharing This
&lt;/h2&gt;

&lt;p&gt;I built DevSheets because I needed it myself. The best tools often come from scratching your own itch. &lt;/p&gt;

&lt;p&gt;But here's the thing - &lt;strong&gt;I want your feedback&lt;/strong&gt;. What cheat sheets are you missing? What could be better organized? What technologies should I add next?&lt;/p&gt;

&lt;p&gt;Check it out at &lt;a href="https://devsheets.io" rel="noopener noreferrer"&gt;devsheets.io&lt;/a&gt; and let me know what you think in the comments.&lt;/p&gt;

&lt;h2&gt;
  
  
  For Fellow Builders
&lt;/h2&gt;

&lt;p&gt;If you're thinking about creating a developer tool or resource:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with your own pain point&lt;/strong&gt; - If you need it, others probably do too&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep it simple&lt;/strong&gt; - Don't over-engineer v1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make it fast&lt;/strong&gt; - Developers have zero patience for slow sites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get feedback early&lt;/strong&gt; - Build in public, share often&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The web is full of resources, but there's always room for something done better, faster, or with more care for the user experience.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What cheat sheets do you find yourself referencing most often? Drop a comment below!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://devsheets.io" rel="noopener noreferrer"&gt;Visit DevSheets.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
