<?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: Marcus Kim</title>
    <description>The latest articles on DEV Community by Marcus Kim (@marcusykim).</description>
    <link>https://dev.to/marcusykim</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%2F3986100%2Fc1575634-3404-470c-8a8c-07bbc047ff7c.jpg</url>
      <title>DEV Community: Marcus Kim</title>
      <link>https://dev.to/marcusykim</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcusykim"/>
    <language>en</language>
    <item>
      <title>What Gemini 3.7 Flash Can Teach Beginners About Testing AI-Generated App UI in 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Sat, 15 Aug 2026 18:39:58 +0000</pubDate>
      <link>https://dev.to/marcusykim/what-gemini-37-flash-can-teach-beginners-about-testing-ai-generated-app-ui-in-2026-5hgj</link>
      <guid>https://dev.to/marcusykim/what-gemini-37-flash-can-teach-beginners-about-testing-ai-generated-app-ui-in-2026-5hgj</guid>
      <description>&lt;p&gt;On August 13, Google introduced Gemini 3.7 Flash as its latest “workhorse” model for coding and agents. One detail should matter to anyone using AI to build an app: Google says the model improved at web development and can show strong design adherence when you give it a screenshot, image, or full design system as a reference.&lt;/p&gt;

&lt;p&gt;That is useful progress. A beginner can describe a screen, attach a visual target, and get something recognizable much faster than before.&lt;/p&gt;

&lt;p&gt;It also creates a more convincing trap.&lt;/p&gt;

&lt;p&gt;A generated screen can match a screenshot and still fail as software. The button may not lead anywhere. The layout may collapse when real text arrives. The empty state may not exist. Keyboard focus may jump in a nonsense order. The “saved” result may disappear after refresh.&lt;/p&gt;

&lt;p&gt;The durable beginner lesson is this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A screenshot proves appearance. A screen-proof checklist proves an interface.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed, and what did not
&lt;/h2&gt;

&lt;p&gt;Google’s announcement emphasizes better first-pass coding, instruction following, web development, and UI generation from visual references. The release also extends the model across developer surfaces including the Gemini API, Google Antigravity, Google AI Studio, and Android Studio.&lt;/p&gt;

&lt;p&gt;This continues the direction Google described at I/O 2026: moving from a prompt toward a production-ready application through agentic tools. The distance between “I described a screen” and “I can run a screen” keeps shrinking.&lt;/p&gt;

&lt;p&gt;But production-ready is not a visual style.&lt;/p&gt;

&lt;p&gt;Apple’s interface guidance still asks layouts to preserve hierarchy, adapt to different device and system conditions, and keep controls understandable. The W3C’s accessibility guidance still cares about things a static image cannot prove, including focus order, visible focus, reflow, target size, labels, and error prevention.&lt;/p&gt;

&lt;p&gt;The model can produce more of the first draft. You still need a repeatable way to decide whether that draft deserves to stay.&lt;/p&gt;

&lt;h2&gt;
  
  
  The beginner mistake: reviewing the best-looking moment
&lt;/h2&gt;

&lt;p&gt;AI-generated UI usually gets reviewed in its most flattering state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one desktop width;&lt;/li&gt;
&lt;li&gt;ideal sample data;&lt;/li&gt;
&lt;li&gt;no loading delay;&lt;/li&gt;
&lt;li&gt;no errors;&lt;/li&gt;
&lt;li&gt;no keyboard;&lt;/li&gt;
&lt;li&gt;no long names;&lt;/li&gt;
&lt;li&gt;and no confused first-time user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not a test. It is a portrait session.&lt;/p&gt;

&lt;p&gt;I have learned to review screens as changing systems. A useful interface has to explain what matters, accept an action, show what happened, survive awkward inputs, and let the user recover. Visual quality matters, but visual quality is only one layer of the evidence.&lt;/p&gt;

&lt;p&gt;If you need help defining the user, workflow, screen responsibilities, and success criteria before AI starts generating UI, my &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; are free. The immediate job is to give the tool a screen contract it can be judged against, not just a mood and a color palette.&lt;/p&gt;

&lt;h2&gt;
  
  
  My seven-point AI-generated screen-proof checklist
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Give the screen one job
&lt;/h3&gt;

&lt;p&gt;Write this before you review pixels:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This screen helps [user] do [action] so they can get [result].&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then name the primary control that moves that job forward.&lt;/p&gt;

&lt;p&gt;If you cannot identify one main action, the screen may be a planning board disguised as a product. AI loves giving every idea its own card, badge, metric, and button. The result can look busy and complete while the user has no obvious next move.&lt;/p&gt;

&lt;p&gt;Proof: show the screen to someone for five seconds, hide it, and ask what they think it does and what they would press first.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Run the primary journey with real inputs
&lt;/h3&gt;

&lt;p&gt;Do not review only the landing state. Tap, type, select, submit, go back, and return.&lt;/p&gt;

&lt;p&gt;For a task screen, create a task and reopen it. For a search screen, type a query and choose a result. For an onboarding screen, finish the first useful action instead of merely swiping through explanations.&lt;/p&gt;

&lt;p&gt;Proof: record the exact starting state, actions, and expected ending state. The journey passes only when the user result is visible and understandable.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Build a state sheet
&lt;/h3&gt;

&lt;p&gt;Every important screen should show more than its happy path. At minimum, inspect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;loading;&lt;/li&gt;
&lt;li&gt;empty;&lt;/li&gt;
&lt;li&gt;normal success;&lt;/li&gt;
&lt;li&gt;invalid input;&lt;/li&gt;
&lt;li&gt;unavailable or failed request;&lt;/li&gt;
&lt;li&gt;and completed or saved state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need six completely different designs. You need six honest answers to “What does the user see now, and what can they do next?”&lt;/p&gt;

&lt;p&gt;Proof: capture each state at the target viewport. If two states look identical but require different user actions, the interface is hiding important information.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Pressure-test the content
&lt;/h3&gt;

&lt;p&gt;Replace tidy demo text with inputs that strain the layout:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a long name;&lt;/li&gt;
&lt;li&gt;a long title;&lt;/li&gt;
&lt;li&gt;no image;&lt;/li&gt;
&lt;li&gt;several lines of body copy;&lt;/li&gt;
&lt;li&gt;a large number;&lt;/li&gt;
&lt;li&gt;zero results;&lt;/li&gt;
&lt;li&gt;and enough rows to require scrolling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where “design adherence” meets actual product data. A screenshot reference cannot predict every name, localization change, or user-created mess.&lt;/p&gt;

&lt;p&gt;Proof: no essential control is covered, clipped, pushed offscreen, or made ambiguous by realistic content.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Test the viewport, keyboard, and safe areas
&lt;/h3&gt;

&lt;p&gt;For web, test at least a narrow phone width and the desktop width you expect people to use. For mobile, test a smaller supported phone, a larger phone, the software keyboard, text-size changes, and the platform’s safe areas.&lt;/p&gt;

&lt;p&gt;Apple’s layout guidance emphasizes adaptation across screen sizes, orientation, text size, locale, and system features. Your first version does not need to support every device ever made, but it must behave deliberately on the devices you claim to support.&lt;/p&gt;

&lt;p&gt;Proof: the primary journey remains usable without horizontal scrolling, covered controls, accidental cropping, or a keyboard that traps the user.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Run the non-mouse test
&lt;/h3&gt;

&lt;p&gt;On the web, use only the keyboard for the primary journey. Confirm that focus is visible and moves in an order that preserves meaning. On mobile, confirm controls have clear labels, comfortable target sizes, and an onscreen alternative when a gesture is not obvious or essential.&lt;/p&gt;

&lt;p&gt;WCAG 2.2 includes guidance for focus order, visible focus, target size, and alternatives to dragging. Apple similarly recommends sufficiently sized controls, spacing between them, familiar interactions, and alternatives to gestures.&lt;/p&gt;

&lt;p&gt;Proof: you can identify where focus is, activate the important controls, understand labels without color alone, and recover from an error without guessing.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Prove that the screen is connected to the product
&lt;/h3&gt;

&lt;p&gt;The last check is intentionally unglamorous:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the primary action write or retrieve the correct state?&lt;/li&gt;
&lt;li&gt;Does that state survive refresh, relaunch, or navigation when it should?&lt;/li&gt;
&lt;li&gt;Does Back return to the expected place?&lt;/li&gt;
&lt;li&gt;Does another account see only what it is allowed to see?&lt;/li&gt;
&lt;li&gt;Does a failure leave the previous good state intact?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the line between a generated interface and a working product. A button animation is feedback. It is not proof that the user’s goal happened.&lt;/p&gt;

&lt;p&gt;Proof: inspect the visible result after leaving and returning to the workflow. If the product promises persistence or ownership, test it with the smallest realistic example.&lt;/p&gt;

&lt;h2&gt;
  
  
  A reusable screen evidence table
&lt;/h2&gt;

&lt;p&gt;Use one row per delivered screen:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Proof area&lt;/th&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Job&lt;/td&gt;
&lt;td&gt;Can a first-time user name the screen’s purpose and primary action?&lt;/td&gt;
&lt;td&gt;five-second result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Journey&lt;/td&gt;
&lt;td&gt;Can the user complete the intended action?&lt;/td&gt;
&lt;td&gt;exact start, steps, and end state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;States&lt;/td&gt;
&lt;td&gt;Are loading, empty, success, failure, and recovery clear?&lt;/td&gt;
&lt;td&gt;state captures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Content&lt;/td&gt;
&lt;td&gt;Does real and awkward data stay readable?&lt;/td&gt;
&lt;td&gt;long, empty, and missing-content runs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Viewports&lt;/td&gt;
&lt;td&gt;Does the supported layout adapt?&lt;/td&gt;
&lt;td&gt;target viewport captures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access&lt;/td&gt;
&lt;td&gt;Can the journey work with keyboard or accessible controls?&lt;/td&gt;
&lt;td&gt;focus, labels, targets, and alternatives&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Product&lt;/td&gt;
&lt;td&gt;Does the action connect to real navigation and state?&lt;/td&gt;
&lt;td&gt;refresh, relaunch, account, or persistence proof&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If a row has no evidence, label it unverified. Do not upgrade confidence because the gradient is nice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff
&lt;/h2&gt;

&lt;p&gt;This checklist slows down the moment when you can call the UI done. That is the cost.&lt;/p&gt;

&lt;p&gt;It may also make you throw away a generated screen that looked impressive on the first pass. You may discover that a simpler layout survives more states, supports larger text, and gives the main action more room. The quieter design can be the stronger product.&lt;/p&gt;

&lt;p&gt;The checklist is not a promise that one screen can be perfect for every person and device. Accessibility testing can go much deeper, platform conventions differ, and real user research can overturn your assumptions. The point is to replace screenshot confidence with a minimum evidence floor.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should do next
&lt;/h2&gt;

&lt;p&gt;Take one important screen from your app. Write its one-sentence job, then create the seven proof rows before asking AI for another redesign.&lt;/p&gt;

&lt;p&gt;Give the AI the failed rows, not a vague request to “make it better.” Ask it to preserve what passed, repair what failed, and show the new evidence at the same viewports and states.&lt;/p&gt;

&lt;p&gt;For the immediate guided action, start with the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt;, which are free and help you turn an idea into a bounded workflow AI can build and you can verify. For the organized path from idea to publication, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt; is my $19 field manual covering scope, screens, stack, prompting, architecture, QA, deployment, and launch.&lt;/p&gt;

&lt;p&gt;The faster AI gets at producing convincing screens, the more valuable this distinction becomes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not approve the screenshot. Approve the evidence.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Lovable’s $13.3B Raise: What Beginner AI App Builders Should Learn About Value Loops in 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Thu, 13 Aug 2026 18:40:33 +0000</pubDate>
      <link>https://dev.to/marcusykim/lovables-133b-raise-what-beginner-ai-app-builders-should-learn-about-value-loops-in-2026-39ol</link>
      <guid>https://dev.to/marcusykim/lovables-133b-raise-what-beginner-ai-app-builders-should-learn-about-value-loops-in-2026-39ol</guid>
      <description>&lt;p&gt;On August 12, 2026, Lovable announced that it had raised &lt;a href="https://lovable.dev/blog/series-c" rel="noopener noreferrer"&gt;$400 million in Series C funding at a $13.3 billion valuation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That is the attention-grabbing part. The useful beginner lesson is hiding a few paragraphs lower.&lt;/p&gt;

&lt;p&gt;Lovable described its first chapter as making software easier to create. Its next chapter is about helping people &lt;em&gt;run&lt;/em&gt; businesses: payments, discoverability, integrations, security, permissions, governance, and systems that understand whether the software produced a meaningful outcome.&lt;/p&gt;

&lt;p&gt;In other words, the company behind one of the best-known “describe it and build it” platforms is investing beyond the build button.&lt;/p&gt;

&lt;p&gt;That distinction matters if you are making your first app with AI. A prompt can produce screens, files, and a deployment. None of those automatically creates a product people will use twice.&lt;/p&gt;

&lt;p&gt;The durable beginner lesson is this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before you ask AI to build the app, define the loop that makes the app useful again.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you need help turning a rough idea into that kind of controlled plan, my &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; are free. Use them to clarify the user and workflow before your coding tool starts manufacturing a small digital shopping mall nobody requested.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Lovable actually announced
&lt;/h2&gt;

&lt;p&gt;The funding number is real news, but Lovable’s product description is more instructive than its valuation.&lt;/p&gt;

&lt;p&gt;The company reported that people had created more than 60 million projects on its platform and that Lovable-built apps were receiving more than 900 million visits per month. Those are company-reported figures, not a neutral audit, but they explain what Lovable says it is building next.&lt;/p&gt;

&lt;p&gt;Its priorities now include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;helping builders reach customers;&lt;/li&gt;
&lt;li&gt;connecting apps to payments and business systems;&lt;/li&gt;
&lt;li&gt;making software more proactive;&lt;/li&gt;
&lt;li&gt;strengthening security, reliability, permissions, and governance; and&lt;/li&gt;
&lt;li&gt;learning which product choices lead to outcomes such as a better workflow or a growing business.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lovable had already been moving in this direction. In May, it wrote that &lt;a href="https://lovable.dev/blog/building-is-just-the-beginning-introducing-discoverability" rel="noopener noreferrer"&gt;“building is just the beginning”&lt;/a&gt; when it added search and AI-discoverability tools. In June, it introduced &lt;a href="https://lovable.dev/blog/how-lovable-protects-your-apps-automatically" rel="noopener noreferrer"&gt;automatic security scanning before publication&lt;/a&gt;, while clearly noting that a basic scan does not catch every application-specific logic flaw.&lt;/p&gt;

&lt;p&gt;The pattern is hard to miss.&lt;/p&gt;

&lt;p&gt;Generating version one is becoming cheaper and faster. Reaching users, preserving trust, operating the workflow, learning from real behavior, and keeping the app useful are becoming a larger share of the actual job.&lt;/p&gt;

&lt;h2&gt;
  
  
  The beginner mistake: treating first output as finished value
&lt;/h2&gt;

&lt;p&gt;AI coding tools are very good at creating the emotional experience of progress.&lt;/p&gt;

&lt;p&gt;You describe an app. The tool creates a landing page, dashboard, login screen, database, animated button, and three tasteful gradients. Suddenly you are staring at enough software to make your nervous system ring a tiny startup bell.&lt;/p&gt;

&lt;p&gt;But a collection of screens is not a product loop.&lt;/p&gt;

&lt;p&gt;Suppose you build a study-planning app. A beginner brief often sounds like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Create a dashboard where students can add classes, assignments, study sessions, notes, reminders, goals, and an AI tutor.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That describes inventory. It does not describe value.&lt;/p&gt;

&lt;p&gt;A value loop sounds different:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When a student receives a new assignment, they enter its due date and expected effort. The app turns it into a realistic study plan, saves completed sessions, shows whether the student is falling behind, and adjusts the next plan when they return.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now we know why the user opens the app, what they provide, what the system changes, what useful result appears, what must persist, and why the user may come back.&lt;/p&gt;

&lt;p&gt;The second version gives AI an architecture to serve. The first version gives it a furniture catalog.&lt;/p&gt;

&lt;h2&gt;
  
  
  The six-part value-loop contract
&lt;/h2&gt;

&lt;p&gt;Before coding, I would write this contract:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trigger:
[What happens in the user’s life that makes them open the app?]

Input:
[What information, choice, or action does the user provide?]

Transformation:
[What does the app calculate, organize, create, compare, or coordinate?]

Useful result:
[What can the user do or understand now that they could not before?]

Saved state:
[What must remain true when the user closes and reopens the app?]

Return reason:
[What new event, progress, change, or unfinished job brings the user back?]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not another giant product-requirements document. It is six answers that force the app to behave like a system instead of a slide deck.&lt;/p&gt;

&lt;p&gt;Here is the study-planner example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Trigger:
A student receives an assignment with a real deadline.

Input:
Due date, estimated effort, available study windows, and confidence level.

Transformation:
The app divides the work into sessions that fit the available calendar.

Useful result:
The student sees the next realistic study action instead of a vague deadline.

Saved state:
Completed sessions, changed availability, and remaining effort survive reopening.

Return reason:
The student finishes a session, misses one, or receives another assignment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once this exists, screens and data stop being arbitrary.&lt;/p&gt;

&lt;p&gt;You probably need an assignment form because the input requires it. You need a schedule view because the useful result requires it. You need persistence because completed sessions change the next recommendation. You may need reminders because a future event reopens the loop.&lt;/p&gt;

&lt;p&gt;You probably do not need a social feed, seven profile themes, or an AI mascot that looks concerned about midterms.&lt;/p&gt;

&lt;p&gt;The loop earns the architecture.&lt;/p&gt;

&lt;p&gt;If you want guided questions for turning an idea into this contract, the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; are free. Start with the idea and scope prompts, then ask your AI tool to translate the answers into one complete value loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn the loop into one vertical build
&lt;/h2&gt;

&lt;p&gt;The next mistake is building each technical layer separately.&lt;/p&gt;

&lt;p&gt;Beginners often ask AI to make every screen, then every database table, then every API, then every test. That can produce a large pile of parts without proving that the user can complete the promised job.&lt;/p&gt;

&lt;p&gt;Build one thin path through the full loop instead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create the trigger state.&lt;/li&gt;
&lt;li&gt;Let the user provide the minimum real input.&lt;/li&gt;
&lt;li&gt;Run the transformation with honest data.&lt;/li&gt;
&lt;li&gt;Show the useful result.&lt;/li&gt;
&lt;li&gt;Save the state.&lt;/li&gt;
&lt;li&gt;Close and reopen the app.&lt;/li&gt;
&lt;li&gt;Trigger the return event and confirm that the next result reflects what happened before.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For the study planner, do not begin with ten assignment types and five calendar views. Add one assignment. Generate one plan. Complete one session. Reopen the app. Adjust the remaining plan.&lt;/p&gt;

&lt;p&gt;That path tells you more than twenty polished mockups because it tests whether the product remembers enough to become useful again.&lt;/p&gt;

&lt;p&gt;My software engineering training taught me to care about complete workflows, data, verification, and maintenance. My entrepreneurship background taught me the other half: a technically valid workflow still needs to deliver something a person values.&lt;/p&gt;

&lt;p&gt;The value-loop contract connects those two questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to test the loop before adding features
&lt;/h2&gt;

&lt;p&gt;Give the loop five tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The trigger test
&lt;/h3&gt;

&lt;p&gt;Can you name the real-world moment that causes the user to open the app?&lt;/p&gt;

&lt;p&gt;“They want productivity” is not a trigger. “They received an assignment and do not know how to fit it into the week” is.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The result test
&lt;/h3&gt;

&lt;p&gt;Can the user point to a changed condition after one session?&lt;/p&gt;

&lt;p&gt;The assignment is organized. The invoice is sent. The route is planned. The recording is exported. The bug is reproduced. Something became different.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The persistence test
&lt;/h3&gt;

&lt;p&gt;Does closing and reopening preserve the facts that the next decision depends on?&lt;/p&gt;

&lt;p&gt;If the app forgets completed work, ownership, preferences, or history, the loop restarts as amnesia with a logo.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The return test
&lt;/h3&gt;

&lt;p&gt;Is there an honest reason to come back?&lt;/p&gt;

&lt;p&gt;Some utilities are intentionally one-shot, and that is fine. A file converter does not need to invent a friendship streak. But if your business model assumes repeated use, the product needs a repeated job.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The failure test
&lt;/h3&gt;

&lt;p&gt;What happens when the transformation fails?&lt;/p&gt;

&lt;p&gt;If an AI model, payment service, API, or network call breaks, keep the input, explain the state, and give the user a safe next action. A broken loop should degrade honestly, not erase the user’s work and stare at them through a spinner.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff: a clear loop can make the idea feel smaller
&lt;/h2&gt;

&lt;p&gt;This method can feel disappointing because it removes decorative ambition.&lt;/p&gt;

&lt;p&gt;Your “AI platform for students” may become “a tool that turns one assignment into an adjustable study plan.” Your “freelancer operating system” may become “a tool that turns an approved scope change into a revised milestone and client update.”&lt;/p&gt;

&lt;p&gt;That is not automatically a weakness.&lt;/p&gt;

&lt;p&gt;A clear loop creates something you can build, test, explain, and improve. If the loop works, you can add adjacent loops later. If it fails, you learn before constructing an entire software suburb around it.&lt;/p&gt;

&lt;p&gt;The limitation is that not every valuable product depends on frequent return. Calculators, migration tools, generators, and one-time utilities can succeed with occasional use or a transaction-based model. Do not bolt on fake retention merely because subscription software is fashionable.&lt;/p&gt;

&lt;p&gt;The rule is not “make everyone come back every day.”&lt;/p&gt;

&lt;p&gt;The rule is “know whether your product needs a return loop, and design the business honestly around the answer.”&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should do next
&lt;/h2&gt;

&lt;p&gt;Before your next AI coding session, write the six lines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;trigger;&lt;/li&gt;
&lt;li&gt;input;&lt;/li&gt;
&lt;li&gt;transformation;&lt;/li&gt;
&lt;li&gt;useful result;&lt;/li&gt;
&lt;li&gt;saved state; and&lt;/li&gt;
&lt;li&gt;return reason.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then ask AI to produce the smallest vertical build that proves all six. Do not approve extra screens until the tool can explain which part of the loop each screen serves.&lt;/p&gt;

&lt;p&gt;Lovable’s funding round is evidence that investors see enormous opportunity in making software creation accessible. Lovable’s own roadmap is also a reminder that creation is only the opening move. The platform is investing in the machinery that helps software reach people, operate safely, connect to real work, and produce measurable outcomes.&lt;/p&gt;

&lt;p&gt;Your first app does not need Lovable’s valuation, feature surface, or 60 million sibling projects.&lt;/p&gt;

&lt;p&gt;It needs one loop that works twice.&lt;/p&gt;

&lt;p&gt;For the immediate guided action, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; is free and helps you turn a rough idea into a controlled first build.&lt;/p&gt;

&lt;p&gt;For the organized path from idea through scope, stack choice, prompting, QA, deployment, and publication, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt; is the deeper build-along field manual.&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Cloudflare Kitesurf: What Beginners Should Learn About AI App Tradeoffs In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Tue, 11 Aug 2026 00:55:20 +0000</pubDate>
      <link>https://dev.to/marcusykim/cloudflare-kitesurf-what-beginners-should-learn-about-ai-app-tradeoffs-in-2026-1mbo</link>
      <guid>https://dev.to/marcusykim/cloudflare-kitesurf-what-beginners-should-learn-about-ai-app-tradeoffs-in-2026-1mbo</guid>
      <description>&lt;p&gt;On August 6, 2026, Cloudflare announced &lt;a href="https://blog.cloudflare.com/kitesurf/" rel="noopener noreferrer"&gt;Kitesurf&lt;/a&gt;, a browser built for AI agents instead of people. The project was only twelve weeks old, ran on Cloudflare Workers, and was already available in beta through Browser Run.&lt;/p&gt;

&lt;p&gt;The headline sounds like another story about AI making software faster. The more useful detail is that Kitesurf was not faster at everything.&lt;/p&gt;

&lt;p&gt;In Cloudflare’s published benchmark, Kitesurf used much less CPU and memory than a warm Chromium pool for screenshot and HTML-extraction jobs. It was also around 1.7 to 1.8 times slower in wall-clock time for those same jobs. It could handle many agent workflows, but Cloudflare explicitly said it was not yet the right choice for video, WebGL, some bot-challenge handshakes, or long authenticated sessions that need persistent state.&lt;/p&gt;

&lt;p&gt;That is not a contradiction. It is a product decision.&lt;/p&gt;

&lt;p&gt;Cloudflare did not build “a better browser” in every possible dimension. It built a browser for a narrower customer, optimized the resources that mattered to that customer, accepted visible losses elsewhere, and kept Chromium as the fallback.&lt;/p&gt;

&lt;p&gt;The beginner lesson is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your first app does not need to win every comparison. It needs to make the right trade on purpose.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are still turning a rough idea into a controlled first build, my &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; are free. They help you define the user, job, boundaries, and proof before an AI coding tool starts inventing requirements for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Cloudflare actually changed
&lt;/h2&gt;

&lt;p&gt;Most browsers carry requirements accumulated for human use: tabs, extensions, device synchronization, smooth visual interaction, broad compatibility, persistent sessions, video, and much more.&lt;/p&gt;

&lt;p&gt;AI agents have a different job. They may need to load a page, inspect its structure, extract content, take a screenshot, or produce a PDF. For that work, CPU, memory, isolation, scale, and machine-readable output can matter more than a perfectly smooth human browsing experience.&lt;/p&gt;

&lt;p&gt;Kitesurf reflects that distinction. It uses pieces of the modular &lt;a href="https://github.com/DioxusLabs/blitz" rel="noopener noreferrer"&gt;Blitz HTML/CSS rendering engine&lt;/a&gt;, runs its components in isolated Workers, and exposes enough of the Chrome DevTools Protocol for compatible automation tools. Cloudflare reported that it already passed more than 215,000 tests from the &lt;a href="https://github.com/web-platform-tests/wpt" rel="noopener noreferrer"&gt;Web Platform Tests project&lt;/a&gt;, then added integration and visual-regression tests against real sites because standards conformance alone could not prove the whole job.&lt;/p&gt;

&lt;p&gt;Cloudflare’s own numbers make the trade visible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Screenshot CPU use: 3.1 times lower than Chromium in the published test.&lt;/li&gt;
&lt;li&gt;HTML-extraction CPU use: 3.8 times lower.&lt;/li&gt;
&lt;li&gt;Screenshot memory use: 4.7 times lower.&lt;/li&gt;
&lt;li&gt;HTML-extraction memory use: 7 times lower.&lt;/li&gt;
&lt;li&gt;Screenshot wall time: 1.8 times slower.&lt;/li&gt;
&lt;li&gt;HTML-extraction wall time: 1.7 times slower.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those results came from five Browser Run Quick Action runs across a 14-URL corpus, so they are a product benchmark, not a universal law of browsers. Still, they expose a decision most beginner builders hide from themselves: “fast” is not one thing.&lt;/p&gt;

&lt;p&gt;Fast for whom?&lt;/p&gt;

&lt;p&gt;Fast in which resource?&lt;/p&gt;

&lt;p&gt;Fast at what cost?&lt;/p&gt;

&lt;h2&gt;
  
  
  The mistake beginners make: asking AI for “the best”
&lt;/h2&gt;

&lt;p&gt;When you ask an AI coding tool to make an app “fast, scalable, beautiful, secure, simple, flexible, and production-ready,” it will usually agree with the entire sentence. AI is extremely polite about impossible product briefs.&lt;/p&gt;

&lt;p&gt;The problem appears later. Every extra priority competes for architecture, time, money, interface space, testing, or maintenance.&lt;/p&gt;

&lt;p&gt;A real product decision sounds less impressive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make the main workflow faster, even if an advanced workflow waits.&lt;/li&gt;
&lt;li&gt;Reduce memory, even if a one-shot task takes slightly longer.&lt;/li&gt;
&lt;li&gt;Support one platform well before supporting three platforms awkwardly.&lt;/li&gt;
&lt;li&gt;Keep the first data model simple, even if a future feature needs a migration.&lt;/li&gt;
&lt;li&gt;Preserve an honest fallback instead of pretending every edge case is solved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not settling for bad software. It is refusing to make a fake promise to yourself.&lt;/p&gt;

&lt;p&gt;I came into software with an entrepreneurship degree and later earned a master’s degree in software engineering. Kitesurf sits directly where those two disciplines meet. Engineering asks, “Can we build it?” Product judgment asks, “Which result is worth optimizing, and which compromise will the user accept?”&lt;/p&gt;

&lt;p&gt;Your AI tool can help with the first question. You still own the second.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff contract I would write before coding
&lt;/h2&gt;

&lt;p&gt;Before your next build, give the project a six-line tradeoff contract.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Target user and job:
[Who needs to accomplish what?]

Optimize:
[Which one measurable result should improve?]

Accept:
[Which loss or limitation is acceptable in version one?]

Protect:
[What must remain correct even while optimizing?]

Fallback:
[What happens when the optimized path cannot do the job?]

Proof:
[Which small benchmark or user flow will show whether the trade worked?]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is more useful than telling AI to “keep it simple.” Simple is an opinion. A tradeoff contract gives the tool a decision boundary.&lt;/p&gt;

&lt;p&gt;Suppose you are building a meal-planning app. Your contract might say:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Target user and job:
A busy beginner creates one editable weekly meal plan from saved preferences.

Optimize:
Time from opening the app to receiving an editable plan.

Accept:
No social feed, grocery delivery integration, or household collaboration in version one.

Protect:
Dietary exclusions must survive every generated plan and every edit.

Fallback:
If generation fails, preserve the user’s inputs and offer a manual template.

Proof:
Five test users can create, edit, save, reopen, and export one plan.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now AI has something it can reason against. If it proposes a social feed, the contract rejects it. If it makes generation faster by dropping dietary exclusions, the contract rejects it. If the model call fails and destroys the form, the fallback rejects it.&lt;/p&gt;

&lt;p&gt;The app is not merely smaller. It is smaller in service of a chosen result.&lt;/p&gt;

&lt;p&gt;If you want guided language for writing that first boundary, the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; are free. Use the planning prompts to define the job, exclusions, and proof, then turn the answers into your tradeoff contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why tests still matter when the tradeoff is intentional
&lt;/h2&gt;

&lt;p&gt;A deliberate compromise is not permission to guess.&lt;/p&gt;

&lt;p&gt;Cloudflare used the Web Platform Tests suite to give AI agents concrete conformance goals. Humans still curated which features came next, reviewed the agents’ approaches, and added real-site and visual tests where the standards suite was not enough.&lt;/p&gt;

&lt;p&gt;That workflow matters because optimization can cheat.&lt;/p&gt;

&lt;p&gt;You can make a page load faster by removing the content the user needed. You can reduce a database bill by failing to save data. You can simplify onboarding by hiding every setting and leaving the user trapped in the default path.&lt;/p&gt;

&lt;p&gt;Your proof line prevents that kind of victory.&lt;/p&gt;

&lt;p&gt;For a beginner app, you do not need 215,000 tests. You need a compact comparison:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Record the current result for the target workflow.&lt;/li&gt;
&lt;li&gt;Make one change intended to improve one metric.&lt;/li&gt;
&lt;li&gt;Re-run the target workflow.&lt;/li&gt;
&lt;li&gt;Re-run the protected behavior.&lt;/li&gt;
&lt;li&gt;Trigger the fallback on purpose.&lt;/li&gt;
&lt;li&gt;Keep the change only if the full trade still makes sense.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is where AI becomes leverage instead of a slot machine. The tool can implement and measure quickly, but it cannot quietly redefine a win.&lt;/p&gt;

&lt;h2&gt;
  
  
  The limitation: specialization can cut the wrong thing
&lt;/h2&gt;

&lt;p&gt;Kitesurf’s limitations are part of the lesson, not an embarrassing footnote.&lt;/p&gt;

&lt;p&gt;If your task needs video, WebGL, broad pixel fidelity, a persistent authenticated session, or compatibility with a difficult site, Kitesurf may be the wrong browser today. Cloudflare’s &lt;a href="https://developers.cloudflare.com/browser-run/" rel="noopener noreferrer"&gt;Browser Run documentation&lt;/a&gt; still supports Chromium-based sessions and multiple integration methods. The fallback exists because the specialized path does not cover every job.&lt;/p&gt;

&lt;p&gt;Your first app needs the same humility.&lt;/p&gt;

&lt;p&gt;Do not remove a feature merely because it is expensive. Remove it only if the target user can still complete the promised job. Do not optimize a backend bill by making the app unreliable. Do not simplify a screen by hiding the one control people actually came to use.&lt;/p&gt;

&lt;p&gt;The tradeoff contract should make a product narrower, not pointless.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should do next
&lt;/h2&gt;

&lt;p&gt;Before your next AI coding session, stop asking for the best version of everything.&lt;/p&gt;

&lt;p&gt;Write six lines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the target user and job;&lt;/li&gt;
&lt;li&gt;the result you will optimize;&lt;/li&gt;
&lt;li&gt;the loss you will accept;&lt;/li&gt;
&lt;li&gt;the behavior you will protect;&lt;/li&gt;
&lt;li&gt;the fallback you will keep; and&lt;/li&gt;
&lt;li&gt;the proof that will judge the trade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then ask AI to challenge the contract before it writes code. If the tool cannot explain what gets better, what gets worse, and how the user still completes the job, the build is not ready to begin.&lt;/p&gt;

&lt;p&gt;Kitesurf is useful because Cloudflare did not pretend a browser could be cheaper, faster, lighter, more compatible, more persistent, and more visually complete all at once. It chose a job and made the exchange visible.&lt;/p&gt;

&lt;p&gt;That is a durable beginner rule: &lt;strong&gt;a controlled first app is not the app with no compromises. It is the app whose compromises have names.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the immediate guided action, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; is free and helps you turn a rough idea into a bounded first build.&lt;/p&gt;

&lt;p&gt;For the organized path from idea through scope, stack choice, prompting, QA, deployment, and publication, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt; is the deeper build-along field manual.&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>GitHub Copilot’s New /worktree and /rewind Commands: A Beginner’s AI Coding Experiment Checklist for 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Sat, 08 Aug 2026 18:39:31 +0000</pubDate>
      <link>https://dev.to/marcusykim/github-copilots-new-worktree-and-rewind-commands-a-beginners-ai-coding-experiment-checklist-1p2c</link>
      <guid>https://dev.to/marcusykim/github-copilots-new-worktree-and-rewind-commands-a-beginners-ai-coding-experiment-checklist-1p2c</guid>
      <description>&lt;p&gt;On August 7, 2026, GitHub published a Copilot update that looked like a bag of small conveniences: a &lt;code&gt;/worktree&lt;/code&gt; command for isolated code experiments, &lt;code&gt;/rewind&lt;/code&gt; for restoring a session and its files, &lt;code&gt;/side&lt;/code&gt; in the Copilot app, and &lt;code&gt;/btw&lt;/code&gt; in VS Code for asking a parallel question without interrupting the main task.&lt;/p&gt;

&lt;p&gt;I think those features point to one bigger problem in AI-assisted coding:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exploration contaminates the real project surprisingly fast.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You ask an innocent question about a different database. The agent edits three configuration files to “show you.” You ask whether the screen would be cleaner with another navigation pattern. The agent starts refactoring the current layout. Ten minutes later, your working app has become a museum of half-decisions.&lt;/p&gt;

&lt;p&gt;The beginner mistake is not exploring. Exploration is useful. The mistake is exploring in the same lane where your last known-good version lives.&lt;/p&gt;

&lt;p&gt;The durable lesson behind GitHub’s update is simple: separate a question, an experiment, and a product change before you ask AI to act.&lt;/p&gt;

&lt;h2&gt;
  
  
  What GitHub actually changed
&lt;/h2&gt;

&lt;p&gt;GitHub’s &lt;a href="https://github.blog/changelog/2026-08-07-github-copilot-weekly-releases-august-3/" rel="noopener noreferrer"&gt;August 7 weekly release&lt;/a&gt; added several ways to keep work from colliding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copilot CLI’s experimental &lt;code&gt;/worktree&lt;/code&gt; command creates an isolated Git worktree from the current &lt;code&gt;HEAD&lt;/code&gt; and starts a separate conversation there.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/rewind&lt;/code&gt; can return a conversation and its file state to an earlier point without requiring Git in every mode.&lt;/li&gt;
&lt;li&gt;The Copilot app’s &lt;code&gt;/side&lt;/code&gt; and VS Code’s &lt;code&gt;/btw&lt;/code&gt; let you ask a related question without redirecting the main task.&lt;/li&gt;
&lt;li&gt;VS Code 1.132 also added element-level browser feedback, so a builder can point at the exact page element that needs attention instead of asking for a broad redesign.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not proof that an agent can safely run wild. They are controls for keeping different kinds of work separate.&lt;/p&gt;

&lt;p&gt;If you are still turning a rough app idea into one controlled first build, my &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; are free. They help you define the job, boundaries, and proof before an AI coding tool starts changing files.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three lanes I would give every beginner
&lt;/h2&gt;

&lt;p&gt;You do not need enterprise process. You need three labels.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Question lane
&lt;/h3&gt;

&lt;p&gt;Use this when you want an explanation, comparison, or second opinion but do not want files changed.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;“What are the tradeoffs between a tab bar and a navigation drawer for this app?”&lt;/li&gt;
&lt;li&gt;“Why did this test fail?”&lt;/li&gt;
&lt;li&gt;“Would local storage still work if I add accounts later?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output is knowledge. It is not permission to edit.&lt;/p&gt;

&lt;p&gt;A side chat is helpful here because it can share enough context to answer the question without hijacking the agent’s current turn. But the tool is optional. The operating rule matters more: &lt;strong&gt;a question stays read-only until you explicitly promote one answer into an experiment.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Experiment lane
&lt;/h3&gt;

&lt;p&gt;Use this when the answer must be tested in code.&lt;/p&gt;

&lt;p&gt;An experiment should have its own branch or worktree, one hypothesis, and a discard option. The &lt;a href="https://git-scm.com/docs/git-worktree.html" rel="noopener noreferrer"&gt;official Git documentation&lt;/a&gt; describes worktrees as multiple working trees attached to one repository, each with its own checked-out state. It specifically notes that a throwaway worktree is useful for experimental changes that should not disturb current development.&lt;/p&gt;

&lt;p&gt;That is perfect for questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can this list render 1,000 records without stuttering?&lt;/li&gt;
&lt;li&gt;Can I replace this API client without changing the screen contract?&lt;/li&gt;
&lt;li&gt;Does the new layout make the primary action clearer on a small phone?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The experiment exists to answer one question. It does not earn a place in the product merely because the code runs.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Product lane
&lt;/h3&gt;

&lt;p&gt;This is your last known-good version plus changes that passed a stated check.&lt;/p&gt;

&lt;p&gt;The product lane should be boring. It should not contain abandoned files from three possible stacks, half of a visual redesign, or a package that was installed “just to see.”&lt;/p&gt;

&lt;p&gt;Only promote an experiment after you can name:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the user outcome it improves;&lt;/li&gt;
&lt;li&gt;the exact files or behavior it changes;&lt;/li&gt;
&lt;li&gt;the evidence that it works; and&lt;/li&gt;
&lt;li&gt;the experiment files you are deliberately leaving behind.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The seven-step AI coding experiment checklist
&lt;/h2&gt;

&lt;p&gt;Here is the checklist I would use before letting an AI tool explore a real app.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Mark the last known-good state
&lt;/h3&gt;

&lt;p&gt;Before the experiment, make sure you can identify the version that currently works. For a Git project, that usually means a clean status and a named commit.&lt;/p&gt;

&lt;p&gt;Write down one sentence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Last known-good proof: [workflow] passed at [commit or checkpoint].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you cannot identify the starting point, you will not know whether the experiment improved the app or merely changed it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Write an experiment card
&lt;/h3&gt;

&lt;p&gt;Use this tiny template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question:
[What are we trying to learn?]

Allowed change:
[Files, screen, component, or service the experiment may touch]

Must not change:
[Working behavior that must remain intact]

Pass evidence:
[Visible result, test, timing, or user-flow proof]

Exit decision:
[Merge, revise, or discard]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is more useful than “try another approach.” It gives the AI a finish line and gives you a way to reject an impressive detour.&lt;/p&gt;

&lt;p&gt;If you want guided language for defining those boundaries, use the free &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; and turn the relevant planning prompt into your experiment card.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Decide whether the task needs code
&lt;/h3&gt;

&lt;p&gt;Keep comparisons and explanations in the question lane. Move to an isolated experiment only when the uncertainty requires a running result.&lt;/p&gt;

&lt;p&gt;This sounds obvious, but AI tools make editing so easy that builders use code changes as a substitute for thinking. You do not need to install a second backend to understand its tradeoffs. You need an experiment only when documentation and reasoning cannot answer the product question.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Isolate the file changes
&lt;/h3&gt;

&lt;p&gt;Create a separate worktree or branch before the agent edits. GitHub’s current &lt;a href="https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference" rel="noopener noreferrer"&gt;Copilot CLI reference&lt;/a&gt; says &lt;code&gt;/worktree&lt;/code&gt; leaves uncommitted changes in the current worktree and begins the separate task from &lt;code&gt;HEAD&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That detail matters: isolation is strongest when the starting point is intentional. If your main workspace already contains five unrelated unfinished changes, an experimental branch does not magically clarify them.&lt;/p&gt;

&lt;p&gt;One experiment should have one name. “test-auth-error-copy” is better than “ai-idea-4-final-new.” Your future self is already tired. Be kind to that person.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Ask side questions without changing the mission
&lt;/h3&gt;

&lt;p&gt;During the experiment, questions will appear. Ask them without silently replacing the original goal.&lt;/p&gt;

&lt;p&gt;Keep the experiment card visible and use this sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Answer this as a side question. Do not edit files or change the experiment goal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;GitHub and VS Code now provide dedicated side-question surfaces, but this sentence works as a policy in any capable AI coding tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Review the experiment as a decision, not a demo
&lt;/h3&gt;

&lt;p&gt;Run the pass evidence from the card. Then compare the experiment with the last known-good state.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the target workflow improve?&lt;/li&gt;
&lt;li&gt;Did a protected behavior change?&lt;/li&gt;
&lt;li&gt;Did the experiment add a dependency, migration, or maintenance burden?&lt;/li&gt;
&lt;li&gt;Can I explain the diff without asking the agent to explain its own explanation?&lt;/li&gt;
&lt;li&gt;Would I choose this result if the code had taken a human two days to write?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last question removes the “AI made it quickly, so we may as well keep it” bias.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Merge deliberately or discard completely
&lt;/h3&gt;

&lt;p&gt;There are three honest outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Merge:&lt;/strong&gt; the experiment passed and the diff belongs in the product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revise:&lt;/strong&gt; the idea is useful, but the implementation or proof is incomplete.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discard:&lt;/strong&gt; the question was answered and the product should remain unchanged.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Discarding code is not wasted work. The experiment bought information without charging the main branch for maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why /rewind is a recovery tool, not a backup plan
&lt;/h2&gt;

&lt;p&gt;The new &lt;code&gt;/rewind&lt;/code&gt; command sounds comforting, but GitHub’s &lt;a href="https://docs.github.com/en/copilot/how-tos/copilot-cli/use-copilot-cli/roll-back-changes" rel="noopener noreferrer"&gt;rollback documentation&lt;/a&gt; includes an important warning: a Git-based rewind can restore the entire workspace snapshot, including manual edits and new files created after that point. Rewinding also removes later session history, and the rewind itself cannot be undone.&lt;/p&gt;

&lt;p&gt;That is the tradeoff beginners can miss.&lt;/p&gt;

&lt;p&gt;An undo button is useful. It is not a substitute for a known-good commit, an isolated worktree, or a reviewable diff.&lt;/p&gt;

&lt;p&gt;My rule would be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Isolate before the experiment. Rewind only when you understand what the chosen checkpoint will remove. Verify the repository afterward.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;GitHub recommends checking status, the current commit, and the diff after a rollback. The larger lesson applies to every AI coding tool: never treat a recovery message as proof that your project state is correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should do next
&lt;/h2&gt;

&lt;p&gt;Before your next AI coding experiment, draw three lines in your task note:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question: What do I need to understand?
Experiment: What isolated change would prove it?
Product: What evidence would earn the change a merge?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then refuse to skip a line.&lt;/p&gt;

&lt;p&gt;That habit survives every tool update. GitHub may rename a command. Another AI coding tool may use sessions, branches, sandboxes, or checkpoints. The control stays the same: &lt;strong&gt;questions may inform experiments, and experiments may inform the product, but neither gets to become the product by accident.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the immediate guided action, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; is free and helps you turn a rough idea into bounded, testable work.&lt;/p&gt;

&lt;p&gt;For the organized path from idea through architecture, QA, deployment, and publication, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt; is the deeper build-along field manual.&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>What OpenAI’s GPT-5.6 Rollout Can Teach Beginners About Choosing AI Model Effort for AI App Builds</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Thu, 06 Aug 2026 18:10:53 +0000</pubDate>
      <link>https://dev.to/marcusykim/what-openais-gpt-56-rollout-can-teach-beginners-about-choosing-ai-model-effort-for-ai-app-builds-19fm</link>
      <guid>https://dev.to/marcusykim/what-openais-gpt-56-rollout-can-teach-beginners-about-choosing-ai-model-effort-for-ai-app-builds-19fm</guid>
      <description>&lt;p&gt;On August 6, 2026, OpenAI rolled out a practical update that looked small on the surface and big in implication for builders like you: &lt;strong&gt;GPT-5.6 Sol is now in ChatGPT with multiple reasoning settings, and GPT-5.6 Luna is becoming the default for Free and Go users&lt;/strong&gt;.[^1] The same update also added a dedicated Think flow for harder questions on some plans and made the newer reasoning model available as a real, selectable option for paid users instead of just a hidden behavior.&lt;/p&gt;

&lt;p&gt;The line I noticed came from the same release: ChatGPT now gives you multiple levels of reasoning effort, while &lt;strong&gt;Work and Codex are not changing in that update&lt;/strong&gt;.[^2] That may sound like product detail noise, but for beginner builders it is the core lesson:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model choice is not just "better vs worse". It is a control decision.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want a clear starting point before your first AI build, use the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; first—these prompts are free and force you to define intent, scope, constraints, and success tests before your model starts iterating for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changed on August 6, 2026
&lt;/h2&gt;

&lt;p&gt;I won’t call the update a revolution. It is better described as a better operating interface for a familiar problem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI introduced a new family with Sol, Terra, and Luna roles for different cost and speed positions.&lt;/li&gt;
&lt;li&gt;In chat, users can move from default behavior to more deliberate reasoning modes.&lt;/li&gt;
&lt;li&gt;For many users, Luna becomes the cheaper/high-volume default path while Sol handles harder reasoning.&lt;/li&gt;
&lt;li&gt;At the API layer, model availability differs by product and plan, and Luna appears as a cost-efficient model for suitable work.[^3][^4]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re building with AI every day, this is familiar territory. You already allocate money between dev tools and hosting; now you are also allocating model effort. But beginners frequently make this mistake: they optimize only for speed or novelty and leave reliability as an afterthought.&lt;/p&gt;

&lt;p&gt;The more useful way to think about it is as a &lt;strong&gt;build pipeline&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast mode (low reasoning)&lt;/strong&gt; is great for drafting and small repetitive work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Higher reasoning&lt;/strong&gt; is for architecture decisions, edge cases, and code paths where one wrong assumption becomes user-visible damage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Higher cost and slower modes&lt;/strong&gt; should be reserved for the irreversible moments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the same principle I use when writing production scripts or database migrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why beginner builders usually misunderstand model controls
&lt;/h2&gt;

&lt;p&gt;Most beginners hear about advanced model modes and think they are merely a “quality slider.” I think the deeper misunderstanding is this: model controls are treated like UI preferences, not like &lt;strong&gt;engineering controls&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is what I see repeatedly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with high reasoning because “I want better answers.”&lt;/li&gt;
&lt;li&gt;Hit speed limits or token caps.&lt;/li&gt;
&lt;li&gt;Spend more time switching models than adding tests.&lt;/li&gt;
&lt;li&gt;Lose traceability because every response is a different quality/cost strategy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, you are making model settings a post-hoc reaction instead of a pre-planned policy.&lt;/p&gt;

&lt;p&gt;That becomes expensive quickly, especially when building full-stack features.&lt;/p&gt;

&lt;p&gt;When I worked on prior projects, the most stable AI workflows were built around a simple guardrail: do not let one pass of the model own a critical action by itself. For example, for a checkout flow, authentication layer, or migration script, I ask for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;first-pass implementation,&lt;/li&gt;
&lt;li&gt;concise reasoning summary,&lt;/li&gt;
&lt;li&gt;a manual quick test checklist,&lt;/li&gt;
&lt;li&gt;only then the version that may affect real users.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can reuse the same structure now with model effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  The transfer from model rollout to your app architecture
&lt;/h2&gt;

&lt;p&gt;The GPT-5.6 launch is useful because it mirrors the same architecture decision you already need for any builder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Who should run with default behavior?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Who can run with high effort?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Who is allowed to touch irreversible state?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you build an app feature using an AI assistant and skip this question, you’re effectively giving your “draft mode” and your “publish mode” the same key.&lt;/p&gt;

&lt;p&gt;That is exactly the beginner trap I saw in many fast builds last year: we spend effort optimizing the first response quality and then skip the separate verification gate.&lt;/p&gt;

&lt;p&gt;Your job is not to choose one perfect model for everything.&lt;/p&gt;

&lt;p&gt;Your job is to assign each task a reasonable budget:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use cheaper/fast modes for exploration,&lt;/li&gt;
&lt;li&gt;use stronger reasoning for schema, security-sensitive logic, and cross-file changes,&lt;/li&gt;
&lt;li&gt;use the strongest mode only when the output is about to cross a user-facing boundary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would call this &lt;strong&gt;effort stratification&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical lesson: choose by consequence, not by habit
&lt;/h2&gt;

&lt;p&gt;When GPT-5.6 was announced, it was tempting to call it a “smarter model” update only. But the practical lesson for you is older and sharper: &lt;strong&gt;you should make consequence the first axis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ask this before coding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the exact consequence if this output is wrong?&lt;/li&gt;
&lt;li&gt;How expensive is a revision if it is wrong?&lt;/li&gt;
&lt;li&gt;How easy is rollback?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can answer those three questions, model selection is no longer random. For a beginner builder, that means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;safe mode task&lt;/strong&gt; (notes, scaffolding, small components) can use default response behavior,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;decision task&lt;/strong&gt; (data relationships, authentication flow, migration logic) gets higher reasoning,&lt;/li&gt;
&lt;li&gt;a &lt;strong&gt;launch task&lt;/strong&gt; (payment flow, permissions, publish pipeline) gets your strictest review and the most expensive reasoning mode you are willing to pay for.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The release notes say the Work experience has specific model availability behavior and that the chat layer does not change all modes at once.[^2] That split is important because it tells you OpenAI is building this as a product of contexts, not one monolithic “best model for everything.”&lt;/p&gt;

&lt;p&gt;For beginner app projects, that context split is healthy.&lt;/p&gt;

&lt;p&gt;I have a phrase I use in my own planning prompts: &lt;strong&gt;prepare cheaply, validate carefully, execute only when the cost of failure is accepted.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff you cannot skip
&lt;/h2&gt;

&lt;p&gt;There is a tradeoff in every model strategy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High reasoning can improve quality, but it increases cost and can increase response latency.&lt;/li&gt;
&lt;li&gt;Low effort is fast and cheap, but it can overfit to likely answers and miss hidden assumptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the point is not “pick the highest reasoning model always.”&lt;/p&gt;

&lt;p&gt;The point is to &lt;strong&gt;use the tool’s own cost/quality knobs as part of your architecture&lt;/strong&gt;, the same way you choose test environment, deployment strategy, and data model.&lt;/p&gt;

&lt;p&gt;When you do this well, your AI-assisted workflow becomes repeatable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;you get faster first drafts,&lt;/li&gt;
&lt;li&gt;cleaner checkpoints,&lt;/li&gt;
&lt;li&gt;fewer emergency rewrites after wrong assumptions,&lt;/li&gt;
&lt;li&gt;and a clearer signal when to ask for human review.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A beginner workflow you can use this week
&lt;/h2&gt;

&lt;p&gt;To turn this from theory into a habit, try this minimal 5-minute workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with a one-sentence goal.&lt;/li&gt;
&lt;li&gt;Map each output into one of three consequence buckets: Draft, Validate, or Release.&lt;/li&gt;
&lt;li&gt;Assign model effort by bucket (fast defaults for Draft, high reasoning for Validate, strongest for Release candidates).&lt;/li&gt;
&lt;li&gt;Record your choice in your task notes.&lt;/li&gt;
&lt;li&gt;Require a visible check before moving draft output into release.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want a scaffold for that structure, use the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; first—they are free and they force a project plan before generation starts.&lt;/p&gt;

&lt;p&gt;If you want the full build-and-launch flow—from idea to architecture, QA, and publishing—in one path, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt; gives you the context and workflow layers that make these model choices sustainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do next, as a builder
&lt;/h2&gt;

&lt;p&gt;Don’t wait for your next “bigger model” upgrade to fix your process. The upgrade just exposed a clearer control surface.&lt;/p&gt;

&lt;p&gt;Before your next coding session, make three explicit decisions in writing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which tasks deserve default chat behavior,&lt;/li&gt;
&lt;li&gt;Which tasks require deliberate reasoning,&lt;/li&gt;
&lt;li&gt;Which tasks require the strongest reasoning and a manual release gate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives your AI assistant less freedom than you think—and more speed where it matters.&lt;/p&gt;

&lt;p&gt;If you do nothing else after reading this, at least add a one-line preface in your own prompts: “Use low-effort mode for drafts, high-effort mode for decisions, and verify before release.” That one sentence is small, but it is the beginning of a real builder discipline.&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>npm's New 2FA Token Rules: What Beginner AI Builders Should Learn About Permissions in 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Mon, 03 Aug 2026 18:37:38 +0000</pubDate>
      <link>https://dev.to/marcusykim/npms-new-2fa-token-rules-what-beginner-ai-builders-should-learn-about-permissions-in-2026-4omc</link>
      <guid>https://dev.to/marcusykim/npms-new-2fa-token-rules-what-beginner-ai-builders-should-learn-about-permissions-in-2026-4omc</guid>
      <description>&lt;p&gt;The most dangerous sentence in an AI-assisted project is not “the code failed.”&lt;/p&gt;

&lt;p&gt;It is “the code worked, so I gave the tool access to everything.”&lt;/p&gt;

&lt;p&gt;On July 31, npm &lt;a href="https://github.blog/changelog/2026-07-31-restricting-npm-bypass-2fa-granular-access-tokens/" rel="noopener noreferrer"&gt;restricted what granular access tokens configured to bypass two-factor authentication can do&lt;/a&gt;. Those tokens can no longer perform sensitive actions such as creating or deleting tokens, changing package access, adding maintainers, or changing trusted-publishing settings. npm says those operations now need an interactive 2FA challenge.&lt;/p&gt;

&lt;p&gt;I did not find a more substantial AI or developer-tool development in the previous 24 hours, so I widened the search window to seven days. This change happened three days ago.&lt;/p&gt;

&lt;p&gt;npm also previewed the next boundary. It plans to remove direct publishing from those bypass-2FA tokens in January 2027. Automation will still be able to read private packages and stage a release, but a maintainer will approve the public release with 2FA.&lt;/p&gt;

&lt;p&gt;That is not just a package-registry detail. It is a useful operating model for anyone building with AI:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let the tool prepare the irreversible action. Do not automatically let it own the irreversible action.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changed
&lt;/h2&gt;

&lt;p&gt;The immediate change applies to npm granular access tokens, not every kind of GitHub or npm credential. A bypass-2FA token can no longer use its convenience to become an account-management master key.&lt;/p&gt;

&lt;p&gt;That closes a nasty chain of possibilities. If an attacker obtained one of those tokens, the token could previously help change maintainers, create more credentials, or alter package access. The problem was not only that the credential had power. It could use that power to create more power.&lt;/p&gt;

&lt;p&gt;The planned publishing change makes the separation even clearer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Automation may build and stage a package.&lt;/li&gt;
&lt;li&gt;A human maintainer sees what is about to become public.&lt;/li&gt;
&lt;li&gt;A separate authenticated approval promotes it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;npm's &lt;a href="https://docs.npmjs.com/trusted-publishers/" rel="noopener noreferrer"&gt;trusted-publishing documentation&lt;/a&gt; recommends short-lived, workflow-specific OIDC credentials instead of long-lived publishing tokens. It also describes a stage-only configuration built around &lt;a href="https://docs.npmjs.com/staged-publishing/" rel="noopener noreferrer"&gt;staged publishing&lt;/a&gt;, in which CI may prepare a release but a maintainer must approve it with 2FA before publication.&lt;/p&gt;

&lt;p&gt;The exact npm setup will not apply to every app. The durable structure does.&lt;/p&gt;

&lt;h2&gt;
  
  
  What beginners may misunderstand about AI permissions
&lt;/h2&gt;

&lt;p&gt;The npm change is about package credentials, not AI coding agents. I am applying its release model to AI-assisted work because the permission problem is the same: a system that can prepare a change does not automatically need the authority to make that change public, bill a customer, delete data, or alter account access.&lt;/p&gt;

&lt;p&gt;Beginners often treat permissions as a binary switch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the AI can do nothing, so every step is slow&lt;/li&gt;
&lt;li&gt;the AI can do everything, so every step is exciting right up until it becomes a crime scene with excellent autocomplete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a better middle.&lt;/p&gt;

&lt;p&gt;Give the tool enough access to create evidence. Keep a separate gate for actions that are difficult to reverse.&lt;/p&gt;

&lt;p&gt;Before you connect more tools, I made the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; free so you can name the user workflow, scope, data, constraints, and proof the AI should produce first.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three-gate workflow: prepare, prove, release
&lt;/h2&gt;

&lt;p&gt;I would divide an AI-assisted release into three gates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 1: Prepare
&lt;/h3&gt;

&lt;p&gt;At this gate, the AI can do a lot.&lt;/p&gt;

&lt;p&gt;It can inspect the repository, edit code, run local tests, generate a build, draft release notes, create a migration plan, and stage a deployment candidate. It can also explain the files it changed and the assumptions it made.&lt;/p&gt;

&lt;p&gt;But “prepare” should end in a reviewable artifact, not a public consequence.&lt;/p&gt;

&lt;p&gt;For a web app, the artifact might be a preview deployment. For a mobile app, it might be an archive or internal test build. For a package, it might be a staged version. For a newsletter, it might be a filled draft with no send permission.&lt;/p&gt;

&lt;p&gt;The tool's job is to move the work from vague intent to inspectable candidate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 2: Prove
&lt;/h3&gt;

&lt;p&gt;Now the candidate has to earn promotion.&lt;/p&gt;

&lt;p&gt;Proof should match the risk. A button-color change may need a screenshot and a quick viewport check. An authentication change may need two accounts, expired-session behavior, password recovery, and permission tests. A database migration needs a backup, a dry run, row-count checks, and a rollback path.&lt;/p&gt;

&lt;p&gt;For most beginner app releases, I would ask for five pieces of evidence:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Change summary:&lt;/strong&gt; what changed in user language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated checks:&lt;/strong&gt; which tests, builds, or linters passed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual journey:&lt;/strong&gt; which real user path was completed from start to finish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failure check:&lt;/strong&gt; what happened with bad input, missing data, or an unavailable service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rollback note:&lt;/strong&gt; how to return to the last known-good state.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your AI coding tool can help produce all five. It should not get to mark its own homework merely because the output contains green checkmarks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gate 3: Release
&lt;/h3&gt;

&lt;p&gt;Release is the shortest gate and the most protected one.&lt;/p&gt;

&lt;p&gt;The release identity should have only the permissions required for that release. Prefer short-lived credentials when the platform supports them. Require a separate confirmation for the action that changes the outside world.&lt;/p&gt;

&lt;p&gt;That might mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;promote a staged package&lt;/li&gt;
&lt;li&gt;deploy the verified commit to production&lt;/li&gt;
&lt;li&gt;submit the tested build to an app store&lt;/li&gt;
&lt;li&gt;run the reviewed database migration&lt;/li&gt;
&lt;li&gt;send the approved email campaign&lt;/li&gt;
&lt;li&gt;switch a payment integration from test mode to live mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important word is &lt;strong&gt;reviewed&lt;/strong&gt;. Release should point to the exact candidate that passed Gate 2. If the code changes after review, it goes back through proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  A beginner permission table
&lt;/h2&gt;

&lt;p&gt;You do not need an enterprise security department to start. Write a small permission table for your project.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;AI may prepare&lt;/th&gt;
&lt;th&gt;AI may execute in test&lt;/th&gt;
&lt;th&gt;Separate approval for live&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Edit application code&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No live effect&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run local tests&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create preview deployment&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Read production secrets&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Not needed for normal work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Change account owners or maintainers&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Run destructive data migration&lt;/td&gt;
&lt;td&gt;Draft only&lt;/td&gt;
&lt;td&gt;On disposable test data&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publish a package or app&lt;/td&gt;
&lt;td&gt;Stage only&lt;/td&gt;
&lt;td&gt;Internal/test channel&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Charge a real customer&lt;/td&gt;
&lt;td&gt;Prepare test request&lt;/td&gt;
&lt;td&gt;Test mode only&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This table is not universal. Your app may need different rows. The point is to stop permissions from being accidental.&lt;/p&gt;

&lt;p&gt;Ask three questions about every tool connection:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What useful evidence can this permission create?&lt;/li&gt;
&lt;li&gt;What damage could it create if the instruction or credential were wrong?&lt;/li&gt;
&lt;li&gt;Can the live action be separated from preparation?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;free AI App Builder Starter Prompts&lt;/a&gt; are useful here because the same scope and QA prompts can define what the tool may prepare and what proof you expect before release.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why approval pauses are a productivity feature
&lt;/h2&gt;

&lt;p&gt;People hear “human approval” and imagine a committee meeting where twelve people discuss a button for six weeks.&lt;/p&gt;

&lt;p&gt;That is not the goal.&lt;/p&gt;

&lt;p&gt;A good approval gate is narrow. The tool has already done the slow work. The human is answering a small question with visible evidence: &lt;strong&gt;Is this exact candidate allowed to cross this exact boundary?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub applied a similar idea on July 28 when it announced that &lt;a href="https://github.blog/changelog/2026-07-28-github-actions-holds-potentially-malicious-workflows-for-approval/" rel="noopener noreferrer"&gt;certain potentially malicious GitHub Actions workflows in public repositories would be held for approval&lt;/a&gt;. The workflow does not run until a collaborator with write access approves it through an authenticated web session.&lt;/p&gt;

&lt;p&gt;The pause is valuable because it sits immediately before execution. It does not require a person to manually rebuild the whole workflow.&lt;/p&gt;

&lt;p&gt;That is how I want approvals in a small AI-assisted project to feel: a speed bump before the cliff, not a parking lot at the beginning of the road.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff: too many gates create permission theater
&lt;/h2&gt;

&lt;p&gt;You can absolutely overdo this.&lt;/p&gt;

&lt;p&gt;If every local test, preview build, typo fix, and reversible change needs manual approval, people will click through prompts without reading them. A gate that fires constantly becomes wallpaper.&lt;/p&gt;

&lt;p&gt;The other limitation is that approval does not prove the candidate is safe. A human can approve the wrong commit, misunderstand the evidence, or miss a malicious dependency. Two-factor authentication protects the approval identity; it does not review the code for you.&lt;/p&gt;

&lt;p&gt;That is why the three gates have different jobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;preparation creates the candidate&lt;/li&gt;
&lt;li&gt;proof creates the evidence&lt;/li&gt;
&lt;li&gt;release controls the consequence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not use the release gate as a substitute for testing. Do not use testing as a reason to hand every credential to the build tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should do next
&lt;/h2&gt;

&lt;p&gt;Pick one live action in your project: production deployment, database migration, package publication, app-store submission, email send, or payment activation.&lt;/p&gt;

&lt;p&gt;Write down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what the AI may prepare&lt;/li&gt;
&lt;li&gt;what it may execute in a test environment&lt;/li&gt;
&lt;li&gt;which evidence must exist&lt;/li&gt;
&lt;li&gt;who or what can approve the live step&lt;/li&gt;
&lt;li&gt;how the release identity gets its credential&lt;/li&gt;
&lt;li&gt;how you roll back&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then remove any permission the preparation step does not need.&lt;/p&gt;

&lt;p&gt;You do not have to make your workflow slow to make it controlled. You want the AI doing the broad, repeatable work and a narrow verified identity owning the irreversible moment.&lt;/p&gt;

&lt;p&gt;If you want the immediate guided action, start with the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt;, which are free. If you want the organized path from idea to publication, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt; is my $19 field manual covering scope, stack, project rules, QA, deployment, and launch.&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>GitHub Models Shut Down: What Beginners Should Learn About AI Vendor Lock-In</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Sun, 02 Aug 2026 19:20:14 +0000</pubDate>
      <link>https://dev.to/marcusykim/github-models-shut-down-what-beginners-should-learn-about-ai-vendor-lock-in-3d3p</link>
      <guid>https://dev.to/marcusykim/github-models-shut-down-what-beginners-should-learn-about-ai-vendor-lock-in-3d3p</guid>
      <description>&lt;p&gt;An AI feature can look permanent right up until the provider removes the sign from the building.&lt;/p&gt;

&lt;p&gt;GitHub Models reached that moment on July 30. GitHub had announced that the playground, model catalog, inference API, and bring-your-own-key endpoints would all be retired for existing customers, not just closed to new ones.&lt;/p&gt;

&lt;p&gt;I did not find a more substantial AI or developer-tool development in the previous 24 hours, so I widened the window to seven days. The shutdown happened three days ago.&lt;/p&gt;

&lt;p&gt;GitHub pointed developers toward Microsoft Foundry for model access or GitHub Copilot for AI workflows inside GitHub. That is a reasonable migration path. But the useful beginner lesson is bigger than which replacement you choose:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An outside AI service should power a feature. It should not become the shape of your entire app.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yesterday I wrote about choosing an AI coding model by matching it to your bottleneck. This is the next architectural question. Even a sensible model or service choice can change, become more expensive, lose a feature, move to a different product, or disappear.&lt;/p&gt;

&lt;p&gt;You do not need an enterprise architecture team to prepare for that. You need one replaceable seam.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changed
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.blog/changelog/2026-07-01-github-models-is-being-fully-retired-on-july-30-2026/" rel="noopener noreferrer"&gt;GitHub's retirement notice&lt;/a&gt; was unusually concrete. After July 30, the GitHub Models interface and API would no longer be available, including BYOK. GitHub even ran brief service interruptions before retirement so developers could see what failure would look like.&lt;/p&gt;

&lt;p&gt;That last detail matters. A brownout is not only an inconvenience. It is an architecture test.&lt;/p&gt;

&lt;p&gt;If one AI endpoint fails and your whole app becomes unusable, the app probably knows too much about the endpoint.&lt;/p&gt;

&lt;p&gt;The same problem appears with payments, maps, email, analytics, storage, and authentication. AI services just make it easier to ignore because the first integration can be so fast. You install a package, paste a key, call a model from a screen, and celebrate when text appears.&lt;/p&gt;

&lt;p&gt;Then the prototype becomes the product, and the shortcut becomes structural steel.&lt;/p&gt;

&lt;h2&gt;
  
  
  What beginners often misunderstand about vendor lock-in
&lt;/h2&gt;

&lt;p&gt;Vendor lock-in does not mean “using a vendor.” Every useful app depends on other people's software.&lt;/p&gt;

&lt;p&gt;The problem begins when provider-specific details spread everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;model names live inside UI components&lt;/li&gt;
&lt;li&gt;API calls are copied across several screens&lt;/li&gt;
&lt;li&gt;provider response objects become your app's data model&lt;/li&gt;
&lt;li&gt;error messages are shown directly to users&lt;/li&gt;
&lt;li&gt;prompts are mixed into button handlers&lt;/li&gt;
&lt;li&gt;there is no record of what the feature is supposed to return&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now changing providers is not one integration task. It is an archaeological dig.&lt;/p&gt;

&lt;p&gt;The opposite extreme is also a mistake. A beginner can spend two weeks building a grand multi-provider framework before proving that one user wants the feature. That is architecture cosplay.&lt;/p&gt;

&lt;p&gt;The goal is smaller: &lt;strong&gt;put the unstable dependency behind the narrowest useful contract.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are still turning a rough app idea into one buildable workflow, I made the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; free so you can define the user, outcome, inputs, constraints, and proof before choosing an AI service.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one-seam workflow
&lt;/h2&gt;

&lt;p&gt;Imagine you are building a note app with a feature that turns a long note into three action items.&lt;/p&gt;

&lt;p&gt;The user journey is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user opens a saved note.&lt;/li&gt;
&lt;li&gt;The user presses “Find action items.”&lt;/li&gt;
&lt;li&gt;The app returns zero to three short action items.&lt;/li&gt;
&lt;li&gt;The user can accept, edit, or discard each one.&lt;/li&gt;
&lt;li&gt;The original note never changes unless the user confirms it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the product contract. None of it requires the screen to know the provider, model name, SDK, or raw response format.&lt;/p&gt;

&lt;p&gt;Here is how I would keep the integration replaceable.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Name the capability in product language
&lt;/h3&gt;

&lt;p&gt;Call it something like &lt;code&gt;extractActionItems(noteText)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Do not name the main function after the vendor. The rest of the app cares about the outcome, not which company produced it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Define your own input and output
&lt;/h3&gt;

&lt;p&gt;The input might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;note text&lt;/li&gt;
&lt;li&gt;maximum number of items&lt;/li&gt;
&lt;li&gt;language&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an array of action-item strings&lt;/li&gt;
&lt;li&gt;a status such as &lt;code&gt;complete&lt;/code&gt;, &lt;code&gt;empty&lt;/code&gt;, or &lt;code&gt;unavailable&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;a safe message the UI can show&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your app should validate that result before the screen sees it. A provider's response object is evidence arriving at the border, not your internal constitution.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Put the provider call in one adapter
&lt;/h3&gt;

&lt;p&gt;One server route, service file, or backend function owns the provider SDK and model identifier.&lt;/p&gt;

&lt;p&gt;The UI calls your capability. Your capability calls the adapter. The adapter translates the outside response into your output shape.&lt;/p&gt;

&lt;p&gt;That is the seam.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ai-sdk.dev/docs/foundations/providers-and-models" rel="noopener noreferrer"&gt;Vercel's AI SDK documentation&lt;/a&gt; describes this same broad idea through a standardized language-model interface. Its &lt;a href="https://ai-sdk.dev/docs/ai-sdk-core/provider-management" rel="noopener noreferrer"&gt;provider-management guide&lt;/a&gt; goes further with a central registry, aliases, and multiple providers. You do not have to use that library. The important design lesson is centralization: switching should happen in one known place.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Keep secrets and model IDs out of the client
&lt;/h3&gt;

&lt;p&gt;Do not ship provider secrets in a browser or mobile app. Keep them on the server or in a secure backend function.&lt;/p&gt;

&lt;p&gt;Also keep the chosen provider and model in configuration rather than scattering them across feature code. A model change should not require editing five buttons and three screens.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Save three fixtures
&lt;/h3&gt;

&lt;p&gt;Keep three small examples that represent the feature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a normal note with two clear action items&lt;/li&gt;
&lt;li&gt;a note with no action item&lt;/li&gt;
&lt;li&gt;a messy note that could tempt the model to invent one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For each fixture, write the acceptable result. When you change a prompt, model, or provider, run the same fixtures again.&lt;/p&gt;

&lt;p&gt;This is not a perfect benchmark. It is a product-specific migration test.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Design the unavailable state
&lt;/h3&gt;

&lt;p&gt;Decide what the user sees when the provider times out, rejects the request, reaches a limit, or disappears.&lt;/p&gt;

&lt;p&gt;For the note app, the rest of the product should still work. The user can read and edit the note. The action-item feature can say it is temporarily unavailable without corrupting data or trapping the user behind a spinner.&lt;/p&gt;

&lt;p&gt;GitHub's pre-retirement brownouts are a good reminder: test the failure while you still control the timing.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Write a one-page exit note
&lt;/h3&gt;

&lt;p&gt;Record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;where the provider is called&lt;/li&gt;
&lt;li&gt;which environment variables it needs&lt;/li&gt;
&lt;li&gt;the input and output contract&lt;/li&gt;
&lt;li&gt;the three migration fixtures&lt;/li&gt;
&lt;li&gt;which provider-specific features you rely on&lt;/li&gt;
&lt;li&gt;what the user experiences during an outage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That note is enough to keep a future migration from starting with “Where is this thing even wired in?”&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical provider-exit test
&lt;/h2&gt;

&lt;p&gt;You can ask your AI coding tool to inspect the project and answer these questions without changing code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Where does the app call the AI provider?&lt;/li&gt;
&lt;li&gt;How many files contain provider or model names?&lt;/li&gt;
&lt;li&gt;Does the UI import the provider SDK directly?&lt;/li&gt;
&lt;li&gt;Does provider output flow into stored app data without validation?&lt;/li&gt;
&lt;li&gt;What still works if every AI request fails for an hour?&lt;/li&gt;
&lt;li&gt;What is the smallest boundary that could contain the dependency?&lt;/li&gt;
&lt;li&gt;Which three fixtures would prove a replacement behaves well enough?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then ask for a migration plan with one constraint: preserve the user journey and change the fewest product-facing files possible.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;free AI App Builder Starter Prompts&lt;/a&gt; can help you define that workflow and its proof before the tool starts moving code around.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff: abstraction can hide useful differences
&lt;/h2&gt;

&lt;p&gt;A provider boundary is not free.&lt;/p&gt;

&lt;p&gt;Different models and services support different tools, context sizes, structured-output behavior, safety controls, latency, and pricing. If you force every provider into the lowest common denominator, you can lose the feature that made your first choice valuable.&lt;/p&gt;

&lt;p&gt;That is why I would not pretend all providers are identical.&lt;/p&gt;

&lt;p&gt;Keep the product contract stable, but allow provider-specific settings inside the adapter. If one provider supports a useful capability, use it deliberately and document it in the exit note. Your replacement may need a different implementation as long as it preserves the user outcome.&lt;/p&gt;

&lt;p&gt;Routing layers can also help, but they introduce another dependency. &lt;a href="https://vercel.com/changelog/ai-gateway-routing-rules" rel="noopener noreferrer"&gt;Vercel's AI Gateway routing rules&lt;/a&gt;, for example, can rewrite requests from one model to another without an application code change. That can improve recovery, but it does not remove your responsibility to verify that the destination still produces an acceptable result.&lt;/p&gt;

&lt;p&gt;The rule is not “never depend on anything.”&lt;/p&gt;

&lt;p&gt;It is “know where the dependency ends and your product begins.”&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should do next
&lt;/h2&gt;

&lt;p&gt;Pick one outside service in your app. It can be AI, email, payments, maps, or storage.&lt;/p&gt;

&lt;p&gt;Draw three boxes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Your screen -&amp;gt; Your capability -&amp;gt; Outside provider&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you cannot draw those boundaries because provider details appear everywhere, do not rewrite the whole project tonight. Choose one user workflow, write its input and output, move the outside call behind one seam, and save three fixtures.&lt;/p&gt;

&lt;p&gt;That is enough architecture for a first migration plan.&lt;/p&gt;

&lt;p&gt;If you want the immediate guided action, start with the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt;, which are free. If you want the organized path from idea to publication, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt; is my $19 field manual covering scope, stack, architecture, prompting, QA, deployment, and launch.&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>How To Choose An AI Coding Model For Your First App In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Sat, 01 Aug 2026 18:39:12 +0000</pubDate>
      <link>https://dev.to/marcusykim/how-to-choose-an-ai-coding-model-for-your-first-app-in-2026-cen</link>
      <guid>https://dev.to/marcusykim/how-to-choose-an-ai-coding-model-for-your-first-app-in-2026-cen</guid>
      <description>&lt;p&gt;The newest AI coding update is often treated like a shopping event.&lt;/p&gt;

&lt;p&gt;A new model arrives. A coding tool adds another model picker. A benchmark chart moves. Then you are left wondering which button to press before you build your first app.&lt;/p&gt;

&lt;p&gt;That confusion is understandable. On July 28, GitHub said Grok 4.5 was rolling out in GitHub Copilot for fast, agentic coding and complex multi-step work. On July 29, GitHub announced that Copilot code review support for agent skills and MCP servers was generally available. OpenAI's July 9 GPT-5.6 launch also put multiple capability and cost tiers into one family, including programmatic tool calling and multi-agent options.&lt;/p&gt;

&lt;p&gt;Those are meaningful developments. But the beginner lesson is not “always use the newest model.” It is this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose the model that matches your current bottleneck, then prove the choice on a small task.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have watched AI-assisted projects lose days to model comparison when the real problem was an unclear feature, an unverified data flow, or a missing test. A model can be excellent and still be the wrong choice for the job in front of you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in the model-picking problem
&lt;/h2&gt;

&lt;p&gt;The old question was simple: “Which assistant writes the best code?”&lt;/p&gt;

&lt;p&gt;The current question has more dimensions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you need fast autocomplete or a long-running agent?&lt;/li&gt;
&lt;li&gt;Do you need careful reasoning or cheap iteration?&lt;/li&gt;
&lt;li&gt;Can the model use your repository, browser, terminal, review rules, or external tools?&lt;/li&gt;
&lt;li&gt;Is the task code generation, debugging, planning, review, or release preparation?&lt;/li&gt;
&lt;li&gt;What is the cost of being wrong?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The recent releases make those tradeoffs more visible. GPT-5.6 describes different tiers, tool coordination, and parallel agents. GitHub's Copilot updates add more model choice inside an existing development workflow and give code review more context through skills and MCP.&lt;/p&gt;

&lt;p&gt;The practical result is that “best model” is no longer a useful beginner category. “Best for this next proof” is better.&lt;/p&gt;

&lt;h2&gt;
  
  
  What beginners often misunderstand
&lt;/h2&gt;

&lt;p&gt;More capability does not automatically mean more progress.&lt;/p&gt;

&lt;p&gt;If you ask an agent to build a vague app with the most powerful setting, it may produce more files, more abstractions, and more decisions than you can inspect. The output can look impressive while making the project harder to own.&lt;/p&gt;

&lt;p&gt;The opposite mistake is choosing only on price. A cheaper model may be perfectly good for renaming variables or generating a first draft, but expensive mistakes in authentication, payments, permissions, or data migration can erase the savings.&lt;/p&gt;

&lt;p&gt;So I use a simple rule: &lt;strong&gt;model selection is a risk decision, not a popularity contest.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The beginner decision checklist
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Name the task before naming the model
&lt;/h3&gt;

&lt;p&gt;Write one sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I need help with [task] so that [user outcome] can be verified by [evidence].”&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;ul&gt;
&lt;li&gt;“I need help designing a small database so a signed-in user can save one note and retrieve it tomorrow.”&lt;/li&gt;
&lt;li&gt;“I need help fixing a failing form so an invalid email shows an error without losing the user's other input.”&lt;/li&gt;
&lt;li&gt;“I need help reviewing a pull request so I can test the changed checkout path and its permission boundary.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you cannot finish that sentence, you do not have a model-selection problem yet. You have a task-definition problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Identify the bottleneck
&lt;/h3&gt;

&lt;p&gt;Pick one primary bottleneck:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed:&lt;/strong&gt; you need a quick draft or small transformation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning:&lt;/strong&gt; the task crosses several files or has competing design options.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context:&lt;/strong&gt; the answer depends on a larger repository or project history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool use:&lt;/strong&gt; the agent must inspect, run, or coordinate several steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; you need many safe iterations on low-risk work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review:&lt;/strong&gt; you need a second pass focused on failure modes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not pick every bottleneck. A first app becomes hard to manage when every task is labeled “complex.”&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Match the tool to the risk
&lt;/h3&gt;

&lt;p&gt;For low-risk work, use the fastest affordable option that produces a clear diff: naming, formatting, a small component, a test stub, or a documentation pass.&lt;/p&gt;

&lt;p&gt;For high-risk work, pay for better reasoning and spend more time on evidence: authentication, permissions, payments, migrations, external APIs, and anything that can expose or delete user data.&lt;/p&gt;

&lt;p&gt;For repository-wide or tool-heavy work, choose a workflow that can see the relevant project context and show you what it changed. The feature that matters is not “agent” by itself. It is the ability to inspect the plan, diff, commands, and proof.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Run a same-task trial
&lt;/h3&gt;

&lt;p&gt;Give two candidate setups the same small task. Keep the prompt, repository snapshot, and acceptance checks identical.&lt;/p&gt;

&lt;p&gt;Score each result from 0 to 2:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;0&lt;/th&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;th&gt;2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Correct user outcome&lt;/td&gt;
&lt;td&gt;missed&lt;/td&gt;
&lt;td&gt;partly works&lt;/td&gt;
&lt;td&gt;works in the stated flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope discipline&lt;/td&gt;
&lt;td&gt;wandered&lt;/td&gt;
&lt;td&gt;some extras&lt;/td&gt;
&lt;td&gt;changed only what was needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Explainability&lt;/td&gt;
&lt;td&gt;unclear&lt;/td&gt;
&lt;td&gt;partial explanation&lt;/td&gt;
&lt;td&gt;clear files, assumptions, and tradeoffs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verification&lt;/td&gt;
&lt;td&gt;no proof&lt;/td&gt;
&lt;td&gt;one happy-path check&lt;/td&gt;
&lt;td&gt;happy path plus a relevant failure check&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Recovery&lt;/td&gt;
&lt;td&gt;hard to undo&lt;/td&gt;
&lt;td&gt;possible with effort&lt;/td&gt;
&lt;td&gt;small, reviewable diff&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The highest total is not automatically the winner. If a cheaper setup scores 9 on a low-risk task and a more capable one scores 10, the cheaper option may be the better operating choice. If the task involves permissions and both skip the important check, neither is ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Keep a model decision log
&lt;/h3&gt;

&lt;p&gt;For each meaningful task, record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;task type&lt;/li&gt;
&lt;li&gt;chosen model or tier&lt;/li&gt;
&lt;li&gt;expected bottleneck&lt;/li&gt;
&lt;li&gt;what it changed&lt;/li&gt;
&lt;li&gt;what it got wrong&lt;/li&gt;
&lt;li&gt;how you verified it&lt;/li&gt;
&lt;li&gt;whether you would choose it again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This turns model selection into evidence instead of vibes. After a few tasks, you will know which setup helps you plan, which helps you debug, and which is only good at producing plausible first drafts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this lesson lasts longer than the release cycle
&lt;/h2&gt;

&lt;p&gt;The names and prices will change. The decision stays useful because every AI coding tool eventually asks you to trade speed, cost, context, autonomy, and confidence.&lt;/p&gt;

&lt;p&gt;The durable skill is not memorizing the current winner. It is building a small feedback loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define the user outcome.&lt;/li&gt;
&lt;li&gt;Choose one bottleneck.&lt;/li&gt;
&lt;li&gt;Run a bounded task.&lt;/li&gt;
&lt;li&gt;Inspect the diff and the evidence.&lt;/li&gt;
&lt;li&gt;Keep or change the tool based on what happened.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I made the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; free because this is the kind of setup work beginners should be able to practice immediately. The starter prompts are free, and they help turn an app idea into a bounded first workflow before you ask an AI tool to build it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff and limitation
&lt;/h2&gt;

&lt;p&gt;Benchmarks and launch announcements can tell you what a vendor measured. They cannot tell you whether a model understands your app, your users, your constraints, or your tolerance for risk.&lt;/p&gt;

&lt;p&gt;Your own trial can also mislead you if the test is too easy. A model that writes a clean button is not automatically the model you should trust with authorization logic. Test the kind of failure you care about, not only the kind of demo that makes the tool look good.&lt;/p&gt;

&lt;p&gt;There is also a human cost. Switching models constantly can interrupt your understanding of the project. For a first app, consistency and a readable change history may be worth more than chasing a small benchmark advantage.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should do next
&lt;/h2&gt;

&lt;p&gt;Take the next feature in your app and write the one-sentence task. Circle its bottleneck. Choose one model setup and run a small slice that can be reviewed in fifteen minutes.&lt;/p&gt;

&lt;p&gt;Then ask the AI to show you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the files it changed&lt;/li&gt;
&lt;li&gt;the assumptions it made&lt;/li&gt;
&lt;li&gt;the test or manual proof it ran&lt;/li&gt;
&lt;li&gt;one failure case it did not cover&lt;/li&gt;
&lt;li&gt;the easiest rollback path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a better first experiment than asking which model is “best.”&lt;/p&gt;

&lt;p&gt;If you want the immediate guided action, start with the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt;, which are free. If you want the organized path from idea to publication, the deeper next step is &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt;, my $19 field manual for building and shipping a first app with AI.&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>What GitHub Copilot's New July 2026 Agentic Review Features Can Teach Beginners About Trust in AI Coding</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Thu, 30 Jul 2026 18:12:47 +0000</pubDate>
      <link>https://dev.to/marcusykim/what-github-copilots-new-july-2026-agentic-review-features-can-teach-beginners-about-trust-in-ai-4j2j</link>
      <guid>https://dev.to/marcusykim/what-github-copilots-new-july-2026-agentic-review-features-can-teach-beginners-about-trust-in-ai-4j2j</guid>
      <description>&lt;p&gt;The biggest shift in AI-assisted coding lately is not that tools can write code faster.&lt;/p&gt;

&lt;p&gt;It is that they can now write &lt;em&gt;reviews&lt;/em&gt; faster too.&lt;/p&gt;

&lt;p&gt;On July 29, 2026, GitHub announced that &lt;strong&gt;Copilot code review&lt;/strong&gt; gained GA support for agent skills and MCP-style integrations. In plain terms, AI can now read a larger chunk of your project context and run more structured checks without you manually typing every command.&lt;/p&gt;

&lt;p&gt;That is useful, especially for you if you are building your first real AI-assisted app.&lt;/p&gt;

&lt;p&gt;The change sounds great. It also sets a trap for beginners: when the agent starts doing more, you might start doing less.&lt;/p&gt;

&lt;p&gt;That’s where the hidden lesson is.&lt;/p&gt;

&lt;p&gt;I have worked long enough with AI in public coding to know this pattern. We used to ask AI to “just build this” and then spent too much time cleaning after. Now we ask AI to build and review, and beginners can spend too little time on ownership. The skill is not to eliminate your judgment. The skill is to move your judgment earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changed
&lt;/h2&gt;

&lt;p&gt;Before this update, many AI coding workflows felt like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask the assistant to build a feature.&lt;/li&gt;
&lt;li&gt;Spot-check the output.&lt;/li&gt;
&lt;li&gt;Hope it is coherent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now you can configure a model that does both code generation and review logic with more context through skills and MCP integrations. That gives you a second AI voice in the loop, not just one.&lt;/p&gt;

&lt;p&gt;In 2026, that matters because beginners get less excuse to skip process. If an AI can generate files, it can also generate a decent-looking suggestion list.&lt;/p&gt;

&lt;h2&gt;
  
  
  The beginner misunderstanding: “If a review exists, I don’t need a plan"
&lt;/h2&gt;

&lt;p&gt;A common beginner mistake is to treat automation like a maturity badge.&lt;/p&gt;

&lt;p&gt;You don’t ship safely because a review model exists.&lt;/p&gt;

&lt;p&gt;You ship safely because you defined:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What counts as a good implementation.&lt;/li&gt;
&lt;li&gt;What failure modes matter to your specific app.&lt;/li&gt;
&lt;li&gt;Who signs off.&lt;/li&gt;
&lt;li&gt;How to prove the change works before users see it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When I see beginners ask why they still need review when the AI can review, I use the same response every time:&lt;/p&gt;

&lt;p&gt;“An AI can propose checks. You still need to define the checks.”&lt;/p&gt;

&lt;p&gt;And that means you need a small, written contract before code starts moving.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical lesson: write a reviewer contract before the first code prompt
&lt;/h2&gt;

&lt;p&gt;I use this contract for my own work and for this article’s lesson:&lt;/p&gt;

&lt;h3&gt;
  
  
  1) Outcome statement
&lt;/h3&gt;

&lt;p&gt;What exact user outcome should this change prove in one minute?&lt;/p&gt;

&lt;p&gt;For a beginner app, this is often one workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User signs in.&lt;/li&gt;
&lt;li&gt;User saves one meaningful record.&lt;/li&gt;
&lt;li&gt;User sees success state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can’t state that outcome in one sentence, you don’t yet have a build task.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Scope boundary
&lt;/h3&gt;

&lt;p&gt;What should not happen?&lt;/p&gt;

&lt;p&gt;If your feature adds one happy path and accidentally changes another, your app looks “working” while your support queue grows.&lt;/p&gt;

&lt;p&gt;Name the boundary explicitly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which screens are in scope.&lt;/li&gt;
&lt;li&gt;Which data paths are allowed to change.&lt;/li&gt;
&lt;li&gt;Which external integrations must not run.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3) Evidence checklist
&lt;/h3&gt;

&lt;p&gt;A code review suggestion is not proof until you verify evidence locally.&lt;/p&gt;

&lt;p&gt;Before code is merged, check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At least one happy path with real sample data.&lt;/li&gt;
&lt;li&gt;One failure path.&lt;/li&gt;
&lt;li&gt;A security or permissions path.&lt;/li&gt;
&lt;li&gt;One neighboring workflow that could break.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4) Ownership and rollback rule
&lt;/h3&gt;

&lt;p&gt;If Copilot can make many edits quickly, your rollback path must be quick too.&lt;/p&gt;

&lt;p&gt;When I work with beginner projects, I keep one rule visible: “If no reviewer and no quick rollback, pause and simplify.”&lt;/p&gt;

&lt;p&gt;That keeps AI output from becoming an irreversible commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this lesson stays useful after the news passes
&lt;/h2&gt;

&lt;p&gt;This is the part I care most about.&lt;/p&gt;

&lt;p&gt;The update itself is useful, but the durable lesson is bigger: AI-assisted coding gets safer when your project has explicit controls.&lt;/p&gt;

&lt;p&gt;For a beginner, the wrong assumption is that new features in your tools remove the need for architecture basics. The right assumption is that new tools make those basics non-negotiable.&lt;/p&gt;

&lt;p&gt;I made &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; free on purpose. They help you define outcomes, constraints, and done-when rules before the assistant starts changing files. The prompts are free.&lt;/p&gt;

&lt;p&gt;If you already have a running project, this is where you begin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a simple &lt;code&gt;AGENTS.md&lt;/code&gt;-style note for your own style and guardrails.&lt;/li&gt;
&lt;li&gt;List the five checks your first AI build must pass.&lt;/li&gt;
&lt;li&gt;Ask the AI to generate only the code and review artifacts that directly support those checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the opposite of prompt dumping. It is controlled leverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff and limitation
&lt;/h2&gt;

&lt;p&gt;Agentic tools improve with visibility, but they still create a false sense of completion.&lt;/p&gt;

&lt;p&gt;The limitation is real:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reviews can be useful and still miss edge cases.&lt;/li&gt;
&lt;li&gt;Context can be incomplete.&lt;/li&gt;
&lt;li&gt;Automation can optimize for speed and still move in the wrong direction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why your biggest beginner protection is not “more tools.” It is a tiny habit:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every claim must pass your own test before you trust it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You do not need a giant enterprise process. You need one clear proof path.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should do next
&lt;/h2&gt;

&lt;p&gt;For your next AI coding task, add one line before the first prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Do not mark this complete until [one user flow], [one failure path], and [one ownership decision] are verified.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then only run the first change.&lt;/p&gt;

&lt;p&gt;For app builders trying to move from prototype panic to shipping confidence, this is the bridge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starter prompts are the immediate action: &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; (free)&lt;/li&gt;
&lt;li&gt;The full field manual is the next step for repeatable outcomes: &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>What OpenAI's New Task-Crossover Research Can Teach Freelancers About Owning the Handoff in 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Tue, 28 Jul 2026 04:37:12 +0000</pubDate>
      <link>https://dev.to/marcusykim/what-openais-new-task-crossover-research-can-teach-freelancers-about-owning-the-handoff-in-2026-36ke</link>
      <guid>https://dev.to/marcusykim/what-openais-new-task-crossover-research-can-teach-freelancers-about-owning-the-handoff-in-2026-36ke</guid>
      <description>&lt;p&gt;The most useful line in today's AI news is not that AI can do more work.&lt;/p&gt;

&lt;p&gt;It is that AI is changing who does the work.&lt;/p&gt;

&lt;p&gt;In a new &lt;a href="https://openai.com/index/how-ai-is-expanding-what-people-do-at-work/" rel="noopener noreferrer"&gt;OpenAI Economic Research report&lt;/a&gt;, researchers analyzed more than 800,000 work-related messages from U.S. ChatGPT users. They found that 16.8% of work-related messages crossed into tasks associated with another occupation. When generic tasks such as writing, summarizing, and scheduling were removed, 43.5% of occupation-specific messages were outside the user's own occupation.&lt;/p&gt;

&lt;p&gt;That is a meaningful shift for freelancers and small teams. A marketer can troubleshoot a website. A small-business owner can do a first pass on financial analysis. A salesperson can explore customer data. The person who first encounters a problem can often make progress before waiting for a specialist.&lt;/p&gt;

&lt;p&gt;But there is a trap hidden inside that freedom: crossing a role boundary is not the same as owning the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  The new freelancer advantage is range
&lt;/h2&gt;

&lt;p&gt;I have never thought of freelancing as staying inside one perfectly labeled job description. A client does not experience a project as “design,” “development,” “copy,” and “QA” in separate boxes. They experience a user trying to complete something and either succeeding or getting stuck.&lt;/p&gt;

&lt;p&gt;AI makes it easier for one freelancer to move across those boxes. You can draft the page copy, ask AI to turn the workflow into a rough interface, inspect the data shape, write a test plan, and prepare a launch checklist. That range can make a small project much more useful.&lt;/p&gt;

&lt;p&gt;OpenAI's research supports the direction of travel. Its examples show engineering and marketing tasks moving across many occupations, and it found more outside-occupation work among smaller workspaces than among workspaces with more than 100 seats. That makes intuitive sense: when there is no analyst, QA team, or developer sitting two desks away, the person closest to the problem has to make the next useful move.&lt;/p&gt;

&lt;p&gt;The opportunity is not “become every specialist.” The opportunity is “reduce the number of blocked handoffs.”&lt;/p&gt;

&lt;p&gt;I made &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; for this kind of first move. The starter prompts are free, and they help turn a rough app idea into a defined user, workflow, scope, and first build before the tool starts generating screens.&lt;/p&gt;

&lt;h2&gt;
  
  
  The handoff is where projects lose trust
&lt;/h2&gt;

&lt;p&gt;The danger is not that a freelancer uses AI outside their formal specialty. The danger is that nobody can answer what happens next.&lt;/p&gt;

&lt;p&gt;AI can give you a plausible first draft of a landing page, a database query, a test case, or an integration. A plausible first draft is valuable. It is not yet a deliverable.&lt;/p&gt;

&lt;p&gt;The work becomes accountable when you can answer five questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Who is the user of this output?&lt;/li&gt;
&lt;li&gt;What decision or action should it enable?&lt;/li&gt;
&lt;li&gt;What must remain true when it reaches the next person or system?&lt;/li&gt;
&lt;li&gt;What can fail, and how will we notice?&lt;/li&gt;
&lt;li&gt;Who owns the final call?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those questions are a small operating system for cross-functional work. They keep “I used AI to help with that” from becoming a substitute for “the result is ready to use.”&lt;/p&gt;

&lt;p&gt;This distinction matters even more as agents take on longer tasks. OpenAI reports that users are moving from short interactions toward work that can take more than an hour or much longer. In another July report about scientific work, OpenAI described the need to pair models with tools, workflows, expertise, infrastructure, and human validation. The pattern is consistent: more capability increases the value of a well-defined boundary around the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  A workflow I use for crossing roles safely
&lt;/h2&gt;

&lt;p&gt;When I need to work across a boundary, I use a five-part handoff note before I ask AI to produce the next artifact.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outcome.&lt;/strong&gt; Write the sentence the user should be able to complete. “The owner can see which leads need a follow-up today” is better than “build a dashboard.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Input.&lt;/strong&gt; Name the actual source: a form submission, CSV, API response, customer interview, or existing screen. If the input is vague, the output will be vague too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Constraint.&lt;/strong&gt; State the boundaries that matter: permissions, platform, deadline, budget, brand rules, privacy, or what is explicitly out of scope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proof.&lt;/strong&gt; Define the evidence that makes the work believable. That might be a screenshot of the empty state, a test with two user accounts, a saved record, a failed API response, or a client demo using realistic data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Owner.&lt;/strong&gt; Name the person who decides whether the result is ready. The owner does not have to personally perform every task. They do have to notice when the output is incomplete and choose what happens next.&lt;/p&gt;

&lt;p&gt;Here is a concrete example. Instead of asking, “Can you make me a lead dashboard?” I would write:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A sales freelancer needs to identify today's follow-ups from submitted leads. The input is the existing lead table. The first version shows name, last contact date, status, and next action. A user can mark a follow-up complete and see that state after refresh. A second user must not see private notes. Proof is a two-account test plus an empty-state screenshot. I own the workflow decision; AI can help with the interface and test cases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That note gives AI room to help without giving it permission to invent the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does not mean
&lt;/h2&gt;

&lt;p&gt;Task crossover is not proof that expertise no longer matters. It is not a reason to skip review, hire no specialists, or let an AI-generated answer cross into production because it looks polished.&lt;/p&gt;

&lt;p&gt;The recent OpenAI and Hugging Face security disclosure is a useful reminder. During an internal evaluation, models chained vulnerabilities and reached information in a production environment. The companies described containment, monitoring, access controls, patching, and forensic investigation as necessary responses. The limitation is important: a sandbox is a boundary, but a boundary that nobody monitors is only a hope.&lt;/p&gt;

&lt;p&gt;The same principle applies to a small freelance app. AI can expand your range, but you still need permissions, review points, tests, and a recovery path. The smaller the team, the more deliberately those controls need to be written down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your next move
&lt;/h2&gt;

&lt;p&gt;Pick one recurring handoff in your work this week: copy to design, design to development, development to QA, or a client request to a delivery plan.&lt;/p&gt;

&lt;p&gt;Write the five-part note: outcome, input, constraint, proof, owner. Then use AI to help with the next artifact, not to decide what “done” means. Afterward, compare the generated work with the proof you promised.&lt;/p&gt;

&lt;p&gt;That is the durable lesson in today's task-crossover news. AI can make you more useful across a project. Judgment is what keeps that usefulness from becoming a new source of confusion.&lt;/p&gt;

&lt;p&gt;If you want a more organized path from idea to publication, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt; takes the same principle through the full build: define the idea, choose the smallest useful version, build in stages, test the result, and publish it.&lt;/p&gt;

&lt;p&gt;The free starter prompts are the immediate guided action. The e-book is the deeper path when you want the complete system in one place.&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>How To Know Whether AI Fixed The Bug Or Hid The Bug In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Sat, 25 Jul 2026 20:48:43 +0000</pubDate>
      <link>https://dev.to/marcusykim/how-to-know-whether-ai-fixed-the-bug-or-hid-the-bug-in-2026-3314</link>
      <guid>https://dev.to/marcusykim/how-to-know-whether-ai-fixed-the-bug-or-hid-the-bug-in-2026-3314</guid>
      <description>&lt;p&gt;The most dangerous sentence in an AI-built app is often:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The bug is fixed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sentence can mean several different things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the original symptom disappeared;&lt;/li&gt;
&lt;li&gt;the error message was hidden;&lt;/li&gt;
&lt;li&gt;the failing path was bypassed;&lt;/li&gt;
&lt;li&gt;the code now handles one example but not the workflow; or&lt;/li&gt;
&lt;li&gt;the change fixed one screen while quietly breaking another.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have learned to treat an AI-generated bug fix as a claim that needs evidence, not as a conclusion.&lt;/p&gt;

&lt;p&gt;The beginner-friendly rule is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A bug is fixed only when the original failure is gone, the intended behavior works, and the nearby behavior still works.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a small regression test. You do not need a large QA department to run it. You need a clear before-and-after record.&lt;/p&gt;

&lt;p&gt;If you are staring at a blank prompt box, my &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; are free and include prompts for scope, debugging, QA, deployment, and launch. The useful part is not asking AI to sound confident. It is making the proof request specific.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, Capture The Bug Before Changing Code
&lt;/h2&gt;

&lt;p&gt;Before asking AI to fix anything, write down the smallest reproducible version of the failure.&lt;/p&gt;

&lt;p&gt;Use this format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Starting state:
[what must already be true]

Actions:
1. [action]
2. [action]
3. [action]

Expected result:
[what a user should see or be able to do]

Actual result:
[what happens instead]

Evidence:
[error text, screenshot, console output, or saved record]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Starting state: I am signed in and have one saved task.
Actions: open the task, edit its title, press Save, refresh the page.
Expected result: the new title remains after refresh.
Actual result: the screen says Saved, but the old title returns.
Evidence: the network request succeeds, but the database record is unchanged.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That description is much more useful than “Saving is broken.” It gives AI a path, an expected outcome, and a place to look for false success.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four Proofs Of A Real Fix
&lt;/h2&gt;

&lt;p&gt;When AI proposes a patch, I want four separate proofs.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The original reproduction now passes
&lt;/h3&gt;

&lt;p&gt;Run the exact same starting state and actions. Do not paraphrase the steps because the patch may only work under a slightly different condition.&lt;/p&gt;

&lt;p&gt;If the original reproduction cannot be run anymore, ask why. Sometimes the code change genuinely changed the workflow. Sometimes the test data disappeared. Sometimes the error was hidden. “I cannot reproduce it” is not the same as “it is fixed.”&lt;/p&gt;

&lt;p&gt;Record the result plainly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;original steps: pass or fail;&lt;/li&gt;
&lt;li&gt;expected result: observed or not observed; and&lt;/li&gt;
&lt;li&gt;evidence: screenshot, saved record, test output, or visible state.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. The data or state is correct underneath
&lt;/h3&gt;

&lt;p&gt;Screens can lie by being polite.&lt;/p&gt;

&lt;p&gt;A toast that says “Saved” does not prove that the record was saved. A blank error area does not prove that an invalid request succeeded. A loading spinner that stops does not prove that the correct result arrived.&lt;/p&gt;

&lt;p&gt;Check the state behind the screen using the safest visible tools available to your project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;refresh the page;&lt;/li&gt;
&lt;li&gt;close and reopen the app;&lt;/li&gt;
&lt;li&gt;sign out and back in when ownership matters;&lt;/li&gt;
&lt;li&gt;inspect the visible record in the database dashboard if that is part of your workflow; or&lt;/li&gt;
&lt;li&gt;run the project’s existing test or logging command.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The question is: did the promised state change persist in the place where the product actually owns it?&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The failure is still honest when it should fail
&lt;/h3&gt;

&lt;p&gt;A real fix does not turn every input into a success message.&lt;/p&gt;

&lt;p&gt;Try one invalid input, one missing value, one offline or timeout condition, or one unauthorized account when the bug involves those boundaries. The exact test depends on the feature, but the principle is stable: the app should fail clearly and safely.&lt;/p&gt;

&lt;p&gt;If AI changed a validation error into an empty result, it may have hidden the bug. If it catches every exception and returns a generic success object, it may have hidden several bugs at once.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When this request is invalid or unavailable, what does the user see, what state is written, and how can they recover?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. The neighbor workflow still passes
&lt;/h3&gt;

&lt;p&gt;Most bug fixes touch shared code. That means the original screen is not the only thing worth testing.&lt;/p&gt;

&lt;p&gt;If AI changed a shared form component, test another form. If it changed an authentication check, test both an owner and a non-owner. If it changed a database query, test an empty list and a list with several records. If it changed mobile layout code, test a smaller screen and a keyboard-open state.&lt;/p&gt;

&lt;p&gt;You are not trying to test the entire universe. You are testing the closest behavior that could have been affected by the same change.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Before-And-After Table I Use
&lt;/h2&gt;

&lt;p&gt;For a small app, this is enough:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Before patch&lt;/th&gt;
&lt;th&gt;After patch&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Original reproduction&lt;/td&gt;
&lt;td&gt;Fails&lt;/td&gt;
&lt;td&gt;Passes&lt;/td&gt;
&lt;td&gt;visible result or test output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;State after refresh&lt;/td&gt;
&lt;td&gt;Old value returns&lt;/td&gt;
&lt;td&gt;New value remains&lt;/td&gt;
&lt;td&gt;refreshed screen or record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invalid input&lt;/td&gt;
&lt;td&gt;Misleading success&lt;/td&gt;
&lt;td&gt;Clear correction path&lt;/td&gt;
&lt;td&gt;error state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Neighbor workflow&lt;/td&gt;
&lt;td&gt;Passes or fails&lt;/td&gt;
&lt;td&gt;Still behaves as expected&lt;/td&gt;
&lt;td&gt;second scenario&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logs and secrets&lt;/td&gt;
&lt;td&gt;Error or unsafe data&lt;/td&gt;
&lt;td&gt;Useful, non-sensitive evidence&lt;/td&gt;
&lt;td&gt;log/test review&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The table is deliberately boring. Boring is good. It stops a confident explanation from replacing a working product.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Debugging Prompt That Requests Proof
&lt;/h2&gt;

&lt;p&gt;I would give AI this prompt instead of “fix the bug”:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Treat this as a regression investigation, not a request for a confident explanation.

Bug reproduction:
[starting state, exact actions, expected result, actual result]

Constraints:
[files or behavior that must not change]

Before editing code:
1. Explain the most likely cause and the evidence that would confirm it.
2. List the smallest files or functions that may need to change.
3. Name one way a patch could hide the symptom instead of fixing the cause.

After proposing the patch, provide:
1. The exact original reproduction to rerun.
2. One persistence or underlying-state check.
3. One invalid-input or failure-path check.
4. One nearby workflow that could regress.
5. A short explanation of what evidence would make us reject the patch.

Do not remove an error merely to make the screen look successful. Do not broaden the change beyond the stated bug without explaining why.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The phrase “what evidence would make us reject the patch” is important. It gives you a way to disagree with AI before the code becomes too large to understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  When The Fix Is Not Ready
&lt;/h2&gt;

&lt;p&gt;I would keep the bug open if any of these are true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the original steps changed without an explanation;&lt;/li&gt;
&lt;li&gt;the UI says success but refresh loses the result;&lt;/li&gt;
&lt;li&gt;the error disappeared and no replacement behavior exists;&lt;/li&gt;
&lt;li&gt;the fix works only with one hard-coded example;&lt;/li&gt;
&lt;li&gt;the patch changes unrelated screens without a clear reason;&lt;/li&gt;
&lt;li&gt;no failure-path test was run; or&lt;/li&gt;
&lt;li&gt;nobody can say what evidence proves the underlying state is correct.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not perfectionism. It is a boundary between a demo and a product.&lt;/p&gt;

&lt;p&gt;The deeper field manual behind this workflow is &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt;. It walks through the larger path from idea and scope to architecture, prompting, QA, deployment, and launch. Use it when you need the whole build system, not just one debugging prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Short Version
&lt;/h2&gt;

&lt;p&gt;When AI says it fixed a bug, ask it to help you prove four things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The exact original reproduction passes.&lt;/li&gt;
&lt;li&gt;The underlying state is correct after refresh or relaunch.&lt;/li&gt;
&lt;li&gt;Invalid or unavailable inputs still fail honestly.&lt;/li&gt;
&lt;li&gt;The nearest shared workflow did not regress.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you can show those four proofs, you have more than a plausible patch. You have a defensible fix.&lt;/p&gt;

&lt;p&gt;If you want a free place to start, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt; gives you practical prompts for turning a rough idea into scoped, testable work. The prompts are free. When you are ready for the deeper build-along process, &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt; is the next step.&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/" rel="noopener noreferrer"&gt;https://marcusykim.com/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>What Beginners Should Check Before Trusting AI-Generated Code In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Fri, 24 Jul 2026 00:29:17 +0000</pubDate>
      <link>https://dev.to/marcusykim/what-beginners-should-check-before-trusting-ai-generated-code-in-2026-58bg</link>
      <guid>https://dev.to/marcusykim/what-beginners-should-check-before-trusting-ai-generated-code-in-2026-58bg</guid>
      <description>&lt;h2&gt;
  
  
  AI can write code that looks finished
&lt;/h2&gt;

&lt;p&gt;One of the most dangerous moments in AI-assisted development is not the obvious error.&lt;/p&gt;

&lt;p&gt;It is the moment when the app runs, the screen looks polished, and you assume the code underneath must be sound.&lt;/p&gt;

&lt;p&gt;I have learned to separate two questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Can this code produce the screen or behavior I asked for?&lt;/li&gt;
&lt;li&gt;Does this code preserve the rules my app is supposed to follow?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The first question is a demo. The second is engineering.&lt;/p&gt;

&lt;p&gt;AI is very good at producing a plausible first answer. It is not automatically good at preserving your product's boundaries while changing one part of the system.&lt;/p&gt;

&lt;p&gt;That is why I review AI-generated code before I trust it, even when the feature appears to work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the user contract, not the code
&lt;/h2&gt;

&lt;p&gt;Before opening the changed files, write down what the feature is supposed to do in one sentence.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;A signed-in user can save a private note and see only their own saved notes after refreshing the page.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sentence gives you more to review than a vague request such as “add notes.” It contains a user, an action, ownership, and a persistence expectation.&lt;/p&gt;

&lt;p&gt;Then ask AI to show where each part of that contract is implemented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where is the user identified?&lt;/li&gt;
&lt;li&gt;Where is ownership enforced?&lt;/li&gt;
&lt;li&gt;Where is the note saved?&lt;/li&gt;
&lt;li&gt;Where is the saved note loaded again?&lt;/li&gt;
&lt;li&gt;What happens when the user is signed out?&lt;/li&gt;
&lt;li&gt;What happens when the request fails?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the answer cannot point to those boundaries clearly, the feature is not ready for trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five checks I use before trusting a change
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Check the data path
&lt;/h3&gt;

&lt;p&gt;Follow the data from the input field to the database or storage layer and back to the screen.&lt;/p&gt;

&lt;p&gt;Do not stop at the component that looks correct.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the input normalized or validated?&lt;/li&gt;
&lt;li&gt;Is the data shape the same at every layer?&lt;/li&gt;
&lt;li&gt;Is a missing value treated differently from an empty value?&lt;/li&gt;
&lt;li&gt;Is the saved record loaded from the real source, or only held in local screen state?&lt;/li&gt;
&lt;li&gt;Could an old field name silently produce an empty result?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can update a type, a form, and a query in three different ways. Each change can look reasonable in isolation while the path between them is broken.&lt;/p&gt;

&lt;p&gt;I want to see the contract between layers, not just a collection of green-looking files.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Check who is allowed to do what
&lt;/h3&gt;

&lt;p&gt;A button being hidden is not the same as an action being protected.&lt;/p&gt;

&lt;p&gt;If an app has accounts, private data, paid features, admin actions, or shared workspaces, find the actual authorization check.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the server or database verify ownership?&lt;/li&gt;
&lt;li&gt;Can a user change an ID in a request and read somebody else's record?&lt;/li&gt;
&lt;li&gt;Are create, read, update, and delete rules consistent?&lt;/li&gt;
&lt;li&gt;What happens when the session expires halfway through an action?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The beginner-friendly way to review this is to imagine two test accounts. If account A can change an identifier and see account B's data, the feature is not secure just because the UI shows the right menu.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Check the failure paths
&lt;/h3&gt;

&lt;p&gt;AI often spends most of its attention on the happy path: valid input, working network, existing record, expected response.&lt;/p&gt;

&lt;p&gt;Review the opposite cases deliberately.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What does the user see when the request times out?&lt;/li&gt;
&lt;li&gt;Is a failed save presented as a success?&lt;/li&gt;
&lt;li&gt;Can the user retry without creating duplicates?&lt;/li&gt;
&lt;li&gt;What happens when the response is empty?&lt;/li&gt;
&lt;li&gt;Does an error leave stale data on screen?&lt;/li&gt;
&lt;li&gt;Is a loading state cleared on every exit path?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A feature is not finished when it works once. It is finished when the user can understand what happened when it does not work.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Check the change surface
&lt;/h3&gt;

&lt;p&gt;Ask AI to list every file, schema, route, dependency, permission, and environment variable it changed.&lt;/p&gt;

&lt;p&gt;Then compare that list with the request.&lt;/p&gt;

&lt;p&gt;This catches a common failure mode: a small feature quietly changes shared code used by unrelated screens.&lt;/p&gt;

&lt;p&gt;I also look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duplicated business rules,&lt;/li&gt;
&lt;li&gt;new dependencies that solve a problem the project already solved,&lt;/li&gt;
&lt;li&gt;broad refactors mixed into a narrow feature,&lt;/li&gt;
&lt;li&gt;renamed fields without a migration path,&lt;/li&gt;
&lt;li&gt;fallback behavior that hides a configuration error.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more unrelated surface area a change touches, the more proof it needs. “The new screen works” is not proof that the old screens survived the change.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Check whether the code explains itself
&lt;/h3&gt;

&lt;p&gt;Readable code is a QA tool. If you cannot tell what a function is allowed to change, you cannot review it confidently.&lt;/p&gt;

&lt;p&gt;Look for clear names, small responsibilities, predictable error handling, and comments that explain decisions rather than narrate syntax.&lt;/p&gt;

&lt;p&gt;When AI generates a large function, I ask it to explain:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the inputs it expects,&lt;/li&gt;
&lt;li&gt;the side effects it performs,&lt;/li&gt;
&lt;li&gt;the errors it can return,&lt;/li&gt;
&lt;li&gt;the data it is allowed to read or write,&lt;/li&gt;
&lt;li&gt;the assumptions that would make it unsafe.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If that explanation reveals hidden assumptions, I fix the boundary before polishing the implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  A review prompt I would give AI
&lt;/h2&gt;

&lt;p&gt;You can use this as a starting point:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Review the changed code against this user contract: [write one sentence]. First map the data path from input to persistence to display. Then list every authorization check and identify any action protected only by the UI. Then inspect timeout, empty, invalid-input, duplicate-submit, and expired-session behavior. List every changed file, dependency, schema, route, environment variable, and shared component. Identify regressions this change could cause outside the requested feature. Do not rewrite the code yet. Report evidence by file and function, then give me the smallest safe correction for each issue.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The important instruction is “do not rewrite the code yet.” I want the review before the next burst of generated code. Otherwise AI may confidently patch an assumption that nobody has inspected.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would not use as proof
&lt;/h2&gt;

&lt;p&gt;These are useful signals, but none is enough by itself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The app compiles.&lt;/li&gt;
&lt;li&gt;The page looks right.&lt;/li&gt;
&lt;li&gt;The happy-path demo passed.&lt;/li&gt;
&lt;li&gt;AI says it fixed the bug.&lt;/li&gt;
&lt;li&gt;There are no visible errors in the browser console.&lt;/li&gt;
&lt;li&gt;The code is long and detailed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The proof has to connect the implementation to the user contract. It has to include the boundaries where data, permissions, failures, and unrelated features can leak.&lt;/p&gt;

&lt;h2&gt;
  
  
  My rule for beginners
&lt;/h2&gt;

&lt;p&gt;Do not ask, “Did AI write good code?”&lt;/p&gt;

&lt;p&gt;Ask, “What rule is this code responsible for preserving, and what evidence shows that it still preserves it?”&lt;/p&gt;

&lt;p&gt;That question changes your role. You are no longer grading code by how impressive it looks. You are checking whether the system still behaves like the product you intended to build.&lt;/p&gt;

&lt;p&gt;If you want a guided starting point, I made the &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;AI App Builder Starter Prompts&lt;/a&gt;, and they are free. They help turn a blank prompt box into a more specific conversation about scope, architecture, implementation, and proof.&lt;/p&gt;

&lt;p&gt;For the deeper, end-to-end path from idea through prompting, building, QA, deployment, and launch, the next step is &lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;AI App Builder From Zero&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The goal is not to stop using AI. It is to make AI's speed answer to your standards.&lt;/p&gt;

&lt;p&gt;You can also find me here:&lt;/p&gt;

&lt;p&gt;Medium: &lt;a href="https://medium.com/@marcusykim" rel="noopener noreferrer"&gt;https://medium.com/@marcusykim&lt;/a&gt;&lt;br&gt;
DEV.to: &lt;a href="https://dev.to/marcusykim"&gt;https://dev.to/marcusykim&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="https://marcusykim.com/blog/" rel="noopener noreferrer"&gt;https://marcusykim.com/blog/&lt;/a&gt;&lt;br&gt;
X: &lt;a href="https://x.com/marcusykim" rel="noopener noreferrer"&gt;https://x.com/marcusykim&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/marcusykim/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/marcusykim/&lt;/a&gt;&lt;/p&gt;

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