<?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: Heriberto Flores</title>
    <description>The latest articles on DEV Community by Heriberto Flores (@hfloresgu).</description>
    <link>https://dev.to/hfloresgu</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%2F124162%2F63ab3e33-30bc-43ab-abc8-a714801f81da.jpg</url>
      <title>DEV Community: Heriberto Flores</title>
      <link>https://dev.to/hfloresgu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hfloresgu"/>
    <language>en</language>
    <item>
      <title>Nearshoring After AI: Will LATAM Go Back to Software Factories?</title>
      <dc:creator>Heriberto Flores</dc:creator>
      <pubDate>Thu, 05 Nov 2026 18:54:15 +0000</pubDate>
      <link>https://dev.to/hfloresgu/nearshoring-after-ai-will-latam-go-back-to-software-factories-nj0</link>
      <guid>https://dev.to/hfloresgu/nearshoring-after-ai-will-latam-go-back-to-software-factories-nj0</guid>
      <description>&lt;p&gt;If you're a software engineer in Latin America, you know the dream job: a US company, a Slack full of people in Austin, paid in dollars. Nearshoring. For a decade it's been the best deal in the region.&lt;/p&gt;

&lt;p&gt;But there's one uncomfortable piece of math.&lt;/p&gt;

&lt;h2&gt;
  
  
  The math
&lt;/h2&gt;

&lt;p&gt;Nearshoring sells &lt;strong&gt;engineers by the head, or by the hour.&lt;/strong&gt; More engineers, more money.&lt;/p&gt;

&lt;p&gt;Now add AI. With agents, what took me a week takes a day or two. So if one engineer does the work of three and the client pays per head… &lt;strong&gt;how many heads does the client still need?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Worse: if we bill by the hour and get three times faster, we just made three times less money for the same work. A business model that profits from slowness doesn't survive a technology that removes it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three scenarios
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The cut.&lt;/strong&gt; The easiest line in a US budget isn't the employee in the office. It's the contractor. Us. No layoff headlines, just a contract that doesn't get renewed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Back to the software factory.&lt;/strong&gt; Remember the 2000s? Fixed price, Gantt charts, a CMMI certificate in the lobby. It might come back with a new shape: &lt;em&gt;"Don't rent ten engineers. Give us the spec, we deliver in eight weeks."&lt;/em&gt; Now the speed is &lt;em&gt;our&lt;/em&gt; margin, not the client's discount. But selling results means owning the risk, the architecture and the deadline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Nothing changes.&lt;/strong&gt; Every time software got cheaper, we built &lt;em&gt;more&lt;/em&gt; of it. Ask any PM if their backlog is done. They'll laugh, then schedule a meeting about it. Same headcount, way more output.&lt;/p&gt;

&lt;h2&gt;
  
  
  My bet
&lt;/h2&gt;

&lt;p&gt;A mix, unevenly distributed. Engineers who are just "extra hands" are at risk, because hands are exactly what AI replaces. Engineers who bring judgment will be fine: the ones who understand the business, design the system and lead the agents.&lt;/p&gt;

&lt;p&gt;Same for companies. The ones selling hours will compete on price against a machine. The ones selling results will have the best margins the region has ever seen.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Be a person, not a seat.&lt;/strong&gt; The engineer the client would miss by name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learn the business.&lt;/strong&gt; Agents know the stack. They don't know why billing hates the invoice flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lead agents.&lt;/strong&gt; That's the new seniority.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep your English sharp.&lt;/strong&gt; Fewer seats go to whoever communicates best.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your turn
&lt;/h2&gt;

&lt;p&gt;LATAM folks: are contracts shrinking, or are clients asking for more? US folks: is AI changing how big you want your nearshore team?&lt;/p&gt;

&lt;p&gt;Let's talk in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>latam</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Request, Review, Accept, Repeat: The Life Inside the Loop</title>
      <dc:creator>Heriberto Flores</dc:creator>
      <pubDate>Thu, 05 Nov 2026 18:40:28 +0000</pubDate>
      <link>https://dev.to/hfloresgu/request-review-accept-repeat-my-new-life-inside-the-loop-2ib9</link>
      <guid>https://dev.to/hfloresgu/request-review-accept-repeat-my-new-life-inside-the-loop-2ib9</guid>
      <description>&lt;p&gt;I used to be a developer. Now I'm a very well-paid &lt;code&gt;while (true)&lt;/code&gt; loop.&lt;/p&gt;

&lt;p&gt;Request, review, accept, validate. Repeat.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small eulogy for the fun part
&lt;/h2&gt;

&lt;p&gt;Remember the bug that took three days? &lt;code&gt;console.log("HERE")&lt;/code&gt;, then &lt;code&gt;console.log("HERE 2")&lt;/code&gt;, then &lt;code&gt;console.log("WHY")&lt;/code&gt;. And on day three, in the shower, it hit you: the timezone. It was always the timezone.&lt;/p&gt;

&lt;p&gt;That little fireworks show when the problem finally clicks? Mostly gone.&lt;/p&gt;

&lt;p&gt;Now the agent finds the timezone bug in forty seconds. No shower needed. It just says &lt;em&gt;"The issue is a UTC conversion in the date parser. Here's a fix."&lt;/em&gt; and waits for me to press accept, like a waiter holding the bill.&lt;/p&gt;

&lt;p&gt;I miss being clever. I miss the whiteboard full of arrows only I understood. The part where &lt;em&gt;I&lt;/em&gt; solved the puzzle got replaced by me reading someone else's solution and nodding.&lt;/p&gt;

&lt;p&gt;Rest in peace, &lt;code&gt;console.log("WHY")&lt;/code&gt;. You were a real one.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what did I get back?
&lt;/h2&gt;

&lt;p&gt;Time. Actual, unscheduled time. Here's where it went.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Big picture.&lt;/strong&gt; When you're deep in the code, you see the function. In the loop, you see the system. &lt;em&gt;Why do we have three services that do the same thing? Who approved this architecture?&lt;/em&gt; (Me. In 2021. I'm not proud.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical debt.&lt;/strong&gt; That &lt;code&gt;TODO: refactor this later&lt;/code&gt; from four years ago? Later is now. The legacy module everybody was afraid to touch? I touched it. Nothing exploded. Mostly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing.&lt;/strong&gt; It used to get whatever energy was left after the feature worked. Usually none. Now the agent writes code fast and my job is to prove it's right: edge cases, weird inputs, the user who pastes an emoji into the phone number field. Breaking things is more fun than I remembered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meetings.&lt;/strong&gt; The gift nobody asked for. Now that I'm "so much faster", I have plenty of time for everything my PM and manager love:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The standup: "I approved stuff, I'll approve more stuff, no blockers."&lt;/li&gt;
&lt;li&gt;The sync before the planning. The planning. The sync after the planning.&lt;/li&gt;
&lt;li&gt;The "quick 15 minutes" that has never once been 15 minutes.&lt;/li&gt;
&lt;li&gt;The meeting about why we have so many meetings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For ten years, &lt;em&gt;"Sorry, I'm deep in a bug"&lt;/em&gt; was my shield. Now everybody knows the agent is fixing the bug. The agent took my code. The calendar took my afternoons.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't get me wrong
&lt;/h2&gt;

&lt;p&gt;This isn't a complaint. This new stage is genuinely great.&lt;/p&gt;

&lt;p&gt;Every team has a graveyard of ideas killed by two sentences: &lt;em&gt;"We don't have time"&lt;/em&gt; and &lt;em&gt;"What if it doesn't work?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That graveyard is opening up.&lt;/p&gt;

&lt;p&gt;Experimenting is cheap now. An idea that used to cost two weeks and a meeting to justify now costs one afternoon and a request. If it works, I show up with a working prototype instead of a slide. If it doesn't, I throw it away and nobody notices. Especially my manager.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"I'm not sure it's possible"&lt;/em&gt; used to be the reason not to try. Now it's the reason to try, because finding out is faster than debating it. I'm not just the person who closes tickets anymore. I bring ideas, already working.&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop, honestly
&lt;/h2&gt;

&lt;p&gt;The loop isn't the enemy. It's fast and it ships. But it only works if the person inside is still thinking. The moment I accept proposals without reading them, I'm not a developer. I'm a rubber stamp with a salary.&lt;/p&gt;

&lt;p&gt;The creativity didn't disappear. It moved. Writing a good request is design. Rejecting a proposal is architecture. Deciding what's "enough" is engineering.&lt;/p&gt;

&lt;p&gt;Less fireworks, more chess. I still miss the shower moment, though.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your turn
&lt;/h2&gt;

&lt;p&gt;Are you in the loop too? &lt;strong&gt;What are you doing with the time you got back?&lt;/strong&gt; Fixing tech debt, chasing that idea from the graveyard, or sitting in the sync about the sync?&lt;/p&gt;

&lt;p&gt;Tell me in the comments. I'll read them between meetings.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>The Unnecessary Evil: How I Stopped Opening Visual Studio for .NET Framework 4.8</title>
      <dc:creator>Heriberto Flores</dc:creator>
      <pubDate>Thu, 15 Oct 2026 19:47:29 +0000</pubDate>
      <link>https://dev.to/hfloresgu/the-unnecessary-evil-how-i-stopped-opening-visual-studio-for-net-framework-48-2jnk</link>
      <guid>https://dev.to/hfloresgu/the-unnecessary-evil-how-i-stopped-opening-visual-studio-for-net-framework-48-2jnk</guid>
      <description>&lt;p&gt;Every developer has a necessary evil. Mine had a purple icon, a splash screen and 14 GB on my disk.&lt;/p&gt;

&lt;h2&gt;
  
  
  The relationship
&lt;/h2&gt;

&lt;p&gt;I want to be fair to Visual Studio. It's a powerful IDE. It has helped millions of developers ship software. It has also, on more than one occasion, frozen while I typed a semicolon.&lt;/p&gt;

&lt;p&gt;But I had no choice. I work on an old .NET Framework 4.8 codebase: classic non-SDK &lt;code&gt;.csproj&lt;/code&gt; files, &lt;code&gt;Web.config&lt;/code&gt; files the length of a novel, NHibernate, IIS Express. That kind of project doesn't do &lt;code&gt;dotnet run&lt;/code&gt;. It needs Visual Studio the way an old car needs one specific mechanic who's the only person in town who still has the parts.&lt;/p&gt;

&lt;p&gt;So every morning went like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the solution.&lt;/li&gt;
&lt;li&gt;Get coffee while it loads.&lt;/li&gt;
&lt;li&gt;Come back. It's "Preparing solution…".&lt;/li&gt;
&lt;li&gt;Get a second coffee.&lt;/li&gt;
&lt;li&gt;Press F5. It builds the 37 projects I didn't touch and somehow skips the one I did.&lt;/li&gt;
&lt;li&gt;Clean. Rebuild. Restart Visual Studio. Restart the computer. Question my career.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meanwhile, VS Code sat in the corner, opening in half a second, quietly judging me. I wrote everything else in it. I just couldn't &lt;em&gt;run&lt;/em&gt; anything in it.&lt;/p&gt;

&lt;p&gt;The necessary evil.&lt;/p&gt;

&lt;h2&gt;
  
  
  The breakup
&lt;/h2&gt;

&lt;p&gt;Here's what I eventually realised: I didn't need Visual Studio. I needed four things it did for me.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find MSBuild.&lt;/li&gt;
&lt;li&gt;Build the projects in the right order.&lt;/li&gt;
&lt;li&gt;Put the right config in place.&lt;/li&gt;
&lt;li&gt;Start IIS Express on the right site and port.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those needs a 14 GB window. They are just steps. And steps can be written down.&lt;/p&gt;

&lt;p&gt;So I wrote them down. One Markdown file in the repo, written for Claude Code (and for humans, which turned out to be a nice bonus). It walks through the whole thing in plain steps: check that the local config is there (and &lt;em&gt;stop and ask&lt;/em&gt; if it isn't, never invent secrets), put it in place, build the projects in the right order, start IIS Express in the background, and poll a health endpoint until the API answers.&lt;/p&gt;

&lt;p&gt;At the bottom there's a troubleshooting section with every scar I collected along the way. My favourite: Git Bash helpfully turning IIS Express's &lt;code&gt;/config:&lt;/code&gt; switch into a file path, so it dies complaining that switches must start with &lt;code&gt;/&lt;/code&gt;. It did. Thanks, Git Bash.&lt;/p&gt;

&lt;p&gt;Now my morning goes like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Start the admin Web API locally.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude Code reads the doc, checks the config, builds, starts IIS Express, polls the health endpoint and tells me the port. When something breaks, it reads the log file the doc points to, instead of me scrolling through the Output window looking for the one red line among four thousand grey ones.&lt;/p&gt;

&lt;p&gt;I edit in VS Code. I run through Claude Code. Visual Studio stays closed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full disclosure
&lt;/h2&gt;

&lt;p&gt;Visual Studio is still installed. &lt;code&gt;vswhere&lt;/code&gt; finds MSBuild inside it, and IIS Express still reads the &lt;code&gt;applicationhost.config&lt;/code&gt; that Visual Studio generated once, long ago.&lt;/p&gt;

&lt;p&gt;So we didn't really break up. We just stopped living together. It's in the garage, doing build work, and I don't have to look at the splash screen anymore.&lt;/p&gt;

&lt;p&gt;The necessary evil became the unnecessary evil. It's still there. I just don't need to &lt;em&gt;open&lt;/em&gt; it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lesson
&lt;/h2&gt;

&lt;p&gt;Nobody gave me a better tool for this. The codebase is still .NET Framework 4.8, and it's not getting migrated this quarter, or the next. The tooling I was handed was "use Visual Studio, that's how it's done".&lt;/p&gt;

&lt;p&gt;What changed is that I stopped accepting that as the end of the conversation. I spent an afternoon writing down what the IDE did for me, and that Markdown file now saves me (and my team) the pain every single day.&lt;/p&gt;

&lt;p&gt;So here's my question for you: &lt;strong&gt;what are you going to do with the tooling you have?&lt;/strong&gt; Improve it, or accept whatever you were given?&lt;/p&gt;

&lt;p&gt;Your necessary evil might be more unnecessary than you think. Tell me in the comments which one you're still opening every morning.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>vscode</category>
      <category>claudecode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>If You Just Failed an Exam, This Post Is for You</title>
      <dc:creator>Heriberto Flores</dc:creator>
      <pubDate>Wed, 14 Oct 2026 16:41:48 +0000</pubDate>
      <link>https://dev.to/hfloresgu/if-you-just-failed-an-exam-this-post-is-for-you-392f</link>
      <guid>https://dev.to/hfloresgu/if-you-just-failed-an-exam-this-post-is-for-you-392f</guid>
      <description>&lt;p&gt;If you just failed an exam, this post is for you.&lt;/p&gt;

&lt;p&gt;Maybe you missed by a lot. Maybe you missed by a handful of points, which somehow hurts even more. Maybe right now you're wondering if you're really as good as you thought you were.&lt;/p&gt;

&lt;p&gt;I know that feeling, because I failed the Claude Certified Architect exam twice.&lt;/p&gt;

&lt;p&gt;By 30 points. Then by 20.&lt;/p&gt;

&lt;p&gt;And I passed on the third try with 845. But I want to tell you about the part in between, because that's the part nobody posts about.&lt;/p&gt;

&lt;h2&gt;
  
  
  The first fail
&lt;/h2&gt;

&lt;p&gt;I prepared the way a lot of us do. I paid for a practice exam and learned every question until I could answer all of them without thinking.&lt;/p&gt;

&lt;p&gt;Then I sat the real exam, and it was nothing like what I had studied. The questions were different and much harder. They didn't ask me to remember things. They asked me to make decisions, and they were designed to find out whether I really understood the foundations.&lt;/p&gt;

&lt;p&gt;I didn't.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The passing score was 720.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It stung, but I told myself it made sense. I just hadn't seen enough questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fail that really hurt
&lt;/h2&gt;

&lt;p&gt;So a month later, I tried harder. I bought a highly rated guide with more than 300 questions and memorised every one of them.&lt;/p&gt;

&lt;p&gt;This time the exam felt easy. Every question seemed to have a clear answer. I went fast. I walked out feeling good.&lt;/p&gt;

&lt;p&gt;700.&lt;/p&gt;

&lt;p&gt;I can't fully explain how that one felt. The first time, I could blame the surprise. This time I had done everything I thought I was supposed to do. I had felt ready. And I still wasn't good enough.&lt;/p&gt;

&lt;p&gt;I'll be honest: I got a bit depressed. It was hard to recover. I started questioning whether I was the engineer I believed I was, and whether I belonged in this new AI world I was so excited about.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I finally understood
&lt;/h2&gt;

&lt;p&gt;Here's what I couldn't see while I was in it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Those fails weren't measuring me. They were measuring my strategy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Memorising questions teaches you to recognise answers, not to understand them. It feels exactly like knowing, which is why my second attempt felt so easy. But a good exam changes the scenario just enough that the answer you remember is the wrong one. My confidence was real. My understanding wasn't there yet.&lt;/p&gt;

&lt;p&gt;I wish I had realised that sooner. But I realised it, and that changed everything.&lt;/p&gt;

&lt;p&gt;So I stopped memorising. I put the question banks away and studied only the foundations, as hard as my mind could.&lt;/p&gt;

&lt;h2&gt;
  
  
  The third attempt
&lt;/h2&gt;

&lt;p&gt;I'm not going to pretend I walked in calm.&lt;/p&gt;

&lt;p&gt;I was scared. Terrified of failing a third time and proving to myself, once and for all, that I wasn't good enough.&lt;/p&gt;

&lt;p&gt;The exam was hard. Some questions confused me. But this time I didn't rush. I thought through every single one as well as I could, and I used every minute I had.&lt;/p&gt;

&lt;p&gt;845.&lt;/p&gt;

&lt;p&gt;I was so happy. Not only because I passed, but because I knew &lt;em&gt;why&lt;/em&gt; I passed. I hadn't remembered my way through it. I understood it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want you to know
&lt;/h2&gt;

&lt;p&gt;If you just failed, here's what I'd tell you if we were sitting together:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Failing doesn't mean you aren't good enough.&lt;/strong&gt; It means something in how you prepared didn't work. That's fixable. You are not the problem; the approach is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Being close is not a reason to try the same thing again.&lt;/strong&gt; I missed by 30, then by 20, and I almost convinced myself that a bit more of the same would close the gap. It didn't. Changing how I studied did.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fail is part of the story, not the end of it.&lt;/strong&gt; I'm grateful I didn't pass with a lucky 721. Those two fails forced me to build the understanding I now use every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it was worth it
&lt;/h2&gt;

&lt;p&gt;I didn't want this certification for the badge. I believe we're at the start of a new way of building software, and I wanted to be part of it from the beginning, ideally the first one to bring it into my company.&lt;/p&gt;

&lt;p&gt;Two fails made that feel very far away. Today I'm here.&lt;/p&gt;

&lt;p&gt;So if you're looking at a score that's lower than you hoped, take a few days. Feel it. Then change your approach, and go again.&lt;/p&gt;

&lt;p&gt;You've got this.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you ever failed something you really wanted? How did you come back from it? I'd love to read your story in the comments. And if you're preparing for the Claude Certified Architect exam right now, feel free to ask me anything.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>certification</category>
      <category>career</category>
    </item>
    <item>
      <title>From Coding to Lead Agents</title>
      <dc:creator>Heriberto Flores</dc:creator>
      <pubDate>Wed, 14 Oct 2026 16:02:54 +0000</pubDate>
      <link>https://dev.to/hfloresgu/from-coding-to-lead-agents-1jfk</link>
      <guid>https://dev.to/hfloresgu/from-coding-to-lead-agents-1jfk</guid>
      <description>&lt;p&gt;A while ago my relationship with Claude Code was simple: I typed a request, read what came back, corrected it and typed again. It worked. It was also me doing all the coordination. I was the one remembering what had been decided three messages ago, noticing when the model drifted, and deciding when something was "done".&lt;/p&gt;

&lt;p&gt;Today most of my prompts don't ask for code at all. They describe a &lt;strong&gt;process&lt;/strong&gt;: which phases run, in what order, who does each one, what counts as evidence, and when to stop. The agent writes the code. I write the rules it works under.&lt;/p&gt;

&lt;p&gt;I didn't get here in one jump. It happened in four stages, and each one started with something going wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 1: Prompting
&lt;/h2&gt;

&lt;p&gt;It was late in the afternoon, two hours into one long conversation. Early on, the model and I had agreed on how a validation rule should work. Now, deep in the scrollback, it rewrote that same rule the old way, and it did it with total confidence. I scrolled up to find where we had decided it, and I realised something uncomfortable: the decision only existed in the chat, and I was the only one still remembering it.&lt;/p&gt;

&lt;p&gt;That was the pattern back then. Ask for a feature, get a diff, point out what's wrong, repeat. The chat was the source of truth, and when the context got long, decisions quietly disappeared. Every fix polluted the next step: by the time I asked for tests, the model had already seen the implementation, so the tests matched the code, not the requirement. And "done" meant "the model said it's done". No evidence, just confidence.&lt;/p&gt;

&lt;p&gt;None of this was the model's fault. I was asking a single context to be the analyst, the architect, the developer, the tester and the reviewer, all at once, while remembering everything.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 2: Spec-driven development
&lt;/h2&gt;

&lt;p&gt;The first real change was adopting spec-driven development with &lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;Spec Kit&lt;/a&gt;. It splits the work into explicit phases, each one producing a file: &lt;code&gt;spec → clarify → plan → tasks → analyze → implement → verify&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The first time I cleared the context between two phases, it felt wrong, like throwing away work. Then I watched the plan phase read the approved &lt;code&gt;spec.md&lt;/code&gt; and catch a requirement I had forgotten I'd written. That's when it clicked: each phase stays consistent with &lt;strong&gt;what is actually written down&lt;/strong&gt;, not with the half-decisions piling up in a conversation. If it isn't in a file, it didn't happen.&lt;/p&gt;

&lt;p&gt;The rule that surprised me most was that the implementer doesn't write the tests. Implementation writes product code only. Tests come later, in verify, written &lt;strong&gt;from the spec's acceptance examples&lt;/strong&gt; by an agent that isn't allowed to read the product source. A context that has seen the implementation writes tests that confirm the implementation. A blind tester writes tests that confirm the &lt;em&gt;requirement&lt;/em&gt;. That only works if the context is truly clean, so clearing it between implement and verify isn't a nice-to-have; it's the whole guarantee.&lt;/p&gt;

&lt;p&gt;Bugs fit the same pipeline. A feature starts from requirements, so the spec is &lt;strong&gt;authored&lt;/strong&gt;. A bug starts from a symptom, so the spec is &lt;strong&gt;discovered&lt;/strong&gt; from what the code does and what was reported. Both produce the same &lt;code&gt;spec.md&lt;/code&gt;, and the bug path is allowed to &lt;strong&gt;stop instead of guessing&lt;/strong&gt;: when it can't reproduce the symptom with evidence, when nobody has defined the correct behaviour, or when the bug comes from something the codebase doesn't own. Teaching an agent &lt;em&gt;when to stop&lt;/em&gt; turned out to be as valuable as teaching it what to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 3: Becoming the orchestrator
&lt;/h2&gt;

&lt;p&gt;SDD fixed the drift, but it created a new routine. Clear the context, run the next command, read the output, decide whether to continue, clear the context again. One day I counted how many times I had done that for a single feature and realised I was just a very attentive for-loop.&lt;/p&gt;

&lt;p&gt;So I wrote the for-loop as a prompt. The main session stopped doing work and became an &lt;strong&gt;orchestrator&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Orchestration rules&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Act only as an orchestrator; never do the work of a phase yourself.
&lt;span class="p"&gt;-&lt;/span&gt; Run phases sequentially. For each phase, create a new, isolated subagent
  and ask it to read and follow that phase's skill.
&lt;span class="p"&gt;-&lt;/span&gt; Before each phase, read the progress file. After it finishes, record the
  result before starting the next one.
&lt;span class="p"&gt;-&lt;/span&gt; Each subagent reports in at most 10 lines: status, artifacts, blockers.
&lt;span class="p"&gt;-&lt;/span&gt; If a phase fails or is blocked, record it, stop, and report why.
  Do not run later phases.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything else in the prompt is about making that trustworthy. Each phase gets a fresh subagent with only the minimum it needs: the goal, the phase instructions, the relevant artifacts and the acceptance criteria. No transcripts, no "here's everything we discussed". Every subagent returns the same short report (&lt;code&gt;PASS&lt;/code&gt;, &lt;code&gt;FAIL&lt;/code&gt; or &lt;code&gt;BLOCKED&lt;/code&gt;, plus artifacts, checks run and blockers), with one line I consider essential: &lt;em&gt;&lt;code&gt;PASS&lt;/code&gt; is only valid when the acceptance criteria were actually checked. The absence of reported errors is not evidence.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A progress file is the orchestrator's memory, updated after every step. The first time a session died halfway through a feature, a fresh one read that file and picked up exactly where the old one stopped. That's when I started trusting long flows.&lt;/p&gt;

&lt;p&gt;After the phases pass, an independent subagent reviews the whole change. If it finds issues, new subagents fix them, tests run again, and a new review checks the result, for a maximum of three rounds. After that, the flow stops and reports. It never declares success on its own word, and specs can't be edited just to make a finding go away. Only when every exit condition holds does it commit, push and open a pull request. If it can't determine the target branch with certainty, it stops and asks. &lt;em&gt;Do not guess the branch&lt;/em&gt; is literally in the prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 4: Planning for agents, not for humans
&lt;/h2&gt;

&lt;p&gt;Once execution was agentic, the weak point moved upstream. I handed the orchestrator a plan I had written the way I'd write it for a teammate, with tasks like "refactor the module" and "fix the tests". The agents did exactly what each line said, and almost nothing I meant. A human fills the gaps with context. An agent in a fresh, isolated context has no context to fill them with.&lt;/p&gt;

&lt;p&gt;So I wrote a second prompt whose only job is to produce plans an orchestrator can execute. Every task carries its own &lt;strong&gt;execution contract&lt;/strong&gt;: the objective, the files to load, what may and may not change, dependencies, acceptance criteria, how to verify it, and a short handoff for whoever comes next. Alongside the plan comes a dependency map (what's sequential, what can run in parallel, where agents could collide on the same files) and a checkpoint so work can resume in a fresh context.&lt;/p&gt;

&lt;p&gt;The test I use for a good plan: &lt;em&gt;could another agent execute this task using only its specification and the referenced files, without the original investigation?&lt;/em&gt; If not, the task isn't done being planned.&lt;/p&gt;

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

&lt;p&gt;Looking back, the code got better, but that's not the main difference. &lt;strong&gt;My job changed.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;When I was prompting&lt;/th&gt;
&lt;th&gt;When I lead agents&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;I write requests&lt;/td&gt;
&lt;td&gt;I write processes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The chat holds the state&lt;/td&gt;
&lt;td&gt;Files hold the state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One context does everything&lt;/td&gt;
&lt;td&gt;Each role gets a fresh, minimal context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Done" is the model's opinion&lt;/td&gt;
&lt;td&gt;"Done" is a list of verified conditions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I catch mistakes by reading everything&lt;/td&gt;
&lt;td&gt;Gates, limits and reviews catch them, and I review the artifacts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;More agents feels like progress&lt;/td&gt;
&lt;td&gt;Delegate only what's needed for the goal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few lessons I'd pass on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context is a resource you manage.&lt;/strong&gt; Load only what's needed, persist the rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teach agents to stop.&lt;/strong&gt; An agent that halts and explains is worth more than one that guesses and keeps going.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate who builds from who checks.&lt;/strong&gt; Blind tests and independent reviews only work when the checker hasn't seen the builder's reasoning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demand evidence, not confidence.&lt;/strong&gt; Write it into the prompt. Agents will happily report success otherwise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You're still accountable.&lt;/strong&gt; I review the spec, the plan and the final diff. Leading agents doesn't mean leaving the room.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I could tell myself one thing on day one, back in that two-hour chat, it would be this: stop trying to remember everything. Write it down, and build something that checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your turn
&lt;/h2&gt;

&lt;p&gt;Are you still in the long-chat phase, or have you started writing processes for your agents? I'd love to hear what guardrails you've found useful, or where agentic flows broke for you. Leave a comment.&lt;/p&gt;

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