<?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>Forem: Rohith</title>
    <description>The latest articles on Forem by Rohith (@rohith_kn).</description>
    <link>https://forem.com/rohith_kn</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3843661%2Fd1fd84e3-6a5f-4ff6-8d96-ce58d49a4f47.png</url>
      <title>Forem: Rohith</title>
      <link>https://forem.com/rohith_kn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rohith_kn"/>
    <language>en</language>
    <item>
      <title>Developers Don’t Read Code Anymore — They Scan It</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Thu, 16 Apr 2026 20:40:53 +0000</pubDate>
      <link>https://forem.com/rohith_kn/developers-dont-read-code-anymore-they-scan-it-1jl0</link>
      <guid>https://forem.com/rohith_kn/developers-dont-read-code-anymore-they-scan-it-1jl0</guid>
      <description>&lt;p&gt;There was a time when reading code meant something very deliberate.&lt;/p&gt;

&lt;p&gt;You would go line by line, trying to understand what each part was doing. You would trace variables, follow logic, and slowly build a mental model of how the system worked.&lt;/p&gt;

&lt;p&gt;It was slow, sometimes frustrating, but effective.&lt;/p&gt;

&lt;p&gt;Today, that process looks very different.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Developers are no longer reading code the same way.&lt;br&gt;&lt;br&gt;
They are scanning it.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  From Reading to Recognizing
&lt;/h2&gt;

&lt;p&gt;Modern codebases are full of familiar patterns.&lt;/p&gt;

&lt;p&gt;You see a component structure you recognize. A hook you’ve used before. A pattern that “looks right.”&lt;/p&gt;

&lt;p&gt;And instead of reading every line, your brain does something faster:&lt;/p&gt;

&lt;p&gt;It recognizes the pattern and fills in the gaps.&lt;/p&gt;

&lt;p&gt;You don’t consciously think through the logic.&lt;/p&gt;

&lt;p&gt;You assume it behaves the way similar code does.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Shift Happened
&lt;/h2&gt;

&lt;p&gt;This didn’t happen by accident.&lt;/p&gt;

&lt;p&gt;Several forces pushed developers toward scanning instead of reading.&lt;/p&gt;

&lt;p&gt;First, code volume increased. Modern applications are larger, more modular, and more abstracted. Reading everything deeply is no longer practical.&lt;/p&gt;

&lt;p&gt;Second, patterns became standardized. Frameworks encourage similar structures, which makes code more predictable — but also easier to skim.&lt;/p&gt;

&lt;p&gt;And now, AI has accelerated this shift.&lt;/p&gt;

&lt;p&gt;AI-generated code often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;looks clean
&lt;/li&gt;
&lt;li&gt;follows best practices
&lt;/li&gt;
&lt;li&gt;uses familiar patterns
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when you see it, it immediately feels trustworthy.&lt;/p&gt;

&lt;p&gt;Even if you haven’t fully understood it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Illusion of Understanding
&lt;/h2&gt;

&lt;p&gt;Scanning creates a powerful illusion.&lt;/p&gt;

&lt;p&gt;Because the code looks familiar, it feels understood.&lt;/p&gt;

&lt;p&gt;Because it follows known patterns, it feels correct.&lt;/p&gt;

&lt;p&gt;But recognition is not the same as comprehension.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You don’t actually know how the code behaves.&lt;br&gt;&lt;br&gt;
You just know it resembles something you’ve seen before.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most of the time, that’s enough.&lt;/p&gt;

&lt;p&gt;Until it isn’t.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where This Breaks Down
&lt;/h2&gt;

&lt;p&gt;The problem appears when something doesn’t behave as expected.&lt;/p&gt;

&lt;p&gt;At that point, scanning stops working.&lt;/p&gt;

&lt;p&gt;You can’t rely on pattern recognition anymore. You have to go back and actually read the code — often under pressure, trying to debug an issue that isn’t obvious.&lt;/p&gt;

&lt;p&gt;That’s when gaps in understanding become visible.&lt;/p&gt;

&lt;p&gt;You might realize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;assumptions were incorrect
&lt;/li&gt;
&lt;li&gt;edge cases weren’t considered
&lt;/li&gt;
&lt;li&gt;interactions weren’t fully understood
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the code that once felt “obviously correct” suddenly feels unfamiliar.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Makes Scanning Easier — and Riskier
&lt;/h2&gt;

&lt;p&gt;AI tools make this pattern even stronger.&lt;/p&gt;

&lt;p&gt;They generate code that is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;well-structured
&lt;/li&gt;
&lt;li&gt;idiomatic
&lt;/li&gt;
&lt;li&gt;consistent with best practices
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So it becomes even easier to scan and accept.&lt;/p&gt;

&lt;p&gt;But AI doesn’t understand your system’s full context.&lt;/p&gt;

&lt;p&gt;It doesn’t know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your edge cases
&lt;/li&gt;
&lt;li&gt;your specific constraints
&lt;/li&gt;
&lt;li&gt;your system’s hidden assumptions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So while the code looks right, it may not be right for your situation.&lt;/p&gt;

&lt;p&gt;And if you’re only scanning it, you’re unlikely to notice.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Tradeoff We’re Making
&lt;/h2&gt;

&lt;p&gt;Scanning is not inherently bad.&lt;/p&gt;

&lt;p&gt;It’s efficient. It helps you move quickly. It reduces cognitive load.&lt;/p&gt;

&lt;p&gt;In many cases, it’s the only way to keep up with modern codebases.&lt;/p&gt;

&lt;p&gt;But it comes with a tradeoff:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Speed increases, but depth of understanding decreases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that tradeoff matters when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;debugging complex issues
&lt;/li&gt;
&lt;li&gt;modifying existing logic
&lt;/li&gt;
&lt;li&gt;scaling systems
&lt;/li&gt;
&lt;li&gt;handling edge cases
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because those situations require more than recognition.&lt;/p&gt;

&lt;p&gt;They require understanding.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Strong Developers Do Differently
&lt;/h2&gt;

&lt;p&gt;Strong developers don’t avoid scanning.&lt;/p&gt;

&lt;p&gt;They use it — but they know its limits.&lt;/p&gt;

&lt;p&gt;They recognize when something needs deeper attention.&lt;/p&gt;

&lt;p&gt;They slow down when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;logic is unfamiliar
&lt;/li&gt;
&lt;li&gt;behavior feels unclear
&lt;/li&gt;
&lt;li&gt;changes have wide impact
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They don’t trust code just because it looks right.&lt;/p&gt;

&lt;p&gt;They verify it when it matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big Insight
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The challenge is no longer reading code efficiently&lt;br&gt;&lt;br&gt;
it is knowing when scanning is not enough&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;Modern development has made it easier to work with code at scale.&lt;/p&gt;

&lt;p&gt;We write faster, generate more, and recognize patterns instantly.&lt;/p&gt;

&lt;p&gt;But in the process, something subtle has changed.&lt;/p&gt;

&lt;p&gt;We’ve moved from understanding code deeply…&lt;/p&gt;

&lt;p&gt;to trusting it quickly.&lt;/p&gt;

&lt;p&gt;And knowing when to switch back may be one of the most important skills a developer has today.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AI Didn’t Change Frontend Complexity — It Changed Where It Shows Up</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Thu, 16 Apr 2026 19:05:19 +0000</pubDate>
      <link>https://forem.com/rohith_kn/ai-didnt-change-frontend-complexity-it-changed-where-it-shows-up-3632</link>
      <guid>https://forem.com/rohith_kn/ai-didnt-change-frontend-complexity-it-changed-where-it-shows-up-3632</guid>
      <description>&lt;p&gt;Frontend development feels easier than it used to.&lt;/p&gt;

&lt;p&gt;You can generate components in seconds, scaffold features with AI, and rely on cleaner, more consistent patterns. Compared to a few years ago, the code we write today often looks simpler, more structured, and easier to navigate.&lt;/p&gt;

&lt;p&gt;And yet, something still feels difficult.&lt;/p&gt;

&lt;p&gt;Not in the same way as before — not in messy files or tangled logic — but somewhere else.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Frontend complexity didn’t disappear. It moved.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  When Complexity Was Easy to See
&lt;/h2&gt;

&lt;p&gt;There was a time when frontend complexity was obvious.&lt;/p&gt;

&lt;p&gt;You could open a file and immediately feel it. Large components, deeply nested logic, unclear state handling — everything was right there in front of you. If something was hard to understand, it was usually because the code itself was hard to read.&lt;/p&gt;

&lt;p&gt;In that world, complexity was visible. You didn’t have to search for it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Clean Code, Unclear Behavior
&lt;/h2&gt;

&lt;p&gt;Today, that visibility is gone.&lt;/p&gt;

&lt;p&gt;The code we write now often looks clean. Components are smaller. Patterns are more consistent. Abstractions are easier to follow. Even AI-generated code tends to follow well-established structures.&lt;/p&gt;

&lt;p&gt;But despite this, the difficulty hasn’t gone away.&lt;/p&gt;

&lt;p&gt;It has shifted from &lt;em&gt;how the code looks&lt;/em&gt; to &lt;em&gt;how the system behaves&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You’re no longer asking, “Why is this code so messy?”&lt;/p&gt;

&lt;p&gt;You’re asking, “Why is this behaving like this?”&lt;/p&gt;




&lt;h2&gt;
  
  
  Complexity Has Moved to Runtime
&lt;/h2&gt;

&lt;p&gt;The real complexity in modern frontend lives in runtime behavior.&lt;/p&gt;

&lt;p&gt;It shows up in places that are not immediately visible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how state updates propagate across components
&lt;/li&gt;
&lt;li&gt;how different parts of the UI react to the same change
&lt;/li&gt;
&lt;li&gt;how asynchronous data affects rendering
&lt;/li&gt;
&lt;li&gt;how timing influences what the user sees
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not things you can fully understand by just reading the code.&lt;/p&gt;

&lt;p&gt;They only emerge when the system is running.&lt;/p&gt;

&lt;p&gt;And that makes them harder to reason about.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Feels Harder Than Before
&lt;/h2&gt;

&lt;p&gt;Code is static. You can read it, trace it, and understand it line by line.&lt;/p&gt;

&lt;p&gt;Behavior is not.&lt;/p&gt;

&lt;p&gt;It is dynamic, time-dependent, and distributed across the system. It depends on interactions, sequencing, and context. You can’t simply “read” it — you have to mentally reconstruct it.&lt;/p&gt;

&lt;p&gt;That shift changes the nature of frontend development.&lt;/p&gt;

&lt;p&gt;It moves the challenge from understanding &lt;em&gt;structure&lt;/em&gt; to understanding &lt;em&gt;interactions&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Made the Shift More Noticeable
&lt;/h2&gt;

&lt;p&gt;AI didn’t create this change, but it made it more obvious.&lt;/p&gt;

&lt;p&gt;By generating cleaner, more structured code, AI removes a lot of surface-level complexity. The code looks better from the start. It feels easier to work with.&lt;/p&gt;

&lt;p&gt;But the underlying system hasn’t become simpler.&lt;/p&gt;

&lt;p&gt;AI doesn’t remove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;coordination between components
&lt;/li&gt;
&lt;li&gt;timing-related issues
&lt;/li&gt;
&lt;li&gt;edge cases in user interactions
&lt;/li&gt;
&lt;li&gt;inconsistencies in state flow
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So what you end up with is a system where the code looks simple, but the behavior is not.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Illusion of Simplicity
&lt;/h2&gt;

&lt;p&gt;This creates a subtle illusion.&lt;/p&gt;

&lt;p&gt;When code looks clean, we assume it’s easy to understand and safe to modify. We trust it more quickly.&lt;/p&gt;

&lt;p&gt;But then small changes lead to unexpected behavior. Debugging takes longer than expected. Interactions don’t behave consistently across different scenarios.&lt;/p&gt;

&lt;p&gt;The system feels unpredictable — not because it’s poorly written, but because its complexity is no longer visible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Complexity Shows Up Now
&lt;/h2&gt;

&lt;p&gt;Instead of messy files, complexity appears in how different parts of the system interact.&lt;/p&gt;

&lt;p&gt;It shows up when multiple pieces of state influence each other indirectly. It shows up when the timing of updates changes the outcome. It shows up when asynchronous data arrives in an unexpected order. It shows up when components behave correctly on their own, but unpredictably together.&lt;/p&gt;

&lt;p&gt;These are not structural problems.&lt;/p&gt;

&lt;p&gt;They are behavioral ones.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Means for Frontend Engineers
&lt;/h2&gt;

&lt;p&gt;The skill set is shifting.&lt;/p&gt;

&lt;p&gt;Writing clean code is still important, but it’s no longer enough. The real challenge is understanding how the system behaves as a whole.&lt;/p&gt;

&lt;p&gt;That means thinking in terms of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how state flows through the application
&lt;/li&gt;
&lt;li&gt;how updates interact over time
&lt;/li&gt;
&lt;li&gt;how different components influence each other
&lt;/li&gt;
&lt;li&gt;how the system responds under real conditions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, frontend engineering is becoming less about code in isolation and more about systems in motion.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big Insight
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;AI didn’t reduce frontend complexity — it relocated it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It moved from visible code to invisible behavior.&lt;/p&gt;




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

&lt;p&gt;Frontend development today feels easier on the surface, and in many ways, it is.&lt;/p&gt;

&lt;p&gt;But that ease comes with a tradeoff.&lt;/p&gt;

&lt;p&gt;You spend less time dealing with messy code, and more time trying to understand why a system that looks simple doesn’t behave simply.&lt;/p&gt;

&lt;p&gt;And that is where modern frontend complexity lives.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Good Frontend Code Ages Faster Than You Think</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Thu, 16 Apr 2026 17:01:07 +0000</pubDate>
      <link>https://forem.com/rohith_kn/good-frontend-code-ages-faster-than-you-think-5b2m</link>
      <guid>https://forem.com/rohith_kn/good-frontend-code-ages-faster-than-you-think-5b2m</guid>
      <description>&lt;p&gt;It’s easy to recognize bad frontend code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;messy structure
&lt;/li&gt;
&lt;li&gt;unclear logic
&lt;/li&gt;
&lt;li&gt;duplicated patterns
&lt;/li&gt;
&lt;li&gt;hard-to-read components
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But what’s harder to recognize is something more subtle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Good frontend code doesn’t stay good for long.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not because it was written poorly.&lt;/p&gt;

&lt;p&gt;But because the environment around it changes faster than the code itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Code Is Written for a Moment in Time
&lt;/h2&gt;

&lt;p&gt;Every piece of code is written with a specific context in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;current requirements
&lt;/li&gt;
&lt;li&gt;known user flows
&lt;/li&gt;
&lt;li&gt;existing data structures
&lt;/li&gt;
&lt;li&gt;expected interactions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that moment, the code is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clean
&lt;/li&gt;
&lt;li&gt;well-structured
&lt;/li&gt;
&lt;li&gt;appropriate
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It fits perfectly.&lt;/p&gt;

&lt;p&gt;But that “fit” is temporary.&lt;/p&gt;




&lt;h2&gt;
  
  
  The System Doesn’t Stand Still
&lt;/h2&gt;

&lt;p&gt;Frontend systems evolve constantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new features get added
&lt;/li&gt;
&lt;li&gt;existing flows are modified
&lt;/li&gt;
&lt;li&gt;edge cases emerge
&lt;/li&gt;
&lt;li&gt;user behavior changes
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even small updates can shift assumptions.&lt;/p&gt;

&lt;p&gt;And those assumptions are exactly what your “good code” was built on.&lt;/p&gt;




&lt;h2&gt;
  
  
  When Good Code Starts to Misalign
&lt;/h2&gt;

&lt;p&gt;Over time, code that once felt clean begins to feel… off.&lt;/p&gt;

&lt;p&gt;Not obviously broken. Not messy.&lt;/p&gt;

&lt;p&gt;Just slightly harder to work with.&lt;/p&gt;

&lt;p&gt;You might notice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;conditions being added to previously simple logic
&lt;/li&gt;
&lt;li&gt;components handling more than they originally did
&lt;/li&gt;
&lt;li&gt;edge cases creeping into clean abstractions
&lt;/li&gt;
&lt;li&gt;similar problems being solved in slightly different ways
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing is wrong individually.&lt;/p&gt;

&lt;p&gt;But collectively:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the code no longer fits the system as well as it used to.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Frontend Accelerates This Aging
&lt;/h2&gt;

&lt;p&gt;Frontend code ages faster than many other parts of the system.&lt;/p&gt;

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

&lt;p&gt;Because it sits closest to change.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI evolves frequently
&lt;/li&gt;
&lt;li&gt;interaction patterns shift
&lt;/li&gt;
&lt;li&gt;product decisions change rapidly
&lt;/li&gt;
&lt;li&gt;state flows become more complex
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What was once a simple component can become:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;interaction-heavy
&lt;/li&gt;
&lt;li&gt;state-dependent
&lt;/li&gt;
&lt;li&gt;full of conditional behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code didn’t degrade.&lt;/p&gt;

&lt;p&gt;The context expanded.&lt;/p&gt;




&lt;h2&gt;
  
  
  Clean Structure Doesn’t Protect Against Change
&lt;/h2&gt;

&lt;p&gt;We often believe that writing clean code will make it last longer.&lt;/p&gt;

&lt;p&gt;And it helps — to a point.&lt;/p&gt;

&lt;p&gt;But even well-structured code is based on assumptions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“this data will always look like this”
&lt;/li&gt;
&lt;li&gt;“this component has a single responsibility”
&lt;/li&gt;
&lt;li&gt;“this flow is linear”
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When those assumptions change, structure alone is not enough.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Clean code can still become misaligned code.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Small Changes Compound Over Time
&lt;/h2&gt;

&lt;p&gt;Frontend code rarely gets rewritten.&lt;/p&gt;

&lt;p&gt;Instead, it evolves through small changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one more condition
&lt;/li&gt;
&lt;li&gt;one more prop
&lt;/li&gt;
&lt;li&gt;one more edge case
&lt;/li&gt;
&lt;li&gt;one more exception
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each change is reasonable.&lt;/p&gt;

&lt;p&gt;But over time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;complexity increases
&lt;/li&gt;
&lt;li&gt;clarity decreases
&lt;/li&gt;
&lt;li&gt;confidence drops
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not decay through neglect.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;complexity through accumulation.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why This Feels Subtle
&lt;/h2&gt;

&lt;p&gt;Code aging is hard to notice because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;nothing breaks immediately
&lt;/li&gt;
&lt;li&gt;changes are incremental
&lt;/li&gt;
&lt;li&gt;the system still works
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So there’s no clear signal that something is wrong.&lt;/p&gt;

&lt;p&gt;Until:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;making changes feels risky
&lt;/li&gt;
&lt;li&gt;debugging takes longer
&lt;/li&gt;
&lt;li&gt;onboarding becomes harder
&lt;/li&gt;
&lt;li&gt;simple features take more effort
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s when aging becomes visible.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Speeds Up the Aging Process
&lt;/h2&gt;

&lt;p&gt;AI makes it easier to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;add new features
&lt;/li&gt;
&lt;li&gt;generate code quickly
&lt;/li&gt;
&lt;li&gt;patch issues rapidly
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it doesn’t help equally with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;revisiting old decisions
&lt;/li&gt;
&lt;li&gt;simplifying existing structures
&lt;/li&gt;
&lt;li&gt;aligning patterns across the system
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So what happens?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Codebases grow faster than they are refined.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;they age faster than they are maintained.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Real Problem Is Misalignment
&lt;/h2&gt;

&lt;p&gt;Aging code is not bad code.&lt;/p&gt;

&lt;p&gt;It is code that no longer matches its environment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;assumptions are outdated
&lt;/li&gt;
&lt;li&gt;responsibilities have shifted
&lt;/li&gt;
&lt;li&gt;interactions have grown
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the challenge is not just writing good code.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;keeping code aligned with a constantly changing system.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Good Engineers Do Differently
&lt;/h2&gt;

&lt;p&gt;They don’t just write clean code.&lt;/p&gt;

&lt;p&gt;They actively manage aging by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;revisiting old patterns
&lt;/li&gt;
&lt;li&gt;simplifying when complexity grows
&lt;/li&gt;
&lt;li&gt;removing outdated assumptions
&lt;/li&gt;
&lt;li&gt;realigning structure with current needs
&lt;/li&gt;
&lt;li&gt;treating code as something that evolves, not something that is finished
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They understand that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;code quality is not a one-time achievement&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is an ongoing process.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big Insight
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Good frontend code doesn’t stay good&lt;br&gt;&lt;br&gt;
it slowly becomes less aligned with the system around it&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;We often focus on writing better code.&lt;/p&gt;

&lt;p&gt;But in frontend systems, that’s only half the problem.&lt;/p&gt;

&lt;p&gt;Because no matter how well you write it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;code is written for today, but has to survive tomorrow&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And tomorrow always changes faster than you expect.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Frontend Code Is Easy to Write — Hard to Trust</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Thu, 16 Apr 2026 13:21:19 +0000</pubDate>
      <link>https://forem.com/rohith_kn/frontend-code-is-easy-to-write-hard-to-trust-5eol</link>
      <guid>https://forem.com/rohith_kn/frontend-code-is-easy-to-write-hard-to-trust-5eol</guid>
      <description>&lt;p&gt;Modern frontend development has never felt easier.&lt;/p&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;build UI quickly
&lt;/li&gt;
&lt;li&gt;generate components with AI
&lt;/li&gt;
&lt;li&gt;reuse patterns from everywhere
&lt;/li&gt;
&lt;li&gt;get something working in minutes
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And most of the time, it works.&lt;/p&gt;

&lt;p&gt;But there’s a growing gap that developers quietly feel:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Writing frontend code is easy. Trusting it is not.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Writing Code ≠ Trusting Code
&lt;/h2&gt;

&lt;p&gt;A feature “working” usually means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the UI renders
&lt;/li&gt;
&lt;li&gt;interactions respond
&lt;/li&gt;
&lt;li&gt;basic flows succeed
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s enough to move forward.&lt;/p&gt;

&lt;p&gt;But trust requires something deeper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;confidence under edge cases
&lt;/li&gt;
&lt;li&gt;stability across different flows
&lt;/li&gt;
&lt;li&gt;predictability over time
&lt;/li&gt;
&lt;li&gt;safety when making changes
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that’s where things start to feel uncertain.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Does It Mean to Trust Code?
&lt;/h2&gt;

&lt;p&gt;Trust is not about correctness in one scenario.&lt;/p&gt;

&lt;p&gt;It’s about confidence across &lt;em&gt;many&lt;/em&gt; scenarios.&lt;/p&gt;

&lt;p&gt;You trust code when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you know how it behaves under stress
&lt;/li&gt;
&lt;li&gt;you understand its assumptions
&lt;/li&gt;
&lt;li&gt;you can predict its reactions
&lt;/li&gt;
&lt;li&gt;you feel safe modifying it
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without that, even “working” code feels fragile.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Trust Is Harder Now
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Code Is Easier to Produce
&lt;/h3&gt;

&lt;p&gt;With modern tools and AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;implementation is faster
&lt;/li&gt;
&lt;li&gt;patterns are readily available
&lt;/li&gt;
&lt;li&gt;boilerplate is minimal
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So more code gets written — quickly.&lt;/p&gt;

&lt;p&gt;But faster creation often means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;less time spent deeply understanding what was written&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  2. Systems Are More Interconnected
&lt;/h3&gt;

&lt;p&gt;Frontend today is not isolated logic.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;multiple components
&lt;/li&gt;
&lt;li&gt;shared state
&lt;/li&gt;
&lt;li&gt;async data
&lt;/li&gt;
&lt;li&gt;user-driven interactions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So even small pieces of code depend on:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;how everything else behaves&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That makes trust harder to establish.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Behavior Is Not Always Obvious from Code
&lt;/h3&gt;

&lt;p&gt;You can read clean, well-structured code and still not fully know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how it behaves under rapid interactions
&lt;/li&gt;
&lt;li&gt;how it reacts to delayed data
&lt;/li&gt;
&lt;li&gt;how it interacts with other updates
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because behavior emerges at runtime.&lt;/p&gt;

&lt;p&gt;Not all of it is visible in the code itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  JavaScript Doesn’t Always Behave the Way You Expect
&lt;/h2&gt;

&lt;p&gt;Even at the language level, things are not always intuitive.&lt;/p&gt;

&lt;p&gt;JavaScript can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;coerce types implicitly
&lt;/li&gt;
&lt;li&gt;treat values as truthy or falsy in surprising ways
&lt;/li&gt;
&lt;li&gt;produce unexpected results in comparisons
&lt;/li&gt;
&lt;li&gt;behave differently depending on subtle context
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not bugs.&lt;/p&gt;

&lt;p&gt;They are valid behaviors.&lt;/p&gt;

&lt;p&gt;But they create situations where:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the code is technically correct — but still surprising&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And surprise reduces trust.&lt;/p&gt;

&lt;p&gt;Because if something behaves differently than expected once, you start questioning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what else might behave unexpectedly?
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  AI Makes This Gap More Noticeable
&lt;/h2&gt;

&lt;p&gt;AI tools make it easier to generate code that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;looks clean
&lt;/li&gt;
&lt;li&gt;follows best practices
&lt;/li&gt;
&lt;li&gt;works in basic scenarios
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But they don’t guarantee:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;correctness in your specific context
&lt;/li&gt;
&lt;li&gt;handling of edge cases
&lt;/li&gt;
&lt;li&gt;alignment with your system’s behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So you end up with code that feels:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;complete, but not fully verified&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This increases the gap between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;writing code
&lt;/li&gt;
&lt;li&gt;trusting code
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Hidden Problem: False Confidence
&lt;/h2&gt;

&lt;p&gt;When code works quickly, it creates confidence.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the feature is done
&lt;/li&gt;
&lt;li&gt;nothing breaks
&lt;/li&gt;
&lt;li&gt;everything looks fine
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But that confidence is often based on:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;limited validation&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Over time, this leads to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hesitation when modifying code
&lt;/li&gt;
&lt;li&gt;fear of breaking unrelated parts
&lt;/li&gt;
&lt;li&gt;difficulty debugging unexpected behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the trust was never fully built.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Builds Trust in Frontend Code
&lt;/h2&gt;

&lt;p&gt;Trust doesn’t come from writing code.&lt;/p&gt;

&lt;p&gt;It comes from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;observing behavior across scenarios
&lt;/li&gt;
&lt;li&gt;understanding how state flows
&lt;/li&gt;
&lt;li&gt;knowing how components interact
&lt;/li&gt;
&lt;li&gt;testing beyond the happy path
&lt;/li&gt;
&lt;li&gt;validating assumptions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;trust is earned through understanding, not generated through output&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Big Insight
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The challenge in frontend today is not writing code&lt;br&gt;&lt;br&gt;
it is knowing when you can rely on it&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;Frontend development has become faster, cleaner, and more accessible.&lt;/p&gt;

&lt;p&gt;But that progress comes with a tradeoff.&lt;/p&gt;

&lt;p&gt;You can produce working code quickly.&lt;/p&gt;

&lt;p&gt;But real confidence still takes time.&lt;/p&gt;

&lt;p&gt;Because at the end of the day:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;code that works is not the same as code you can trust****&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>AI Writes the Code — But You Own the Consequences</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Wed, 15 Apr 2026 21:22:34 +0000</pubDate>
      <link>https://forem.com/rohith_kn/ai-writes-the-code-but-you-own-the-consequences-116j</link>
      <guid>https://forem.com/rohith_kn/ai-writes-the-code-but-you-own-the-consequences-116j</guid>
      <description>&lt;p&gt;AI has fundamentally changed how frontend code gets written.&lt;/p&gt;

&lt;p&gt;You can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate components in seconds
&lt;/li&gt;
&lt;li&gt;scaffold entire features
&lt;/li&gt;
&lt;li&gt;fix bugs with a prompt
&lt;/li&gt;
&lt;li&gt;explore multiple implementations instantly
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The speed is undeniable.&lt;/p&gt;

&lt;p&gt;But there’s a part of the equation that hasn’t changed at all:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You still own everything that happens after the code is written.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that difference matters more than it seems.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Shift: Effort Down, Responsibility Unchanged
&lt;/h2&gt;

&lt;p&gt;AI reduces effort:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;less typing
&lt;/li&gt;
&lt;li&gt;less boilerplate
&lt;/li&gt;
&lt;li&gt;faster iteration
&lt;/li&gt;
&lt;li&gt;quicker experimentation
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But responsibility stays exactly the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;correctness
&lt;/li&gt;
&lt;li&gt;reliability
&lt;/li&gt;
&lt;li&gt;performance
&lt;/li&gt;
&lt;li&gt;long-term maintainability
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a new imbalance in development:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Code has become cheap to produce — but expensive to validate.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Earlier, writing code itself forced you to think deeply.&lt;/p&gt;

&lt;p&gt;Now, that thinking step is optional — and often skipped.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Produces Plausible Code, Not Context-Aware Code
&lt;/h2&gt;

&lt;p&gt;AI is extremely good at generating code that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;looks clean
&lt;/li&gt;
&lt;li&gt;follows known patterns
&lt;/li&gt;
&lt;li&gt;compiles without errors
&lt;/li&gt;
&lt;li&gt;works in isolation
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But your system is not isolated.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;specific state relationships
&lt;/li&gt;
&lt;li&gt;existing architectural decisions
&lt;/li&gt;
&lt;li&gt;implicit assumptions
&lt;/li&gt;
&lt;li&gt;edge cases shaped by real user behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So while AI understands patterns, it does not understand:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;how your system actually behaves under real conditions&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This creates a subtle but critical gap.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Illusion of Completion
&lt;/h2&gt;

&lt;p&gt;When AI-generated code works on first run, it creates a powerful illusion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the UI renders correctly
&lt;/li&gt;
&lt;li&gt;interactions seem fine
&lt;/li&gt;
&lt;li&gt;nothing crashes
&lt;/li&gt;
&lt;li&gt;tests (if basic) pass
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So it feels “done.”&lt;/p&gt;

&lt;p&gt;But what you are actually seeing is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;correctness under a narrow set of conditions&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;real-world interaction patterns
&lt;/li&gt;
&lt;li&gt;timing variations
&lt;/li&gt;
&lt;li&gt;edge cases
&lt;/li&gt;
&lt;li&gt;long-term behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This illusion is one of the biggest risks in AI-assisted development.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frontend Is Where This Breaks First
&lt;/h2&gt;

&lt;p&gt;Frontend systems amplify this problem because they are inherently dynamic.&lt;/p&gt;

&lt;p&gt;They involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user interactions
&lt;/li&gt;
&lt;li&gt;asynchronous data
&lt;/li&gt;
&lt;li&gt;rendering cycles
&lt;/li&gt;
&lt;li&gt;state propagation across components
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even small misunderstandings can lead to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inconsistent UI states
&lt;/li&gt;
&lt;li&gt;flickering behavior
&lt;/li&gt;
&lt;li&gt;stale or out-of-sync data
&lt;/li&gt;
&lt;li&gt;subtle race conditions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not obvious failures.&lt;/p&gt;

&lt;p&gt;They are:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;behaviors that feel “slightly wrong” but are hard to trace&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And AI rarely accounts for them fully, because they depend on runtime context.&lt;/p&gt;




&lt;h2&gt;
  
  
  Speed Changes How We Review Code
&lt;/h2&gt;

&lt;p&gt;AI doesn’t just change how code is written.&lt;/p&gt;

&lt;p&gt;It changes how code is reviewed.&lt;/p&gt;

&lt;p&gt;When code is generated quickly, it is often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;scanned, not deeply read
&lt;/li&gt;
&lt;li&gt;accepted if it “looks right”
&lt;/li&gt;
&lt;li&gt;trusted if it works initially
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This leads to a shift:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;from &lt;strong&gt;understanding code deeply&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;to &lt;strong&gt;recognizing familiar patterns quickly&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;familiarity is not the same as correctness&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And over time, this leads to systems that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;harder to reason about
&lt;/li&gt;
&lt;li&gt;harder to debug
&lt;/li&gt;
&lt;li&gt;harder to evolve
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  You Inherit Decisions You Didn’t Explicitly Make
&lt;/h2&gt;

&lt;p&gt;Every piece of code encodes decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;where state lives
&lt;/li&gt;
&lt;li&gt;how data flows
&lt;/li&gt;
&lt;li&gt;how components interact
&lt;/li&gt;
&lt;li&gt;how updates propagate
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI makes these decisions for you — implicitly.&lt;/p&gt;

&lt;p&gt;Even if you didn’t think about them, they now exist in your system.&lt;/p&gt;

&lt;p&gt;And once they exist:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;they are your responsibility to maintain, debug, and evolve&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is where many teams struggle.&lt;/p&gt;

&lt;p&gt;Not because the code is wrong — but because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the reasoning behind it is unclear
&lt;/li&gt;
&lt;li&gt;the tradeoffs were never evaluated
&lt;/li&gt;
&lt;li&gt;the structure wasn’t intentionally designed
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Cost Shows Up Later
&lt;/h2&gt;

&lt;p&gt;AI rarely creates immediate problems.&lt;/p&gt;

&lt;p&gt;The real cost appears later:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;when requirements change
&lt;/li&gt;
&lt;li&gt;when features interact
&lt;/li&gt;
&lt;li&gt;when edge cases appear
&lt;/li&gt;
&lt;li&gt;when performance matters
&lt;/li&gt;
&lt;li&gt;when systems scale
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, you are no longer generating code.&lt;/p&gt;

&lt;p&gt;You are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modifying existing behavior
&lt;/li&gt;
&lt;li&gt;debugging interactions
&lt;/li&gt;
&lt;li&gt;reasoning about side effects
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that requires understanding — not generation.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Skill Shift
&lt;/h2&gt;

&lt;p&gt;Using AI effectively is not about writing less code.&lt;/p&gt;

&lt;p&gt;It is about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validating generated output critically
&lt;/li&gt;
&lt;li&gt;identifying hidden assumptions
&lt;/li&gt;
&lt;li&gt;adapting code to fit your system
&lt;/li&gt;
&lt;li&gt;knowing when to rewrite instead of reuse
&lt;/li&gt;
&lt;li&gt;rebuilding mental models quickly
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The role of the developer shifts from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;producing code&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;ensuring the system remains correct&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Risk: Responsibility Without Full Understanding
&lt;/h2&gt;

&lt;p&gt;The most subtle risk is not bad code.&lt;/p&gt;

&lt;p&gt;It is partial understanding.&lt;/p&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the code works
&lt;/li&gt;
&lt;li&gt;the feature ships
&lt;/li&gt;
&lt;li&gt;the system behaves “well enough”
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It creates confidence.&lt;/p&gt;

&lt;p&gt;But when complexity increases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;gaps become visible
&lt;/li&gt;
&lt;li&gt;behavior becomes unpredictable
&lt;/li&gt;
&lt;li&gt;changes become risky
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where teams start feeling that systems are “fragile” — without knowing why.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big Insight
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;AI changes who writes the code&lt;br&gt;&lt;br&gt;
but it does not change who is accountable for its behavior&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And accountability is what matters in production systems.&lt;/p&gt;




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

&lt;p&gt;AI makes building faster.&lt;/p&gt;

&lt;p&gt;But software is not judged by how fast it is built.&lt;/p&gt;

&lt;p&gt;It is judged by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how it behaves under pressure
&lt;/li&gt;
&lt;li&gt;how it handles edge cases
&lt;/li&gt;
&lt;li&gt;how it evolves over time
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And for all of that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;the responsibility is still yours — whether you wrote the code or not&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Frontend Isn’t Getting More Complex — The Boundaries Are Getting Blurry</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Wed, 15 Apr 2026 17:00:21 +0000</pubDate>
      <link>https://forem.com/rohith_kn/frontend-isnt-getting-more-complex-the-boundaries-are-getting-blurry-jka</link>
      <guid>https://forem.com/rohith_kn/frontend-isnt-getting-more-complex-the-boundaries-are-getting-blurry-jka</guid>
      <description>&lt;p&gt;Frontend used to feel complex because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;there were many distinct parts
&lt;/li&gt;
&lt;li&gt;each layer had a clear responsibility
&lt;/li&gt;
&lt;li&gt;boundaries were easy to identify
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But modern frontend has changed something subtle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The system boundaries are no longer clear.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Earlier frontend architecture had separation like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI vs logic
&lt;/li&gt;
&lt;li&gt;state vs rendering
&lt;/li&gt;
&lt;li&gt;client vs server
&lt;/li&gt;
&lt;li&gt;component vs service
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These separations made systems easier to reason about, even when they were large.&lt;/p&gt;

&lt;p&gt;Now those lines are increasingly blurred.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Changed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Components Do More Than UI
&lt;/h3&gt;

&lt;p&gt;Components often handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data fetching
&lt;/li&gt;
&lt;li&gt;caching logic
&lt;/li&gt;
&lt;li&gt;business rules
&lt;/li&gt;
&lt;li&gt;side effects
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So UI is no longer just UI.&lt;/p&gt;

&lt;p&gt;A component is now a &lt;em&gt;bundle of responsibilities&lt;/em&gt;, not just a presentation unit.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. State Is No Longer Isolated
&lt;/h3&gt;

&lt;p&gt;State now affects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multiple components
&lt;/li&gt;
&lt;li&gt;external systems
&lt;/li&gt;
&lt;li&gt;async workflows
&lt;/li&gt;
&lt;li&gt;derived computations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So state is no longer contained within a predictable boundary.&lt;/p&gt;

&lt;p&gt;A single change can ripple far beyond where it originated.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Logic Is Spread Across Layers
&lt;/h3&gt;

&lt;p&gt;Instead of one clear place for logic, it is now distributed across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;components
&lt;/li&gt;
&lt;li&gt;hooks
&lt;/li&gt;
&lt;li&gt;utilities
&lt;/li&gt;
&lt;li&gt;framework abstractions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So reasoning about behavior requires jumping across multiple mental layers.&lt;/p&gt;

&lt;p&gt;There is no single “home” for behavior anymore.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Feels Like Complexity
&lt;/h2&gt;

&lt;p&gt;Not because there is more logic.&lt;/p&gt;

&lt;p&gt;But because:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It’s harder to know where anything belongs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That uncertainty is what creates cognitive load.&lt;/p&gt;

&lt;p&gt;Developers spend more time asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where should this logic live?
&lt;/li&gt;
&lt;li&gt;Why is this behavior happening here?
&lt;/li&gt;
&lt;li&gt;What depends on this change?
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The confusion is structural, not syntactical.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Problem: Loss of Clear Ownership
&lt;/h2&gt;

&lt;p&gt;In older systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;components owned UI
&lt;/li&gt;
&lt;li&gt;services owned logic
&lt;/li&gt;
&lt;li&gt;state was centralized
&lt;/li&gt;
&lt;li&gt;responsibilities were clearly defined
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In modern frontend systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;responsibilities overlap
&lt;/li&gt;
&lt;li&gt;boundaries are flexible
&lt;/li&gt;
&lt;li&gt;ownership is shared
&lt;/li&gt;
&lt;li&gt;behavior is distributed
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So even small features feel harder to reason about.&lt;/p&gt;

&lt;p&gt;Not because they are complex — but because they are &lt;em&gt;uncontained&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Happens
&lt;/h2&gt;

&lt;p&gt;Frontend evolved toward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;flexibility
&lt;/li&gt;
&lt;li&gt;composability
&lt;/li&gt;
&lt;li&gt;abstraction
&lt;/li&gt;
&lt;li&gt;reuse
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these is valuable individually.&lt;/p&gt;

&lt;p&gt;But together, they reduce strict boundaries.&lt;/p&gt;

&lt;p&gt;So you gain power — but lose clarity.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hidden Cost
&lt;/h2&gt;

&lt;p&gt;When boundaries blur:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;debugging becomes harder
&lt;/li&gt;
&lt;li&gt;refactoring becomes riskier
&lt;/li&gt;
&lt;li&gt;onboarding becomes slower
&lt;/li&gt;
&lt;li&gt;mental models become unstable
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because developers can’t easily answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Where does this behavior actually live?”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Big Insight
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Frontend complexity today is not about size —&lt;br&gt;&lt;br&gt;
it is about unclear boundaries.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Good Engineers Do
&lt;/h2&gt;

&lt;p&gt;Strong engineers compensate by reintroducing structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;defining clear ownership of logic
&lt;/li&gt;
&lt;li&gt;isolating responsibilities intentionally
&lt;/li&gt;
&lt;li&gt;reducing cross-layer dependencies
&lt;/li&gt;
&lt;li&gt;keeping predictable data flow
&lt;/li&gt;
&lt;li&gt;enforcing architectural consistency
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They don’t rely on frameworks to define boundaries.&lt;/p&gt;

&lt;p&gt;They create them deliberately.&lt;/p&gt;




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

&lt;p&gt;Frontend is not becoming harder because there is more code.&lt;/p&gt;

&lt;p&gt;It is becoming harder because:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;it is increasingly difficult to draw lines around what each part of the system is responsible for.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And without those lines, even simple systems start to feel complex.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>AI Is Changing What Understanding Code Means</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Wed, 15 Apr 2026 16:20:36 +0000</pubDate>
      <link>https://forem.com/rohith_kn/ai-is-changing-what-understanding-code-means-go2</link>
      <guid>https://forem.com/rohith_kn/ai-is-changing-what-understanding-code-means-go2</guid>
      <description>&lt;p&gt;For a long time, understanding code meant something very concrete.&lt;/p&gt;

&lt;p&gt;If you could read it, write it, and debug it — you understood it.&lt;/p&gt;

&lt;p&gt;That definition is quietly breaking.&lt;/p&gt;

&lt;p&gt;Not because code is becoming simpler.&lt;/p&gt;

&lt;p&gt;But because the way we interact with code is changing.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Old Definition of “Understanding Code”
&lt;/h2&gt;

&lt;p&gt;Traditionally, understanding code meant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you could write it from scratch
&lt;/li&gt;
&lt;li&gt;you could explain how it works
&lt;/li&gt;
&lt;li&gt;you could debug it when it breaks
&lt;/li&gt;
&lt;li&gt;you could predict its behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding was tightly tied to &lt;strong&gt;authorship&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you built it, you understood it.&lt;/p&gt;

&lt;p&gt;If you didn’t, you probably didn’t.&lt;/p&gt;

&lt;p&gt;That link is now weakening.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Broke the Link Between Writing and Understanding
&lt;/h2&gt;

&lt;p&gt;With AI tools, developers can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate full components instantly
&lt;/li&gt;
&lt;li&gt;scaffold entire features
&lt;/li&gt;
&lt;li&gt;implement complex logic without writing every line
&lt;/li&gt;
&lt;li&gt;refactor code without fully tracing it manually
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a new situation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can produce working code without fully constructing the reasoning behind it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So the question becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did you understand it because you wrote it?&lt;/li&gt;
&lt;li&gt;Or did you just accept something that works?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Working Code Is No Longer Proof of Understanding
&lt;/h2&gt;

&lt;p&gt;This is the most important shift.&lt;/p&gt;

&lt;p&gt;A working feature used to imply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Someone here understands this system.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now it might simply mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI generated a valid solution
&lt;/li&gt;
&lt;li&gt;it was slightly reviewed
&lt;/li&gt;
&lt;li&gt;it passed basic testing
&lt;/li&gt;
&lt;li&gt;it shipped
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But understanding might still be missing.&lt;/p&gt;

&lt;p&gt;And often, it is.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Rise of “Delegated Understanding”
&lt;/h2&gt;

&lt;p&gt;We are entering a phase where developers increasingly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rely on generated logic
&lt;/li&gt;
&lt;li&gt;trust patterns they didn’t design
&lt;/li&gt;
&lt;li&gt;modify systems they didn’t fully build
&lt;/li&gt;
&lt;li&gt;combine pieces they didn’t mentally construct
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a new kind of workflow:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You don’t fully understand the system — you maintain it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is not necessarily bad.&lt;/p&gt;

&lt;p&gt;But it is different.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Gap Between Usage and Mental Models
&lt;/h2&gt;

&lt;p&gt;A growing gap is appearing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can use a system correctly
&lt;/li&gt;
&lt;li&gt;without having a complete mental model of it
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This shows up when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;debugging becomes difficult
&lt;/li&gt;
&lt;li&gt;small changes have unexpected effects
&lt;/li&gt;
&lt;li&gt;refactoring feels risky
&lt;/li&gt;
&lt;li&gt;behavior is harder to predict
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not because the system is worse.&lt;/p&gt;

&lt;p&gt;But because the mental model is incomplete.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Feels Normal in the Short Term
&lt;/h2&gt;

&lt;p&gt;AI makes development feel smoother:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fewer errors during writing
&lt;/li&gt;
&lt;li&gt;faster feature completion
&lt;/li&gt;
&lt;li&gt;less time spent on boilerplate
&lt;/li&gt;
&lt;li&gt;quicker iterations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So it feels like progress.&lt;/p&gt;

&lt;p&gt;But speed hides a side effect:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Less time spent thinking deeply about structure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that thinking is where understanding used to form.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding Is Becoming Non-Linear
&lt;/h2&gt;

&lt;p&gt;Earlier, understanding was built step-by-step:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;write code
&lt;/li&gt;
&lt;li&gt;break it
&lt;/li&gt;
&lt;li&gt;fix it
&lt;/li&gt;
&lt;li&gt;repeat
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, developers often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate a solution
&lt;/li&gt;
&lt;li&gt;tweak it
&lt;/li&gt;
&lt;li&gt;move on
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This removes repetition — but also removes reinforcement.&lt;/p&gt;

&lt;p&gt;So understanding becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;something you may or may not develop depending on how you engage with generated code.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The New Skill Is Not Writing Code
&lt;/h2&gt;

&lt;p&gt;Writing code is no longer the primary signal of skill.&lt;/p&gt;

&lt;p&gt;Because AI can write code.&lt;/p&gt;

&lt;p&gt;Instead, the new skill is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;interpreting generated systems
&lt;/li&gt;
&lt;li&gt;identifying hidden assumptions
&lt;/li&gt;
&lt;li&gt;reconstructing mental models quickly
&lt;/li&gt;
&lt;li&gt;knowing when something is correct vs just plausible
&lt;/li&gt;
&lt;li&gt;understanding without full authorship
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Risk: False Understanding
&lt;/h2&gt;

&lt;p&gt;One of the most subtle risks is the illusion of understanding.&lt;/p&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the code runs
&lt;/li&gt;
&lt;li&gt;the UI works
&lt;/li&gt;
&lt;li&gt;the feature ships
&lt;/li&gt;
&lt;li&gt;nothing breaks immediately
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is easy to assume:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I understand this.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But true understanding is tested when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;requirements change
&lt;/li&gt;
&lt;li&gt;edge cases appear
&lt;/li&gt;
&lt;li&gt;performance issues arise
&lt;/li&gt;
&lt;li&gt;systems scale
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s where gaps become visible.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Strong Engineers Do Differently
&lt;/h2&gt;

&lt;p&gt;In this new environment, strong developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;slow down when needed to study generated code
&lt;/li&gt;
&lt;li&gt;reconstruct mental models instead of blindly modifying output
&lt;/li&gt;
&lt;li&gt;question unfamiliar patterns instead of accepting them
&lt;/li&gt;
&lt;li&gt;rewrite critical parts manually to regain clarity
&lt;/li&gt;
&lt;li&gt;prioritize understanding over speed when complexity increases
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They don’t reject AI.&lt;/p&gt;

&lt;p&gt;They &lt;strong&gt;refuse to skip understanding&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big Shift
&lt;/h2&gt;

&lt;p&gt;We are moving from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I understand code because I wrote it”&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;“I must ensure I understand code even if I didn’t write it”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a fundamental change in engineering cognition.&lt;/p&gt;




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

&lt;p&gt;AI is not removing the need to understand code.&lt;/p&gt;

&lt;p&gt;It is removing the guarantee that writing code will automatically give you that understanding.&lt;/p&gt;

&lt;p&gt;And that changes what it means to be a software engineer.&lt;/p&gt;

&lt;p&gt;Not less technical.&lt;/p&gt;

&lt;p&gt;Just differently technical.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Your Frontend Isn’t Slow — Your State Updates Are</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Wed, 15 Apr 2026 13:50:56 +0000</pubDate>
      <link>https://forem.com/rohith_kn/your-frontend-isnt-slow-your-state-updates-are-5fed</link>
      <guid>https://forem.com/rohith_kn/your-frontend-isnt-slow-your-state-updates-are-5fed</guid>
      <description>&lt;p&gt;For a long time, understanding code meant something very concrete.&lt;/p&gt;

&lt;p&gt;If you could read it, write it, and debug it — you understood it.&lt;/p&gt;

&lt;p&gt;That definition is quietly breaking.&lt;/p&gt;

&lt;p&gt;Not because code is becoming simpler.&lt;/p&gt;

&lt;p&gt;But because the way we interact with code is changing.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Old Definition of “Understanding Code”
&lt;/h2&gt;

&lt;p&gt;Traditionally, understanding code meant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you could write it from scratch
&lt;/li&gt;
&lt;li&gt;you could explain how it works
&lt;/li&gt;
&lt;li&gt;you could debug it when it breaks
&lt;/li&gt;
&lt;li&gt;you could predict its behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Understanding was tightly tied to &lt;strong&gt;authorship&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you built it, you understood it.&lt;/p&gt;

&lt;p&gt;If you didn’t, you probably didn’t.&lt;/p&gt;

&lt;p&gt;That link is now weakening.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Broke the Link Between Writing and Understanding
&lt;/h2&gt;

&lt;p&gt;With AI tools, developers can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate full components instantly
&lt;/li&gt;
&lt;li&gt;scaffold entire features
&lt;/li&gt;
&lt;li&gt;implement complex logic without writing every line
&lt;/li&gt;
&lt;li&gt;refactor code without fully tracing it manually
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a new situation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can produce working code without fully constructing the reasoning behind it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So the question becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did you understand it because you wrote it?&lt;/li&gt;
&lt;li&gt;Or did you just accept something that works?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Working Code Is No Longer Proof of Understanding
&lt;/h2&gt;

&lt;p&gt;This is the most important shift.&lt;/p&gt;

&lt;p&gt;A working feature used to imply:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Someone here understands this system.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now it might simply mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI generated a valid solution
&lt;/li&gt;
&lt;li&gt;it was slightly reviewed
&lt;/li&gt;
&lt;li&gt;it passed basic testing
&lt;/li&gt;
&lt;li&gt;it shipped
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But understanding might still be missing.&lt;/p&gt;

&lt;p&gt;And often, it is.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Rise of “Delegated Understanding”
&lt;/h2&gt;

&lt;p&gt;We are entering a phase where developers increasingly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rely on generated logic
&lt;/li&gt;
&lt;li&gt;trust patterns they didn’t design
&lt;/li&gt;
&lt;li&gt;modify systems they didn’t fully build
&lt;/li&gt;
&lt;li&gt;combine pieces they didn’t mentally construct
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a new kind of workflow:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You don’t fully understand the system — you maintain it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is not necessarily bad.&lt;/p&gt;

&lt;p&gt;But it is different.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Gap Between Usage and Mental Models
&lt;/h2&gt;

&lt;p&gt;A growing gap is appearing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can use a system correctly
&lt;/li&gt;
&lt;li&gt;without having a complete mental model of it
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This shows up when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;debugging becomes difficult
&lt;/li&gt;
&lt;li&gt;small changes have unexpected effects
&lt;/li&gt;
&lt;li&gt;refactoring feels risky
&lt;/li&gt;
&lt;li&gt;behavior is harder to predict
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not because the system is worse.&lt;/p&gt;

&lt;p&gt;But because the mental model is incomplete.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Feels Normal in the Short Term
&lt;/h2&gt;

&lt;p&gt;AI makes development feel smoother:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fewer errors during writing
&lt;/li&gt;
&lt;li&gt;faster feature completion
&lt;/li&gt;
&lt;li&gt;less time spent on boilerplate
&lt;/li&gt;
&lt;li&gt;quicker iterations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So it feels like progress.&lt;/p&gt;

&lt;p&gt;But speed hides a side effect:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Less time spent thinking deeply about structure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that thinking is where understanding used to form.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding Is Becoming Non-Linear
&lt;/h2&gt;

&lt;p&gt;Earlier, understanding was built step-by-step:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;write code
&lt;/li&gt;
&lt;li&gt;break it
&lt;/li&gt;
&lt;li&gt;fix it
&lt;/li&gt;
&lt;li&gt;repeat
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, developers often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate a solution
&lt;/li&gt;
&lt;li&gt;tweak it
&lt;/li&gt;
&lt;li&gt;move on
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This removes repetition — but also removes reinforcement.&lt;/p&gt;

&lt;p&gt;So understanding becomes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;something you may or may not develop depending on how you engage with generated code.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The New Skill Is Not Writing Code
&lt;/h2&gt;

&lt;p&gt;Writing code is no longer the primary signal of skill.&lt;/p&gt;

&lt;p&gt;Because AI can write code.&lt;/p&gt;

&lt;p&gt;Instead, the new skill is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;interpreting generated systems
&lt;/li&gt;
&lt;li&gt;identifying hidden assumptions
&lt;/li&gt;
&lt;li&gt;reconstructing mental models quickly
&lt;/li&gt;
&lt;li&gt;knowing when something is correct vs just plausible
&lt;/li&gt;
&lt;li&gt;understanding without full authorship
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Risk: False Understanding
&lt;/h2&gt;

&lt;p&gt;One of the most subtle risks is the illusion of understanding.&lt;/p&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the code runs
&lt;/li&gt;
&lt;li&gt;the UI works
&lt;/li&gt;
&lt;li&gt;the feature ships
&lt;/li&gt;
&lt;li&gt;nothing breaks immediately
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is easy to assume:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I understand this.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But true understanding is tested when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;requirements change
&lt;/li&gt;
&lt;li&gt;edge cases appear
&lt;/li&gt;
&lt;li&gt;performance issues arise
&lt;/li&gt;
&lt;li&gt;systems scale
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s where gaps become visible.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Strong Engineers Do Differently
&lt;/h2&gt;

&lt;p&gt;In this new environment, strong developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;slow down when needed to study generated code
&lt;/li&gt;
&lt;li&gt;reconstruct mental models instead of blindly modifying output
&lt;/li&gt;
&lt;li&gt;question unfamiliar patterns instead of accepting them
&lt;/li&gt;
&lt;li&gt;rewrite critical parts manually to regain clarity
&lt;/li&gt;
&lt;li&gt;prioritize understanding over speed when complexity increases
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They don’t reject AI.&lt;/p&gt;

&lt;p&gt;They &lt;strong&gt;refuse to skip understanding&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big Shift
&lt;/h2&gt;

&lt;p&gt;We are moving from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I understand code because I wrote it”&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;“I must ensure I understand code even if I didn’t write it”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a fundamental change in engineering cognition.&lt;/p&gt;




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

&lt;p&gt;AI is not removing the need to understand code.&lt;/p&gt;

&lt;p&gt;It is removing the guarantee that writing code will automatically give you that understanding.&lt;/p&gt;

&lt;p&gt;And that changes what it means to be a software engineer.&lt;/p&gt;

&lt;p&gt;Not less technical.&lt;/p&gt;

&lt;p&gt;Just differently technical.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AI Is Making Frontend Bugs Harder to Notice — Not Harder to Fix</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Wed, 15 Apr 2026 13:10:03 +0000</pubDate>
      <link>https://forem.com/rohith_kn/ai-is-making-frontend-bugs-harder-to-notice-not-harder-to-fix-2pjp</link>
      <guid>https://forem.com/rohith_kn/ai-is-making-frontend-bugs-harder-to-notice-not-harder-to-fix-2pjp</guid>
      <description>&lt;p&gt;AI has made fixing bugs easier than ever.&lt;/p&gt;

&lt;p&gt;You can paste an error, describe a problem, or show a broken component — and within seconds, you get a solution.&lt;/p&gt;

&lt;p&gt;But something more subtle is happening at the same time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bugs are becoming harder to notice.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not harder to fix. Harder to &lt;strong&gt;see in the first place&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that shift is changing how frontend systems fail.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frontend Bugs Used to Be Loud
&lt;/h2&gt;

&lt;p&gt;Traditionally, frontend bugs were obvious.&lt;/p&gt;

&lt;p&gt;You would see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;broken layouts
&lt;/li&gt;
&lt;li&gt;crashing components
&lt;/li&gt;
&lt;li&gt;console errors
&lt;/li&gt;
&lt;li&gt;missing data
&lt;/li&gt;
&lt;li&gt;non-functional interactions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Failures were visible and immediate.&lt;/p&gt;

&lt;p&gt;Something didn’t work — and you knew it.&lt;/p&gt;

&lt;p&gt;This made debugging reactive but straightforward:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;detect → investigate → fix&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  AI Eliminates the Obvious Failures
&lt;/h2&gt;

&lt;p&gt;AI-generated code tends to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;compile correctly
&lt;/li&gt;
&lt;li&gt;follow common patterns
&lt;/li&gt;
&lt;li&gt;render UI properly
&lt;/li&gt;
&lt;li&gt;include basic error handling
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the obvious issues are often already handled.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;syntax errors
&lt;/li&gt;
&lt;li&gt;completely broken components
&lt;/li&gt;
&lt;li&gt;missing imports
&lt;/li&gt;
&lt;li&gt;basic logic mistakes
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At a glance, everything works.&lt;/p&gt;

&lt;p&gt;And that’s exactly where the problem begins.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bugs Move From Failures to Inconsistencies
&lt;/h2&gt;

&lt;p&gt;Instead of breaking, systems now tend to &lt;strong&gt;almost work&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That creates a new category of bugs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI behaves slightly differently than expected
&lt;/li&gt;
&lt;li&gt;state updates feel delayed or inconsistent
&lt;/li&gt;
&lt;li&gt;edge cases are not handled
&lt;/li&gt;
&lt;li&gt;interactions work most of the time, but not always
&lt;/li&gt;
&lt;li&gt;data appears correct, but is subtly wrong
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not failures.&lt;/p&gt;

&lt;p&gt;They are inconsistencies.&lt;/p&gt;

&lt;p&gt;And inconsistencies are much harder to detect.&lt;/p&gt;




&lt;h2&gt;
  
  
  “Looks Right” Becomes a False Signal
&lt;/h2&gt;

&lt;p&gt;One of the most dangerous side effects of AI-generated code is visual correctness.&lt;/p&gt;

&lt;p&gt;The UI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;renders properly
&lt;/li&gt;
&lt;li&gt;responds to input
&lt;/li&gt;
&lt;li&gt;shows expected data
&lt;/li&gt;
&lt;li&gt;follows familiar patterns
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So developers assume:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If it looks right, it probably is right.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But that assumption is no longer safe.&lt;/p&gt;

&lt;p&gt;Because many issues now exist beyond the obvious surface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;incorrect state transitions
&lt;/li&gt;
&lt;li&gt;race conditions in async flows
&lt;/li&gt;
&lt;li&gt;stale data rendering
&lt;/li&gt;
&lt;li&gt;missing edge-case handling
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system appears stable — until it isn’t.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frontend Bugs Are Now Edge-Case Bugs
&lt;/h2&gt;

&lt;p&gt;AI handles the common paths well.&lt;/p&gt;

&lt;p&gt;But real applications depend on edge cases.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happens when the API is slow?
&lt;/li&gt;
&lt;li&gt;What happens when data is partially missing?
&lt;/li&gt;
&lt;li&gt;What happens when users interact rapidly?
&lt;/li&gt;
&lt;li&gt;What happens when state changes overlap?
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These scenarios are often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;not explicitly defined in prompts
&lt;/li&gt;
&lt;li&gt;not covered by generated logic
&lt;/li&gt;
&lt;li&gt;not visible during initial testing
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So bugs move to the edges of the system.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trust in Code Has Quietly Increased
&lt;/h2&gt;

&lt;p&gt;Another subtle shift is psychological.&lt;/p&gt;

&lt;p&gt;With AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;code looks clean
&lt;/li&gt;
&lt;li&gt;patterns look familiar
&lt;/li&gt;
&lt;li&gt;logic appears structured
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So developers tend to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;trust generated code more
&lt;/li&gt;
&lt;li&gt;verify less deeply
&lt;/li&gt;
&lt;li&gt;assume correctness
&lt;/li&gt;
&lt;li&gt;move faster through implementation
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not intentional.&lt;/p&gt;

&lt;p&gt;It is a natural response to code that &lt;em&gt;appears&lt;/em&gt; well-written.&lt;/p&gt;

&lt;p&gt;But it reduces skepticism — which is critical for catching subtle bugs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Debugging Is Easier — But Detection Is Harder
&lt;/h2&gt;

&lt;p&gt;When a bug is identified, AI helps significantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;faster root cause suggestions
&lt;/li&gt;
&lt;li&gt;quick fixes
&lt;/li&gt;
&lt;li&gt;alternative implementations
&lt;/li&gt;
&lt;li&gt;simplified debugging paths
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So fixing bugs is faster.&lt;/p&gt;

&lt;p&gt;But the challenge has shifted:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can fix a bug quickly —&lt;br&gt;&lt;br&gt;
if you know it exists.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And increasingly, the hardest part is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;noticing incorrect behavior
&lt;/li&gt;
&lt;li&gt;identifying subtle inconsistencies
&lt;/li&gt;
&lt;li&gt;questioning “working” code
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Frontend Systems Amplify This Problem
&lt;/h2&gt;

&lt;p&gt;Frontend applications are particularly sensitive to subtle issues.&lt;/p&gt;

&lt;p&gt;Because they deal with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user interactions
&lt;/li&gt;
&lt;li&gt;asynchronous data
&lt;/li&gt;
&lt;li&gt;rendering timing
&lt;/li&gt;
&lt;li&gt;state synchronization
&lt;/li&gt;
&lt;li&gt;UX expectations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small inconsistencies quickly affect user experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;flickering UI
&lt;/li&gt;
&lt;li&gt;inconsistent loading states
&lt;/li&gt;
&lt;li&gt;delayed updates
&lt;/li&gt;
&lt;li&gt;incorrect transitions
&lt;/li&gt;
&lt;li&gt;accessibility gaps
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not system failures.&lt;/p&gt;

&lt;p&gt;They are quality degradations.&lt;/p&gt;

&lt;p&gt;And they are easy to miss during development.&lt;/p&gt;




&lt;h2&gt;
  
  
  The New Responsibility: Observing Behavior
&lt;/h2&gt;

&lt;p&gt;Frontend engineers now need to shift focus.&lt;/p&gt;

&lt;p&gt;From:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Does the code run?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Does the system behave correctly under all conditions?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deeper manual testing
&lt;/li&gt;
&lt;li&gt;thinking in edge cases
&lt;/li&gt;
&lt;li&gt;validating assumptions
&lt;/li&gt;
&lt;li&gt;observing behavior, not just output
&lt;/li&gt;
&lt;li&gt;questioning “mostly working” systems
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The skill is no longer just fixing bugs.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;recognizing them early&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Good Developers Do Differently
&lt;/h2&gt;

&lt;p&gt;In AI-assisted workflows, strong developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;test beyond the happy path
&lt;/li&gt;
&lt;li&gt;simulate edge cases intentionally
&lt;/li&gt;
&lt;li&gt;question generated logic
&lt;/li&gt;
&lt;li&gt;avoid trusting code at face value
&lt;/li&gt;
&lt;li&gt;validate state transitions carefully
&lt;/li&gt;
&lt;li&gt;review UX behavior, not just code
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They assume:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If something can behave incorrectly, it eventually will.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Big Shift
&lt;/h2&gt;

&lt;p&gt;Frontend bugs are not disappearing.&lt;/p&gt;

&lt;p&gt;They are evolving.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;From visible failures&lt;br&gt;&lt;br&gt;
to invisible inconsistencies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that changes where engineering effort is needed.&lt;/p&gt;




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

&lt;p&gt;AI has made development faster and more efficient.&lt;/p&gt;

&lt;p&gt;But it has also made systems &lt;em&gt;appear more correct than they actually are&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;And that illusion is dangerous.&lt;/p&gt;

&lt;p&gt;Because the hardest bugs are no longer the ones that crash your app.&lt;/p&gt;

&lt;p&gt;They are the ones that quietly degrade your user experience — without being noticed.&lt;/p&gt;

&lt;p&gt;And those are the bugs you now have to learn to see.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>AI Is Optimizing Frontend Code Locally — While Breaking It Globally</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Tue, 14 Apr 2026 21:00:25 +0000</pubDate>
      <link>https://forem.com/rohith_kn/ai-is-optimizing-frontend-code-locally-while-breaking-it-globally-3n4k</link>
      <guid>https://forem.com/rohith_kn/ai-is-optimizing-frontend-code-locally-while-breaking-it-globally-3n4k</guid>
      <description>&lt;p&gt;AI is very good at writing frontend code.&lt;/p&gt;

&lt;p&gt;Give it a prompt, and it can generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clean components
&lt;/li&gt;
&lt;li&gt;optimized functions
&lt;/li&gt;
&lt;li&gt;readable logic
&lt;/li&gt;
&lt;li&gt;working UI
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In isolation, the output often looks solid — sometimes even better than what many developers would write manually.&lt;/p&gt;

&lt;p&gt;But there is a problem hiding beneath that surface.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI is excellent at optimizing parts of a system —&lt;br&gt;&lt;br&gt;
but it has no real understanding of the system itself.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And that creates a growing mismatch in modern frontend codebases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Local Optimization Is What AI Does Best
&lt;/h2&gt;

&lt;p&gt;AI operates at a very specific level.&lt;/p&gt;

&lt;p&gt;It looks at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the prompt you provide
&lt;/li&gt;
&lt;li&gt;the immediate context
&lt;/li&gt;
&lt;li&gt;known patterns from training
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then it produces a solution that is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;syntactically correct
&lt;/li&gt;
&lt;li&gt;contextually relevant
&lt;/li&gt;
&lt;li&gt;locally optimized
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, AI can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;improve a component’s readability
&lt;/li&gt;
&lt;li&gt;refactor a function for clarity
&lt;/li&gt;
&lt;li&gt;add memoization
&lt;/li&gt;
&lt;li&gt;structure a hook cleanly
&lt;/li&gt;
&lt;li&gt;simplify conditional logic
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these improvements is valuable — at the &lt;strong&gt;local level&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that’s exactly where AI excels.&lt;/p&gt;




&lt;h2&gt;
  
  
  But Software Quality Is a Global Problem
&lt;/h2&gt;

&lt;p&gt;Frontend systems are not just collections of components.&lt;/p&gt;

&lt;p&gt;They depend on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;consistent patterns
&lt;/li&gt;
&lt;li&gt;shared abstractions
&lt;/li&gt;
&lt;li&gt;predictable data flow
&lt;/li&gt;
&lt;li&gt;unified state management
&lt;/li&gt;
&lt;li&gt;coherent design systems
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are &lt;em&gt;global properties&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;They emerge only when the entire system is designed intentionally.&lt;/p&gt;

&lt;p&gt;No single component can guarantee them.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Mismatch: Local Intelligence vs Global Coherence
&lt;/h2&gt;

&lt;p&gt;Here is the core issue:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI optimizes code in isolation,&lt;br&gt;&lt;br&gt;
while software quality depends on coordination.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This leads to a subtle but important outcome:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;each piece of code looks correct
&lt;/li&gt;
&lt;li&gt;but the system feels inconsistent
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You may not notice it immediately.&lt;/p&gt;

&lt;p&gt;But over time, it becomes obvious.&lt;/p&gt;




&lt;h2&gt;
  
  
  Individually Good Components, Collectively Messy Systems
&lt;/h2&gt;

&lt;p&gt;A typical AI-assisted codebase might contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;components that follow different patterns
&lt;/li&gt;
&lt;li&gt;hooks structured in inconsistent ways
&lt;/li&gt;
&lt;li&gt;varying approaches to state management
&lt;/li&gt;
&lt;li&gt;slightly different solutions for similar problems
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are &lt;em&gt;wrong&lt;/em&gt; individually.&lt;/p&gt;

&lt;p&gt;But together, they create friction.&lt;/p&gt;

&lt;p&gt;Developers start asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why is this component structured differently?
&lt;/li&gt;
&lt;li&gt;Why are we handling state in two ways?
&lt;/li&gt;
&lt;li&gt;Why do similar features behave slightly differently?
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system works — but it doesn’t feel cohesive.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conflicting Optimizations Start Appearing
&lt;/h2&gt;

&lt;p&gt;Because AI optimizes locally, it makes decisions without full system awareness.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;one component uses heavy memoization
&lt;/li&gt;
&lt;li&gt;another ignores performance entirely
&lt;/li&gt;
&lt;li&gt;one uses abstraction layers
&lt;/li&gt;
&lt;li&gt;another inlines everything
&lt;/li&gt;
&lt;li&gt;one introduces a custom hook
&lt;/li&gt;
&lt;li&gt;another repeats the same logic
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each decision is reasonable &lt;em&gt;in isolation&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But together, they create inconsistency.&lt;/p&gt;




&lt;h2&gt;
  
  
  Invisible Architectural Drift
&lt;/h2&gt;

&lt;p&gt;One of the most dangerous outcomes is not immediate failure.&lt;/p&gt;

&lt;p&gt;It is gradual drift.&lt;/p&gt;

&lt;p&gt;Over time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;patterns diverge
&lt;/li&gt;
&lt;li&gt;abstractions multiply
&lt;/li&gt;
&lt;li&gt;boundaries blur
&lt;/li&gt;
&lt;li&gt;structure becomes less intentional
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This doesn’t happen in a single commit.&lt;/p&gt;

&lt;p&gt;It happens slowly, across many AI-assisted changes.&lt;/p&gt;

&lt;p&gt;And because each change looks acceptable, the drift goes unnoticed.&lt;/p&gt;

&lt;p&gt;Until it becomes hard to reverse.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Refactoring Becomes Harder
&lt;/h2&gt;

&lt;p&gt;Refactoring depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;consistent patterns
&lt;/li&gt;
&lt;li&gt;clear structure
&lt;/li&gt;
&lt;li&gt;predictable behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in AI-heavy codebases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;there is no single dominant pattern
&lt;/li&gt;
&lt;li&gt;multiple “valid” approaches coexist
&lt;/li&gt;
&lt;li&gt;abstractions are inconsistent
&lt;/li&gt;
&lt;li&gt;decisions are undocumented
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So even simple refactors require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understanding multiple styles
&lt;/li&gt;
&lt;li&gt;choosing which pattern to standardize
&lt;/li&gt;
&lt;li&gt;rewriting more than expected
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cost of change increases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frontend Is Especially Sensitive to This
&lt;/h2&gt;

&lt;p&gt;Frontend systems amplify this problem.&lt;/p&gt;

&lt;p&gt;Because they involve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI composition
&lt;/li&gt;
&lt;li&gt;state management
&lt;/li&gt;
&lt;li&gt;async data flows
&lt;/li&gt;
&lt;li&gt;user interaction patterns
&lt;/li&gt;
&lt;li&gt;performance constraints
&lt;/li&gt;
&lt;li&gt;accessibility considerations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small inconsistencies in these areas quickly become visible.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;two similar components behave slightly differently
&lt;/li&gt;
&lt;li&gt;loading states are handled inconsistently
&lt;/li&gt;
&lt;li&gt;error handling varies across screens
&lt;/li&gt;
&lt;li&gt;UI spacing or structure feels off
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is not broken software.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;uneven software&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Problem Is Not “Bad Code”
&lt;/h2&gt;

&lt;p&gt;This is important.&lt;/p&gt;

&lt;p&gt;AI is not generating bad code.&lt;/p&gt;

&lt;p&gt;In many cases, the code is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clean
&lt;/li&gt;
&lt;li&gt;readable
&lt;/li&gt;
&lt;li&gt;functional
&lt;/li&gt;
&lt;li&gt;even optimized
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The issue is deeper.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The problem is not code quality —&lt;br&gt;&lt;br&gt;
it is &lt;strong&gt;system coherence&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And coherence cannot be generated locally.&lt;/p&gt;

&lt;p&gt;It must be enforced globally.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Role of the Engineer Is Changing
&lt;/h2&gt;

&lt;p&gt;In this environment, frontend engineers are not just writing code.&lt;/p&gt;

&lt;p&gt;They are responsible for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;aligning patterns across the codebase
&lt;/li&gt;
&lt;li&gt;enforcing consistent abstractions
&lt;/li&gt;
&lt;li&gt;identifying unnecessary variation
&lt;/li&gt;
&lt;li&gt;refactoring toward a unified structure
&lt;/li&gt;
&lt;li&gt;preventing architectural drift
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The engineer ensures global coherence&lt;br&gt;&lt;br&gt;
while AI generates local solutions.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  From Local Output to Global Consistency
&lt;/h2&gt;

&lt;p&gt;To make AI-assisted development work at scale, teams need to shift their approach.&lt;/p&gt;

&lt;p&gt;Some practical strategies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;define strict architectural patterns upfront
&lt;/li&gt;
&lt;li&gt;standardize how common problems are solved
&lt;/li&gt;
&lt;li&gt;review code for consistency, not just correctness
&lt;/li&gt;
&lt;li&gt;refactor aggressively when patterns diverge
&lt;/li&gt;
&lt;li&gt;limit variation in similar features
&lt;/li&gt;
&lt;li&gt;treat AI output as a starting point, not a final design
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Convert many local optimizations into one coherent system.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Big Shift
&lt;/h2&gt;

&lt;p&gt;AI is changing what it means to build frontend systems.&lt;/p&gt;

&lt;p&gt;We are no longer just solving problems.&lt;/p&gt;

&lt;p&gt;We are managing how solutions fit together.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;AI improves parts of your system&lt;br&gt;&lt;br&gt;
while quietly degrading the system as a whole —&lt;br&gt;&lt;br&gt;
unless you actively enforce structure.&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;Frontend engineering has always been about balance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;flexibility vs consistency
&lt;/li&gt;
&lt;li&gt;speed vs structure
&lt;/li&gt;
&lt;li&gt;abstraction vs simplicity
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI adds a new dimension:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local optimization vs global coherence
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the challenge is no longer writing better components.&lt;/p&gt;

&lt;p&gt;It is making sure those components belong to the same system.&lt;/p&gt;

&lt;p&gt;Because in the end, users don’t experience components.&lt;/p&gt;

&lt;p&gt;They experience the system as a whole.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>AI Is Turning Frontend Development Into a Probabilistic Workflow — Not a Deterministic One</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Tue, 14 Apr 2026 15:46:31 +0000</pubDate>
      <link>https://forem.com/rohith_kn/ai-is-turning-frontend-development-into-a-probabilistic-workflow-not-a-deterministic-one-2bec</link>
      <guid>https://forem.com/rohith_kn/ai-is-turning-frontend-development-into-a-probabilistic-workflow-not-a-deterministic-one-2bec</guid>
      <description>&lt;p&gt;Frontend development has traditionally been one of the most deterministic areas of software engineering.&lt;/p&gt;

&lt;p&gt;You write code → you get predictable UI behavior.&lt;/p&gt;

&lt;p&gt;Same input. Same output. Every time.&lt;/p&gt;

&lt;p&gt;That predictability is what made frontend systems debuggable, testable, and scalable.&lt;/p&gt;

&lt;p&gt;But AI is quietly changing that foundation.&lt;/p&gt;

&lt;p&gt;Not by replacing frontend development — but by changing the &lt;em&gt;nature of how frontend code is produced&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;We are moving from deterministic engineering to something more subtle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A probabilistic development workflow.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Frontend Development Was Built on Determinism
&lt;/h2&gt;

&lt;p&gt;Classic frontend engineering assumes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A function always returns the same result for the same input
&lt;/li&gt;
&lt;li&gt;UI rendering is predictable
&lt;/li&gt;
&lt;li&gt;State transitions are explicit
&lt;/li&gt;
&lt;li&gt;Components behave consistently
&lt;/li&gt;
&lt;li&gt;Code structure is intentionally designed
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why frameworks like React, Vue, and Svelte work well — they are built around predictable state and rendering models.&lt;/p&gt;

&lt;p&gt;Even complex applications are still ultimately deterministic:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If X happens, UI becomes Y.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This mental model is deeply embedded in how frontend engineers think.&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Breaks the “Single Expected Output” Model
&lt;/h2&gt;

&lt;p&gt;When AI enters the workflow, something subtle changes.&lt;/p&gt;

&lt;p&gt;Instead of writing code directly, developers now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;describe intent&lt;/li&gt;
&lt;li&gt;generate code&lt;/li&gt;
&lt;li&gt;refine outputs&lt;/li&gt;
&lt;li&gt;regenerate variations&lt;/li&gt;
&lt;li&gt;select the best result&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here’s the key shift:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The same prompt does not guarantee the same implementation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Even small changes in phrasing can lead to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;different component structures
&lt;/li&gt;
&lt;li&gt;different state management approaches
&lt;/li&gt;
&lt;li&gt;different abstractions
&lt;/li&gt;
&lt;li&gt;different naming conventions
&lt;/li&gt;
&lt;li&gt;different levels of complexity
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output becomes a &lt;em&gt;range of possibilities&lt;/em&gt;, not a fixed result.&lt;/p&gt;




&lt;h2&gt;
  
  
  Code Is No Longer Fully “Written” — It Is “Sampled”
&lt;/h2&gt;

&lt;p&gt;This is the most important mental shift.&lt;/p&gt;

&lt;p&gt;Traditional coding:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You construct a solution line by line.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AI-assisted coding:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You sample a solution from a large space of possibilities.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That space includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multiple valid architectures
&lt;/li&gt;
&lt;li&gt;multiple UI implementations
&lt;/li&gt;
&lt;li&gt;multiple logic patterns
&lt;/li&gt;
&lt;li&gt;multiple trade-offs
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of authoring every decision, you are now navigating between generated options.&lt;/p&gt;

&lt;p&gt;This introduces a new reality:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Code is becoming less authored and more selected.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Debugging Becomes Less Linear
&lt;/h2&gt;

&lt;p&gt;In deterministic systems, debugging is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reproduce the issue
&lt;/li&gt;
&lt;li&gt;trace execution
&lt;/li&gt;
&lt;li&gt;locate the bug
&lt;/li&gt;
&lt;li&gt;fix the logic
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in AI-assisted workflows, a new complexity appears:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which version of the generated code was used?&lt;/li&gt;
&lt;li&gt;Why did this output differ from last time?&lt;/li&gt;
&lt;li&gt;Did a regeneration introduce subtle behavioral changes?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if the final code is static, the &lt;em&gt;path that created it&lt;/em&gt; is not.&lt;/p&gt;

&lt;p&gt;This makes debugging less about tracing execution and more about understanding &lt;strong&gt;generation history and assumptions&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Rise of “Implementation Variance”
&lt;/h2&gt;

&lt;p&gt;One of the less obvious consequences of AI-assisted frontend development is inconsistency between implementations.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;two components generated for the same requirement may follow different patterns
&lt;/li&gt;
&lt;li&gt;similar UI elements may have different structures
&lt;/li&gt;
&lt;li&gt;state logic may vary between features
&lt;/li&gt;
&lt;li&gt;abstraction levels may not match across files
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates a new form of technical debt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Not bad code — but &lt;em&gt;inconsistent code produced under similar intent&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Frontend Codebases Become Less Uniform
&lt;/h2&gt;

&lt;p&gt;Uniformity used to come from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shared coding standards
&lt;/li&gt;
&lt;li&gt;manual implementation discipline
&lt;/li&gt;
&lt;li&gt;consistent review practices
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, even with good standards, AI introduces variation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;different prompts → different outputs
&lt;/li&gt;
&lt;li&gt;different sessions → different structures
&lt;/li&gt;
&lt;li&gt;different developers using AI differently
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is a codebase that still works — but feels less cohesive.&lt;/p&gt;




&lt;h2&gt;
  
  
  Engineering Shifts From Writing to Constraining
&lt;/h2&gt;

&lt;p&gt;In this new model, the frontend engineer’s role shifts.&lt;/p&gt;

&lt;p&gt;You are no longer only writing code.&lt;/p&gt;

&lt;p&gt;You are increasingly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;constraining AI outputs
&lt;/li&gt;
&lt;li&gt;defining structure boundaries
&lt;/li&gt;
&lt;li&gt;validating generated implementations
&lt;/li&gt;
&lt;li&gt;enforcing consistency after generation
&lt;/li&gt;
&lt;li&gt;selecting between multiple valid solutions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The job becomes less about creation and more about &lt;strong&gt;control and alignment&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deterministic Systems Still Exist — But Inside a Probabilistic Layer
&lt;/h2&gt;

&lt;p&gt;It is important to clarify one thing:&lt;/p&gt;

&lt;p&gt;Frontend applications themselves are still deterministic at runtime.&lt;/p&gt;

&lt;p&gt;React still behaves predictably.&lt;br&gt;&lt;br&gt;
JavaScript still executes deterministically.&lt;/p&gt;

&lt;p&gt;The probabilistic layer exists &lt;em&gt;before execution&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;during code generation
&lt;/li&gt;
&lt;li&gt;during implementation selection
&lt;/li&gt;
&lt;li&gt;during architectural decisions made by AI
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we are not losing determinism in runtime systems.&lt;/p&gt;

&lt;p&gt;We are introducing randomness in the &lt;strong&gt;construction phase&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters in Real Projects
&lt;/h2&gt;

&lt;p&gt;This shift explains several real-world issues developers are already noticing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-generated codebases feel inconsistent over time
&lt;/li&gt;
&lt;li&gt;refactoring becomes harder than expected
&lt;/li&gt;
&lt;li&gt;similar features are implemented differently
&lt;/li&gt;
&lt;li&gt;architectural decisions feel less intentional
&lt;/li&gt;
&lt;li&gt;onboarding new developers becomes confusing
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not random problems.&lt;/p&gt;

&lt;p&gt;They are symptoms of a probabilistic build process.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Good Developers Adapt
&lt;/h2&gt;

&lt;p&gt;The solution is not to avoid AI.&lt;/p&gt;

&lt;p&gt;It is to control how it is used.&lt;/p&gt;

&lt;p&gt;Strong engineering practices in this new model include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enforcing strict patterns after generation
&lt;/li&gt;
&lt;li&gt;limiting variability through templates or constraints
&lt;/li&gt;
&lt;li&gt;standardizing AI prompts across teams
&lt;/li&gt;
&lt;li&gt;reviewing structure, not just functionality
&lt;/li&gt;
&lt;li&gt;refactoring generated code into consistent architecture
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to convert probabilistic output into deterministic systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Big Shift
&lt;/h2&gt;

&lt;p&gt;Frontend development is no longer just about writing correct code.&lt;/p&gt;

&lt;p&gt;It is about managing variability during code creation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We are moving from deterministic engineering to probabilistic construction —&lt;br&gt;&lt;br&gt;
and then back to deterministic systems at runtime.&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;AI does not remove engineering discipline.&lt;/p&gt;

&lt;p&gt;It shifts where discipline is applied.&lt;/p&gt;

&lt;p&gt;The hardest part of frontend development is no longer writing logic that works.&lt;/p&gt;

&lt;p&gt;It is ensuring that &lt;em&gt;many possible generated solutions converge into one consistent system&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That is the new engineering problem.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The Shift from Vibe Coding to Agentic Engineering in Modern Software Development</title>
      <dc:creator>Rohith</dc:creator>
      <pubDate>Tue, 14 Apr 2026 11:56:56 +0000</pubDate>
      <link>https://forem.com/rohith_kn/the-shift-from-vibe-coding-to-agentic-engineering-in-modern-software-development-31oc</link>
      <guid>https://forem.com/rohith_kn/the-shift-from-vibe-coding-to-agentic-engineering-in-modern-software-development-31oc</guid>
      <description>&lt;p&gt;AI has changed how software is written.&lt;/p&gt;

&lt;p&gt;Developers can now describe features, generate components, scaffold applications, and even build full systems by interacting with AI tools. What once required hours of manual coding can now be done in minutes through prompts and conversations.&lt;/p&gt;

&lt;p&gt;This shift has introduced a new development style often referred to as &lt;em&gt;vibe coding&lt;/em&gt; — fast, experimental, and conversational coding driven by AI assistance.&lt;/p&gt;

&lt;p&gt;At the same time, another approach is emerging: &lt;em&gt;agentic engineering&lt;/em&gt;, a structured way of building software where AI is guided, controlled, and integrated into a disciplined engineering workflow.&lt;/p&gt;

&lt;p&gt;Modern software development is increasingly moving from vibe coding toward agentic engineering, not because vibe coding is wrong, but because real-world systems require structure, reliability, and long-term stability.&lt;/p&gt;

&lt;p&gt;This shift is shaping how developers think, design, and ship software in the age of AI.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Rise of Vibe Coding
&lt;/h2&gt;

&lt;p&gt;Vibe coding represents a new way of interacting with software development tools.&lt;/p&gt;

&lt;p&gt;Instead of writing every line manually, developers now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;describe what they want&lt;/li&gt;
&lt;li&gt;generate code using AI&lt;/li&gt;
&lt;li&gt;iterate through prompts&lt;/li&gt;
&lt;li&gt;refine outputs quickly&lt;/li&gt;
&lt;li&gt;experiment with ideas in real time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The process feels more like collaboration than traditional programming.&lt;/p&gt;

&lt;p&gt;A developer might ask AI to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create a login page&lt;/li&gt;
&lt;li&gt;build a dashboard&lt;/li&gt;
&lt;li&gt;generate API integration&lt;/li&gt;
&lt;li&gt;design a component&lt;/li&gt;
&lt;li&gt;optimize a function&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Within seconds, working code appears.&lt;/p&gt;

&lt;p&gt;This creates a sense of speed and momentum that traditional development often lacks.&lt;/p&gt;

&lt;p&gt;Vibe coding thrives in environments where rapid experimentation and creativity are important. It lowers the barrier to entry and allows developers to focus on ideas rather than syntax.&lt;/p&gt;

&lt;p&gt;For prototypes, early-stage products, and quick experiments, this approach is extremely powerful.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Vibe Coding Feels So Effective
&lt;/h2&gt;

&lt;p&gt;There is a reason vibe coding is becoming popular.&lt;/p&gt;

&lt;p&gt;It provides immediate feedback and quick results.&lt;/p&gt;

&lt;p&gt;Developers experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;faster iteration cycles&lt;/li&gt;
&lt;li&gt;reduced friction in coding&lt;/li&gt;
&lt;li&gt;quick validation of ideas&lt;/li&gt;
&lt;li&gt;creative freedom&lt;/li&gt;
&lt;li&gt;less time spent on boilerplate&lt;/li&gt;
&lt;li&gt;more focus on outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of spending hours setting up structure, developers can quickly see results and refine them.&lt;/p&gt;

&lt;p&gt;This creates a psychological advantage.&lt;/p&gt;

&lt;p&gt;Momentum builds quickly, and developers feel more productive because they are constantly generating working solutions.&lt;/p&gt;

&lt;p&gt;AI becomes a creative partner that accelerates exploration and experimentation.&lt;/p&gt;

&lt;p&gt;In many cases, vibe coding helps developers think more freely and move faster than ever before.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Vibe Coding Starts Breaking Down
&lt;/h2&gt;

&lt;p&gt;Despite its strengths, vibe coding has limitations when applied to real-world software systems.&lt;/p&gt;

&lt;p&gt;The problems usually appear when projects begin to grow.&lt;/p&gt;

&lt;p&gt;Generated code may work individually, but when combined into larger systems, challenges emerge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;inconsistent architecture&lt;/li&gt;
&lt;li&gt;duplicated logic&lt;/li&gt;
&lt;li&gt;unclear module boundaries&lt;/li&gt;
&lt;li&gt;fragile integrations&lt;/li&gt;
&lt;li&gt;unpredictable behavior&lt;/li&gt;
&lt;li&gt;difficulty maintaining structure&lt;/li&gt;
&lt;li&gt;increasing technical debt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI generates solutions based on prompts, not long-term system understanding.&lt;/p&gt;

&lt;p&gt;Each generated piece may solve a local problem but fail to align with the overall architecture.&lt;/p&gt;

&lt;p&gt;As the codebase expands, the lack of structured planning becomes visible.&lt;/p&gt;

&lt;p&gt;What initially felt fast and efficient can gradually turn into complexity and confusion.&lt;/p&gt;

&lt;p&gt;This is where many AI-driven projects struggle to move forward.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Hidden Risk: Speed Without Ownership
&lt;/h2&gt;

&lt;p&gt;One of the biggest risks of vibe coding is the gradual loss of ownership over the system.&lt;/p&gt;

&lt;p&gt;When developers rely heavily on AI-generated code, they may not fully understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how components interact&lt;/li&gt;
&lt;li&gt;why certain decisions were made&lt;/li&gt;
&lt;li&gt;how data flows through the system&lt;/li&gt;
&lt;li&gt;where potential failures exist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The system becomes a collection of generated solutions rather than a carefully engineered product.&lt;/p&gt;

&lt;p&gt;Over time, this leads to shallow understanding and reduced confidence in making changes.&lt;/p&gt;

&lt;p&gt;Developers may hesitate to modify AI-generated code because they did not design it themselves.&lt;/p&gt;

&lt;p&gt;This creates a dependency on AI rather than strengthening engineering intuition.&lt;/p&gt;

&lt;p&gt;Speed increases, but control decreases.&lt;/p&gt;

&lt;p&gt;And in software development, control is essential for reliability.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Agentic Engineering Really Means
&lt;/h2&gt;

&lt;p&gt;Agentic engineering introduces a structured way of working with AI.&lt;/p&gt;

&lt;p&gt;Instead of simply generating code, developers guide AI through defined goals and controlled workflows.&lt;/p&gt;

&lt;p&gt;The focus shifts from generation to orchestration.&lt;/p&gt;

&lt;p&gt;Agentic engineering involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;defining system goals&lt;/li&gt;
&lt;li&gt;planning architecture&lt;/li&gt;
&lt;li&gt;structuring tasks&lt;/li&gt;
&lt;li&gt;guiding AI outputs&lt;/li&gt;
&lt;li&gt;reviewing generated code&lt;/li&gt;
&lt;li&gt;refining solutions&lt;/li&gt;
&lt;li&gt;maintaining consistency&lt;/li&gt;
&lt;li&gt;ensuring reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI becomes part of a disciplined engineering process rather than an uncontrolled generator.&lt;/p&gt;

&lt;p&gt;Developers remain responsible for system design, while AI assists in execution.&lt;/p&gt;

&lt;p&gt;This creates a balance between speed and structure.&lt;/p&gt;

&lt;p&gt;The system is built intentionally, not just generated.&lt;/p&gt;




&lt;h2&gt;
  
  
  Agentic Engineering in Frontend Development
&lt;/h2&gt;

&lt;p&gt;The difference becomes especially visible in frontend development.&lt;/p&gt;

&lt;p&gt;Frontend systems involve multiple layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI components&lt;/li&gt;
&lt;li&gt;state management&lt;/li&gt;
&lt;li&gt;data flow&lt;/li&gt;
&lt;li&gt;interactions&lt;/li&gt;
&lt;li&gt;performance optimization&lt;/li&gt;
&lt;li&gt;accessibility&lt;/li&gt;
&lt;li&gt;responsiveness&lt;/li&gt;
&lt;li&gt;design consistency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a vibe coding approach, developers might generate components and connect them quickly without planning the overall structure.&lt;/p&gt;

&lt;p&gt;In an agentic engineering approach, developers first define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;component hierarchy&lt;/li&gt;
&lt;li&gt;state ownership&lt;/li&gt;
&lt;li&gt;interaction patterns&lt;/li&gt;
&lt;li&gt;data contracts&lt;/li&gt;
&lt;li&gt;design system rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then AI is used to generate code within this structured framework.&lt;/p&gt;

&lt;p&gt;This ensures that generated components align with the overall system.&lt;/p&gt;

&lt;p&gt;The result is not just working UI, but a scalable and maintainable frontend architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  Agentic Engineering in Software Development
&lt;/h2&gt;

&lt;p&gt;Beyond frontend systems, agentic engineering applies to software development as a whole.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;system-level thinking&lt;/li&gt;
&lt;li&gt;modular design&lt;/li&gt;
&lt;li&gt;integration planning&lt;/li&gt;
&lt;li&gt;testing strategies&lt;/li&gt;
&lt;li&gt;deployment stability&lt;/li&gt;
&lt;li&gt;maintainability over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI helps accelerate development, but engineering discipline ensures long-term success.&lt;/p&gt;

&lt;p&gt;Developers guide AI to produce structured outputs that align with system goals.&lt;/p&gt;

&lt;p&gt;Instead of reacting to generated code, they proactively design the system and use AI as a supporting tool.&lt;/p&gt;

&lt;p&gt;This leads to software that is both fast to build and reliable to maintain.&lt;/p&gt;




&lt;h2&gt;
  
  
  Exploration and Execution Must Work Together
&lt;/h2&gt;

&lt;p&gt;The shift from vibe coding to agentic engineering does not mean one replaces the other.&lt;/p&gt;

&lt;p&gt;Both approaches serve different purposes.&lt;/p&gt;

&lt;p&gt;Vibe coding is excellent for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;exploring ideas&lt;/li&gt;
&lt;li&gt;building prototypes&lt;/li&gt;
&lt;li&gt;testing concepts&lt;/li&gt;
&lt;li&gt;rapid experimentation&lt;/li&gt;
&lt;li&gt;early-stage development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agentic engineering is essential for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;production systems&lt;/li&gt;
&lt;li&gt;scalable applications&lt;/li&gt;
&lt;li&gt;stable architecture&lt;/li&gt;
&lt;li&gt;long-term maintenance&lt;/li&gt;
&lt;li&gt;reliable software delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most effective development workflow combines both.&lt;/p&gt;

&lt;p&gt;Developers explore ideas through vibe coding and then refine them through agentic engineering.&lt;/p&gt;

&lt;p&gt;AI accelerates creativity, while engineering ensures stability.&lt;/p&gt;

&lt;p&gt;This balance creates a sustainable development process.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Future of Software Development
&lt;/h2&gt;

&lt;p&gt;As AI tools continue to evolve, software development will increasingly focus on structured collaboration between humans and intelligent systems.&lt;/p&gt;

&lt;p&gt;Developers will spend less time writing repetitive code and more time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;defining system behavior&lt;/li&gt;
&lt;li&gt;designing architecture&lt;/li&gt;
&lt;li&gt;guiding AI outputs&lt;/li&gt;
&lt;li&gt;validating results&lt;/li&gt;
&lt;li&gt;ensuring quality&lt;/li&gt;
&lt;li&gt;maintaining reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The role of the developer shifts from coder to orchestrator.&lt;/p&gt;

&lt;p&gt;Engineering becomes less about typing code and more about shaping systems.&lt;/p&gt;

&lt;p&gt;AI handles execution, while developers maintain direction and control.&lt;/p&gt;

&lt;p&gt;This transformation will make engineering discipline even more valuable.&lt;/p&gt;

&lt;p&gt;Because when AI can generate almost anything, the real skill lies in knowing what should be built and how it should be structured.&lt;/p&gt;




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

&lt;p&gt;Vibe coding represents speed, creativity, and rapid exploration.&lt;/p&gt;

&lt;p&gt;Agentic engineering represents structure, control, and reliable software delivery.&lt;/p&gt;

&lt;p&gt;Modern software development is moving toward a balance between these two approaches.&lt;/p&gt;

&lt;p&gt;Developers who rely only on vibe coding may struggle with scalability and maintainability.&lt;/p&gt;

&lt;p&gt;Developers who embrace agentic engineering can harness AI while maintaining strong system design and engineering discipline.&lt;/p&gt;

&lt;p&gt;The future is not about choosing one over the other.&lt;/p&gt;

&lt;p&gt;It is about understanding when to explore and when to engineer.&lt;/p&gt;

&lt;p&gt;Because in the end, software that ships successfully is not just generated.&lt;/p&gt;

&lt;p&gt;It is carefully designed, structured, and engineered with intention.&lt;/p&gt;

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