<?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>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>
    <item>
      <title>What My First Freelance App Taught Me About Scope Creep In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Mon, 20 Jul 2026 18:42:22 +0000</pubDate>
      <link>https://dev.to/marcusykim/what-my-first-freelance-app-taught-me-about-scope-creep-in-2026-39al</link>
      <guid>https://dev.to/marcusykim/what-my-first-freelance-app-taught-me-about-scope-creep-in-2026-39al</guid>
      <description>&lt;p&gt;The most dangerous sentence in a freelance software project is usually not, “We need to rebuild everything.”&lt;/p&gt;

&lt;p&gt;It is, “Could we also add one small thing?”&lt;/p&gt;

&lt;p&gt;One small thing sounds harmless. It sounds like a button, a field, a filter, a notification, or a slightly different screen. It sounds like the kind of request a helpful person should absorb without making a production out of it.&lt;/p&gt;

&lt;p&gt;That is how a project quietly becomes a different project.&lt;/p&gt;

&lt;p&gt;I learned this while working on my first major freelance app project. I was the only person responsible for the work, which meant every new request landed on the same small system: my time, the app's existing behavior, the backend, the QA pass, the next demo, and the client's expectations.&lt;/p&gt;

&lt;p&gt;The lesson was not that clients are bad when they ask for more. Most scope creep is not a villain entering through a trapdoor. It is a reasonable person noticing a better idea after seeing the first version.&lt;/p&gt;

&lt;p&gt;The lesson was that a new feature request is a decision, not a task.&lt;/p&gt;

&lt;p&gt;Every new feature spends one of three resources: time, scope, or money. If you do not name the trade, the project spends the resource silently. Usually, it spends your time first.&lt;/p&gt;

&lt;h2&gt;
  
  
  The helpful-person trap
&lt;/h2&gt;

&lt;p&gt;Freelancers often want to be easy to work with. I understand that instinct. You want the client to feel that you are flexible, collaborative, and invested in the product.&lt;/p&gt;

&lt;p&gt;So a client asks for a change, and you say, “Sure, I can add that.”&lt;/p&gt;

&lt;p&gt;The sentence feels generous because it only describes the coding action. It does not describe the consequences.&lt;/p&gt;

&lt;p&gt;The new button may require a new state. The new state may require a data-model change. The data-model change may touch existing screens. Those screens need testing. The test may reveal a permissions problem. The permissions fix may change the demo. The demo may expose another expectation.&lt;/p&gt;

&lt;p&gt;By the time the feature is visible, “one small thing” has become a chain of decisions.&lt;/p&gt;

&lt;p&gt;AI coding tools make this trap more dangerous because they can produce the first version of a change so quickly. The speed is real, but it can hide the surface area. A generated screen is not the same thing as a completed feature. The feature still has to fit the product, the data, the permissions, the existing user journey, and the promised timeline.&lt;/p&gt;

&lt;p&gt;That is why I now try to pause before accepting the implementation itself.&lt;/p&gt;

&lt;p&gt;The first response to a new request should not be “I will code it.” It should be “Let us understand what changes if we include it.”&lt;/p&gt;

&lt;p&gt;If you want a practical place to learn this kind of project-control habit, I made AI App Builder Starter Prompts, a free pack for turning a rough app idea into a scoped first build with AI:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The three-way trade
&lt;/h2&gt;

&lt;p&gt;When a new request arrives, put it through a simple three-way trade:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep the original date, and remove or delay something else.&lt;/li&gt;
&lt;li&gt;Keep the original scope, and move the date.&lt;/li&gt;
&lt;li&gt;Keep the original date and scope, and add budget or people.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is no secret fourth option where the project receives more work without paying for it somewhere. Sometimes the cost is hidden because the freelancer absorbs it. Sometimes the cost appears later as rushed QA, a missed milestone, a tired developer, or a client who no longer trusts the schedule.&lt;/p&gt;

&lt;p&gt;Naming the trade makes the conversation less personal. You are not rejecting the idea. You are showing the project its actual accounting.&lt;/p&gt;

&lt;p&gt;For a small freelance app, the conversation can be as plain as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That feature makes sense. It touches the event flow and the data behind it, so I see three safe options: add it and move the next milestone, add it and remove another item from this milestone, or treat it as a new piece of work after the current milestone. Which trade do you want to make?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is not bureaucracy. It is a way to stop a project from making an accidental promise.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to inspect before you say yes
&lt;/h2&gt;

&lt;p&gt;Before I accept a new feature, I want an impact scan. It does not need to be a forty-page technical investigation. It needs to expose the places where “small” can become expensive.&lt;/p&gt;

&lt;p&gt;I look at six areas:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. User outcome
&lt;/h3&gt;

&lt;p&gt;What is the user trying to accomplish now?&lt;/p&gt;

&lt;p&gt;If the request does not create a clearer user outcome, it may be decoration, a preference, or a future idea rather than a current requirement.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Who uses this?&lt;/li&gt;
&lt;li&gt;What can they do after the change that they cannot do now?&lt;/li&gt;
&lt;li&gt;Is that outcome part of the current promise?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Existing workflow
&lt;/h3&gt;

&lt;p&gt;Which current path changes?&lt;/p&gt;

&lt;p&gt;A new control placed on a screen may alter the order of actions, empty states, loading states, error states, or navigation. A request can be small in code and large in behavior.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Does this create a new step?&lt;/li&gt;
&lt;li&gt;Does it change what “done” looks like?&lt;/li&gt;
&lt;li&gt;What happens when the user cancels, retries, or has no data?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Data and ownership
&lt;/h3&gt;

&lt;p&gt;Does the feature need new information to be stored, shared, or associated with a person?&lt;/p&gt;

&lt;p&gt;This is where many beginner projects discover that a screen is only the visible part of the request. If the data does not persist, belong to the right user, or survive the next session, the feature is not finished.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;What data is created or changed?&lt;/li&gt;
&lt;li&gt;Who owns it?&lt;/li&gt;
&lt;li&gt;Who can see or edit it?&lt;/li&gt;
&lt;li&gt;Does the existing schema support it?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Integrations and permissions
&lt;/h3&gt;

&lt;p&gt;Does the feature involve notifications, location, payments, email, an outside API, or a new account boundary?&lt;/p&gt;

&lt;p&gt;Each integration adds a contract and a failure path. The happy-path demo is the cheapest part.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;What external service or permission is required?&lt;/li&gt;
&lt;li&gt;What happens when the user denies access?&lt;/li&gt;
&lt;li&gt;What happens when the provider is unavailable?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Proof
&lt;/h3&gt;

&lt;p&gt;How will we know the feature works?&lt;/p&gt;

&lt;p&gt;I want the proof named before the feature is treated as complete. That might be a user completing a workflow, data surviving a restart, two accounts seeing the correct boundaries, or a failed request producing a useful recovery state.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;What will I demonstrate?&lt;/li&gt;
&lt;li&gt;What will I test with bad input or missing data?&lt;/li&gt;
&lt;li&gt;What existing behavior could this accidentally break?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Schedule and trade
&lt;/h3&gt;

&lt;p&gt;What does the request displace?&lt;/p&gt;

&lt;p&gt;This is the area people skip because it feels commercial. But schedule is part of the product promise. If the new request takes two days, those two days have to come from somewhere.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Does the milestone move?&lt;/li&gt;
&lt;li&gt;Does another feature move out?&lt;/li&gt;
&lt;li&gt;Does this become a separately priced change?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A better change-request note
&lt;/h2&gt;

&lt;p&gt;For a new request, I would write a short note with these fields:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Requested change:

User outcome:

Existing workflow affected:

Data, permissions, or integrations affected:

New QA proof:

Estimated effort and risk:

Trade chosen: date, scope, or money:

Next decision:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The point is not to create paperwork for its own sake. The point is to make the invisible parts visible while the request is still easy to discuss.&lt;/p&gt;

&lt;p&gt;This note also gives an AI coding tool something better than “add this feature.” You can ask the tool to inspect the repository against the change-request note, list the affected files and contracts, identify unknowns, and wait for approval before editing.&lt;/p&gt;

&lt;p&gt;The prompt I would use is roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Before changing code, analyze this requested feature against the current project.

Return:
1. The user outcome.
2. Existing workflows and data affected.
3. New permissions or integrations required.
4. Failure and empty states.
5. QA proof needed.
6. The smallest implementation that meets the outcome.
7. What the feature may displace in the current milestone.

Do not edit files until I approve the impact scan and the schedule trade.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last sentence matters. If the AI starts coding while the request is still being negotiated, the project can become emotionally committed to a solution before anyone has agreed on the cost.&lt;/p&gt;

&lt;p&gt;The free starter prompts are useful for this pause because they turn a vague request into a sequence of questions: what is the outcome, what belongs in version one, what does the tool need to know, and how will you verify the result? You can find that free pack here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope control is part of client service
&lt;/h2&gt;

&lt;p&gt;There is a fear that talking about scope makes you seem difficult. In my experience, the opposite is often true when the conversation is calm and specific.&lt;/p&gt;

&lt;p&gt;Clients usually do not need a freelancer to say yes to every idea. They need someone to help them understand what the idea means. A useful freelancer can say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Yes, here is what it would take.”&lt;/li&gt;
&lt;li&gt;“Not in this milestone, but here is where it fits.”&lt;/li&gt;
&lt;li&gt;“We can add it if we remove this other item.”&lt;/li&gt;
&lt;li&gt;“I do not know yet; I need to inspect the data and workflow first.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not resistance. It is professional translation.&lt;/p&gt;

&lt;p&gt;The same principle applies when you are building your own app. You are both the client and the freelancer, which means you can give yourself unlimited requests and then blame the project for taking forever.&lt;/p&gt;

&lt;p&gt;Do not do that.&lt;/p&gt;

&lt;p&gt;Keep a change log. When a new idea appears, record it, classify it as now, next, or later, and write down what it would cost. You are not killing creativity. You are giving creativity a place to wait without hijacking the current build.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would do differently now
&lt;/h2&gt;

&lt;p&gt;On my first major freelance project, I learned that technical effort and project agreement are separate problems.&lt;/p&gt;

&lt;p&gt;I can ask Codex to help implement a change. That does not mean the change belongs in the current milestone. I can make a screen look convincing. That does not mean the user workflow, data, permissions, and QA are finished. I can be excited about a feature. That does not mean the original deadline should remain unchanged.&lt;/p&gt;

&lt;p&gt;The better sequence is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Translate the request into a user outcome.&lt;/li&gt;
&lt;li&gt;Scan the workflow, data, permissions, integrations, and QA impact.&lt;/li&gt;
&lt;li&gt;Name the smallest useful version.&lt;/li&gt;
&lt;li&gt;Choose the trade: time, scope, or money.&lt;/li&gt;
&lt;li&gt;Update the milestone or change log.&lt;/li&gt;
&lt;li&gt;Then ask AI to implement the approved slice.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The order protects both sides of the relationship. The client gets an honest decision. The freelancer gets a project that can still be finished. The AI gets a bounded job instead of a moving target.&lt;/p&gt;

&lt;p&gt;I made a free AI App Builder Starter Prompts pack for beginners who want help turning app ideas and build requests into clearer conversations with AI:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the starter prompts are useful and you want the deeper field manual, AI App Builder From Zero walks through idea, scope, stack, prompting, QA, deployment, and launch:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-from-zero&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My rule now is simple: a new feature can be a good idea and still be the wrong thing to build next.&lt;/p&gt;

&lt;p&gt;Before you say yes, make the project name the trade.&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>freelance</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>A Beginner's Guide To APIs And Integrations In AI-Built Apps In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Sat, 18 Jul 2026 18:47:31 +0000</pubDate>
      <link>https://dev.to/marcusykim/a-beginners-guide-to-apis-and-integrations-in-ai-built-apps-in-2026-iho</link>
      <guid>https://dev.to/marcusykim/a-beginners-guide-to-apis-and-integrations-in-ai-built-apps-in-2026-iho</guid>
      <description>&lt;p&gt;The fastest way to make your first AI-built app confusing is to say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add an API.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sentence sounds like a feature request. It is actually a small pile of unanswered questions wearing a trench coat.&lt;/p&gt;

&lt;p&gt;Which API?&lt;/p&gt;

&lt;p&gt;What information goes into it?&lt;/p&gt;

&lt;p&gt;What comes back?&lt;/p&gt;

&lt;p&gt;Who is allowed to call it?&lt;/p&gt;

&lt;p&gt;What happens when the service is slow, unavailable, or returns an error?&lt;/p&gt;

&lt;p&gt;Does each request cost money?&lt;/p&gt;

&lt;p&gt;Where do the credentials live?&lt;/p&gt;

&lt;p&gt;How will you know the integration worked instead of merely producing a pretty loading state?&lt;/p&gt;

&lt;p&gt;I have watched AI coding tools move quickly when the target is clear. I have also watched them turn a vague integration request into a small haunted house: a button, a spinner, a secret key in the wrong place, a response nobody understands, and a fallback that says “Something went wrong” forever.&lt;/p&gt;

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

&lt;p&gt;An integration is not a button you add to an app. It is a contract between your app and another system.&lt;/p&gt;

&lt;p&gt;If you can describe the contract, AI can help you implement it. If you cannot describe the contract, AI will fill in the blanks, and it will do so with the confidence of a person who has never met your product but has already rearranged your kitchen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start With The Ingredient, Not The Feature
&lt;/h2&gt;

&lt;p&gt;The easiest analogy I know is cooking.&lt;/p&gt;

&lt;p&gt;Your app is the meal. An API is an ingredient or an outside kitchen you are asking to do one job for you.&lt;/p&gt;

&lt;p&gt;You need to know what the ingredient is, how much you need, how it should be prepared, what it tastes like when it is missing, and whether it is safe for the person eating the meal.&lt;/p&gt;

&lt;p&gt;“Use an API” is like telling a beginner cook, “Add a mysterious liquid.” That may technically move the recipe forward, but it does not create a dependable dinner.&lt;/p&gt;

&lt;p&gt;Before you ask AI to connect anything, write one sentence in this format:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When [user] does [action], my app sends [specific input] to [outside service] so it can return [specific output], which my app uses to [user outcome].&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;blockquote&gt;
&lt;p&gt;When a musician saves a rough recording, my app sends the audio file and optional tempo note to the transcription service so it can return a timestamped text draft, which my app uses to make the idea searchable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sentence is already better than “Add transcription.” It gives you a user, an action, an input, an outside capability, an output, and a reason the integration exists.&lt;/p&gt;

&lt;p&gt;Before going further, 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;, a free pack that helps you turn a rough app idea into a conversation about scope, screens, data, debugging, QA, deployment, and launch. It is useful here because the blank prompt should not be where you first discover that your integration has no defined input or finish line.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Seven Parts Of An Integration Contract
&lt;/h2&gt;

&lt;p&gt;When I am deciding whether an AI-built app is ready to depend on an outside service, I want seven answers.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The input
&lt;/h3&gt;

&lt;p&gt;What exactly does your app send?&lt;/p&gt;

&lt;p&gt;Do not stop at “the user's data.” Name the data.&lt;/p&gt;

&lt;p&gt;It might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a search phrase;&lt;/li&gt;
&lt;li&gt;an image file;&lt;/li&gt;
&lt;li&gt;an audio recording;&lt;/li&gt;
&lt;li&gt;a location and radius;&lt;/li&gt;
&lt;li&gt;a payment amount and currency;&lt;/li&gt;
&lt;li&gt;a list of calendar events;&lt;/li&gt;
&lt;li&gt;a text prompt and a selected language; or&lt;/li&gt;
&lt;li&gt;a record ID your own database already owns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Input details matter because APIs are literal. A person may understand that a “photo” is a photo. The service may require a file type, size limit, encoding, or URL it can actually reach.&lt;/p&gt;

&lt;p&gt;Ask AI to list the exact input fields, their types, required versus optional status, size limits, and examples of valid and invalid values.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The output
&lt;/h3&gt;

&lt;p&gt;What comes back, and what does your app do with it?&lt;/p&gt;

&lt;p&gt;An API response is not automatically a screen. It may contain a result, an ID, a status, warnings, pagination, usage information, or several possible error shapes.&lt;/p&gt;

&lt;p&gt;If the service returns a generated image, your app may need to save a URL, download a file, show a preview, and give the user a way to retry. If it returns a delivery status, your app may need to show “queued,” “sent,” “failed,” and “unknown” instead of pretending every response is success.&lt;/p&gt;

&lt;p&gt;Write the smallest useful output your first version needs. Do not ask AI to expose every field merely because the service returned it.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Permission and secrets
&lt;/h3&gt;

&lt;p&gt;Which part of the app is allowed to call the service, and where do the credentials live?&lt;/p&gt;

&lt;p&gt;This is related to authentication, but it is not the same lesson as the account boundary in your app. Here the question is whether your app is allowed to use another system, and whether a secret key is being protected from the people using your app.&lt;/p&gt;

&lt;p&gt;Never treat a private API key like a normal display value. A key placed in a public client bundle may be copied. A key pasted into a visible prompt or committed to a repository may travel farther than you intended.&lt;/p&gt;

&lt;p&gt;Ask AI to explain:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;whether the call belongs on the client, server, or a controlled backend function;&lt;/li&gt;
&lt;li&gt;which credential is required;&lt;/li&gt;
&lt;li&gt;which permissions that credential has;&lt;/li&gt;
&lt;li&gt;how the key is stored in development and production; and&lt;/li&gt;
&lt;li&gt;how the key can be revoked or rotated.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you cannot explain where the secret lives, you are not ready to ship the integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Failure states
&lt;/h3&gt;

&lt;p&gt;What happens when the outside service does not cooperate?&lt;/p&gt;

&lt;p&gt;This is where many AI-generated demos become theater. The happy path works once, the button looks impressive, and the first timeout turns the whole feature into a shrug.&lt;/p&gt;

&lt;p&gt;List the failures before you build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the user is offline;&lt;/li&gt;
&lt;li&gt;the request times out;&lt;/li&gt;
&lt;li&gt;the service returns a validation error;&lt;/li&gt;
&lt;li&gt;the service rate-limits you;&lt;/li&gt;
&lt;li&gt;the credential is missing or expired;&lt;/li&gt;
&lt;li&gt;the response is empty or malformed;&lt;/li&gt;
&lt;li&gt;the request succeeds but your app fails to save the result; or&lt;/li&gt;
&lt;li&gt;the service succeeds twice because the user tapped the button twice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your user does not need a lecture about HTTP status codes. They do need an honest next action: correct the input, retry, wait, contact support, or continue without the integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Cost and limits
&lt;/h3&gt;

&lt;p&gt;What does one request cost, and how often can a user make it?&lt;/p&gt;

&lt;p&gt;Some services are free only within a small quota. Some charge per request, per image, per minute of audio, per token, or per stored item. Some limit concurrent requests. Some become expensive precisely when your feature starts working.&lt;/p&gt;

&lt;p&gt;For a first app, write down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the unit you are charged for;&lt;/li&gt;
&lt;li&gt;the free or included limit;&lt;/li&gt;
&lt;li&gt;the expected cost of one normal user action;&lt;/li&gt;
&lt;li&gt;the behavior when the quota is reached; and&lt;/li&gt;
&lt;li&gt;whether a user can accidentally trigger duplicate requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not financial modeling. It is basic product safety. A button that can create an uncontrolled bill is not finished just because the API response renders.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Ownership and storage
&lt;/h3&gt;

&lt;p&gt;Where does the result belong after the request finishes?&lt;/p&gt;

&lt;p&gt;Does the response only live on screen? Does it belong to the signed-in user? Does it need to be associated with an existing project, recording, order, or message? Can it be deleted? Can it be regenerated without charging the user twice?&lt;/p&gt;

&lt;p&gt;Your backend article may have helped you decide whether your app needs persistence. The integration question is narrower: if this outside service returns something valuable, how does your app connect that result to the user workflow?&lt;/p&gt;

&lt;p&gt;For every returned item, name:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the record that owns it;&lt;/li&gt;
&lt;li&gt;the place it is stored;&lt;/li&gt;
&lt;li&gt;the identifier that ties it to the request;&lt;/li&gt;
&lt;li&gt;the retention or deletion behavior; and&lt;/li&gt;
&lt;li&gt;what the user sees after leaving and returning to the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the result matters tomorrow, do not leave it trapped in today's screen state.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Proof
&lt;/h3&gt;

&lt;p&gt;How will you prove the integration works?&lt;/p&gt;

&lt;p&gt;Do not use “the API call returned 200” as the whole test. A technically successful request can still create a broken user experience.&lt;/p&gt;

&lt;p&gt;Test the complete path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with a known valid input.&lt;/li&gt;
&lt;li&gt;Confirm the request leaves your app with the expected fields.&lt;/li&gt;
&lt;li&gt;Confirm the service response is parsed into the expected result.&lt;/li&gt;
&lt;li&gt;Confirm the result appears where the user needs it.&lt;/li&gt;
&lt;li&gt;Refresh or relaunch and check whether the result still exists when it should.&lt;/li&gt;
&lt;li&gt;Test an invalid input.&lt;/li&gt;
&lt;li&gt;Test a timeout, offline state, or simulated service failure.&lt;/li&gt;
&lt;li&gt;Tap twice and check for duplicate work or duplicate charges.&lt;/li&gt;
&lt;li&gt;Confirm secrets are not visible in the client or logs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The integration is not done when the API answers. It is done when the user's promised outcome survives the full path and the failure paths are understandable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Prompt I Would Give AI Before Adding An Integration
&lt;/h2&gt;

&lt;p&gt;I would not start with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add Stripe.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That names a tool, not a product behavior.&lt;/p&gt;

&lt;p&gt;I would give AI something closer to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I am adding one integration to a beginner app.

User outcome:
[what the user should be able to accomplish]

Trigger:
[the exact user action]

Outside service:
[service name and the capability we need]

Input contract:
[required fields, optional fields, file types, limits, and examples]

Output contract:
[the smallest result my app needs and where it should appear]

Permissions and secrets:
[who can call it, where the credential must live, and what must never be exposed]

Failure behavior:
[offline, timeout, invalid input, rate limit, expired credential, malformed response, duplicate tap]

Cost and limits:
[what one request costs, quota, and what happens when the limit is reached]

Ownership and storage:
[which user/project record owns the result and whether it must survive relaunch]

QA proof:
[the happy path plus the failure cases I will test]

Before changing code, explain the smallest safe architecture, list the files or services that need to change, identify assumptions, and propose a test plan. Do not add a second provider, background job, analytics system, or abstraction layer unless the user outcome requires it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The last sentence is important. AI likes to be helpful by building an airport when you asked for a bicycle rack. An integration contract gives it a runway length.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Beginner Integration Checklist
&lt;/h2&gt;

&lt;p&gt;Save this checklist somewhere your project and AI tool can both see it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] I can name the user outcome, not just the service name.&lt;/li&gt;
&lt;li&gt;[ ] I know the exact trigger that starts the request.&lt;/li&gt;
&lt;li&gt;[ ] I listed the input fields and invalid-input cases.&lt;/li&gt;
&lt;li&gt;[ ] I listed the smallest useful output.&lt;/li&gt;
&lt;li&gt;[ ] I know where the call runs and where secrets live.&lt;/li&gt;
&lt;li&gt;[ ] I know which users or roles can trigger it.&lt;/li&gt;
&lt;li&gt;[ ] I named offline, timeout, rate-limit, credential, and malformed-response behavior.&lt;/li&gt;
&lt;li&gt;[ ] I know the cost, quota, and duplicate-request risk.&lt;/li&gt;
&lt;li&gt;[ ] I know who owns the result and whether it survives relaunch.&lt;/li&gt;
&lt;li&gt;[ ] I have a test that proves the user outcome, not only a successful API response.&lt;/li&gt;
&lt;li&gt;[ ] I know what the user can do when the service fails.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you cannot check the boxes, do not let the integration expand into five more features. Narrow the first version until you can explain the complete path.&lt;/p&gt;

&lt;p&gt;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; are a practical next step if you want guided prompts for this kind of scoping, architecture, build, debugging, QA, and launch work. The starter prompts are free, and you can use them with your AI coding tool while the project is open.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Operating Rule
&lt;/h2&gt;

&lt;p&gt;When AI suggests an API or integration, do not ask only, “Can you add it?”&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;What enters the system, what leaves it, who is allowed to trigger it, what can fail, what can it cost, where does the result belong, and how will I prove the user outcome?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question turns an integration from a shiny feature into a piece of software you can reason about.&lt;/p&gt;

&lt;p&gt;I learned this kind of discipline through software engineering study, startup iOS work, and freelance app development. The tool can write a surprising amount of code. It cannot decide what your product promises, what tradeoff you can afford, or what failure your user can tolerate unless you give it those decisions.&lt;/p&gt;

&lt;p&gt;If you want the deeper build-along field manual behind the free prompts, &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; walks through idea generation, scope, stack choice, project rules, prompting, architecture, QA, deployment, and launch.&lt;/p&gt;

&lt;p&gt;The practical takeaway is this:&lt;/p&gt;

&lt;p&gt;An API is not a shortcut around product thinking. It is a new relationship your app now has to manage.&lt;/p&gt;

&lt;p&gt;Name the input. Name the output. Protect the permission. Plan the failure. Count the cost. Connect the result to the user's workflow. Test the promise.&lt;/p&gt;

&lt;p&gt;Then let AI help you build the boring, dependable version.&lt;/p&gt;

&lt;p&gt;For first-time builders, boring and dependable is a much better feature than impressive and haunted.&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;, a free pack for turning a rough app idea into a scoped AI-assisted build with practical prompts for planning, architecture, debugging, QA, deployment, and launch.&lt;/p&gt;

&lt;p&gt;If you want the full build-along field manual behind the free prompts, &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 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/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>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Authentication Is Not Just A Login Screen: A Beginner's Guide To Account Boundaries In AI-Built Apps In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Sat, 18 Jul 2026 01:55:53 +0000</pubDate>
      <link>https://dev.to/marcusykim/authentication-is-not-just-a-login-screen-a-beginners-guide-to-account-boundaries-in-ai-built-1jf3</link>
      <guid>https://dev.to/marcusykim/authentication-is-not-just-a-login-screen-a-beginners-guide-to-account-boundaries-in-ai-built-1jf3</guid>
      <description>&lt;p&gt;The login screen is one of the most convincing fake signs of progress in a beginner app.&lt;/p&gt;

&lt;p&gt;It has the right fields.&lt;/p&gt;

&lt;p&gt;It has a button that says &lt;strong&gt;Sign In&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It may even show a friendly little spinner before landing you on a dashboard with three sample records and a profile avatar that appears to know what it is doing.&lt;/p&gt;

&lt;p&gt;That does not prove your app has authentication.&lt;/p&gt;

&lt;p&gt;It proves that your app has a front door.&lt;/p&gt;

&lt;p&gt;Authentication starts with a harder question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who is this person, what are they allowed to do, and how does the app keep that boundary true after the screen changes?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That distinction matters even more when you are building with AI. If you ask an AI coding tool to “add login,” it may create a polished form while leaving the actual ownership and permission rules vague. The interface looks finished because the visible part is finished.&lt;/p&gt;

&lt;p&gt;The invisible part is where trust lives.&lt;/p&gt;

&lt;p&gt;If you are at the stage where you need help turning a rough app idea into a controlled first build, I made the &lt;strong&gt;free&lt;/strong&gt; AI App Builder Starter Prompts pack for beginners:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The prompts help you make the project more explicit before your coding tool starts filling in the blanks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Think Of Authentication As A Bouncer
&lt;/h2&gt;

&lt;p&gt;The simplest analogy I use is a bouncer at a venue.&lt;/p&gt;

&lt;p&gt;The bouncer answers a few different questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this person known to the venue?&lt;/li&gt;
&lt;li&gt;Did they prove who they are?&lt;/li&gt;
&lt;li&gt;Are they allowed inside this area?&lt;/li&gt;
&lt;li&gt;Are they allowed to do what they are trying to do?&lt;/li&gt;
&lt;li&gt;What happens if their pass expires or they leave?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are not one question. They are several jobs that beginners often blend together under the word “login.”&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Authentication&lt;/strong&gt; asks, “Who are you?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authorization&lt;/strong&gt; asks, “What are you allowed to see or change?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session management&lt;/strong&gt; asks, “How does the app remember that you already proved who you are?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Account recovery&lt;/strong&gt; asks, “What happens when you forget your password, lose access, or need to sign out everywhere?”&lt;/p&gt;

&lt;p&gt;The login screen is only one small part of that system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write The Account Contract Before You Ask AI To Code
&lt;/h2&gt;

&lt;p&gt;Before I let AI build account features, I write a short contract in plain English.&lt;/p&gt;

&lt;p&gt;It does not need to sound like a security textbook. It needs to remove the guesses that cause the most damage.&lt;/p&gt;

&lt;p&gt;For a simple private notes app, the 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;Each account has a unique user ID.

Each note belongs to exactly one user.

A signed-in user can create, read, edit, and delete only their own notes.

A logged-out visitor cannot read private notes or reach private screens.

Refreshing the page must not change ownership.

Signing out must remove access from the current session.

Password recovery must not reveal whether an unrelated email address has an account.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is already more useful than “add secure authentication.”&lt;/p&gt;

&lt;p&gt;The contract gives you something to inspect. It gives AI a set of behaviors to implement. It gives QA a set of claims to challenge.&lt;/p&gt;

&lt;p&gt;It also gives you a way to notice when the app has a beautiful login screen but no real account boundary behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identity Is Not Ownership
&lt;/h2&gt;

&lt;p&gt;A common beginner mistake is assuming that because the app knows who you are, it knows what belongs to you.&lt;/p&gt;

&lt;p&gt;Those are related, but they are not identical.&lt;/p&gt;

&lt;p&gt;Imagine a user called Marcus signs in successfully. The app can display “Welcome, Marcus,” but that does not automatically mean every database query is limited to Marcus's records.&lt;/p&gt;

&lt;p&gt;The data layer still needs an ownership rule.&lt;/p&gt;

&lt;p&gt;For every private record, ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which user owns this record?&lt;/li&gt;
&lt;li&gt;Where is that owner ID stored?&lt;/li&gt;
&lt;li&gt;Does the create operation assign the owner from the authenticated session, or trust an ID supplied by the client?&lt;/li&gt;
&lt;li&gt;Does every read filter by the current user?&lt;/li&gt;
&lt;li&gt;Does every edit check ownership before changing anything?&lt;/li&gt;
&lt;li&gt;Does every delete check ownership before removing anything?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the part I want a beginner to understand: a user ID in a screen, hidden field, or request body is not proof of identity. The app should derive sensitive ownership from the authenticated session and enforce it where the data is actually protected.&lt;/p&gt;

&lt;p&gt;Otherwise, a curious user may be able to replace one ID with another and ask for somebody else's records. The UI may never show a button for that. The boundary can still be missing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make The Permission Table Boring
&lt;/h2&gt;

&lt;p&gt;You do not need a complicated role system for your first app. You do need a clear permission table.&lt;/p&gt;

&lt;p&gt;Start with the smallest roles your product genuinely needs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Logged out&lt;/th&gt;
&lt;th&gt;Signed-in owner&lt;/th&gt;
&lt;th&gt;Other signed-in user&lt;/th&gt;
&lt;th&gt;Admin, if truly needed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Private note&lt;/td&gt;
&lt;td&gt;No access&lt;/td&gt;
&lt;td&gt;Create, read, edit, delete&lt;/td&gt;
&lt;td&gt;No access&lt;/td&gt;
&lt;td&gt;Only if the product requires support access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public profile&lt;/td&gt;
&lt;td&gt;Read only if designed as public&lt;/td&gt;
&lt;td&gt;Edit own profile&lt;/td&gt;
&lt;td&gt;Read public fields only&lt;/td&gt;
&lt;td&gt;Edit only for a defined operational reason&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Event&lt;/td&gt;
&lt;td&gt;Read only if public&lt;/td&gt;
&lt;td&gt;RSVP or manage if owner&lt;/td&gt;
&lt;td&gt;RSVP according to the product rule&lt;/td&gt;
&lt;td&gt;Moderate only if the role exists&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The table makes vague requests uncomfortable, which is useful.&lt;/p&gt;

&lt;p&gt;“Users can manage events” is too fuzzy.&lt;/p&gt;

&lt;p&gt;Can any user edit any event? Can only the host edit it? Can attendees change the time? Can a deleted account leave the event without an owner? Does the event become public after a share link is copied?&lt;/p&gt;

&lt;p&gt;You do not have to solve every future question on day one. You do have to decide which questions version one is actually promising to answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four Authentication States I Would Test First
&lt;/h2&gt;

&lt;p&gt;AI-generated account flows often get tested only in the happiest possible state: one developer account, one browser, one successful login.&lt;/p&gt;

&lt;p&gt;That is not enough.&lt;/p&gt;

&lt;p&gt;I would test at least these four states.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Logged Out
&lt;/h3&gt;

&lt;p&gt;Open the app in a fresh session.&lt;/p&gt;

&lt;p&gt;Try to visit a private URL directly.&lt;/p&gt;

&lt;p&gt;Try to call the action that creates or edits private data.&lt;/p&gt;

&lt;p&gt;The app should either send you to the right entry point or return a clear, safe response. It should not briefly render private content and hide it later like a stage magician who forgot the trick.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Signed In As Account A
&lt;/h3&gt;

&lt;p&gt;Create a record and confirm it belongs to Account A.&lt;/p&gt;

&lt;p&gt;Refresh the app. Leave and return. Sign out and sign back in.&lt;/p&gt;

&lt;p&gt;The record should still be there for Account A if persistence is part of the promise. The app should not silently switch the record to a default user or a shared test account.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Signed In As Account B
&lt;/h3&gt;

&lt;p&gt;Use a genuinely separate account, not a second tab pretending to be a different person.&lt;/p&gt;

&lt;p&gt;Try to find, edit, or delete Account A's private record.&lt;/p&gt;

&lt;p&gt;The expected result is not merely “the button is hidden.” The server-side or data-layer rule should reject unauthorized access too.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Expired Or Removed Access
&lt;/h3&gt;

&lt;p&gt;Sign out, expire the session if your platform supports that test, or remove a user's access according to the product's rules.&lt;/p&gt;

&lt;p&gt;Then try the old page, an old tab, and a direct request.&lt;/p&gt;

&lt;p&gt;This catches the difference between a UI that changed state and an actual permission boundary that still holds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Password Recovery Is Part Of The Product
&lt;/h2&gt;

&lt;p&gt;Beginners often treat password recovery as a later polish item because the login screen is more visible.&lt;/p&gt;

&lt;p&gt;But recovery is where your app explains what it believes about identity.&lt;/p&gt;

&lt;p&gt;At minimum, decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the user recover with email, a social login, a magic link, or another method?&lt;/li&gt;
&lt;li&gt;Does the recovery message avoid exposing whether an email exists?&lt;/li&gt;
&lt;li&gt;What happens when the link is expired or already used?&lt;/li&gt;
&lt;li&gt;Can the user set a new password without being logged in?&lt;/li&gt;
&lt;li&gt;Are existing sessions kept, revoked, or reviewed after a password change?&lt;/li&gt;
&lt;li&gt;Where can the user sign out of the current device?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need to build every enterprise account feature for version one. You need a recovery path that matches the promise you are making to a real user.&lt;/p&gt;

&lt;p&gt;If a person can lose access to their work with no clear way back in, that is not a minor missing button. It is a gap in the product's trust model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do Not Let AI Invent A Security Shortcut
&lt;/h2&gt;

&lt;p&gt;When an AI tool is trying to get a prototype working, it may suggest shortcuts that are acceptable only in a tightly controlled local demo.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;storing a password in plain text&lt;/li&gt;
&lt;li&gt;using one shared test account for every user&lt;/li&gt;
&lt;li&gt;trusting a user ID sent from the browser&lt;/li&gt;
&lt;li&gt;making every record readable during development&lt;/li&gt;
&lt;li&gt;disabling rules because they make a test fail&lt;/li&gt;
&lt;li&gt;putting secret keys in client-side code&lt;/li&gt;
&lt;li&gt;treating a hidden button as the permission system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the tool suggests one of these, stop and ask it to explain the risk before accepting the change.&lt;/p&gt;

&lt;p&gt;Here is the prompt I would use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I am building [app] for [user]. Define the authentication and authorization contract before changing code.

List:
1. the identity source and session behavior
2. each private resource and its owner
3. who can read, create, edit, and delete each resource
4. what logged-out users can access
5. password recovery and sign-out behavior
6. the data-layer rules that enforce ownership
7. tests for Account A, Account B, logged-out access, refresh, and expired access

Do not use hidden UI buttons, client-supplied ownership IDs, shared passwords, or broad public read/write rules as shortcuts. Explain the smallest safe implementation for version one before writing code.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That prompt is useful because it makes the AI describe the boundary before it starts moving files around.&lt;/p&gt;

&lt;p&gt;The free AI App Builder Starter Prompts pack includes practical prompts for planning, architecture, debugging, QA, and launch. It is free, and it is meant to help you turn the blank prompt box into a controlled build conversation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Beginner Definition Of Done For Authentication
&lt;/h2&gt;

&lt;p&gt;I would not call the account system done when a test user can sign in.&lt;/p&gt;

&lt;p&gt;I would call it ready for a first release when:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;a new user can create an account or use the chosen sign-in method;&lt;/li&gt;
&lt;li&gt;the app can tell the difference between logged-out and signed-in states;&lt;/li&gt;
&lt;li&gt;private records have an explicit owner;&lt;/li&gt;
&lt;li&gt;the owner can complete the promised create, read, edit, and delete actions;&lt;/li&gt;
&lt;li&gt;another account cannot cross that boundary;&lt;/li&gt;
&lt;li&gt;direct private URLs and requests are protected, not just hidden in the UI;&lt;/li&gt;
&lt;li&gt;refresh, sign-out, and the promised recovery path behave predictably; and&lt;/li&gt;
&lt;li&gt;the AI-generated implementation has been tested with more than one account.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is a small definition. It is still a real one.&lt;/p&gt;

&lt;p&gt;When I managed iOS work at a startup, shared rules around schemas, feature ownership, and team communication mattered because one person's shortcut could create work for everybody else. Authentication has the same shape in a beginner app: an unclear rule at the boundary becomes a confusing problem everywhere else.&lt;/p&gt;

&lt;p&gt;The goal is not to build a bank on your first weekend.&lt;/p&gt;

&lt;p&gt;The goal is to make the promise of your app match the access rules behind it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Practical Takeaway
&lt;/h2&gt;

&lt;p&gt;Before you ask AI to build login, write down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;who the users are;&lt;/li&gt;
&lt;li&gt;what proves identity;&lt;/li&gt;
&lt;li&gt;what data belongs to each user;&lt;/li&gt;
&lt;li&gt;which actions each role can perform;&lt;/li&gt;
&lt;li&gt;what logged-out users can see;&lt;/li&gt;
&lt;li&gt;what recovery and sign-out mean; and&lt;/li&gt;
&lt;li&gt;how you will prove the boundary with two separate accounts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then ask AI to explain the contract, propose the smallest safe implementation, and give you a test plan before it writes the code.&lt;/p&gt;

&lt;p&gt;That is how you keep a login screen from becoming a costume for a missing security model.&lt;/p&gt;

&lt;p&gt;If you want the practical starting point, the &lt;strong&gt;free&lt;/strong&gt; AI App Builder Starter Prompts are here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want the full build-along field manual behind the free prompts, &lt;strong&gt;AI App Builder From Zero&lt;/strong&gt; walks through idea, scope, stack, architecture, prompting, QA, deployment, and launch:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-from-zero&lt;/a&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/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>webdev</category>
      <category>ai</category>
      <category>security</category>
      <category>programming</category>
    </item>
    <item>
      <title>How I Use Client Demos To Manage Freelance App Projects In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Mon, 13 Jul 2026 18:54:18 +0000</pubDate>
      <link>https://dev.to/marcusykim/how-i-use-client-demos-to-manage-freelance-app-projects-in-2026-m1</link>
      <guid>https://dev.to/marcusykim/how-i-use-client-demos-to-manage-freelance-app-projects-in-2026-m1</guid>
      <description>&lt;p&gt;A software project can look extremely busy while delivering almost nothing a client can use.&lt;/p&gt;

&lt;p&gt;Files changed. Components added. Bugs moved from one corner of the app to another corner where they can enjoy a little vacation. The task board glows with activity.&lt;/p&gt;

&lt;p&gt;Then the client asks a painfully reasonable question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can I do now that I could not do before?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the answer takes ten minutes, three diagrams, and a guided tour of the codebase, the project probably does not have a communication problem.&lt;/p&gt;

&lt;p&gt;It has a delivery problem.&lt;/p&gt;

&lt;p&gt;One of the most useful lessons from my freelance app work is that the demo can act like the project manager. I do not mean that a screen share replaces scope, milestones, QA, or human judgment. I mean that the next honest demonstration can organize all of them around something real.&lt;/p&gt;

&lt;p&gt;My rule is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Every meaningful client update should show one new outcome a real user can complete.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not one new screen.&lt;/p&gt;

&lt;p&gt;Not one impressive technical system.&lt;/p&gt;

&lt;p&gt;One outcome.&lt;/p&gt;

&lt;p&gt;That rule gives you a practical way to choose what to build, decide what to postpone, ask for useful feedback, and keep AI-generated activity from masquerading as progress.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Status Report Can Hide An Unfinished App
&lt;/h2&gt;

&lt;p&gt;Traditional progress updates often describe motion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added authentication&lt;/li&gt;
&lt;li&gt;Connected the database&lt;/li&gt;
&lt;li&gt;Built the profile screen&lt;/li&gt;
&lt;li&gt;Fixed navigation&lt;/li&gt;
&lt;li&gt;Started notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those lines are not useless. They are just incomplete.&lt;/p&gt;

&lt;p&gt;Authentication might exist while account recovery fails. A database might be connected while saved data disappears after refresh. A profile screen might look finished while the Save button does nothing. Navigation might work only on the exact path the developer happened to click.&lt;/p&gt;

&lt;p&gt;A demo forces a stronger sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A new user can create an account, finish their profile, close the app, sign back in, and still see the information they saved.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now the project has a visible claim.&lt;/p&gt;

&lt;p&gt;You can run it. The client can inspect it. QA can attack it. If it breaks, everybody knows what “it” is.&lt;/p&gt;

&lt;p&gt;That is why I like demo-shaped work. It turns progress from a pile of technical nouns into a user verb.&lt;/p&gt;

&lt;p&gt;If you are still trying to turn a rough app idea into the first user outcome worth demonstrating, I made &lt;strong&gt;AI App Builder Starter Prompts&lt;/strong&gt;, a free prompt pack for scoping and planning a first website or mobile app with AI:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the free prompts to clarify the person, workflow, boundaries, data, and first milestone. Then make that first milestone demoable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Define The Next Demo Before You Choose The Next Task
&lt;/h2&gt;

&lt;p&gt;The easiest way to let a project drift is to open the backlog and ask, “What should I work on today?”&lt;/p&gt;

&lt;p&gt;That question invites task shopping. You pick the ticket that looks interesting, easy, or technically satisfying. Three days later, the project contains five partial features and no complete story.&lt;/p&gt;

&lt;p&gt;I prefer a different question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At the next client update, what should one user be able to accomplish from start to finish?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write the answer before you choose the tasks.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;At the next demo, an event organizer can create an event, publish it, share the link, and see one test attendee RSVP.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sentence tells you what matters now. The event form matters. Saving the event matters. The public link matters. The RSVP matters. The organizer seeing the new RSVP matters.&lt;/p&gt;

&lt;p&gt;A custom avatar editor does not matter yet.&lt;/p&gt;

&lt;p&gt;Neither does a twelve-color notification preference center that AI helpfully proposed because it got excited.&lt;/p&gt;

&lt;p&gt;The demo outcome becomes a temporary filter. Every task either helps prove the outcome or waits.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Six-Part Demo Contract
&lt;/h2&gt;

&lt;p&gt;Before I build toward a client update, I like to define a small demo contract.&lt;/p&gt;

&lt;p&gt;It has six parts.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The User
&lt;/h3&gt;

&lt;p&gt;Name the person completing the workflow.&lt;/p&gt;

&lt;p&gt;“A user” is weak. “A first-time event organizer” is better. “A returning musician looking for a saved recording” is better. The more clearly you can picture the person, the easier it is to notice missing steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The Starting State
&lt;/h3&gt;

&lt;p&gt;Say what must already be true before the demo begins.&lt;/p&gt;

&lt;p&gt;Does the test account already exist? Is the app freshly installed? Is there seed data? Are permissions already granted? A demo can look magical when the starting state quietly did half the work.&lt;/p&gt;

&lt;p&gt;Write it down.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The User Action
&lt;/h3&gt;

&lt;p&gt;Describe the exact path in verbs.&lt;/p&gt;

&lt;p&gt;Open the app. Sign in. Create the event. Add the date. Publish it. Copy the link. Open the attendee view. RSVP. Return to the organizer view.&lt;/p&gt;

&lt;p&gt;This is the center of the demonstration.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. The Proof
&lt;/h3&gt;

&lt;p&gt;Name what proves the outcome survived the interface.&lt;/p&gt;

&lt;p&gt;Refresh the page. Relaunch the app. Open a second account. Check the saved record. Confirm the correct person can see it and the wrong person cannot.&lt;/p&gt;

&lt;p&gt;Pretty motion is not proof. Persistence, permissions, and the expected result are proof.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The Known Gap
&lt;/h3&gt;

&lt;p&gt;Say what does not work yet.&lt;/p&gt;

&lt;p&gt;Maybe event editing is not included. Maybe email reminders are still fake. Maybe the Android layout needs another pass. A known gap is not an embarrassment. It is a boundary that keeps the client from mistaking a controlled demonstration for a complete release.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. The Decision
&lt;/h3&gt;

&lt;p&gt;End with the question the demo should help answer.&lt;/p&gt;

&lt;p&gt;Should this workflow move into QA? Does the client approve the interaction? Does a requested change replace the next milestone, add time, or wait for version two?&lt;/p&gt;

&lt;p&gt;A demo without a decision can become software theater. Everyone watches, says “nice,” and leaves with different assumptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Demo Is Not The Same As QA
&lt;/h2&gt;

&lt;p&gt;This distinction matters.&lt;/p&gt;

&lt;p&gt;A demo proves that a chosen workflow is concrete enough for a client or stakeholder to evaluate. QA tries to break that workflow across inputs, states, accounts, devices, permissions, networks, and regressions.&lt;/p&gt;

&lt;p&gt;The demo is the shared truth surface.&lt;/p&gt;

&lt;p&gt;QA is the attack on that truth.&lt;/p&gt;

&lt;p&gt;You need both.&lt;/p&gt;

&lt;p&gt;I do not want a client meeting to become the first time I discover that the happy path fails. The workflow should be rehearsed and checked before the call. But I also do not want to hide behind internal QA forever while the client imagines a different product.&lt;/p&gt;

&lt;p&gt;The sequence I trust is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define the demo outcome.&lt;/li&gt;
&lt;li&gt;Build the complete path.&lt;/li&gt;
&lt;li&gt;Run a focused QA pass.&lt;/li&gt;
&lt;li&gt;Demonstrate the result honestly.&lt;/li&gt;
&lt;li&gt;Record the decision and next outcome.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That loop is small enough for a freelancer and strong enough for a team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demos Make Scope Changes Visible
&lt;/h2&gt;

&lt;p&gt;Scope creep is slippery when it arrives as a sentence.&lt;/p&gt;

&lt;p&gt;“Could we also let attendees message each other?” sounds small in a meeting. Then it touches accounts, permissions, conversations, moderation, notifications, unread states, blocking, data retention, UI, and QA.&lt;/p&gt;

&lt;p&gt;The demo gives you a calmer way to respond.&lt;/p&gt;

&lt;p&gt;Do not argue about whether the idea is “easy.” Turn it into a delivery choice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Swap:&lt;/strong&gt; Replace part of the current demo outcome with the new request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add:&lt;/strong&gt; Keep the current outcome and extend the milestone, price, or timeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Park:&lt;/strong&gt; Save the request for a later demo after the contracted workflow works.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the conversation is not developer versus client. It is one visible outcome versus another visible outcome.&lt;/p&gt;

&lt;p&gt;The client can still choose the new feature. The project simply stops pretending the choice has no cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Should Prepare Evidence, Not A Victory Speech
&lt;/h2&gt;

&lt;p&gt;AI coding tools are very good at producing confident summaries of what they changed.&lt;/p&gt;

&lt;p&gt;That is useful until the summary starts describing intention as completion.&lt;/p&gt;

&lt;p&gt;“Implemented the event flow” might mean the files exist. It does not necessarily mean a user can finish the flow, the data persists, permissions are correct, and the build survives a relaunch.&lt;/p&gt;

&lt;p&gt;So I ask AI to prepare a demo brief with evidence.&lt;/p&gt;

&lt;p&gt;Here is a prompt shape I would use:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We are preparing the next client demo for this user outcome: [OUTCOME]. Inspect the current project and produce a demo brief. Include the required starting state, exact user steps, expected result after each step, persistence or permission proof, known gaps, regression checks, and the client decision this demo should support. Do not claim a step works unless you can point to verification evidence. List anything that still needs manual testing before the meeting.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then I run the path myself.&lt;/p&gt;

&lt;p&gt;The AI can help assemble the checklist. It cannot attend the meeting wearing a tiny suit and magically make an untested workflow true.&lt;/p&gt;

&lt;p&gt;If you want more starting points for shaping outcomes, milestones, QA, and deployment conversations with your AI tool, the &lt;strong&gt;AI App Builder Starter Prompts are free&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Client Update I Would Send
&lt;/h2&gt;

&lt;p&gt;You do not need a huge report before every demo. You need enough context for the client to understand what changed and what to evaluate.&lt;/p&gt;

&lt;p&gt;I would use this structure:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Outcome now working:&lt;/strong&gt; [One sentence describing what a user can complete.]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build or link:&lt;/strong&gt; [Where the client can try it.]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please test:&lt;/strong&gt; [Three to five exact steps.]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Known gap:&lt;/strong&gt; [What is deliberately incomplete.]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decision needed:&lt;/strong&gt; [The feedback or approval required.]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proposed next demo:&lt;/strong&gt; [The next user outcome.]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That update is useful even if the meeting moves. It gives the client a testable object instead of asking them to interpret a week of developer activity.&lt;/p&gt;

&lt;p&gt;It also keeps communication sparse without making it mysterious. I do not believe clients need constant noise. They need meaningful change, visible proof, and a clear place to make decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What A Bad Demo Looks Like
&lt;/h2&gt;

&lt;p&gt;A bad demo usually hides uncertainty instead of resolving it.&lt;/p&gt;

&lt;p&gt;Watch for these patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A tour of screens with no complete user journey&lt;/li&gt;
&lt;li&gt;Slides describing features that cannot be run&lt;/li&gt;
&lt;li&gt;A workflow that only works with one carefully prepared record&lt;/li&gt;
&lt;li&gt;A save action that is never checked after refresh or relaunch&lt;/li&gt;
&lt;li&gt;A long explanation of code changes before the user outcome is shown&lt;/li&gt;
&lt;li&gt;Live improvisation on an untested branch&lt;/li&gt;
&lt;li&gt;Known gaps revealed only after the client discovers them&lt;/li&gt;
&lt;li&gt;A meeting that ends without an approval, rejection, tradeoff, or next outcome&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to make every demonstration flawless.&lt;/p&gt;

&lt;p&gt;The goal is to make the state of the project difficult to misunderstand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let The Next Demo Pull The Project Forward
&lt;/h2&gt;

&lt;p&gt;The demo is not the entire project-management system.&lt;/p&gt;

&lt;p&gt;It is the heartbeat.&lt;/p&gt;

&lt;p&gt;Your scope says what you agreed to build. Your backlog records the work. Your project rules protect the codebase. Your QA process tests the result. The demo keeps all of those systems attached to a visible user outcome and a real client decision.&lt;/p&gt;

&lt;p&gt;That is the operating rule I would give any freelancer building software with AI:&lt;/p&gt;

&lt;p&gt;Do not manage the project by asking how much changed.&lt;/p&gt;

&lt;p&gt;Manage it by asking what can be honestly demonstrated next.&lt;/p&gt;

&lt;p&gt;One person.&lt;/p&gt;

&lt;p&gt;One complete outcome.&lt;/p&gt;

&lt;p&gt;One known gap.&lt;/p&gt;

&lt;p&gt;One decision.&lt;/p&gt;

&lt;p&gt;Then let that decision shape the next demo.&lt;/p&gt;

&lt;p&gt;If you want a practical way to define that first outcome, I made &lt;strong&gt;AI App Builder Starter Prompts&lt;/strong&gt;, a free pack with planning, build, debugging, QA, deployment, and launch prompts for first-time builders:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want the full build-along field manual behind the free prompts, &lt;strong&gt;AI App Builder From Zero&lt;/strong&gt; walks through idea generation, scope, stack choice, project rules, prompting, QA, deployment, App Store, Google Play, and launch:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-from-zero&lt;/a&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/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>freelance</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>The First Backend I Would Choose For A Beginner AI-Built App In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Sat, 11 Jul 2026 23:57:29 +0000</pubDate>
      <link>https://dev.to/marcusykim/the-first-backend-i-would-choose-for-a-beginner-ai-built-app-in-2026-2p1i</link>
      <guid>https://dev.to/marcusykim/the-first-backend-i-would-choose-for-a-beginner-ai-built-app-in-2026-2p1i</guid>
      <description>&lt;p&gt;One of the first ways a beginner AI-built app gets complicated is when the AI starts listing services before the app has earned them.&lt;/p&gt;

&lt;p&gt;Authentication. Database. Storage. Analytics. Push notifications. Payments. Webhooks. A queue. Three environments. A helpful robot will happily hand you a whole grocery cart of infrastructure for an app that has not yet successfully saved one note.&lt;/p&gt;

&lt;p&gt;That does not mean the tools are bad. It means the order is upside down.&lt;/p&gt;

&lt;p&gt;Before you choose a backend, ask a smaller question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What information must still exist after the user closes the app, and who needs to be able to see it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the answer is "nothing yet," you may not need a backend for version one. If the answer is "a signed-in user needs their data to persist," you need a simple backend. If the answer is "users need to interact with one another," you need a backend and a deliberately designed data model.&lt;/p&gt;

&lt;p&gt;That is the decision tree. It is not glamorous, but it will save you from building a tiny data center for a calculator.&lt;/p&gt;

&lt;p&gt;If you want help turning your rough idea into a scoped first build before choosing tools, my &lt;strong&gt;free&lt;/strong&gt; AI App Builder Starter Prompts are here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start With The App's Memory
&lt;/h2&gt;

&lt;p&gt;I think about a backend as the part of your app that remembers things after the screen changes, the app closes, or another person opens it.&lt;/p&gt;

&lt;p&gt;A simple song-idea recorder might need a backend if you want recordings, titles, tags, and project notes to follow a musician across devices. A local-only first prototype might not need it if the goal is simply proving that recording, playback, and export feel good on one phone.&lt;/p&gt;

&lt;p&gt;A social app needs a backend much earlier. A post has an author. An event has attendees. A message belongs in a conversation. Those facts have relationships, and the relationships are part of the product.&lt;/p&gt;

&lt;p&gt;This is why I do not start by asking, "Should I use Firebase or Supabase?" I start by writing down the facts the app must remember.&lt;/p&gt;

&lt;p&gt;For a first version, that list should be boringly specific:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A user has a name, email, and account ID.&lt;/li&gt;
&lt;li&gt;A song idea has an owner, title, audio-file location, created date, and optional tags.&lt;/li&gt;
&lt;li&gt;An event has a host, time, location, description, and RSVP list.&lt;/li&gt;
&lt;li&gt;A message has a sender, conversation, text, and sent date.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you cannot name the facts, you are not ready to choose the database. The AI can help you turn those facts into a schema, but you should decide what the facts mean first.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Default: Pick One Managed Backend, Not A Pile Of Services
&lt;/h2&gt;

&lt;p&gt;For a beginner building a real app with accounts and saved data, I would usually choose one managed backend that handles several jobs together.&lt;/p&gt;

&lt;p&gt;My two most practical defaults are Firebase and Supabase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose Firebase When You Want The Lowest-Friction Mobile Path
&lt;/h3&gt;

&lt;p&gt;Firebase is often a good fit when you are building an iOS, Android, Flutter, or Expo app and want to move quickly with familiar mobile features in one place.&lt;/p&gt;

&lt;p&gt;It can give you authentication, a database, file storage, server-side functions, analytics, crash reporting, and push-notification support without asking you to operate servers.&lt;/p&gt;

&lt;p&gt;That is valuable when your product needs things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign in with email, Google, or Apple&lt;/li&gt;
&lt;li&gt;A feed that updates quickly&lt;/li&gt;
&lt;li&gt;Photos, recordings, or other uploaded files&lt;/li&gt;
&lt;li&gt;Push notifications&lt;/li&gt;
&lt;li&gt;Basic mobile analytics and crash visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tradeoff is that Firebase asks you to learn its data model and security rules. Do not let AI create broad-open rules just to make a test work. "Anyone can read and write everything" is not a development shortcut. It is a product-security decision with a fake mustache.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose Supabase When Your App's Data Has Clear Relationships
&lt;/h3&gt;

&lt;p&gt;Supabase is usually my first recommendation when the product naturally sounds like tables and relationships.&lt;/p&gt;

&lt;p&gt;For example, a band-roster app might have users, bands, rehearsals, game-day events, availability responses, and messages. Those things relate to each other in predictable ways. A relational database gives you a clean way to model that truth.&lt;/p&gt;

&lt;p&gt;Supabase provides a hosted Postgres database, authentication, storage, and server-side capabilities. It can work well with web apps, Expo, Flutter, native mobile apps, and modern TypeScript stacks.&lt;/p&gt;

&lt;p&gt;The tradeoff is that you need to take your schema seriously. That is healthy. A clear schema forces you to decide what belongs to what before your app starts inventing relationships by accident.&lt;/p&gt;

&lt;p&gt;When I was managing iOS work at a startup, we treated schema changes as team-wide decisions. Not because schemas are sacred tablets, but because a casual table change can break several user flows at once. Even when you are a team of one, keep that instinct: change the schema on purpose, document why, and ask AI to identify everything affected.&lt;/p&gt;

&lt;h2&gt;
  
  
  When You Should Use No Backend Yet
&lt;/h2&gt;

&lt;p&gt;You can often delay a backend when version one is mostly about interaction quality.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;A metronome with a better recording flow&lt;/li&gt;
&lt;li&gt;A habit timer&lt;/li&gt;
&lt;li&gt;A calculator or converter&lt;/li&gt;
&lt;li&gt;A one-device checklist&lt;/li&gt;
&lt;li&gt;A UI prototype that proves a workflow before accounts exist&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local storage is enough when the data belongs to one person on one device and losing it would not destroy the promise of your first test.&lt;/p&gt;

&lt;p&gt;That does not mean "never plan for a backend." It means do not force the first version to solve cross-device sync, account recovery, permissions, and cloud storage before you know whether the core interaction helps anyone.&lt;/p&gt;

&lt;p&gt;You can tell your AI tool:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Plan this as a local-first version one. Keep the data layer isolated so I can migrate to Firebase or Supabase later, but do not add accounts, cloud sync, or server infrastructure until the core workflow is validated.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is a useful instruction because it tells the tool both what to build and what not to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four Questions I Ask Before Letting AI Add A Service
&lt;/h2&gt;

&lt;p&gt;When an AI recommends an integration, I ask it to answer these questions in plain English:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;What user outcome does this service enable?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What breaks or becomes manual if I do not add it in version one?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What data does it receive or store?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What is the smallest reversible implementation?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the answer is vague, the service belongs in the parking lot.&lt;/p&gt;

&lt;p&gt;For example, you do not add analytics because "apps need analytics." You add analytics when you need to answer a decision-making question, such as: "Do new users complete their first recording?" Then you track that one event and learn something real.&lt;/p&gt;

&lt;p&gt;You do not add payments because a pricing page looks serious. You add payments once the product has a clear paid outcome and a hosted checkout can handle the first transaction safely.&lt;/p&gt;

&lt;p&gt;This is the architecture lesson beginners often miss: every integration is a new responsibility. It may be a good responsibility. Just make it earn its seat.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical First-Backend Prompt
&lt;/h2&gt;

&lt;p&gt;Once you have named your users, version-one workflow, and data facts, give your AI tool a prompt like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I am building a [web app / iOS app / Android app / Expo app / Flutter app] for [specific user]. The first version must let them [one complete user outcome]. List the information that must persist, who can read or change each piece, and whether version one needs a backend at all. If it does, compare Firebase and Supabase for this exact app. Recommend one managed backend, explain the tradeoffs in beginner-friendly language, propose the smallest schema, and identify what I should deliberately postpone. Do not add services unless they directly support the first user outcome.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then read the recommendation like a product owner, not a passenger. Ask the AI to explain any table, permission, or service you do not understand. You are allowed to make it slow down.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Goal Is Not A Perfect Stack
&lt;/h2&gt;

&lt;p&gt;Your first backend does not need to be the forever backend.&lt;/p&gt;

&lt;p&gt;You are trying to make a real person complete a useful outcome with data that behaves predictably. Pick the smallest managed foundation that supports that outcome. Write down what it remembers, who owns it, and what permissions exist. Keep the rest out until the app proves it deserves to grow.&lt;/p&gt;

&lt;p&gt;If you want the fuller build-along system for idea, scope, stack choices, prompting, QA, deployment, and launch, AI App Builder From Zero is the next step:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-from-zero&lt;/a&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/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>webdev</category>
      <category>oop</category>
      <category>artificial</category>
    </item>
    <item>
      <title>The Done-When Line Beginners Forget To Give AI Before Building An App</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Sat, 11 Jul 2026 23:50:35 +0000</pubDate>
      <link>https://dev.to/marcusykim/the-done-when-line-beginners-forget-to-give-ai-before-building-an-app-5c65</link>
      <guid>https://dev.to/marcusykim/the-done-when-line-beginners-forget-to-give-ai-before-building-an-app-5c65</guid>
      <description>&lt;p&gt;One of the easiest ways to let an AI coding tool waste your afternoon is to ask it to “finish” a feature.&lt;/p&gt;

&lt;p&gt;Finish is a mood. It is not a requirement.&lt;/p&gt;

&lt;p&gt;You tell the tool, “Finish the profile screen,” and it gets busy. It adds fields. It adjusts spacing. It may write some validation. It may even tell you the feature is complete with the confidence of a person who just installed a shelf without checking whether it is level.&lt;/p&gt;

&lt;p&gt;Then you open the app.&lt;/p&gt;

&lt;p&gt;The screen exists. The button exists. The app may even look polished.&lt;/p&gt;

&lt;p&gt;But can a real person create a profile, leave the app, come back, and still see the right information? What happens if they use an email already attached to another account? What happens if the network drops halfway through saving? What does “saved” actually mean?&lt;/p&gt;

&lt;p&gt;That is why I have become picky about one short line in every feature request:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Done when: [a user can complete a specific outcome, and I can verify it].&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before you ask AI to build anything, you can use my free AI App Builder Starter Prompts to turn a rough idea into a smaller, testable version-one plan:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The prompts are free because blank-page paralysis is a terrible project manager.&lt;/p&gt;

&lt;h2&gt;
  
  
  “The Screen Exists” Is Not A Definition Of Done
&lt;/h2&gt;

&lt;p&gt;When I managed an iOS team at a startup, we organized work around features and user stories. A larger feature might have been a timeline feed, an event flow, a camera experience, or a private group chat. Each feature was broken into smaller user stories that someone could own.&lt;/p&gt;

&lt;p&gt;The useful part was not the vocabulary. You do not need to become an Agile priest and carry a tiny backlog scroll everywhere you go.&lt;/p&gt;

&lt;p&gt;The useful part was that a story had to end somewhere real.&lt;/p&gt;

&lt;p&gt;“Build event RSVPs” is a task-shaped cloud. It sounds like work, but it does not tell you when to stop.&lt;/p&gt;

&lt;p&gt;This is better:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Done when a signed-in user can open an event, choose Going, see their RSVP saved after reopening the app, and see a useful message if the save fails.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now you have something you can test.&lt;/p&gt;

&lt;p&gt;You also gave the AI fewer places to invent. It does not need to guess whether “RSVPs” includes event creation, invitations, attendee chat, calendar syncing, reminders, six filters, a badge system, and a tiny city government.&lt;/p&gt;

&lt;p&gt;It needs to deliver one user outcome.&lt;/p&gt;

&lt;p&gt;That is a much healthier amount of ambition for version one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Line Has Four Jobs
&lt;/h2&gt;

&lt;p&gt;For a beginner, I think a good done-when line should quietly answer four questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Who is doing the thing?
&lt;/h3&gt;

&lt;p&gt;Name the user state that matters.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A new visitor&lt;/li&gt;
&lt;li&gt;A signed-in customer&lt;/li&gt;
&lt;li&gt;An event host&lt;/li&gt;
&lt;li&gt;A musician recording a song idea&lt;/li&gt;
&lt;li&gt;An admin reviewing a report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This stops AI from building a generic screen that ignores permissions and context.&lt;/p&gt;

&lt;p&gt;For example, “users can delete a post” is incomplete. Which users? The author only? A moderator? Everyone who can see it? Permissions are product decisions wearing engineering clothes.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. What is the one action?
&lt;/h3&gt;

&lt;p&gt;Use a verb that somebody can actually perform.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create&lt;/li&gt;
&lt;li&gt;save&lt;/li&gt;
&lt;li&gt;search&lt;/li&gt;
&lt;li&gt;record&lt;/li&gt;
&lt;li&gt;invite&lt;/li&gt;
&lt;li&gt;pay&lt;/li&gt;
&lt;li&gt;export&lt;/li&gt;
&lt;li&gt;delete&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;“Support recording” is vague. “A musician can tap once to create a recording, hear a metronome, stop, name the take, and export an audio file” is a workflow.&lt;/p&gt;

&lt;p&gt;That distinction matters because workflows expose the missing pieces. You start noticing the need for a microphone permission, a saved file location, an empty state, a failed export message, and a way to find the recording later.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. What must persist or change?
&lt;/h3&gt;

&lt;p&gt;Most apps are not just pretty screens. They are promises about what happens after someone presses a button.&lt;/p&gt;

&lt;p&gt;Ask yourself what needs to change for the user to trust the feature.&lt;/p&gt;

&lt;p&gt;If they save a profile, does it still exist after reopening the app?&lt;/p&gt;

&lt;p&gt;If they send a message, does the recipient see it?&lt;/p&gt;

&lt;p&gt;If they mark a task complete, does it remain complete on another device?&lt;/p&gt;

&lt;p&gt;This is where your frontend meets the backend. The screen is the waiter. The saved data is the meal actually arriving at the table.&lt;/p&gt;

&lt;p&gt;You do not have to understand every database detail before starting. You do need to tell AI what the user should be able to trust after the action is over.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. How will you prove it worked?
&lt;/h3&gt;

&lt;p&gt;This is the part people skip because it sounds slightly less glamorous than shipping.&lt;/p&gt;

&lt;p&gt;But it is the part that keeps “the AI said it works” from becoming your entire QA department.&lt;/p&gt;

&lt;p&gt;For each feature, decide on a short proof:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;complete the workflow with a normal account&lt;/li&gt;
&lt;li&gt;try one bad input&lt;/li&gt;
&lt;li&gt;reload the app and confirm the important data remains&lt;/li&gt;
&lt;li&gt;test a permission or account boundary if the feature has one&lt;/li&gt;
&lt;li&gt;make sure a failure produces a useful message instead of an endless spinner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need a 400-line spreadsheet created by someone who says “quality gate” recreationally.&lt;/p&gt;

&lt;p&gt;You need evidence that the feature survives normal use.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Prompt I Would Use With An AI Coding Tool
&lt;/h2&gt;

&lt;p&gt;When you have a feature in mind, give your AI tool this before you let it touch code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I am building [app name] for [specific user].

The feature I want is: [feature].

Done when: [one user can complete one specific outcome, including what must save, change, or be visible afterward].

Before you implement it:
1. Restate the workflow in plain English.
2. List the screens, data, permissions, and integrations this feature actually needs.
3. Name what is explicitly out of scope for this version.
4. Give me a small QA checklist that proves the done-when line is true.
5. Ask for approval before changing shared schema, authentication, payments, or unrelated screens.

Then implement only the smallest version that satisfies the done-when line.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That prompt does not make the AI magically perfect. Nothing does.&lt;/p&gt;

&lt;p&gt;What it does is turn a fuzzy request into an agreement you can both keep checking.&lt;/p&gt;

&lt;p&gt;If the tool begins adding an unrelated dashboard, three new user roles, or an elaborate notification system, you have a simple sentence to bring it back to:&lt;/p&gt;

&lt;p&gt;“Does this help satisfy the done-when line?”&lt;/p&gt;

&lt;p&gt;If not, it probably belongs later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Done-When Lines Keep Your App Honest
&lt;/h2&gt;

&lt;p&gt;There is a business reason for this too.&lt;/p&gt;

&lt;p&gt;Your first app does not need to prove that you can imagine every feature it might ever have. It needs to prove that somebody can get real value from one workflow.&lt;/p&gt;

&lt;p&gt;A tiny event app does not need to become a social network before you know whether people will RSVP.&lt;/p&gt;

&lt;p&gt;A song-idea recorder does not need to become a full digital audio workstation before you know whether musicians actually value one-tap recording, a metronome, and a clean export.&lt;/p&gt;

&lt;p&gt;A tutor-management app does not need billing, a marketplace, group video calls, and a mascot before one tutor can add a student and schedule a session.&lt;/p&gt;

&lt;p&gt;The done-when line protects you from confusing visual motion with product progress.&lt;/p&gt;

&lt;p&gt;It gives you something to demo.&lt;/p&gt;

&lt;p&gt;It gives you something to QA.&lt;/p&gt;

&lt;p&gt;It gives you a clean stopping point.&lt;/p&gt;

&lt;p&gt;And it gives your AI tool a smaller target than “make my app good.”&lt;/p&gt;

&lt;p&gt;That is not a limitation.&lt;/p&gt;

&lt;p&gt;That is how you finish things.&lt;/p&gt;

&lt;p&gt;The practical takeaway is simple: before you ask AI to build a feature, write one sentence describing what a real user will be able to do, what will be true afterward, and how you will verify it.&lt;/p&gt;

&lt;p&gt;Then build until that sentence is true.&lt;/p&gt;

&lt;p&gt;If you want a fuller build-along system for idea, scope, stack choice, prompting, QA, deployment, and launch, AI App Builder From Zero is the deeper next step:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-from-zero&lt;/a&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/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>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Project Constitution I Would Write Before Letting AI Build My App In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Mon, 06 Jul 2026 18:47:34 +0000</pubDate>
      <link>https://dev.to/marcusykim/the-project-constitution-i-would-write-before-letting-ai-build-my-app-in-2026-11ng</link>
      <guid>https://dev.to/marcusykim/the-project-constitution-i-would-write-before-letting-ai-build-my-app-in-2026-11ng</guid>
      <description>&lt;p&gt;One of the most useful things I ever did on a software project looked boring from the outside.&lt;/p&gt;

&lt;p&gt;I wrote down the rules.&lt;/p&gt;

&lt;p&gt;Not inspirational principles.&lt;/p&gt;

&lt;p&gt;Not a pitch-deck mission statement.&lt;/p&gt;

&lt;p&gt;Actual working laws.&lt;/p&gt;

&lt;p&gt;When I was helping build a startup iOS app, I managed two junior iOS developers under me. The project had enough moving parts to become messy quickly: reusable views, Firebase data, model structs, branches, pull requests, feature ownership, demos, communication habits, and all the little decisions that quietly turn into daily interruptions if nobody writes them down.&lt;/p&gt;

&lt;p&gt;So I built a project constitution in Notion.&lt;/p&gt;

&lt;p&gt;That sounds more dramatic than it felt at the time. It was not me standing on a desk with a powdered wig yelling about liberty and database schemas.&lt;/p&gt;

&lt;p&gt;It was a living set of operating rules for how we were going to build.&lt;/p&gt;

&lt;p&gt;And the surprising lesson was this:&lt;/p&gt;

&lt;p&gt;Written rules can create autonomy.&lt;/p&gt;

&lt;p&gt;Most beginners think rules slow a project down. Sometimes they do. Bad rules absolutely can become bureaucracy with better formatting.&lt;/p&gt;

&lt;p&gt;But good rules do something different. They reduce the number of moments where everyone has to stop and ask, "What should I do here?"&lt;/p&gt;

&lt;p&gt;That matters for a small software team.&lt;/p&gt;

&lt;p&gt;It also matters when you are building with AI.&lt;/p&gt;

&lt;p&gt;If you open Codex, Cursor, Claude, ChatGPT, or any AI coding tool and ask it to build before the project has operating laws, you are basically hiring a very fast teammate with no handbook. It may produce code. It may even produce a lot of code. But it will also make tiny local decisions that slowly reshape the project.&lt;/p&gt;

&lt;p&gt;The point of a project constitution is not to predict every possible task.&lt;/p&gt;

&lt;p&gt;The point is to define the shared laws so people, and AI tools, can make local decisions without constantly crashing into each other.&lt;/p&gt;

&lt;p&gt;If you are still turning a rough app idea into something buildable, I made AI App Builder Starter Prompts, a free prompt pack for beginners who want to scope a first website or mobile app with AI before code starts changing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article is about one layer I would add before serious building starts: the constitution.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Constitution Is Not A Plan
&lt;/h2&gt;

&lt;p&gt;This is where I want to separate today's lesson from normal planning.&lt;/p&gt;

&lt;p&gt;A build plan says:&lt;/p&gt;

&lt;p&gt;"Here are the phases."&lt;/p&gt;

&lt;p&gt;"Here are the features."&lt;/p&gt;

&lt;p&gt;"Here is the MVP."&lt;/p&gt;

&lt;p&gt;"Here are the user stories."&lt;/p&gt;

&lt;p&gt;That is useful. I believe in that.&lt;/p&gt;

&lt;p&gt;But a constitution answers a different question:&lt;/p&gt;

&lt;p&gt;"How do we behave while building?"&lt;/p&gt;

&lt;p&gt;That question is easy to ignore because it does not feel like progress. It does not create a screen. It does not ship a feature. It does not make the app look more real.&lt;/p&gt;

&lt;p&gt;But it controls the quality of every decision after it.&lt;/p&gt;

&lt;p&gt;In the startup iOS project, the constitution covered things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;when a view should become reusable&lt;/li&gt;
&lt;li&gt;when a schema change was allowed&lt;/li&gt;
&lt;li&gt;how to notify the team before changing shared data structures&lt;/li&gt;
&lt;li&gt;when to create a new model or struct&lt;/li&gt;
&lt;li&gt;what a pull request needed to explain&lt;/li&gt;
&lt;li&gt;how branches should be named&lt;/li&gt;
&lt;li&gt;what commit messages were supposed to communicate&lt;/li&gt;
&lt;li&gt;how much mess the linter was allowed to tolerate&lt;/li&gt;
&lt;li&gt;when we should use WhatsApp versus Notion&lt;/li&gt;
&lt;li&gt;how biweekly demos and retrospectives worked&lt;/li&gt;
&lt;li&gt;who owned a feature&lt;/li&gt;
&lt;li&gt;what "done" meant for a story&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those are glamorous.&lt;/p&gt;

&lt;p&gt;All of them prevent future confusion.&lt;/p&gt;

&lt;p&gt;The most expensive project problems are often not the ones with obvious explosions. They are the little repeated ambiguities.&lt;/p&gt;

&lt;p&gt;Should I make a new model for this?&lt;/p&gt;

&lt;p&gt;Can I change this field name?&lt;/p&gt;

&lt;p&gt;Should this view be reusable?&lt;/p&gt;

&lt;p&gt;Where should I ask this question?&lt;/p&gt;

&lt;p&gt;What does the PR need to say?&lt;/p&gt;

&lt;p&gt;Is this feature done because the screen exists, or because the user can complete the workflow?&lt;/p&gt;

&lt;p&gt;If nobody writes the answers down, every developer has to guess. If you are working alone with AI, the AI guesses. If you are working with a team, the team guesses in different directions.&lt;/p&gt;

&lt;p&gt;That is how a codebase gets weird.&lt;/p&gt;

&lt;p&gt;Not all at once.&lt;/p&gt;

&lt;p&gt;One reasonable little exception at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Traffic Law Analogy
&lt;/h2&gt;

&lt;p&gt;The best way I can explain this is traffic laws.&lt;/p&gt;

&lt;p&gt;Traffic laws do not tell you where to go.&lt;/p&gt;

&lt;p&gt;They do not pick your destination. They do not decide whether you are going to the grocery store, the beach, a client meeting, or the DMV because apparently society still needs a place where time goes to get processed by fluorescent lights.&lt;/p&gt;

&lt;p&gt;Traffic laws define how everyone moves while pursuing their own destination.&lt;/p&gt;

&lt;p&gt;Stay in your lane.&lt;/p&gt;

&lt;p&gt;Stop at red lights.&lt;/p&gt;

&lt;p&gt;Signal before turning.&lt;/p&gt;

&lt;p&gt;Do not drive straight through someone else's car because you had a strong personal vision.&lt;/p&gt;

&lt;p&gt;Those rules create freedom because everyone can make local decisions inside a shared system.&lt;/p&gt;

&lt;p&gt;That was the point of the startup constitution.&lt;/p&gt;

&lt;p&gt;Each developer had a destination: a feature, a user story, a definition of done.&lt;/p&gt;

&lt;p&gt;They did not need me to micromanage every turn. They needed shared laws that kept their route compatible with everyone else's route.&lt;/p&gt;

&lt;p&gt;That is the same reason a beginner building with AI needs project rules.&lt;/p&gt;

&lt;p&gt;You do not want to prompt every tiny decision from scratch.&lt;/p&gt;

&lt;p&gt;You want the AI to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what version one is allowed to become&lt;/li&gt;
&lt;li&gt;what it should not add without asking&lt;/li&gt;
&lt;li&gt;how it should treat data changes&lt;/li&gt;
&lt;li&gt;when it should create abstractions&lt;/li&gt;
&lt;li&gt;when it should avoid abstractions&lt;/li&gt;
&lt;li&gt;what counts as done&lt;/li&gt;
&lt;li&gt;how it should report uncertainty&lt;/li&gt;
&lt;li&gt;what it must verify before claiming success&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The constitution turns repeated judgment into reusable context.&lt;/p&gt;

&lt;p&gt;That is the whole game.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mission Command Version
&lt;/h2&gt;

&lt;p&gt;There is another useful analogy: Mission Command.&lt;/p&gt;

&lt;p&gt;The simple version is this: leadership defines the what and the why, while the people closest to the work own the how within shared tactics and constraints.&lt;/p&gt;

&lt;p&gt;I like that because it avoids two bad extremes.&lt;/p&gt;

&lt;p&gt;One bad extreme is micromanagement.&lt;/p&gt;

&lt;p&gt;Every decision has to go through the leader. Every question becomes an interruption. Every developer waits for permission. The project moves only as fast as the bottleneck person can answer messages.&lt;/p&gt;

&lt;p&gt;The other bad extreme is chaos wearing a startup hoodie.&lt;/p&gt;

&lt;p&gt;Everyone has "autonomy," but nobody shares the same rules. One person changes the schema casually. Another creates a new model for every small use case. Another builds a beautiful reusable component that nobody else understands. Another opens a pull request that explains nothing except "updates."&lt;/p&gt;

&lt;p&gt;That is not autonomy.&lt;/p&gt;

&lt;p&gt;That is distributed confusion.&lt;/p&gt;

&lt;p&gt;The useful middle is:&lt;/p&gt;

&lt;p&gt;Here is what we are trying to accomplish.&lt;/p&gt;

&lt;p&gt;Here is why it matters.&lt;/p&gt;

&lt;p&gt;Here are the laws we follow while doing it.&lt;/p&gt;

&lt;p&gt;Now own your feature.&lt;/p&gt;

&lt;p&gt;That is what I want from AI tools too.&lt;/p&gt;

&lt;p&gt;I do not want to supervise every keystroke. That defeats the point of using a capable tool. But I also do not want the tool making silent architectural decisions because I forgot to define the rules.&lt;/p&gt;

&lt;p&gt;AI is at its best when it has enough freedom to execute and enough constraint to stay inside the project.&lt;/p&gt;

&lt;p&gt;That balance does not happen by accident.&lt;/p&gt;

&lt;p&gt;You write it down.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Sections I Would Put In A Beginner Project Constitution
&lt;/h2&gt;

&lt;p&gt;If I were starting a new AI-assisted app today, I would write a short constitution before serious coding.&lt;/p&gt;

&lt;p&gt;Not a 40-page document.&lt;/p&gt;

&lt;p&gt;Not a corporate wiki that makes everyone wish software had stayed a hobby.&lt;/p&gt;

&lt;p&gt;Something small enough to read and real enough to enforce.&lt;/p&gt;

&lt;p&gt;Here are the sections I would include.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The Project Boundary
&lt;/h2&gt;

&lt;p&gt;Start with what the project is and what it is not.&lt;/p&gt;

&lt;p&gt;This is not the full roadmap. This is the legal fence around version one.&lt;/p&gt;

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

&lt;p&gt;Version one helps one musician record a rough song idea, tag it, find it later, play it back, edit the name, and delete it.&lt;/p&gt;

&lt;p&gt;Version one does not include collaboration, public profiles, AI mastering, subscriptions, teams, comments, social feeds, or cloud sharing unless I explicitly approve a scope change.&lt;/p&gt;

&lt;p&gt;That kind of boundary matters because AI tools are helpful in the most dangerous way possible.&lt;/p&gt;

&lt;p&gt;They are happy to add things.&lt;/p&gt;

&lt;p&gt;If you do not tell the tool what the app is not, it may treat every plausible future feature like a current requirement.&lt;/p&gt;

&lt;p&gt;Your constitution should make expansion a decision, not a default.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Data Law
&lt;/h2&gt;

&lt;p&gt;Data changes deserve special respect.&lt;/p&gt;

&lt;p&gt;In the startup project, schema discipline mattered because shared data structures affected everyone. If someone changed a field, renamed a property, or altered an expected shape, the effects could ripple through multiple features.&lt;/p&gt;

&lt;p&gt;That is why the constitution made schema changes visible.&lt;/p&gt;

&lt;p&gt;For a team, that might mean:&lt;/p&gt;

&lt;p&gt;Do not change the schema without notifying the team and getting buy-in.&lt;/p&gt;

&lt;p&gt;For a solo AI-assisted build, that might mean:&lt;/p&gt;

&lt;p&gt;Do not add, remove, or rename database tables, fields, model properties, storage paths, or API response shapes without first explaining why the change is necessary, what code it affects, and how we will migrate or test it.&lt;/p&gt;

&lt;p&gt;That one rule can save you from a lot of mysterious breakage.&lt;/p&gt;

&lt;p&gt;AI tools can be casual about data if you let them. They may add a field to solve one local problem without realizing they just changed the contract the rest of the app depends on.&lt;/p&gt;

&lt;p&gt;The data law says:&lt;/p&gt;

&lt;p&gt;Shared structure is not a scratchpad.&lt;/p&gt;

&lt;p&gt;Treat it like infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Reuse Law
&lt;/h2&gt;

&lt;p&gt;Beginners often swing between two mistakes.&lt;/p&gt;

&lt;p&gt;One mistake is copy-pasting everything.&lt;/p&gt;

&lt;p&gt;Every screen gets its own slightly different button, card, form, spacing pattern, and data formatter until the app becomes a museum of small inconsistencies.&lt;/p&gt;

&lt;p&gt;The other mistake is abstracting too early.&lt;/p&gt;

&lt;p&gt;Suddenly a simple screen has generic factories, clever helpers, and reusable components that look like they are preparing for a future product line nobody asked for.&lt;/p&gt;

&lt;p&gt;So write the reuse law.&lt;/p&gt;

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

&lt;p&gt;Create reusable views and helpers when the same pattern appears at least twice and the shared behavior is stable. Do not create a new abstraction just because it feels professional. Do not copy a component three times without asking whether it should be shared.&lt;/p&gt;

&lt;p&gt;That rule gives AI a better target.&lt;/p&gt;

&lt;p&gt;It does not say "reuse everything."&lt;/p&gt;

&lt;p&gt;It says "reuse when reuse reduces real duplication."&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;Good software is not code that looks clever.&lt;/p&gt;

&lt;p&gt;Good software is code that stays understandable while the product changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The Model And Struct Law
&lt;/h2&gt;

&lt;p&gt;In iOS work, model and struct discipline matters because these objects become the nouns of the system.&lt;/p&gt;

&lt;p&gt;The same idea applies everywhere.&lt;/p&gt;

&lt;p&gt;If AI creates a new type for every little situation, the project vocabulary bloats. If it refuses to create real models, the app becomes a pile of loose dictionaries, anonymous objects, and fragile assumptions.&lt;/p&gt;

&lt;p&gt;A constitution can define the rule:&lt;/p&gt;

&lt;p&gt;Create a new model, type, struct, interface, or schema object only when it represents a real concept in the app or protects a contract used in more than one place. Before adding one, explain what concept it represents and where it will be used.&lt;/p&gt;

&lt;p&gt;This forces the tool to connect code structure to product meaning.&lt;/p&gt;

&lt;p&gt;That is what beginners need.&lt;/p&gt;

&lt;p&gt;Not more files.&lt;/p&gt;

&lt;p&gt;More understandable files.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The Pull Request Law
&lt;/h2&gt;

&lt;p&gt;Even if you are working alone, a pull request template is useful.&lt;/p&gt;

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

&lt;p&gt;Because a PR template makes the work explain itself.&lt;/p&gt;

&lt;p&gt;In the startup constitution, PRs needed to communicate the point of the change. Branch names and commit messages also had expectations. Not because naming branches correctly is a spiritual discipline, but because unclear version control becomes painful when people have to review, debug, or reconstruct what happened.&lt;/p&gt;

&lt;p&gt;For a beginner using AI, the PR law can become a "change summary law."&lt;/p&gt;

&lt;p&gt;Before calling a task done, the AI should answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what changed&lt;/li&gt;
&lt;li&gt;why it changed&lt;/li&gt;
&lt;li&gt;which files changed&lt;/li&gt;
&lt;li&gt;what user behavior is now possible&lt;/li&gt;
&lt;li&gt;what risk remains&lt;/li&gt;
&lt;li&gt;what was tested&lt;/li&gt;
&lt;li&gt;what was not tested&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is not busywork.&lt;/p&gt;

&lt;p&gt;That is how you stop a fast tool from leaving you behind inside your own project.&lt;/p&gt;

&lt;p&gt;It is also why a free prompt pack is useful at the beginning. The free AI App Builder Starter Prompts are meant to give you practical ways to make AI explain scope, rules, build steps, debugging, QA, and launch instead of just producing files:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The tool should not just change the code.&lt;/p&gt;

&lt;p&gt;It should help you understand the change.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. The Communication Law
&lt;/h2&gt;

&lt;p&gt;On the startup project, communication rules mattered because interruptions have a cost.&lt;/p&gt;

&lt;p&gt;If every uncertainty becomes a WhatsApp message, the lead becomes the team's notification center.&lt;/p&gt;

&lt;p&gt;That does not scale, even on a tiny team.&lt;/p&gt;

&lt;p&gt;So a constitution should define where different kinds of communication belong.&lt;/p&gt;

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

&lt;p&gt;Use the project-management tool for feature status, blockers, decision records, and retrospective notes. Use direct chat only for urgent coordination, time-sensitive unblockers, or issues that cannot wait until the next check-in.&lt;/p&gt;

&lt;p&gt;For AI-assisted solo work, the communication law looks different, but the principle is the same.&lt;/p&gt;

&lt;p&gt;You can tell the AI:&lt;/p&gt;

&lt;p&gt;Keep a running project log. When you make an important decision, record it. When you discover a blocker, summarize it. When you finish a task, update the next-action list. Do not assume future sessions will remember unstated context.&lt;/p&gt;

&lt;p&gt;That is how you avoid restarting the whole project mentally every time you come back.&lt;/p&gt;

&lt;p&gt;Your brain should not be the only database for project truth.&lt;/p&gt;

&lt;p&gt;That database is unreliable and occasionally wants snacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The Demo Law
&lt;/h2&gt;

&lt;p&gt;The startup team ran biweekly demos.&lt;/p&gt;

&lt;p&gt;That cadence mattered because it forced work to become visible.&lt;/p&gt;

&lt;p&gt;A feature is not done because the code exists.&lt;/p&gt;

&lt;p&gt;A feature is not done because the screen loads.&lt;/p&gt;

&lt;p&gt;A feature is not done because the AI says, "The implementation is complete."&lt;/p&gt;

&lt;p&gt;A feature is done when the intended user behavior works.&lt;/p&gt;

&lt;p&gt;The demo law can be simple:&lt;/p&gt;

&lt;p&gt;Every work cycle should produce one visible user improvement or one clearly explained technical improvement that protects the user's workflow.&lt;/p&gt;

&lt;p&gt;For a team, that might mean a demo every two weeks.&lt;/p&gt;

&lt;p&gt;For a solo beginner, it might mean:&lt;/p&gt;

&lt;p&gt;At the end of every build session, show the exact user path that now works, record what still fails, and write the next test.&lt;/p&gt;

&lt;p&gt;This keeps you from drifting into fake progress.&lt;/p&gt;

&lt;p&gt;You are not collecting files.&lt;/p&gt;

&lt;p&gt;You are building user behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. The Retrospective Law
&lt;/h2&gt;

&lt;p&gt;The constitution should be amendable.&lt;/p&gt;

&lt;p&gt;This is important.&lt;/p&gt;

&lt;p&gt;A constitution is not a sacred tablet. It is a living operating system.&lt;/p&gt;

&lt;p&gt;In the startup project, retrospectives gave us a place to ask:&lt;/p&gt;

&lt;p&gt;What slowed us down?&lt;/p&gt;

&lt;p&gt;What caused confusion?&lt;/p&gt;

&lt;p&gt;Which rule helped?&lt;/p&gt;

&lt;p&gt;Which rule needs to change?&lt;/p&gt;

&lt;p&gt;What should we stop doing?&lt;/p&gt;

&lt;p&gt;What should become part of the constitution?&lt;/p&gt;

&lt;p&gt;That is how the document stays useful instead of becoming a stale shrine to decisions made when everyone knew less.&lt;/p&gt;

&lt;p&gt;For an AI-assisted beginner project, I would run a tiny retrospective every few sessions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where did AI drift?&lt;/li&gt;
&lt;li&gt;Which instruction did I repeat too many times?&lt;/li&gt;
&lt;li&gt;Which bug came from an unclear rule?&lt;/li&gt;
&lt;li&gt;Which project fact should be written down?&lt;/li&gt;
&lt;li&gt;Which new law would prevent this next time?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last question is the whole mechanism.&lt;/p&gt;

&lt;p&gt;If you keep correcting the same behavior, you do not need more patience.&lt;/p&gt;

&lt;p&gt;You need a rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Looks Like As An AI Prompt
&lt;/h2&gt;

&lt;p&gt;Here is a practical starter prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I am building [app idea] with AI assistance.

Before we write code, help me create a short project constitution.

The constitution should define:
1. the version-one project boundary
2. data and schema-change rules
3. reusable component rules
4. model/type creation rules
5. change summary or pull request rules
6. communication and project-log rules
7. demo or verification rules
8. retrospective rules for improving the constitution

For each rule, explain:
- why it exists
- what mistake it prevents
- what the AI coding tool must ask before violating it

Keep the constitution practical enough to paste into a Notion page, AGENTS.md file, or project rules document.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then paste the result somewhere the project can actually use it.&lt;/p&gt;

&lt;p&gt;Not just in a chat that disappears.&lt;/p&gt;

&lt;p&gt;Put it in Notion.&lt;/p&gt;

&lt;p&gt;Put it in &lt;code&gt;AGENTS.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Put it in your repo docs.&lt;/p&gt;

&lt;p&gt;Put it wherever you and the AI will see it before work starts.&lt;/p&gt;

&lt;p&gt;The location matters less than the behavior:&lt;/p&gt;

&lt;p&gt;The rules must be visible while decisions are being made.&lt;/p&gt;

&lt;h2&gt;
  
  
  Autonomy Needs Boundaries
&lt;/h2&gt;

&lt;p&gt;This is the part beginners often misunderstand.&lt;/p&gt;

&lt;p&gt;Autonomy does not mean no rules.&lt;/p&gt;

&lt;p&gt;Autonomy means the rules are clear enough that people can move without asking permission for everything.&lt;/p&gt;

&lt;p&gt;That is why the constitution helped on the startup project. It reduced ad hoc feedback. It reduced random interruptions. It made feature ownership easier because the developers had shared tactics instead of a blank field of possible decisions.&lt;/p&gt;

&lt;p&gt;The same thing applies to AI tools.&lt;/p&gt;

&lt;p&gt;If you have to correct the AI every five minutes, the tool is not the whole problem.&lt;/p&gt;

&lt;p&gt;Your project may not have enough written law.&lt;/p&gt;

&lt;p&gt;Write the law once.&lt;/p&gt;

&lt;p&gt;Then make the tool operate inside it.&lt;/p&gt;

&lt;p&gt;That is a much stronger habit than trying to remember every preference, every rule, every constraint, every warning, and every decision yourself.&lt;/p&gt;

&lt;p&gt;A project constitution is not a replacement for judgment.&lt;/p&gt;

&lt;p&gt;It is a way to preserve judgment so you do not have to regenerate it from scratch every session.&lt;/p&gt;

&lt;p&gt;The practical takeaway:&lt;/p&gt;

&lt;p&gt;Before you ask AI or a small team to build faster, write the operating laws that make faster safe.&lt;/p&gt;

&lt;p&gt;Not a giant plan.&lt;/p&gt;

&lt;p&gt;Not a rigid bureaucracy.&lt;/p&gt;

&lt;p&gt;A living constitution.&lt;/p&gt;

&lt;p&gt;The what and why stay clear.&lt;/p&gt;

&lt;p&gt;The how has room to breathe.&lt;/p&gt;

&lt;p&gt;And the project stops relying on constant correction as its main management system.&lt;/p&gt;

&lt;p&gt;I made a free AI App Builder Starter Prompts pack for beginners who want to turn a rough app idea into a scoped first build with AI:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want the full build-along field manual behind the free prompts, AI App Builder From Zero walks through idea, scope, stack, prompting, QA, deployment, and launch:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-from-zero&lt;/a&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/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>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Beginner App Idea Checklist Before You Ask AI To Code In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Sat, 04 Jul 2026 18:42:50 +0000</pubDate>
      <link>https://dev.to/marcusykim/the-beginner-app-idea-checklist-before-you-ask-ai-to-code-in-2026-2a4j</link>
      <guid>https://dev.to/marcusykim/the-beginner-app-idea-checklist-before-you-ask-ai-to-code-in-2026-2a4j</guid>
      <description>&lt;p&gt;The most dangerous moment in an AI-built app project is not when the code breaks.&lt;/p&gt;

&lt;p&gt;It is earlier.&lt;/p&gt;

&lt;p&gt;It is the moment where your idea is still blurry, the AI coding tool is sitting there politely, and you type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build me an app that...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That sentence feels productive.&lt;/p&gt;

&lt;p&gt;It also gives the tool permission to make a pile of decisions you have not made yet.&lt;/p&gt;

&lt;p&gt;Who is the app for?&lt;/p&gt;

&lt;p&gt;What is version one?&lt;/p&gt;

&lt;p&gt;Which workflow matters first?&lt;/p&gt;

&lt;p&gt;What data has to exist?&lt;/p&gt;

&lt;p&gt;What should not be built yet?&lt;/p&gt;

&lt;p&gt;What would make the first version successful?&lt;/p&gt;

&lt;p&gt;If those answers are missing, AI has to guess. And AI guessing at product shape is how beginners end up with a login system, dashboard, profile editor, notifications panel, admin area, billing flow, and settings page before one real user problem has been solved.&lt;/p&gt;

&lt;p&gt;That is not momentum.&lt;/p&gt;

&lt;p&gt;That is software confetti.&lt;/p&gt;

&lt;p&gt;I like AI coding tools. I use them heavily in real app work. But the tool gets much better when the project has boundaries before code starts changing.&lt;/p&gt;

&lt;p&gt;So before you ask AI to code your first app, run the idea through a checklist.&lt;/p&gt;

&lt;p&gt;Not a giant business plan. Not a pitch deck. Not a 47-tab spreadsheet that makes you feel like you joined a corporate strategy retreat by accident.&lt;/p&gt;

&lt;p&gt;A practical beginner checklist.&lt;/p&gt;

&lt;p&gt;The goal is simple: turn a rough app idea into something AI can help you build without inventing the whole product for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Can You Name The Person?
&lt;/h2&gt;

&lt;p&gt;Do not start with "users."&lt;/p&gt;

&lt;p&gt;Start with one person you can picture.&lt;/p&gt;

&lt;p&gt;Bad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This app is for people who want to be more productive.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This app is for freelance designers who need one place to track client feedback, revision status, and final file delivery.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This app is for musicians.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This app is for guitarists who want to capture riff ideas quickly on their phone without opening a full mobile studio app.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bad:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This app is for students.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This app is for college students who want to scan textbook chapters and turn them into study notes before an exam.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you name the person, the app gets less abstract.&lt;/p&gt;

&lt;p&gt;The AI no longer has to build for a foggy market. It can reason about a real situation.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Who is one specific person this app helps?
What are they trying to get done?
What is annoying about their current workaround?
Why would they care enough to try a new tool?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you cannot answer those questions, do not code yet.&lt;/p&gt;

&lt;p&gt;The app idea may still be good. It is just not shaped enough.&lt;/p&gt;

&lt;p&gt;If this is the point where you usually get stuck, I made AI App Builder Starter Prompts, a free prompt pack for turning a rough website or mobile app idea into a scoped first build with AI:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the free prompts before the code prompt. The blank prompt box gets much less weird when the first job is "help me shape the idea," not "build the entire thing."&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Can You Explain The Pain Without Naming The App?
&lt;/h2&gt;

&lt;p&gt;A useful app idea should make sense even before you describe the product.&lt;/p&gt;

&lt;p&gt;Try this sentence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[PERSON] has a hard time doing [JOB] because [CURRENT WORKAROUND] is [SPECIFIC PROBLEM].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Freelance designers have a hard time tracking client revisions because feedback gets scattered across email, texts, PDFs, and meeting notes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Beginner musicians have a hard time organizing phone recordings because voice memo apps capture audio quickly but do not understand tempo, key, song sections, or export paths.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local event organizers have a hard time knowing who is actually coming because RSVPs, group chats, payment links, and reminders live in separate places.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This matters because beginners often fall in love with the app category before they understand the pain.&lt;/p&gt;

&lt;p&gt;"A social app for runners" sounds like an idea.&lt;/p&gt;

&lt;p&gt;But what is the actual pain?&lt;/p&gt;

&lt;p&gt;Are runners trying to find partners at the same pace?&lt;/p&gt;

&lt;p&gt;Are they organizing local meetups?&lt;/p&gt;

&lt;p&gt;Are they logging routes?&lt;/p&gt;

&lt;p&gt;Are they comparing shoes?&lt;/p&gt;

&lt;p&gt;Are they trying not to get ghosted by their Saturday morning running group?&lt;/p&gt;

&lt;p&gt;Those are different products.&lt;/p&gt;

&lt;p&gt;AI can help you build any of them, but it cannot know which one you mean unless you say it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Can You Describe One Complete Workflow?
&lt;/h2&gt;

&lt;p&gt;An app is not a list of features.&lt;/p&gt;

&lt;p&gt;An app is a workflow a person can complete.&lt;/p&gt;

&lt;p&gt;That sentence saves beginners a lot of pain.&lt;/p&gt;

&lt;p&gt;A feature list might say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;accounts&lt;/li&gt;
&lt;li&gt;profiles&lt;/li&gt;
&lt;li&gt;events&lt;/li&gt;
&lt;li&gt;chat&lt;/li&gt;
&lt;li&gt;notifications&lt;/li&gt;
&lt;li&gt;search&lt;/li&gt;
&lt;li&gt;payments&lt;/li&gt;
&lt;li&gt;settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That looks official. It also tells you almost nothing about what the first user does.&lt;/p&gt;

&lt;p&gt;A workflow says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A local organizer creates an event, shares it with a small group, collects RSVPs, and sends one reminder before the event starts.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you have a path.&lt;/p&gt;

&lt;p&gt;For a musician app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A guitarist opens the app, starts a new idea, records a riff, adds tempo and key notes, tags it, and finds it later.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a client feedback app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A freelancer creates a client project, adds a deliverable, records feedback, marks revisions, and sees what is ready to send.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where AI becomes much more useful.&lt;/p&gt;

&lt;p&gt;You can ask it to build around one path instead of dumping a feature buffet into the editor.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here is my rough app idea:
[APP IDEA]

Help me define one complete version-one workflow.

Use this format:
Target person:
Problem:
Workflow start:
Workflow steps:
Workflow finish:
What the user has after finishing:
What version one should exclude:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the last line.&lt;/p&gt;

&lt;p&gt;Exclusions are not negative. They are how you protect the first build.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Can You Say What Version One Does Not Include?
&lt;/h2&gt;

&lt;p&gt;The easiest way to make your first app too big is to define only what it includes.&lt;/p&gt;

&lt;p&gt;You also need a not-yet list.&lt;/p&gt;

&lt;p&gt;For a beginner event app, version one might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create an event&lt;/li&gt;
&lt;li&gt;share an event link&lt;/li&gt;
&lt;li&gt;RSVP yes or no&lt;/li&gt;
&lt;li&gt;see attendee count&lt;/li&gt;
&lt;li&gt;send one reminder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Version one might exclude:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;payments&lt;/li&gt;
&lt;li&gt;group chat&lt;/li&gt;
&lt;li&gt;friend feeds&lt;/li&gt;
&lt;li&gt;profile badges&lt;/li&gt;
&lt;li&gt;AI recommendations&lt;/li&gt;
&lt;li&gt;admin analytics&lt;/li&gt;
&lt;li&gt;public event discovery&lt;/li&gt;
&lt;li&gt;complex notification preferences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Could those excluded features matter later?&lt;/p&gt;

&lt;p&gt;Sure.&lt;/p&gt;

&lt;p&gt;Later is the key word.&lt;/p&gt;

&lt;p&gt;Your first app does not need to prove every possible future. It needs to prove one useful thing.&lt;/p&gt;

&lt;p&gt;I learned this through software work and freelancing: the app gets easier to build when the boundary is boringly clear. The shiny extra feature usually feels harmless until it touches authentication, data, UI, permissions, QA, deployment, and the next three conversations you have with yourself at midnight.&lt;/p&gt;

&lt;p&gt;Make the not-yet list early.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Given this app idea and version-one workflow, list:
1. What version one must include.
2. What version one should explicitly exclude.
3. Which excluded features are tempting but dangerous.
4. Which excluded features could become version two.
5. Why each exclusion protects the first build.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If AI argues that everything is essential, ask it to rank by survival:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If I could only build one workflow in the next seven days, which workflow should survive and why?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. Can You Name The Data?
&lt;/h2&gt;

&lt;p&gt;Beginners often think the database is a technical detail for later.&lt;/p&gt;

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

&lt;p&gt;You do not need to become a database expert before building your first app, but you should know what nouns the app cares about.&lt;/p&gt;

&lt;p&gt;For an event app, the nouns might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user&lt;/li&gt;
&lt;li&gt;event&lt;/li&gt;
&lt;li&gt;RSVP&lt;/li&gt;
&lt;li&gt;attendee&lt;/li&gt;
&lt;li&gt;reminder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a musician recording app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user&lt;/li&gt;
&lt;li&gt;recording&lt;/li&gt;
&lt;li&gt;tag&lt;/li&gt;
&lt;li&gt;tempo&lt;/li&gt;
&lt;li&gt;key&lt;/li&gt;
&lt;li&gt;export&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a freelance client feedback app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;client&lt;/li&gt;
&lt;li&gt;project&lt;/li&gt;
&lt;li&gt;deliverable&lt;/li&gt;
&lt;li&gt;feedback item&lt;/li&gt;
&lt;li&gt;revision&lt;/li&gt;
&lt;li&gt;file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These nouns become screens, tables, relationships, permissions, test data, and edge cases.&lt;/p&gt;

&lt;p&gt;If you ask AI to code before you name the data, the tool may create a schema that technically works but does not match the product you meant.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For this version-one workflow, identify the core data objects.

For each object, explain:
- what it represents
- what fields it probably needs
- who can create it
- who can edit it
- who can view it
- what could go wrong if the data is designed badly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prompt is not about perfection.&lt;/p&gt;

&lt;p&gt;It is about making AI explain the product's skeleton before it starts stacking code on top of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Can You Spot The Risky Part?
&lt;/h2&gt;

&lt;p&gt;Every app idea has at least one risky part.&lt;/p&gt;

&lt;p&gt;Risk does not always mean "hard algorithm."&lt;/p&gt;

&lt;p&gt;Sometimes the risky part is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;login&lt;/li&gt;
&lt;li&gt;payments&lt;/li&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;li&gt;file uploads&lt;/li&gt;
&lt;li&gt;push notifications&lt;/li&gt;
&lt;li&gt;App Store review&lt;/li&gt;
&lt;li&gt;moderation&lt;/li&gt;
&lt;li&gt;location data&lt;/li&gt;
&lt;li&gt;syncing across devices&lt;/li&gt;
&lt;li&gt;real-time chat&lt;/li&gt;
&lt;li&gt;messy user-generated content&lt;/li&gt;
&lt;li&gt;a vague promise like "AI will recommend the best option"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The beginner mistake is treating all features as equal.&lt;/p&gt;

&lt;p&gt;They are not equal.&lt;/p&gt;

&lt;p&gt;"Show a list of saved recordings" and "sync audio files across devices with sharing permissions" do not belong in the same mental bucket.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For this app idea, identify the five riskiest implementation areas for a beginner.

For each risk, explain:
- why it is risky
- what could break
- how to simplify it for version one
- what I should test manually
- whether it should be postponed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You are not trying to scare yourself out of building.&lt;/p&gt;

&lt;p&gt;You are trying to stop the app from hiding its hardest parts until the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Can You Define Done?
&lt;/h2&gt;

&lt;p&gt;This is the checklist item beginners skip because it feels too obvious.&lt;/p&gt;

&lt;p&gt;It is not obvious.&lt;/p&gt;

&lt;p&gt;If you do not define done, AI will define done as "the code exists."&lt;/p&gt;

&lt;p&gt;That is not done.&lt;/p&gt;

&lt;p&gt;For a first app, done should mean the user can complete the workflow.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Done means a guitarist can create a recording, add tempo/key notes, tag it, close the app, reopen it, find the recording, play it back, and export it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Done means an organizer can create an event, share the event page, collect RSVPs from three test users, and send one reminder that those users can see.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Done means a freelancer can create a client project, add three pieces of feedback, mark one revision complete, and see which deliverables are still waiting.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That kind of done line changes how you build.&lt;/p&gt;

&lt;p&gt;You stop asking whether the app has enough features.&lt;/p&gt;

&lt;p&gt;You start asking whether the person can finish the job.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Based on this version-one workflow, write a "done when" checklist.

The checklist should include:
- the happy path
- at least five edge cases
- test data I should create
- manual QA steps
- what should happen if something fails
- what I should not accept as done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is also where the free AI App Builder Starter Prompts can help because several of the prompts are designed to make AI slow down, define the build, and turn the idea into testable work before you ask for implementation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Again, it is free. Use it to make the app smaller, clearer, and easier to verify.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full Beginner Checklist
&lt;/h2&gt;

&lt;p&gt;Before you ask AI to code, your app idea should pass these questions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Can I name one specific person this app helps?
2. Can I explain the pain without naming the app?
3. Can I describe one complete version-one workflow?
4. Can I say what version one does not include?
5. Can I name the core data objects?
6. Can I spot the riskiest parts?
7. Can I define what "done" means in user terms?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the answer is no, your next prompt should not be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build the app.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It should be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Help me make this app idea buildable.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a different kind of AI usage.&lt;/p&gt;

&lt;p&gt;It is less exciting for the first five minutes and much better for the next five days.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Good First App Idea Feels Smaller Than Your Imagination
&lt;/h2&gt;

&lt;p&gt;This is the uncomfortable part.&lt;/p&gt;

&lt;p&gt;When the checklist works, your app idea will usually feel smaller.&lt;/p&gt;

&lt;p&gt;That does not mean the idea got worse.&lt;/p&gt;

&lt;p&gt;It means the first build got clearer.&lt;/p&gt;

&lt;p&gt;A giant imaginary platform can contain every feature you have ever wanted. It can also stay imaginary forever.&lt;/p&gt;

&lt;p&gt;A small useful workflow can be built, tested, shown, repaired, and improved.&lt;/p&gt;

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

&lt;p&gt;You are not trying to impress AI with ambition. AI does not need to be impressed. It will happily build a complicated mess with the emotional confidence of a printer jamming at the worst possible time.&lt;/p&gt;

&lt;p&gt;You are trying to give the tool a job it can actually help you finish.&lt;/p&gt;

&lt;p&gt;Start with the person.&lt;/p&gt;

&lt;p&gt;Name the pain.&lt;/p&gt;

&lt;p&gt;Pick the workflow.&lt;/p&gt;

&lt;p&gt;Cut version one down.&lt;/p&gt;

&lt;p&gt;Name the data.&lt;/p&gt;

&lt;p&gt;Respect the risky parts.&lt;/p&gt;

&lt;p&gt;Define done.&lt;/p&gt;

&lt;p&gt;Then ask AI to code.&lt;/p&gt;

&lt;p&gt;I made AI App Builder Starter Prompts for exactly this stage: a free pack of prompts for beginners who want to turn a rough app idea into a scoped first build with AI.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want the full build-along field manual behind the free prompts, AI App Builder From Zero walks through idea generation, scope, stack choice, prompting, QA, deployment, App Store, Google Play, and launch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-from-zero&lt;/a&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/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>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>How To Plan Your First AI-Built App In Phases In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Thu, 02 Jul 2026 18:12:45 +0000</pubDate>
      <link>https://dev.to/marcusykim/how-to-plan-your-first-ai-built-app-in-phases-in-2026-2mpl</link>
      <guid>https://dev.to/marcusykim/how-to-plan-your-first-ai-built-app-in-phases-in-2026-2mpl</guid>
      <description>&lt;p&gt;The fastest way to make AI overbuild your first app is to ask for the whole app at once.&lt;/p&gt;

&lt;p&gt;I know that sounds like the obvious thing to ask.&lt;/p&gt;

&lt;p&gt;You have an idea. You open an AI coding tool. You want the tool to help. So you type something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build me an app where people can create events, invite friends, chat, post updates, sell tickets, manage profiles, and discover local groups.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the tool tries to be helpful.&lt;/p&gt;

&lt;p&gt;It gives you authentication, dashboards, profile settings, feeds, payments, notifications, admin controls, search, upload flows, moderation, analytics, and a database schema that looks like it is already preparing for Series A.&lt;/p&gt;

&lt;p&gt;That can feel exciting for about five minutes.&lt;/p&gt;

&lt;p&gt;Then you realize you do not have a first app. You have a fog machine with folders.&lt;/p&gt;

&lt;p&gt;The beginner problem is not that AI refuses to build. The beginner problem is that AI is willing to build before the project has a shape.&lt;/p&gt;

&lt;p&gt;Your first app needs phases.&lt;/p&gt;

&lt;p&gt;Not because phases sound professional. Not because someone in a collared shirt once said "roadmap" while pointing at a whiteboard.&lt;/p&gt;

&lt;p&gt;Phases matter because software is easier to build, test, and explain when every step has a job.&lt;/p&gt;

&lt;p&gt;The better first prompt is not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build the whole thing.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The better first prompt is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Help me turn this rough app idea into a phased build plan.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That one change can keep your project from becoming a technically impressive mess.&lt;/p&gt;

&lt;h2&gt;
  
  
  The App Is Not One Blob
&lt;/h2&gt;

&lt;p&gt;Beginners often talk about an app like it is one object.&lt;/p&gt;

&lt;p&gt;"I want to build a social app."&lt;/p&gt;

&lt;p&gt;"I want to build a fitness app."&lt;/p&gt;

&lt;p&gt;"I want to build a marketplace."&lt;/p&gt;

&lt;p&gt;"I want to build an AI note-taking app."&lt;/p&gt;

&lt;p&gt;That is normal language, but it is bad build language.&lt;/p&gt;

&lt;p&gt;An app is not one blob. It is a set of user workflows, screens, data, permissions, edge cases, and launch constraints that have to cooperate.&lt;/p&gt;

&lt;p&gt;If you ask AI to build the blob, the tool has to make hidden decisions for you.&lt;/p&gt;

&lt;p&gt;It decides what the first user does. It decides what accounts mean. It decides what data exists. It decides which screens matter. It decides whether the app is web-first or mobile-first. It decides what "done" looks like.&lt;/p&gt;

&lt;p&gt;That is too much accidental ownership to give away at the beginning.&lt;/p&gt;

&lt;p&gt;I have seen this in software work, startup work, and freelance work: the app gets calmer when the plan moves from vague product name to phased user progress.&lt;/p&gt;

&lt;p&gt;The useful question becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What should the user be able to do first?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not eventually.&lt;/p&gt;

&lt;p&gt;First.&lt;/p&gt;

&lt;p&gt;If you are stuck at the blank prompt box, I made a free AI App Builder Starter Prompts pack for this exact moment. It helps you turn a rough app idea into a scoped first build before you ask AI to generate too much at once:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the free prompts to get the project into phases. Then use AI to help you build the first phase instead of letting it invent the entire future of the app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 1: Name The Person And The Job
&lt;/h2&gt;

&lt;p&gt;Before screens, stacks, frameworks, or databases, name the person.&lt;/p&gt;

&lt;p&gt;Not "users."&lt;/p&gt;

&lt;p&gt;A person.&lt;/p&gt;

&lt;p&gt;Give that person a simple profile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Maya is a college band conductor who needs a faster way to organize game-day rosters and send practice reminders.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Chris is a beginner guitarist who wants to record song ideas quickly without opening a full mobile studio app.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Jenna is a freelance designer who needs one place to track client feedback, revision status, and final asset delivery.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the app has gravity.&lt;/p&gt;

&lt;p&gt;You are not building "a productivity app." You are helping Jenna keep client feedback from turning into an archaeological dig.&lt;/p&gt;

&lt;p&gt;You are not building "a music app." You are helping Chris catch a riff before it disappears into the same mental drawer as every password he has ever forgotten.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here is my app idea:
[APP IDEA]

Help me define three possible ideal users.
For each user, describe:
- who they are
- what problem they have
- what job they want the app to do
- why existing tools might feel annoying
- what version one should help them accomplish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not skip this because it feels simple.&lt;/p&gt;

&lt;p&gt;If you cannot picture the person, AI will have to build for a blur.&lt;/p&gt;

&lt;p&gt;Blur is where scope goes to multiply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 2: Pick The MVP Value
&lt;/h2&gt;

&lt;p&gt;MVP does not mean "ugly app."&lt;/p&gt;

&lt;p&gt;It means the smallest version that proves the main value.&lt;/p&gt;

&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;If your app is for musicians capturing song ideas, the MVP is probably not social profiles, collaboration rooms, AI mastering, paid sample packs, and a marketplace.&lt;/p&gt;

&lt;p&gt;The MVP might be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A musician can create a recording, add tempo/key notes, tag it, and find it later.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is still real software.&lt;/p&gt;

&lt;p&gt;It has recording, files, metadata, search or filtering, storage, and a clear user path.&lt;/p&gt;

&lt;p&gt;But it has a boundary.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Given this user and app idea, define the MVP as one complete user workflow.

Use this format:
User:
Problem:
Version-one promise:
Core workflow:
What version one includes:
What version one excludes:
What would prove the MVP works:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exclusion list is not pessimism.&lt;/p&gt;

&lt;p&gt;It is project protection.&lt;/p&gt;

&lt;p&gt;Most first apps do not die because version one was too small. They die because version one swallowed version three, version four, and a vague enterprise dashboard wearing a fake mustache.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 3: Break The App Into Feature Groups
&lt;/h2&gt;

&lt;p&gt;Once you know the MVP, break the app into feature groups.&lt;/p&gt;

&lt;p&gt;In software teams, you might hear these called epics. Beginners do not need to worship the terminology, but the concept is useful.&lt;/p&gt;

&lt;p&gt;An epic is a parent bucket of related work.&lt;/p&gt;

&lt;p&gt;For an event or social app, examples might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;accounts&lt;/li&gt;
&lt;li&gt;profiles&lt;/li&gt;
&lt;li&gt;event creation&lt;/li&gt;
&lt;li&gt;event discovery&lt;/li&gt;
&lt;li&gt;RSVPs&lt;/li&gt;
&lt;li&gt;messaging&lt;/li&gt;
&lt;li&gt;notifications&lt;/li&gt;
&lt;li&gt;admin tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a musician recording app, examples might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recording&lt;/li&gt;
&lt;li&gt;take library&lt;/li&gt;
&lt;li&gt;tags and notes&lt;/li&gt;
&lt;li&gt;playback&lt;/li&gt;
&lt;li&gt;export&lt;/li&gt;
&lt;li&gt;settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This does not mean you build all of them now.&lt;/p&gt;

&lt;p&gt;It means you know what exists in the product universe.&lt;/p&gt;

&lt;p&gt;Then you choose which feature group belongs in phase one.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Break this app into high-level feature groups.

Then mark each feature group as:
- phase 1: required for MVP
- phase 2: useful after MVP works
- later: not needed until there is real usage

Be strict. Protect me from overbuilding.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The last line matters.&lt;/p&gt;

&lt;p&gt;AI often defaults to being expansive. You can ask it to be protective.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 4: Design The First Screen Suite
&lt;/h2&gt;

&lt;p&gt;I like getting to screens early.&lt;/p&gt;

&lt;p&gt;Not because screens are the whole app.&lt;/p&gt;

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

&lt;p&gt;But screens force the idea to stop floating.&lt;/p&gt;

&lt;p&gt;If you say "event discovery," that can mean anything. If you sketch the first event list, event detail page, RSVP flow, and confirmation state, the product becomes easier to discuss.&lt;/p&gt;

&lt;p&gt;For a beginner working with AI, a first screen suite might include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;home or dashboard&lt;/li&gt;
&lt;li&gt;create screen&lt;/li&gt;
&lt;li&gt;detail screen&lt;/li&gt;
&lt;li&gt;edit screen&lt;/li&gt;
&lt;li&gt;empty state&lt;/li&gt;
&lt;li&gt;success state&lt;/li&gt;
&lt;li&gt;error state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need a museum-quality Figma file before anything can happen. But you do need enough visual clarity that AI is not inventing the interface from vibes.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Based on this MVP workflow, list the minimum screens needed.

For each screen, include:
- purpose
- main user action
- required data shown
- empty state
- error state
- where the user can go next
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If visual quality matters, use a design tool like Figma or an AI design tool to create a first pass. Then turn the design values into a small design system: colors, type, spacing, buttons, forms, cards, navigation, and states.&lt;/p&gt;

&lt;p&gt;Your first app does not need a giant design system.&lt;/p&gt;

&lt;p&gt;It does need enough consistency that every new screen does not become a fresh style experiment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 5: Decide The Data Before It Decides For You
&lt;/h2&gt;

&lt;p&gt;Data is where a lot of beginner apps quietly become messy.&lt;/p&gt;

&lt;p&gt;The screen looks simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create event.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The data behind it is less simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;event title
description
location
start time
end time
host user
attendees
RSVP status
visibility
created date
updated date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you do not define the data model, AI will still create one.&lt;/p&gt;

&lt;p&gt;It just might not be the one you meant.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;For this MVP workflow, propose the minimum data model.

Include:
- entities or tables
- fields
- relationships
- required fields
- optional fields
- simple example records
- what should not be stored yet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What part of this data model is most likely to change later?
What should I keep simple now so I do not trap version one?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not about becoming a database expert overnight.&lt;/p&gt;

&lt;p&gt;It is about noticing the decisions before the project buries them.&lt;/p&gt;

&lt;p&gt;The free AI App Builder Starter Prompts include planning prompts for scope, stack, screens, data, QA, and launch, so they can help you create this kind of phase map before code starts piling up:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Again, the prompts are free. The point is not to collect prompts like trading cards. The point is to make AI explain the project before it builds the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 6: Turn Features Into User Stories
&lt;/h2&gt;

&lt;p&gt;A feature is too vague by itself.&lt;/p&gt;

&lt;p&gt;"Messaging" is not a build step.&lt;/p&gt;

&lt;p&gt;"A signed-in user can send a text message to another signed-in user and see it appear in the conversation" is closer.&lt;/p&gt;

&lt;p&gt;That is a user story.&lt;/p&gt;

&lt;p&gt;For beginners, a user story is just a small sentence that describes one thing a person can do.&lt;/p&gt;

&lt;p&gt;Good user stories are testable.&lt;/p&gt;

&lt;p&gt;Bad user stories are fog with verbs.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Turn the phase-one feature group into user stories.

Each story should include:
- user action
- expected result
- required screens
- required data
- rough implementation notes
- QA checks
- what would count as done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps you build vertical slices instead of random pieces.&lt;/p&gt;

&lt;p&gt;A vertical slice means one user path works from the interface to the data to the expected result.&lt;/p&gt;

&lt;p&gt;That matters because a pile of half-built screens is hard to test. A small complete workflow is easier to trust.&lt;/p&gt;

&lt;p&gt;The first goal is not:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create every screen.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first goal is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Make one important user story work end to end.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Phase 7: Build One Slice At A Time
&lt;/h2&gt;

&lt;p&gt;This is where AI can become genuinely useful.&lt;/p&gt;

&lt;p&gt;Once the phase is clear, you can ask the tool to help with a focused slice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build the "create recording" workflow.

Use the existing project rules, design system, and data model.
Do not add new features.
Do not introduce a new service.
Implement only what is required for this user story:
[USER STORY]

When finished, give me a QA checklist for this workflow.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That prompt gives AI a job with walls.&lt;/p&gt;

&lt;p&gt;Walls are good.&lt;/p&gt;

&lt;p&gt;Walls keep the tool from "helpfully" turning your recording feature into a social audio platform with creator monetization and a mascot.&lt;/p&gt;

&lt;p&gt;After the slice is built, test it like a user:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can you start the flow?&lt;/li&gt;
&lt;li&gt;Can you complete the main action?&lt;/li&gt;
&lt;li&gt;Does the data save?&lt;/li&gt;
&lt;li&gt;Does the next screen show the result?&lt;/li&gt;
&lt;li&gt;What happens with empty input?&lt;/li&gt;
&lt;li&gt;What happens with bad input?&lt;/li&gt;
&lt;li&gt;What happens if you refresh, close, or reopen?&lt;/li&gt;
&lt;li&gt;Can you repeat the flow twice?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the answer is no, the slice is not done.&lt;/p&gt;

&lt;p&gt;It may be close.&lt;/p&gt;

&lt;p&gt;It may be pretty.&lt;/p&gt;

&lt;p&gt;It may have generated a lot of files.&lt;/p&gt;

&lt;p&gt;But it is not done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Phase 8: Launch Only After The MVP Workflow Survives Reality
&lt;/h2&gt;

&lt;p&gt;Launch does not have to be dramatic.&lt;/p&gt;

&lt;p&gt;For a first app, launch might mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a TestFlight build&lt;/li&gt;
&lt;li&gt;a small web deployment&lt;/li&gt;
&lt;li&gt;a private beta link&lt;/li&gt;
&lt;li&gt;a demo to one client&lt;/li&gt;
&lt;li&gt;a walkthrough with one target user&lt;/li&gt;
&lt;li&gt;a public version-one release&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point is not to make noise. The point is to get the app in front of reality.&lt;/p&gt;

&lt;p&gt;Before launch, ask AI for a release checklist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a launch checklist for this MVP.

Include:
- critical user workflows
- account/auth checks if relevant
- data checks
- payment checks if relevant
- mobile or browser checks
- empty and error states
- privacy or permission checks
- deployment steps
- rollback plan
- known issues I should disclose or fix first
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where beginners are tempted to trust the app because it ran once.&lt;/p&gt;

&lt;p&gt;Do not do that.&lt;/p&gt;

&lt;p&gt;One successful run is a hint.&lt;/p&gt;

&lt;p&gt;Repeated successful runs are evidence.&lt;/p&gt;

&lt;p&gt;A real user completing the workflow without you narrating every tap is better evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Whole Phase Map
&lt;/h2&gt;

&lt;p&gt;Here is the simple version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Name the person and the job.
2. Pick the MVP value.
3. Break the app into feature groups.
4. Design the first screen suite.
5. Decide the data model.
6. Turn features into user stories.
7. Build one vertical slice at a time.
8. QA, deploy, and launch only after the MVP workflow survives.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can make this more formal later.&lt;/p&gt;

&lt;p&gt;You can add story points, sprint planning, issue tracking, pull requests, environments, release notes, analytics, and all the other grown-up software furniture when the project needs it.&lt;/p&gt;

&lt;p&gt;At the beginning, you need the habit.&lt;/p&gt;

&lt;p&gt;Do not ask AI to build the blob.&lt;/p&gt;

&lt;p&gt;Ask AI to help you phase the app.&lt;/p&gt;

&lt;p&gt;Then ask it to build the next slice.&lt;/p&gt;

&lt;p&gt;Then test the slice.&lt;/p&gt;

&lt;p&gt;Then move forward.&lt;/p&gt;

&lt;p&gt;That rhythm is slower than the fantasy of one prompt building everything.&lt;/p&gt;

&lt;p&gt;It is also much more likely to give you an app you can understand, verify, and improve.&lt;/p&gt;

&lt;p&gt;The beginner who wins with AI is not the person who asks for the biggest output.&lt;/p&gt;

&lt;p&gt;It is the person who keeps the project small enough to steer.&lt;/p&gt;

&lt;p&gt;I made AI App Builder Starter Prompts: a free pack with 25 core planning prompts plus bonus build and deployment prompts for web, iOS, Android, Expo, and Flutter:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want the full build-along field manual behind the free prompts, AI App Builder From Zero walks through idea generation, scope, stack choice, prompting, QA, deployment, App Store, Google Play, and launch:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-from-zero&lt;/a&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/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>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why AI Makes Judgment More Valuable For Freelancers In 2026</title>
      <dc:creator>Marcus Kim</dc:creator>
      <pubDate>Mon, 29 Jun 2026 21:19:54 +0000</pubDate>
      <link>https://dev.to/marcusykim/why-ai-makes-judgment-more-valuable-for-freelancers-in-2026-nhf</link>
      <guid>https://dev.to/marcusykim/why-ai-makes-judgment-more-valuable-for-freelancers-in-2026-nhf</guid>
      <description>&lt;p&gt;AI makes it easier to build the wrong thing with confidence.&lt;/p&gt;

&lt;p&gt;That is the part I think a lot of beginner builders and freelancers miss.&lt;/p&gt;

&lt;p&gt;The obvious story is that AI makes execution faster. That is true. I can ask an AI coding tool to explain an error, compare implementation options, inspect a project, write code, refactor a screen, generate a QA checklist, or help me pick up where I left off.&lt;/p&gt;

&lt;p&gt;That is a huge change.&lt;/p&gt;

&lt;p&gt;But speed is not the whole story.&lt;/p&gt;

&lt;p&gt;When the tool gets faster, your judgment becomes more important, not less. You have to decide what the project is allowed to become. You have to decide which tradeoffs are acceptable. You have to decide whether the output actually matches the user's job. You have to decide when the AI is solving the real problem and when it is decorating the wrong one.&lt;/p&gt;

&lt;p&gt;In my freelance work, AI changed the job from searching and stitching to directing, reviewing, and verifying.&lt;/p&gt;

&lt;p&gt;That sounds cleaner than it feels.&lt;/p&gt;

&lt;p&gt;Directing means you need to know what outcome you want.&lt;/p&gt;

&lt;p&gt;Reviewing means you need to notice when the answer is plausible but wrong.&lt;/p&gt;

&lt;p&gt;Verifying means you cannot treat a green checkmark, a pretty screen, or a confident explanation as proof that the app actually works.&lt;/p&gt;

&lt;p&gt;The beginner mistake is believing AI removes the need to think clearly.&lt;/p&gt;

&lt;p&gt;The better rule is this:&lt;/p&gt;

&lt;p&gt;AI removes some friction from execution, then hands you more responsibility for scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Faster Tool Still Needs A Smaller Job
&lt;/h2&gt;

&lt;p&gt;When I started using AI heavily for software work, the old research loop changed immediately.&lt;/p&gt;

&lt;p&gt;Before modern AI tools, a lot of software work meant digging through documentation, old forum posts, Stack Overflow answers, YouTube videos, outdated examples, and half-related blog posts until something clicked. You stitched pieces together and hoped the tutorial you found still matched the version of the framework you were using.&lt;/p&gt;

&lt;p&gt;Now you can ask the tool directly.&lt;/p&gt;

&lt;p&gt;That is better.&lt;/p&gt;

&lt;p&gt;It is also dangerous if you confuse a fast answer with a good product decision.&lt;/p&gt;

&lt;p&gt;If you tell AI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build me a marketplace app for local creators.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;it may give you accounts, profiles, payments, listings, search, messaging, moderation tools, an admin panel, notifications, subscriptions, dashboards, analytics, and a database schema that looks like it has already hired a CFO.&lt;/p&gt;

&lt;p&gt;None of that means you have a good first version.&lt;/p&gt;

&lt;p&gt;It means you gave the tool a giant empty room and it started moving furniture into every corner.&lt;/p&gt;

&lt;p&gt;A freelancer cannot survive that way. A beginner app builder cannot learn that way. A client project cannot stay sane that way.&lt;/p&gt;

&lt;p&gt;The faster the tool gets, the more you need to give it a smaller job.&lt;/p&gt;

&lt;p&gt;If you are using AI to plan your first app and the blank prompt box is the part slowing you down, I made a free AI App Builder Starter Prompts pack for beginners. It helps you turn a rough app idea into a scoped first build instead of asking AI to invent the whole project at once:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use the free prompts as a starting point, not a substitute for judgment. The point is to create a better conversation with AI, then keep steering it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Judgment Starts With What You Exclude
&lt;/h2&gt;

&lt;p&gt;Most beginners think judgment means choosing the best tool.&lt;/p&gt;

&lt;p&gt;Should I use Firebase or Supabase?&lt;/p&gt;

&lt;p&gt;Should I build a web app or a mobile app?&lt;/p&gt;

&lt;p&gt;Should I use React, SwiftUI, Flutter, Expo, Next.js, or whatever somebody on the internet is yelling about this week?&lt;/p&gt;

&lt;p&gt;Those decisions matter.&lt;/p&gt;

&lt;p&gt;But the first judgment call is usually smaller and more boring:&lt;/p&gt;

&lt;p&gt;What are we not building yet?&lt;/p&gt;

&lt;p&gt;This matters because AI is very willing to be helpful in every direction at once.&lt;/p&gt;

&lt;p&gt;If your idea is "an app for musicians to save song ideas," the first version might only need to help one musician record a rough idea, name it, tag it, and find it later.&lt;/p&gt;

&lt;p&gt;That is useful.&lt;/p&gt;

&lt;p&gt;That is also already enough work.&lt;/p&gt;

&lt;p&gt;You do not need public profiles in version one. You do not need collaboration rooms. You do not need a social feed. You do not need AI mastering. You do not need a creator marketplace. You do not need to solve the entire music industry before the app can reliably save a recording.&lt;/p&gt;

&lt;p&gt;This is where judgment protects the project.&lt;/p&gt;

&lt;p&gt;Judgment says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This feature is tempting, but not required.&lt;/li&gt;
&lt;li&gt;This workflow matters first.&lt;/li&gt;
&lt;li&gt;This tool adds more complexity than it removes.&lt;/li&gt;
&lt;li&gt;This deadline does not survive the new scope.&lt;/li&gt;
&lt;li&gt;This screen looks finished, but the user cannot complete the core job yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can help you see those tradeoffs, but you have to ask for them.&lt;/p&gt;

&lt;p&gt;Try this before building:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Review this app idea as if you are protecting a beginner from overbuilding.

What should version one include?
What should version one exclude?
What feature sounds useful but would create the most risk?
What is the smallest workflow that would make this app valuable?
What does "done" mean for that workflow?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That prompt is not magic.&lt;/p&gt;

&lt;p&gt;It just points the conversation at the real decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Freelancing Makes The Cost Obvious
&lt;/h2&gt;

&lt;p&gt;Freelancing teaches you that vague scope is not a writing problem.&lt;/p&gt;

&lt;p&gt;It is a future calendar problem.&lt;/p&gt;

&lt;p&gt;If the promise is blurry, the work expands. If the work expands, the timeline changes. If the timeline changes without a real conversation, everybody starts living inside a weird fog where the app is both almost done and somehow nowhere near done.&lt;/p&gt;

&lt;p&gt;AI does not fix that.&lt;/p&gt;

&lt;p&gt;AI can make it easier to create more screens, more code, more flows, and more convincing demos before the actual agreement is clear.&lt;/p&gt;

&lt;p&gt;That is why I like demo-shaped progress.&lt;/p&gt;

&lt;p&gt;A good demo is not "look at all the files that changed."&lt;/p&gt;

&lt;p&gt;A good demo is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Here is one new thing a user can do now that they could not do before.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That rule works for client work, but it also works for your own first app.&lt;/p&gt;

&lt;p&gt;If you are building with AI, do not measure progress by how much the tool produced. Measure progress by whether one real user workflow got closer to working.&lt;/p&gt;

&lt;p&gt;Can the user create the thing?&lt;/p&gt;

&lt;p&gt;Can they save it?&lt;/p&gt;

&lt;p&gt;Can they find it again?&lt;/p&gt;

&lt;p&gt;Can they edit it?&lt;/p&gt;

&lt;p&gt;Can they complete the task without you explaining the interface?&lt;/p&gt;

&lt;p&gt;Can you test the path twice and get the same result?&lt;/p&gt;

&lt;p&gt;That is where the work becomes real.&lt;/p&gt;

&lt;p&gt;The AI may produce the code, but you still own the proof.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Project Needs A Rulebook
&lt;/h2&gt;

&lt;p&gt;One reason AI goes sideways is that beginners expect it to remember a project that has never been defined.&lt;/p&gt;

&lt;p&gt;The tool does not automatically know your product taste, user, constraints, stack decisions, naming rules, design system, data model, or definition of done.&lt;/p&gt;

&lt;p&gt;You have to give it a source of truth.&lt;/p&gt;

&lt;p&gt;I like creating project knowledge early:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the user&lt;/li&gt;
&lt;li&gt;the one workflow&lt;/li&gt;
&lt;li&gt;the stack&lt;/li&gt;
&lt;li&gt;the screens&lt;/li&gt;
&lt;li&gt;the data model&lt;/li&gt;
&lt;li&gt;the feature exclusions&lt;/li&gt;
&lt;li&gt;the design rules&lt;/li&gt;
&lt;li&gt;the QA checks&lt;/li&gt;
&lt;li&gt;the launch goal&lt;/li&gt;
&lt;li&gt;the definition of done&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This does not need to be fancy.&lt;/p&gt;

&lt;p&gt;It can be a Markdown file, a project brief, an &lt;code&gt;AGENTS.md&lt;/code&gt;, a design-system note, a checklist, or a simple build plan.&lt;/p&gt;

&lt;p&gt;The format matters less than the shared agreement.&lt;/p&gt;

&lt;p&gt;When the AI starts wandering, you can pull it back to the rulebook:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use the project rules. Do not add new services, screens, or features unless they are required for the version-one workflow.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That sentence can save you from a lot of expensive cleverness.&lt;/p&gt;

&lt;p&gt;This is also where the free AI App Builder Starter Prompts help. They are designed to make you define the idea, scope, stack, screens, data, QA, and launch path before you let AI run too far:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The useful habit is not "paste one perfect prompt."&lt;/p&gt;

&lt;p&gt;The useful habit is building a project memory that you and the AI can both follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three Questions I Ask Before Trusting The Output
&lt;/h2&gt;

&lt;p&gt;When AI gives me a plan or implementation, I try to slow down around three questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. What decision did the AI make for me?
&lt;/h3&gt;

&lt;p&gt;AI often hides decisions inside confident output.&lt;/p&gt;

&lt;p&gt;It chooses a stack. It chooses a data shape. It chooses a screen flow. It chooses a permission model. It chooses what "simple" means.&lt;/p&gt;

&lt;p&gt;If you do not notice those decisions, you inherit them.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List the major product and technical decisions you made in this plan. For each one, explain the tradeoff and a simpler alternative.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You are not trying to become an expert on everything overnight.&lt;/p&gt;

&lt;p&gt;You are trying to stop accidental architecture from becoming the foundation of your app.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. What would prove this works?
&lt;/h3&gt;

&lt;p&gt;A feature is not done because it exists in code.&lt;/p&gt;

&lt;p&gt;It is done when the user can complete the job it was built for.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Give me a QA checklist for this workflow. Include happy paths, empty states, invalid inputs, permission problems, and regression risks.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then actually run the checklist.&lt;/p&gt;

&lt;p&gt;This is the part beginners want to skip because the app already looks finished.&lt;/p&gt;

&lt;p&gt;Do not skip it.&lt;/p&gt;

&lt;p&gt;Pretty is not proof.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. What can wait?
&lt;/h3&gt;

&lt;p&gt;AI is good at giving you more.&lt;/p&gt;

&lt;p&gt;You need to get good at saying "not yet."&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What parts of this plan can wait until after version one? Remove anything that is not required for the first user workflow.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not anti-ambition.&lt;/p&gt;

&lt;p&gt;It is sequencing.&lt;/p&gt;

&lt;p&gt;A small working app is not a failure. It is evidence. It tells you what is real enough to build on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Freelancer Version Of AI Leverage
&lt;/h2&gt;

&lt;p&gt;The dream version of AI leverage is that the tool does all the hard parts.&lt;/p&gt;

&lt;p&gt;The practical version is different.&lt;/p&gt;

&lt;p&gt;AI helps me move faster when I know how to frame the work. It helps me recover context. It helps me compare options. It helps me inspect problems. It helps me draft plans. It helps me implement.&lt;/p&gt;

&lt;p&gt;But it does not absolve me from product judgment.&lt;/p&gt;

&lt;p&gt;If I give AI a bad goal, I can get a polished bad result.&lt;/p&gt;

&lt;p&gt;If I give AI vague scope, I can get a bigger vague project.&lt;/p&gt;

&lt;p&gt;If I skip QA, I can get a nice-looking app with broken trust.&lt;/p&gt;

&lt;p&gt;If I let the tool keep adding clever fixes, I can end up with a pile of surgical patches instead of a clean solution.&lt;/p&gt;

&lt;p&gt;The value is not in pretending the tool is magic.&lt;/p&gt;

&lt;p&gt;The value is in becoming a better operator.&lt;/p&gt;

&lt;p&gt;That means writing clearer project rules. Asking better questions. Keeping the first version small. Testing the actual workflow. Having the uncomfortable scope conversation early. Letting the AI propose options, then making the decision yourself.&lt;/p&gt;

&lt;p&gt;AI can multiply your work.&lt;/p&gt;

&lt;p&gt;That is exactly why your judgment matters.&lt;/p&gt;

&lt;p&gt;It can multiply good direction.&lt;/p&gt;

&lt;p&gt;It can also multiply confusion.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Rule For Beginner Builders
&lt;/h2&gt;

&lt;p&gt;If you are building your first app with AI, do not start by asking the tool to build the whole app.&lt;/p&gt;

&lt;p&gt;Start by asking it to help you make the project smaller and more testable.&lt;/p&gt;

&lt;p&gt;Use this operating rule:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Before AI writes code, it must help me define the user, workflow, exclusions, stack, screens, data, QA checks, and done-when line.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is not as exciting as watching the tool generate a huge codebase.&lt;/p&gt;

&lt;p&gt;It is much more useful.&lt;/p&gt;

&lt;p&gt;The beginner who wins with AI is not always the person with the cleverest prompt.&lt;/p&gt;

&lt;p&gt;It is often the person who keeps asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are we building?&lt;/li&gt;
&lt;li&gt;Who is this for?&lt;/li&gt;
&lt;li&gt;What can the user do when it works?&lt;/li&gt;
&lt;li&gt;What are we excluding?&lt;/li&gt;
&lt;li&gt;How will we prove it works?&lt;/li&gt;
&lt;li&gt;What decision did AI just make for me?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those questions are judgment.&lt;/p&gt;

&lt;p&gt;And in 2026, judgment is not less valuable because of AI.&lt;/p&gt;

&lt;p&gt;It is the part that keeps the speed pointed at something worth building.&lt;/p&gt;

&lt;p&gt;I made AI App Builder Starter Prompts: a free pack with 25 core planning prompts plus bonus build and deployment prompts for web, iOS, Android, Expo, and Flutter:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-starter-prompts&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want the full build-along field manual behind the free prompts, AI App Builder From Zero walks through idea generation, scope, stack choice, prompting, QA, deployment, App Store, Google Play, and launch:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcusykim.gumroad.com/l/ai-app-builder-from-zero" rel="noopener noreferrer"&gt;https://marcusykim.gumroad.com/l/ai-app-builder-from-zero&lt;/a&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/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>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
