<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: shan han</title>
    <description>The latest articles on DEV Community by shan han (@shanhan_dev).</description>
    <link>https://dev.to/shanhan_dev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4153543%2F2b10e1ee-006d-4a13-b53b-d5c52666cf45.png</url>
      <title>DEV Community: shan han</title>
      <link>https://dev.to/shanhan_dev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shanhan_dev"/>
    <language>en</language>
    <item>
      <title>I haven't opened VS Code in 6 months — here’s what happened when AI took over my workflow</title>
      <dc:creator>shan han</dc:creator>
      <pubDate>Thu, 01 Oct 2026 04:57:23 +0000</pubDate>
      <link>https://dev.to/shanhan_dev/i-havent-opened-vs-code-in-6-months-heres-what-happened-when-ai-took-over-my-workflow-2fl4</link>
      <guid>https://dev.to/shanhan_dev/i-havent-opened-vs-code-in-6-months-heres-what-happened-when-ai-took-over-my-workflow-2fl4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Author:&lt;/strong&gt; Shan (HanShan) | &lt;em&gt;Reflections after 20+ years of software engineering on transitioning from "typing code in an editor" to "driving development through AI dialogs."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Icon I Rarely Click Anymore
&lt;/h2&gt;

&lt;p&gt;Looking at my desktop dock, I can barely remember the last time I clicked on the VS Code icon. It stays there mostly out of habit and nostalgia.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F270ar3ecqcyi9unu63lc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F270ar3ecqcyi9unu63lc.jpg" alt="VS Code Desktop Icon" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, whenever I need to change something, my first instinct isn't opening a file—it's opening a chat prompt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz0y2vwbpjh45955p0584.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz0y2vwbpjh45955p0584.jpg" alt="AI Chat Interface Workflow" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is what my workspace looks like every day. Over the past six months, I shipped three complete projects, fixed hundreds of bugs, and completely refactored a backend service suite. &lt;strong&gt;Not a single line of that code was typed out by hand in VS Code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If someone had told me six months ago: &lt;em&gt;"As a career programmer with over two decades of coding experience, you won't even bother opening your editor for half a year,"&lt;/em&gt; I would have thought they were out of their mind.&lt;/p&gt;

&lt;p&gt;Yet here we are: VS Code has virtually vanished from my daily workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fautnommr4cj7z6hslfhr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fautnommr4cj7z6hslfhr.jpg" alt="Empty Workspace / Shift to AI IDE" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even though VS Code has plenty of great AI plugins, I eventually said goodbye to it because native AI IDEs and agents handle context, agentic workflows, and tool execution significantly better.&lt;/p&gt;

&lt;p&gt;Today, I want to unpack this half-year journey honestly: What actually happens to our development workflow when AI takes over writing code? And where does our core value as developers actually go?&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase 1: The First 2 Weeks — Fingers on Autopilot, Mind Lagging Behind
&lt;/h2&gt;

&lt;p&gt;The hardest part at the beginning was the cognitive dissonance.&lt;/p&gt;

&lt;p&gt;When I first stopped using my traditional editor, my muscle memory kept betraying me.&lt;/p&gt;

&lt;p&gt;I’d want to rename a variable, and my fingers would automatically press &lt;code&gt;Cmd + P&lt;/code&gt; before I remembered there were no files to search. I’d want to inspect a utility function, switch over to an empty workspace, and freeze. Once, while adjusting CSS padding, I stared blankly at the screen for 10 minutes because "tweaking a pixel" had meant &lt;code&gt;Open file → Search class → Edit value&lt;/code&gt; for twenty years—now I had to describe it in plain language.&lt;/p&gt;

&lt;p&gt;I genuinely wondered if I was losing my edge.&lt;/p&gt;

&lt;p&gt;Then it hit me: &lt;strong&gt;The discomfort wasn't from a lack of tools; it was from having my mental model ripped away.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzp9uuwgssjjh3r2spng9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzp9uuwgssjjh3r2spng9.jpg" alt="Mental Model Shift Diagram" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For decades, developers operated under a &lt;strong&gt;File-Centric View&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You carried a file tree in your head: which component lived in &lt;code&gt;components&lt;/code&gt;, which API endpoint was in &lt;code&gt;api&lt;/code&gt;, how state trickled down, where an enum was defined vs. consumed. When a bug popped up, you set breakpoints, sprinkled &lt;code&gt;console.log&lt;/code&gt; statements, and climbed up the call stack.&lt;/p&gt;

&lt;p&gt;Switching completely to Agentic workflows, MCP (Model Context Protocol), and terminal-native AI tools inverted this entire model into a &lt;strong&gt;Task &amp;amp; System View&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I no longer care which exact line a function lives on. I only provide three things: &lt;strong&gt;System Boundaries, Data Structure Definitions, and Expected Inputs/Outputs.&lt;/strong&gt; The rest is the Agent's job—indexing the codebase, creating branches, editing files, running tests, and telling me: &lt;em&gt;"Done. Ready to merge?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It felt strange at first. Handing over the keyboard meant handing over the map—the mental map of my codebase.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;File-Centric View&lt;/th&gt;
&lt;th&gt;Task &amp;amp; System View&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Starting Point&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Create a new project file&lt;/td&gt;
&lt;td&gt;Write a detailed Specification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mental Load&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Directory trees, file paths, naming conventions&lt;/td&gt;
&lt;td&gt;Module boundaries, data flow, failure modes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Debugging&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Breakpoints, logging, stepping through stack traces&lt;/td&gt;
&lt;td&gt;Describe the symptom → AI investigates logs &amp;amp; repos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deliverable&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A snippet of code&lt;/td&gt;
&lt;td&gt;A verified change + Git diff&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Developer Role&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Producer (Typist + Craftsman)&lt;/td&gt;
&lt;td&gt;Approver (Architect + Reviewer)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Amplified Skill&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Typing speed, path memory, debugging patience&lt;/td&gt;
&lt;td&gt;System definition, judgment, critical inquiry&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;After a month, I accepted a humbling truth:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;70% of our time in the past wasn't spent "thinking about systems"—it was spent acting as human code converters.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Translating comments into syntax, design mocks into functions, or refactoring three legacy files into a new API—this boilerplate consumption dominated our daily lives. It gave us a sense of "productivity," but it wasn't where real engineering lived.&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase 2: Six Months In — My New Development Stack
&lt;/h2&gt;

&lt;p&gt;Once the adjustment period passed, three main pillars replaced my old editor-centric workflow:&lt;/p&gt;

&lt;h3&gt;
  
  
  Pillar 1: Writing Specifications Instead of Writing Code
&lt;/h3&gt;

&lt;p&gt;Development no longer starts with &lt;code&gt;touch index.ts&lt;/code&gt;; it starts with an extremely explicit specification document.&lt;/p&gt;

&lt;p&gt;The clearer my definitions for module boundaries and data flow are, the sturdier the generated architecture becomes. Ambiguity in specs directly translates to exponential rework.&lt;/p&gt;

&lt;p&gt;My pre-implementation spec template looks like this:&lt;/p&gt;

&lt;h2&gt;
  
  
  Goal
&lt;/h2&gt;

&lt;p&gt;In one sentence: What problem does this module solve, and what is explicitly OUT of scope?&lt;/p&gt;

&lt;h2&gt;
  
  
  Boundaries
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Input: Fields / Types / Caller&lt;/li&gt;
&lt;li&gt;Output: Fields / Types / Return behavior on failure&lt;/li&gt;
&lt;li&gt;Out of scope: Explicitly list 3 things this module does NOT handle.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data Structures
&lt;/h2&gt;

&lt;p&gt;Strictly defined via TypeScript interfaces/types. Types are contracts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure Paths
&lt;/h2&gt;

&lt;p&gt;List at least 3: Null inputs / Upstream timeouts / Invalid data formats, and expected behaviors for each.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acceptance Criteria
&lt;/h2&gt;

&lt;p&gt;Include runnable edge-case test suites.&lt;/p&gt;

&lt;p&gt;When the specification is complete, generating the code becomes a deterministic execution rather than a creative gamble.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pillar 2: Context Attachment via MCP (Model Context Protocol)
&lt;/h3&gt;

&lt;p&gt;Specifications define &lt;em&gt;what I say&lt;/em&gt;; MCP defines &lt;em&gt;what the AI can access&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Debugging used to mean sifting through logs, SSHing into servers, querying DBs, and comparing environment variables manually.&lt;/p&gt;

&lt;p&gt;Using MCP, I connect the AI directly to my local database, API inspection tools, and Git repositories. The AI evolves from a "conversational chatbot reading pasted code" into an &lt;strong&gt;agent equipped with real tools&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F700jiqbzee1s8jeiah9r.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F700jiqbzee1s8jeiah9r.jpg" alt="MCP Tool Integration" width="799" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A typical investigation now looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F52ournfsq65m8uw372kb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F52ournfsq65m8uw372kb.jpg" alt="AI Debugging &amp;amp; Refactoring Workflow" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Me:&lt;/strong&gt; Describe the issue.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Checks logs, inspects codebase, traces logic, checks commit history, edits code, compiles, and runs tests.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Me:&lt;/strong&gt; Inspect the diff, verify test results, merge.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Going from "spend hours investigating" to "spend 30 seconds reviewing" comes down to whether you embrace this paradigm shift.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pillar 3: Automated Verification — Tests Are the Main Character
&lt;/h3&gt;

&lt;p&gt;Without unit tests as a safety net, AI-generated code is a ticking time bomb.&lt;/p&gt;

&lt;p&gt;Over the past six months, I've seen AI "working" code fail in production: an API that passed basic checks corrupted user records under concurrent requests, and a "cleaner" refactored module accidentally stripped out fallback logic for empty arrays.&lt;/p&gt;

&lt;p&gt;AI excels at generating quickly, not anticipating comprehensively.&lt;/p&gt;

&lt;p&gt;My job shifted to &lt;strong&gt;designing edge-case test suites&lt;/strong&gt;, then handing them to the AI to iterate on until every test turns green:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Nulls &amp;amp; Zeroes:&lt;/strong&gt; &lt;code&gt;null&lt;/code&gt;, &lt;code&gt;undefined&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;, empty arrays/objects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boundaries:&lt;/strong&gt; First page, last page, max length limits, long strings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Concurrency:&lt;/strong&gt; Simultaneous mutations on identical records, duplicate submissions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failure Branches:&lt;/strong&gt; Upstream 500 errors, timeouts, malformed payloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formatting:&lt;/strong&gt; Date boundaries (month-end, leap years, time zones), floating-point precision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Integrity:&lt;/strong&gt; Duplicate calls, external state mutations mid-execution.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Phase 3: The Reality Check — What Didn't Go Smoothly
&lt;/h2&gt;

&lt;p&gt;Moving completely away from editors isn't a silver bullet. If you plan to adopt this workflow, watch out for these traps:&lt;/p&gt;

&lt;h3&gt;
  
  
  Pitfall 1: Hidden Architectural Rot
&lt;/h3&gt;

&lt;p&gt;AI favors local optima. Architecture requires global constraints. Left unchecked, AI will reinvent wheels across files—three different HTTP wrappers, duplicate helper logic, or conflicting constants.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My fix:&lt;/strong&gt; Put architectural rules in a project convention file (&lt;code&gt;CLAUDE.md&lt;/code&gt; / &lt;code&gt;RULES.md&lt;/code&gt;).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All HTTP calls MUST go through &lt;code&gt;src/lib/api&lt;/code&gt;. No custom wrappers.&lt;/li&gt;
&lt;li&gt;Logging MUST use &lt;code&gt;MLog&lt;/code&gt;. System &lt;code&gt;console.log&lt;/code&gt; is strictly prohibited.&lt;/li&gt;
&lt;li&gt;New modules MUST declare dependencies before implementation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Pitfall 2: Hallucinated Dependencies &amp;amp; Security Risks
&lt;/h3&gt;

&lt;p&gt;AI will happily introduce deprecated or insecure packages that sound plausible, or call outdated APIs that pass compilation but fail at runtime.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My fix:&lt;/strong&gt; Never let AI decide dependencies autonomously.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI must provide registry links and version numbers for any new package.&lt;/li&gt;
&lt;li&gt;Enforce CI dependency audits (vulnerabilities &amp;amp; deprecation checks).&lt;/li&gt;
&lt;li&gt;Personally review security-sensitive code (Auth, Crypto, File I/O) line by line.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Pitfall 3: Context Drift in Long Sessions
&lt;/h3&gt;

&lt;p&gt;In short sessions, AI is obedient. In 2-hour multi-turn conversations, it starts drifting—forgetting constraints set in turn 3 or refactoring code to match its own preferences.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;My fix:&lt;/strong&gt; Keep sessions short and modular. One task per session. Re-state key constraints at the start of a prompt, and reset the context as soon as the agent strays.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Pitfall 4: Code Review Costs Skyrocket
&lt;/h3&gt;

&lt;p&gt;When an AI modifies 1,000 lines in seconds, how much can you actually review?&lt;/p&gt;

&lt;p&gt;If you can't review it, you are blindly accepting it. Review test coverage first, inspect deleted logic second, and review new lines last.&lt;/p&gt;




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

&lt;p&gt;AI hasn't eliminated programmers, but it has made purely mechanical coding obsolete.&lt;/p&gt;

&lt;p&gt;Your value as an architect, your understanding of underlying protocols, and your ability to anticipate system failures matter more than ever before.&lt;/p&gt;

&lt;p&gt;How long has it been since you last opened your code editor? Feel free to share your current workflow in the comments!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>developerlife</category>
      <category>vscode</category>
    </item>
  </channel>
</rss>
