<?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: flipslidersand</title>
    <description>The latest articles on DEV Community by flipslidersand (@flipslidersand).</description>
    <link>https://dev.to/flipslidersand</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%2F4012215%2F0fab126f-0e0c-493d-a664-bf881dbdc898.png</url>
      <title>DEV Community: flipslidersand</title>
      <link>https://dev.to/flipslidersand</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/flipslidersand"/>
    <language>en</language>
    <item>
      <title>The AI Is Fast. The Decisions Are Mine.</title>
      <dc:creator>flipslidersand</dc:creator>
      <pubDate>Mon, 06 Jul 2026 14:14:05 +0000</pubDate>
      <link>https://dev.to/flipslidersand/the-ai-is-fast-the-decisions-are-mine-35p5</link>
      <guid>https://dev.to/flipslidersand/the-ai-is-fast-the-decisions-are-mine-35p5</guid>
      <description>&lt;p&gt;A lot of writing about AI-assisted development focuses on speed.&lt;/p&gt;

&lt;p&gt;How fast you can generate code. How many lines per hour. How quickly you can go from idea to pull request.&lt;/p&gt;

&lt;p&gt;Speed is real. But it is not the interesting question.&lt;/p&gt;

&lt;p&gt;The interesting question is: &lt;strong&gt;who is responsible for what?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Get that wrong, and speed becomes a liability. You move faster toward the wrong place, with less awareness of how you got there.&lt;/p&gt;




&lt;h2&gt;
  
  
  The boundary I use
&lt;/h2&gt;

&lt;p&gt;After four months as a solo engineer building a production system with Claude Code as my primary tool, this is the line I drew:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human side:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requirements — what the system should do, and what it should not do&lt;/li&gt;
&lt;li&gt;Acceptance criteria — what "done" actually means for each unit of work&lt;/li&gt;
&lt;li&gt;Production judgment — whether something is safe to ship&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AI side:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementation — writing code that satisfies the criteria&lt;/li&gt;
&lt;li&gt;Code review — flagging issues and suggesting alternatives&lt;/li&gt;
&lt;li&gt;Repetitive testing — generating test cases and running assertions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not a rule I found written down somewhere. It is a conclusion I reached by watching what breaks when the line moves in either direction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why requirements must stay with humans
&lt;/h2&gt;

&lt;p&gt;AI does not know your domain.&lt;/p&gt;

&lt;p&gt;It knows patterns from training data. It can generate plausible-sounding requirements based on what similar systems have needed. But it does not know what your business actually needs, what your users are actually doing, or what your organization can actually support.&lt;/p&gt;

&lt;p&gt;When I joined the company, I spent time on the shop floor before writing any code. Not to understand what to build — to understand what &lt;em&gt;not&lt;/em&gt; to build. Which parts of the workflow had value precisely because they involved human judgment. Which parts were mechanical. Where systematizing would help versus where it would remove something important.&lt;/p&gt;

&lt;p&gt;There is also a more subtle case. Sometimes the right answer from the observation phase is not to build something at all. I once watched a workflow that looked inefficient on paper — manual handoffs, no clear status tracking. The instinct was to systematize it. But two things stopped me. First, the manual handoffs were doing something a system could not: they forced a conversation that kept two people aligned. Second, that part of the workflow existed because of a specific regulatory requirement — one that could change or disappear entirely. Building a system around it would have meant maintaining something with an uncertain lifespan. I left it alone.&lt;/p&gt;

&lt;p&gt;The observation phase is where you find out what not to build. AI was not in the room for that.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why acceptance criteria must stay with humans
&lt;/h2&gt;

&lt;p&gt;"Done" is a business decision, not a technical one.&lt;/p&gt;

&lt;p&gt;A feature can pass all its tests and still not be done. Maybe it handles the happy path but leaves error states unclear. Maybe it works in isolation but creates friction in the actual workflow. Maybe it solves the problem that was described but not the problem that exists.&lt;/p&gt;

&lt;p&gt;The acceptance criteria is the translation layer between what the business needs and what the system does. Getting that translation right requires the same domain knowledge that requirements do.&lt;/p&gt;

&lt;p&gt;When I write a GitHub Issue, I write the acceptance criteria before I ask Claude Code to implement anything. That sequence matters. The implementation is shaped by the criteria. If the criteria is wrong, the implementation is fast in the wrong direction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why production judgment must stay with humans
&lt;/h2&gt;

&lt;p&gt;Responsibility cannot be delegated to a tool.&lt;/p&gt;

&lt;p&gt;If something breaks in production — data loss, incorrect calculations, a process that runs incorrectly overnight — the question is not "what did the AI do." The question is "who decided to ship this."&lt;/p&gt;

&lt;p&gt;That accountability has to live somewhere. It lives with the person who made the call.&lt;/p&gt;

&lt;p&gt;A concrete example: a customer-side image leak incident required a rapid audit response. There was almost no historical data to work from. The model's inferences were weak. But with a minimal scope, limited claims, clear caveats, and humans in the loop at every step, the output was still usable. Weak inference plus human judgment is often more than good enough. Strong inference with no human checkpoint is where things go wrong.&lt;/p&gt;

&lt;p&gt;When I review a pull request before merging, I am not checking syntax. I am asking: does this match the acceptance criteria, and is this safe to run in production? Those are my questions to answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  What happens when the boundary slips
&lt;/h2&gt;

&lt;p&gt;The failure modes are predictable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When AI takes on requirements:&lt;/strong&gt; The system is built to match a plausible interpretation of the problem rather than the actual problem. This is often invisible until the system is in production and users start working around it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When AI writes acceptance criteria:&lt;/strong&gt; "Done" becomes technically correct rather than useful. Tests pass. The feature ships. Something important is still missing, but it is hard to say what.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When AI makes production calls:&lt;/strong&gt; Nothing fails visibly. But the person who hit "deploy" does not fully understand what they shipped. Over time, this erodes the ability to reason about the system — you have output, but not understanding.&lt;/p&gt;

&lt;p&gt;A specific example: I hit a SQL connection error, asked Claude Code to fix it, got a revised version, hit the same error again. Asked again. Got back something close to the original code. The problem turned out to be a version dependency — something that changed after the model's knowledge cutoff. No amount of prompting would have resolved it, because the model simply did not have the relevant information. The fix came from going directly to the latest documentation.&lt;/p&gt;

&lt;p&gt;Knowing when to stop prompting and go elsewhere is a judgment call the tool cannot make for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  What AI handles well, and why
&lt;/h2&gt;

&lt;p&gt;The right side of the boundary is where AI is genuinely powerful.&lt;/p&gt;

&lt;p&gt;Implementation, review, and repetitive testing all share a property: the standard is clear before the work starts.&lt;/p&gt;

&lt;p&gt;When the acceptance criteria is written, there is an external measure of correctness. AI can write code against that standard, generate tests that check that standard, and flag when code does not meet it. The verifiability is what makes this work.&lt;/p&gt;

&lt;p&gt;Boilerplate is the clearest case. Cloud Run configurations, Argo CD manifests, GitHub Actions workflows — these have well-defined correct forms. AI can produce them quickly and accurately. There is nothing to decide; there is something to write.&lt;/p&gt;

&lt;p&gt;Error diagnosis is another strong case. A stack trace with a clear error message is a specification of what went wrong. AI can read that specification and suggest what caused it. The interpretation is bounded and checkable.&lt;/p&gt;

&lt;p&gt;Fast output in bounded, verifiable tasks. That is where the leverage is.&lt;/p&gt;




&lt;h2&gt;
  
  
  The practical consequence
&lt;/h2&gt;

&lt;p&gt;Once this boundary is clear, the day-to-day feels different.&lt;/p&gt;

&lt;p&gt;I do not ask Claude Code what to build. I decide what to build, write it as a scoped Issue with acceptance criteria, and then ask Claude Code to implement it.&lt;/p&gt;

&lt;p&gt;I do not ask Claude Code whether to merge. I ask Claude Code to review the pull request, I read the review, and then I decide.&lt;/p&gt;

&lt;p&gt;I do not ask Claude Code if the system is ready for production. I look at the tests, the logs, the behavior in staging, and I make the call.&lt;/p&gt;

&lt;p&gt;The AI is fast. The decisions are mine.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters more as tools improve
&lt;/h2&gt;

&lt;p&gt;As AI tools become more capable, the temptation to move the boundary grows.&lt;/p&gt;

&lt;p&gt;The output gets better. The suggestions feel more reliable. The friction of making your own decisions seems unnecessary when the AI gets it right most of the time.&lt;/p&gt;

&lt;p&gt;But "most of the time" is not good enough for requirements, acceptance criteria, or production decisions. Those are the moments where being wrong has compounding consequences.&lt;/p&gt;

&lt;p&gt;The tools improving does not change what needs human judgment. It changes how much of everything else can be handled without it.&lt;/p&gt;

&lt;p&gt;Which means the human role is not disappearing — it is concentrating.&lt;/p&gt;

&lt;p&gt;Less time on implementation. More time on what actually needs to be decided.&lt;/p&gt;

&lt;p&gt;That is a better arrangement, not a worse one. But it only works if the boundary is held.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>productivity</category>
      <category>engineering</category>
    </item>
    <item>
      <title>I Built an Article Draft Pipeline with Claude Code in Half a Day</title>
      <dc:creator>flipslidersand</dc:creator>
      <pubDate>Mon, 06 Jul 2026 14:04:05 +0000</pubDate>
      <link>https://dev.to/flipslidersand/i-built-an-article-draft-pipeline-with-claude-code-in-half-a-day-5fna</link>
      <guid>https://dev.to/flipslidersand/i-built-an-article-draft-pipeline-with-claude-code-in-half-a-day-5fna</guid>
      <description>&lt;p&gt;Writing technical articles is harder than it sounds.&lt;/p&gt;

&lt;p&gt;The topic. The research. The structure. The references.&lt;/p&gt;

&lt;p&gt;Before writing a single sentence of the actual piece, there is already a lot of work. By the time you have done it, you are half-tired before you start.&lt;/p&gt;

&lt;p&gt;I wanted to fix this. So I built a pipeline that automatically generates draft material for articles — using Claude Code to move fast, and GitHub Actions to run it daily.&lt;/p&gt;

&lt;p&gt;The total build time was roughly half a day.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;The goal was not to auto-publish articles.&lt;/p&gt;

&lt;p&gt;It was to build a stockpile of article &lt;em&gt;starters&lt;/em&gt; — background context, related keywords, structural outlines — so that when I sit down to write, the hardest part is already done.&lt;/p&gt;

&lt;p&gt;The architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HackerNews / Dev.to → keyword collection (daily 08:00)
     ↓
  SQLite (keyword inventory)
     ↓
Gemini Flash-Lite → surrounding context generation (daily 09:00)
     ↓
  drafts/ → auto-committed to GitHub
     ↓
Human reviews → writes → publishes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key constraint: AI generates the &lt;em&gt;material&lt;/em&gt;, not the article itself. The writing stays with me.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keyword collection
&lt;/h2&gt;

&lt;p&gt;HackerNews uses the Algolia API. Dev.to has an official API. Both are auth-free, which keeps the setup lightweight.&lt;/p&gt;

&lt;p&gt;The goal at this stage was not to build a comprehensive collection system. It was to get a steady, small flow of relevant topics arriving every day.&lt;/p&gt;




&lt;h2&gt;
  
  
  SQLite for inventory management
&lt;/h2&gt;

&lt;p&gt;The database is SQLite. For a personal pipeline, there is no reason to run a separate database server. The SQLite file lives in the repo — which also means the keyword inventory has full version history.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;keywords&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INTEGER&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="n"&gt;AUTOINCREMENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;source&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;keyword&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;category&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;used&lt;/span&gt; &lt;span class="nb"&gt;INTEGER&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;fetched_at&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'now'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="n"&gt;themes&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="nb"&gt;INTEGER&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="n"&gt;AUTOINCREMENT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;keyword_id&lt;/span&gt; &lt;span class="nb"&gt;INTEGER&lt;/span&gt; &lt;span class="k"&gt;REFERENCES&lt;/span&gt; &lt;span class="n"&gt;keywords&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="n"&gt;title&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;slug&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="s1"&gt;'pending'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'now'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;used&lt;/code&gt; flag prevents the same keyword from generating multiple drafts. A monthly purge job clears out old entries.&lt;/p&gt;




&lt;h2&gt;
  
  
  Day-of-week rotation
&lt;/h2&gt;

&lt;p&gt;Generating the same category of content every day gets monotonous. I split categories by day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monday: Tech&lt;/li&gt;
&lt;li&gt;Tuesday: AI&lt;/li&gt;
&lt;li&gt;Wednesday: Career&lt;/li&gt;
&lt;li&gt;Thursday: Dev process&lt;/li&gt;
&lt;li&gt;Friday: Product&lt;/li&gt;
&lt;li&gt;Weekends: lighter topics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each run pulls up to 5 unused keywords from that day's category. The cap matters — more than that and the folder becomes a pile nobody reads.&lt;/p&gt;




&lt;h2&gt;
  
  
  GitHub Actions for full automation
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;08:00 — collect keywords&lt;/li&gt;
&lt;li&gt;09:00 — generate draft material&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Generated files are committed and pushed automatically. When I sit down to write, drafts are already waiting. I pick a topic that looks promising and go from there.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I used Claude Code
&lt;/h2&gt;

&lt;p&gt;The entire build happened through conversation with Claude Code.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Framing&lt;/strong&gt; — Talked through a vague requirement until the spec was concrete&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issue creation&lt;/strong&gt; — Claude Code broke the work into GitHub Issues: fetch / generate / pipeline / DB / schedule&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implementation&lt;/strong&gt; — Generated scripts and GitHub Actions workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debugging&lt;/strong&gt; — Ran it live, showed the errors, iterated until it worked&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 4 was the most valuable. Getting from error message to fix in seconds — rather than searching for an hour — changes the pace of the entire build.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;1. Vertex AI returning 403&lt;/strong&gt;&lt;br&gt;
First live run failed. Pasted the error into Claude Code. It identified &lt;code&gt;BILLING_DISABLED&lt;/code&gt; and diagnosed the cause immediately: billing was not enabled on the GCP project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Workload Identity Federation is scoped per repository&lt;/strong&gt;&lt;br&gt;
Copied a working config from another repo. It did not work. The &lt;code&gt;workloadIdentityUser&lt;/code&gt; binding was scoped to the original repo. New repos need explicit registration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcloud iam service-accounts add-iam-policy-binding &amp;lt;SA&amp;gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;roles/iam.workloadIdentityUser &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--member&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"principalSet://iam.googleapis.com/&amp;lt;POOL&amp;gt;/attribute.repository/&amp;lt;owner&amp;gt;/&amp;lt;repo&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Japanese titles vanish when slugified&lt;/strong&gt;&lt;br&gt;
A standard &lt;code&gt;replace(/[^\w\s-]/g, "")&lt;/code&gt; strips almost everything from a Japanese title. Fix: mix the database primary key into the slug from the start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. LLMs treat management labels as semantic content&lt;/strong&gt;&lt;br&gt;
I prefixed titles with &lt;code&gt;Zenn:&lt;/code&gt; as an internal tag. The model read it as topic direction and generated off-target drafts. Strip management labels before passing anything to a model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Swallowing errors produces silent empty output&lt;/strong&gt;&lt;br&gt;
Early on, API errors returned empty strings. Result: blank drafts committed as successful output. Better: throw on error, do not save empty output, do not mark keywords as &lt;code&gt;used&lt;/code&gt; on failure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cost ceiling
&lt;/h2&gt;

&lt;p&gt;Gemini 2.5 Flash-Lite at 5 drafts per day costs a few dollars per month at most.&lt;/p&gt;

&lt;p&gt;But automated pipelines calling generative APIs need a hard ceiling. GCP budget alerts notify — they do not stop charges. I added a Cloud Function that disables the billing path when the monthly budget is exceeded. Build the stop yourself.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why AI did not write the articles
&lt;/h2&gt;

&lt;p&gt;I tried it. The output had hallucinated citations, placeholder text, and plausible-but-unverified claims. Not safe to publish directly.&lt;/p&gt;

&lt;p&gt;As background research, keyword mapping, and structural outlines — more than good enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI builds the inventory. The human does the writing and verification.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since drawing that line, starting an article became significantly easier. I am not staring at a blank page. I am choosing from what already exists.&lt;/p&gt;




&lt;h2&gt;
  
  
  What this taught me
&lt;/h2&gt;

&lt;p&gt;AI coding assistants make the cycle from vague idea to working system faster — not just the code writing part.&lt;/p&gt;

&lt;p&gt;But the decisions were still mine.&lt;/p&gt;

&lt;p&gt;What to build. What to automate. Where the human stays in the loop. What happens when it fails.&lt;/p&gt;

&lt;p&gt;As tools become more capable, those design decisions become more important, not less.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is an English adaptation of an article originally published in Japanese on &lt;a href="https://zenn.dev/flipslidersand" rel="noopener noreferrer"&gt;Zenn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>automation</category>
      <category>githubactions</category>
      <category>productivity</category>
    </item>
    <item>
      <title>People Who Resist Change Are Often Protecting Something</title>
      <dc:creator>flipslidersand</dc:creator>
      <pubDate>Mon, 06 Jul 2026 14:01:22 +0000</pubDate>
      <link>https://dev.to/flipslidersand/people-who-resist-change-are-often-protecting-something-1pgn</link>
      <guid>https://dev.to/flipslidersand/people-who-resist-change-are-often-protecting-something-1pgn</guid>
      <description>&lt;p&gt;We are often told that we live in an age of rapid change.&lt;/p&gt;

&lt;p&gt;New technology. New ways of working. New values. New norms.&lt;/p&gt;

&lt;p&gt;What felt obvious a few years ago quietly becomes outdated. What worked yesterday gets called inefficient today.&lt;/p&gt;

&lt;p&gt;And somewhere in that process, we start asking:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Why won’t that person change?&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Why won’t they accept a new way of doing things?&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Why doesn’t anything I say get through?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These moments happen at work, at home, and inside organizations more often than most of us expect.&lt;/p&gt;

&lt;p&gt;But before we label someone as “behind the times,” it is worth asking a different question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are they trying to protect?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Resistance is not always a capability problem
&lt;/h2&gt;

&lt;p&gt;When someone resists change, our first instinct is often to frame it as a capability issue.&lt;/p&gt;

&lt;p&gt;They are slow to understand. They lack flexibility. They are uncomfortable with new things. They cannot keep up.&lt;/p&gt;

&lt;p&gt;That is sometimes true.&lt;/p&gt;

&lt;p&gt;But not always.&lt;/p&gt;

&lt;p&gt;It is possible that the person understands the change perfectly — and has decided not to accept it.&lt;/p&gt;

&lt;p&gt;They see something valuable being lost.&lt;br&gt;
They feel the new approach conflicts with what they care about.&lt;br&gt;
The stability they have now looks more important than the benefit waiting on the other side.&lt;br&gt;
They tried to adapt before, and it hurt.&lt;/p&gt;

&lt;p&gt;From the outside, this looks like simple resistance.&lt;br&gt;
From the inside, it can be a deliberate act of protection.&lt;/p&gt;




&lt;h2&gt;
  
  
  People don’t resist without reason
&lt;/h2&gt;

&lt;p&gt;When someone won’t change, there is always a reason.&lt;/p&gt;

&lt;p&gt;It might be logical. It might be emotional. It might be rooted in past experience.&lt;/p&gt;

&lt;p&gt;Imagine someone at work who refuses to use a new tool, no matter how many times it is explained.&lt;/p&gt;

&lt;p&gt;The people around them see someone being difficult.&lt;/p&gt;

&lt;p&gt;But that person might feel like their way of working — built over years — is being dismissed. They might be afraid that not mastering the new tool will hurt how they are evaluated. Or they might have lived through a similar “change” that failed, and watched the people on the ground absorb all the damage.&lt;/p&gt;

&lt;p&gt;Behind visible resistance, there is often anxiety, caution, or something being guarded.&lt;/p&gt;

&lt;p&gt;That is why the first move is not persuasion.&lt;/p&gt;

&lt;p&gt;The first move is to see what the person is trying to protect.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understand before you try to change anything
&lt;/h2&gt;

&lt;p&gt;When facing someone who resists change, we tend to add more explanation.&lt;/p&gt;

&lt;p&gt;Lay out the benefits. Show the efficiency gains. Present success stories. Say that everyone else is already on board.&lt;/p&gt;

&lt;p&gt;And when that does not move them, we push harder.&lt;/p&gt;

&lt;p&gt;But persuasion rarely works if you do not yet understand what they are protecting.&lt;/p&gt;

&lt;p&gt;Because you are talking about the benefits of change. They are focused on what the change will take away.&lt;/p&gt;

&lt;p&gt;You are looking at different things.&lt;/p&gt;

&lt;p&gt;You see convenience. They see risk.&lt;br&gt;
You see efficiency. They see who takes the blame if this goes wrong.&lt;br&gt;
You see the future. They see what happened last time.&lt;/p&gt;

&lt;p&gt;When you are looking at different things, the conversation does not connect.&lt;/p&gt;

&lt;p&gt;What is needed is not better arguments. It is a conversation to understand what they are actually looking at.&lt;/p&gt;




&lt;h2&gt;
  
  
  Respect is not the same as doing nothing
&lt;/h2&gt;

&lt;p&gt;That said, respecting someone’s choice and simply leaving them alone are not the same thing.&lt;/p&gt;

&lt;p&gt;People deserve to have their choices respected. Everyone has their own values and pace.&lt;/p&gt;

&lt;p&gt;But when that choice affects others, the situation changes.&lt;/p&gt;

&lt;p&gt;Not using a new system at work — which then increases the workload for teammates. Refusing to adapt at home — which shifts the burden unevenly onto one person. Holding onto old methods in an organization — which makes it harder for newer people to function.&lt;/p&gt;

&lt;p&gt;In these cases, simply saying “that is their choice” and stepping back means someone else quietly absorbs the cost.&lt;/p&gt;

&lt;p&gt;Respecting a choice is important.&lt;/p&gt;

&lt;p&gt;But it does not mean the people around them are obligated to absorb all the consequences indefinitely.&lt;/p&gt;

&lt;p&gt;Respect is not permission for everything. It is not the same as silence.&lt;/p&gt;

&lt;p&gt;Precisely because you respect them, you still need to have the conversation about impact.&lt;/p&gt;




&lt;h2&gt;
  
  
  The right question is not who is right — it is what impact is happening
&lt;/h2&gt;

&lt;p&gt;When the conversation turns to whether change should happen, it easily becomes an argument about who is correct.&lt;/p&gt;

&lt;p&gt;Focus on behavior and impact — not character or correctness.&lt;/p&gt;

&lt;p&gt;Not “you are wrong” — but “this approach is creating this burden here.”&lt;br&gt;
Not “please change” — but “can we align on just this part?”&lt;/p&gt;

&lt;p&gt;Not rejecting the person. Clarifying the boundary.&lt;/p&gt;

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




&lt;h2&gt;
  
  
  The freedom not to change — and its consequences
&lt;/h2&gt;

&lt;p&gt;There is a freedom not to change.&lt;/p&gt;

&lt;p&gt;No one needs to adopt every new thing. Keeping some distance from changes that conflict with your values is a legitimate choice.&lt;/p&gt;

&lt;p&gt;But choices have consequences.&lt;/p&gt;

&lt;p&gt;What matters is who bears those consequences.&lt;/p&gt;

&lt;p&gt;If the person themselves carries them, that is their choice.&lt;br&gt;
If the consequences fall on the people around them, that is where a conversation is needed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There is a freedom not to change.&lt;br&gt;
There is no freedom to make others absorb all the costs of that choice.&lt;/p&gt;
&lt;/blockquote&gt;

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




&lt;h2&gt;
  
  
  Adjusting distance, not forcing change
&lt;/h2&gt;

&lt;p&gt;You do not have to change someone who resists change.&lt;/p&gt;

&lt;p&gt;In fact, the harder you push, the more defensive they become.&lt;/p&gt;

&lt;p&gt;What matters is not changing them — it is adjusting the distance.&lt;/p&gt;

&lt;p&gt;How far do we move forward together? Where do we allow different approaches? Which parts need to be aligned at minimum?&lt;/p&gt;

&lt;p&gt;Clarifying these boundaries makes the relationship significantly easier.&lt;/p&gt;

&lt;p&gt;You do not need full agreement. You just need to know where your choices intersect and where they do not.&lt;/p&gt;




&lt;h2&gt;
  
  
  People who resist change have a story too
&lt;/h2&gt;

&lt;p&gt;We tend to judge people by what we can see.&lt;/p&gt;

&lt;p&gt;They don’t use new tools. They don’t change their approach. Nothing gets through.&lt;/p&gt;

&lt;p&gt;That picture, taken alone, is frustrating.&lt;/p&gt;

&lt;p&gt;But that person has a story.&lt;/p&gt;

&lt;p&gt;Things they have protected over the years. Experiences of failure. A place they are afraid of losing if they change.&lt;/p&gt;

&lt;p&gt;Telling someone to “just change” without acknowledging any of this will not move them.&lt;/p&gt;

&lt;p&gt;What someone who resists change needs, before anything else, is to be understood.&lt;/p&gt;

&lt;p&gt;And then — once you understand — you still draw the necessary boundaries.&lt;/p&gt;

&lt;p&gt;Both are required.&lt;/p&gt;




&lt;h2&gt;
  
  
  In summary
&lt;/h2&gt;

&lt;p&gt;There is no need to immediately label someone who resists change as “behind the times.”&lt;/p&gt;

&lt;p&gt;They may be making a deliberate choice — to protect something they value.&lt;/p&gt;

&lt;p&gt;So the first step is not persuasion. It is understanding.&lt;/p&gt;

&lt;p&gt;But respect and silence are not the same. If their choice is creating impact on others, that impact needs to be addressed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Do not dismiss the person who won’t change.&lt;br&gt;
But do not leave the burden unaddressed either.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That balance — I think — is how we work with people in an age that keeps moving.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is an English adaptation of an article originally published in Japanese on &lt;a href="https://zenn.dev/flipslidersand" rel="noopener noreferrer"&gt;Zenn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>management</category>
      <category>leadership</category>
      <category>ai</category>
      <category>culture</category>
    </item>
    <item>
      <title>AI-Native Development Flow: 4 Months, 153 PRs, Production</title>
      <dc:creator>flipslidersand</dc:creator>
      <pubDate>Mon, 06 Jul 2026 13:45:36 +0000</pubDate>
      <link>https://dev.to/flipslidersand/ai-native-development-flow-4-months-153-prs-production-10j3</link>
      <guid>https://dev.to/flipslidersand/ai-native-development-flow-4-months-153-prs-production-10j3</guid>
      <description>&lt;p&gt;I joined a used-car export company as the only engineer.&lt;/p&gt;

&lt;p&gt;There was no existing codebase. No engineering team. Just a mandate: build an internal operations platform for sales, inventory, and back-office work — and get it into production.&lt;/p&gt;

&lt;p&gt;Four months later, the system was live.&lt;/p&gt;

&lt;p&gt;Over 75 working days, I opened 153 pull requests.&lt;/p&gt;

&lt;p&gt;This is how I structured the process.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with "AI-assisted" development
&lt;/h2&gt;

&lt;p&gt;Most discussions about AI-assisted development focus on code generation speed.&lt;/p&gt;

&lt;p&gt;That misses the harder question:&lt;/p&gt;

&lt;p&gt;Who decides what to build, and who signs off that it works?&lt;/p&gt;

&lt;p&gt;If you hand those decisions to AI, you get fast output with no clear ownership. If you keep every decision entirely with yourself, you become the bottleneck — one person trying to do every kind of thinking at once.&lt;/p&gt;

&lt;p&gt;I drew a different line.&lt;/p&gt;

&lt;h2&gt;
  
  
  The boundary
&lt;/h2&gt;

&lt;p&gt;On the human side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requirements: what the system should do, and what it should not do&lt;/li&gt;
&lt;li&gt;Acceptance criteria: what "done" actually means&lt;/li&gt;
&lt;li&gt;Production judgment: whether something is safe to ship&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the AI side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implementation: writing code that satisfies the criteria&lt;/li&gt;
&lt;li&gt;Code review: flagging issues and suggesting alternatives&lt;/li&gt;
&lt;li&gt;Repetitive testing: generating test cases and running assertions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This sounds clean on paper.&lt;/p&gt;

&lt;p&gt;The hard part is holding the line.&lt;/p&gt;

&lt;p&gt;When Claude Code suggests an approach, it is tempting to accept it and move on. But that is exactly where judgment can slip.&lt;/p&gt;

&lt;p&gt;The question is not only "does this code work?"&lt;/p&gt;

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

&lt;p&gt;Does this solve the right problem?&lt;/p&gt;

&lt;p&gt;That question stays on the human side.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the workflow actually looked like
&lt;/h2&gt;

&lt;p&gt;Every feature started as a GitHub Issue.&lt;/p&gt;

&lt;p&gt;Not a vague task. A scoped description with acceptance criteria written in plain language — clear enough that I could read it the next morning and still know exactly what "done" meant.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Claude Code drafted the implementation.&lt;/li&gt;
&lt;li&gt;I reviewed the pull request, not mainly for syntax, but for whether it matched the Issue.&lt;/li&gt;
&lt;li&gt;Claude Code generated test cases against the acceptance criteria.&lt;/li&gt;
&lt;li&gt;I made the final call on whether to merge.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The PR count climbed quickly because the Issues were small and specific.&lt;/p&gt;

&lt;p&gt;A 153-PR codebase does not mean 153 features. It means 153 well-scoped units of work, each with a clear start and end.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI handles well
&lt;/h2&gt;

&lt;p&gt;AI worked well for tasks where the expected output could be checked against a clear standard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Boilerplate and scaffolding&lt;/li&gt;
&lt;li&gt;Cloud Run configurations&lt;/li&gt;
&lt;li&gt;Argo CD manifests&lt;/li&gt;
&lt;li&gt;Pub/Sub wiring&lt;/li&gt;
&lt;li&gt;GitHub Actions workflows&lt;/li&gt;
&lt;li&gt;Error diagnosis from stack traces&lt;/li&gt;
&lt;li&gt;First-draft implementations where the shape of the solution was already clear&lt;/li&gt;
&lt;li&gt;Test generation against explicit acceptance criteria&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The common thread is verifiability.&lt;/p&gt;

&lt;p&gt;When the standard is clear, AI can move very fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI handles poorly
&lt;/h2&gt;

&lt;p&gt;AI was much weaker at the parts that required business judgment.&lt;/p&gt;

&lt;p&gt;It should not decide scope.&lt;/p&gt;

&lt;p&gt;"Should this be in the system at all?" is not an AI question.&lt;/p&gt;

&lt;p&gt;It should not judge operational readiness.&lt;/p&gt;

&lt;p&gt;"Is this safe to cut over to production?" requires business context, operational risk awareness, and responsibility.&lt;/p&gt;

&lt;p&gt;It also does not reliably notice what is missing.&lt;/p&gt;

&lt;p&gt;The system does not know what it does not know about your domain.&lt;/p&gt;

&lt;p&gt;These are the moments where solo engineers lose time if they treat AI judgment as equivalent to their own.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers in context
&lt;/h2&gt;

&lt;p&gt;153 pull requests over 75 working days is roughly two PRs per day.&lt;/p&gt;

&lt;p&gt;That includes days with meetings, training, firefighting, and production support.&lt;/p&gt;

&lt;p&gt;It is not a speed record.&lt;/p&gt;

&lt;p&gt;It is a measurement.&lt;/p&gt;

&lt;p&gt;I started tracking because I wanted to know whether this process was actually faster — not just whether it felt faster.&lt;/p&gt;

&lt;p&gt;The production cutover happened in month four.&lt;/p&gt;

&lt;p&gt;The system is running.&lt;/p&gt;

&lt;p&gt;The measurement held.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for teams
&lt;/h2&gt;

&lt;p&gt;Most AI adoption conversations ask:&lt;/p&gt;

&lt;p&gt;How much faster can one person go?&lt;/p&gt;

&lt;p&gt;I think the more interesting question is:&lt;/p&gt;

&lt;p&gt;What happens when an entire team holds this boundary consistently?&lt;/p&gt;

&lt;p&gt;Implementation gets faster.&lt;/p&gt;

&lt;p&gt;Review gets faster.&lt;/p&gt;

&lt;p&gt;Repetitive testing gets faster.&lt;/p&gt;

&lt;p&gt;But judgment stays where it belongs.&lt;/p&gt;

&lt;p&gt;The bottleneck shifts from writing code to deciding what to write.&lt;/p&gt;

&lt;p&gt;That is where the bottleneck should be.&lt;/p&gt;

&lt;p&gt;The tooling matters. But the real change is not the tool.&lt;/p&gt;

&lt;p&gt;The real change is the operating model.&lt;/p&gt;

&lt;p&gt;AI-native development is not about letting AI take ownership.&lt;/p&gt;

&lt;p&gt;It is about designing a workflow where AI accelerates execution, while humans keep responsibility for direction, judgment, and production risk.&lt;/p&gt;

&lt;p&gt;That boundary is what made 153 PRs in 75 working days possible.&lt;/p&gt;

&lt;p&gt;And more importantly, it is what made the system shippable.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>claudecode</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
