<?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: Ese Idukpaye</title>
    <description>The latest articles on DEV Community by Ese Idukpaye (@idnk2203).</description>
    <link>https://dev.to/idnk2203</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%2F411297%2F1110ab88-fd71-4b69-b05a-e270c769905a.png</url>
      <title>DEV Community: Ese Idukpaye</title>
      <link>https://dev.to/idnk2203</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/idnk2203"/>
    <language>en</language>
    <item>
      <title>AI coding agents: everyone harnesses the agent's loop. Here's the human's.</title>
      <dc:creator>Ese Idukpaye</dc:creator>
      <pubDate>Sat, 18 Jul 2026 06:32:47 +0000</pubDate>
      <link>https://dev.to/idnk2203/ai-coding-agents-everyone-harnesses-the-agents-loop-heres-the-humans-55j3</link>
      <guid>https://dev.to/idnk2203/ai-coding-agents-everyone-harnesses-the-agents-loop-heres-the-humans-55j3</guid>
      <description>&lt;p&gt;If you work with a coding agent, count the things watching it right now. Linters. Git hooks. CI. Specs. A memory store. A rules file it's supposed to obey. Half a dozen systems, all making sure the agent builds the right thing the right way.&lt;/p&gt;

&lt;p&gt;Now count what keeps &lt;em&gt;you&lt;/em&gt; oriented across the eleven things you have in flight. For most of us it's a markdown file we hope we remembered to update.&lt;/p&gt;

&lt;p&gt;We spent two years building harnesses for the agent and left our own work on the honor system. Map the tooling on two axes and that gap turns into a specific, hard-to-unsee hole. This post is the map.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(This is part two of three. Part one, &lt;a href="https://dev.to/idnk_2203/the-orientation-tax-its-missing-context-not-discipline-4ii9"&gt;The AI orientation tax: it's missing context, not discipline&lt;/a&gt;, argued that the cost you're paying is a context bug rather than a character flaw. If you haven't read it, you don't need to. This one stands alone.)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Two loops, not one
&lt;/h2&gt;

&lt;p&gt;The thing people lump together as "agent workflow" is really two loops at different altitudes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The execution loop:&lt;/strong&gt; &lt;em&gt;"is the agent building **this one task&lt;/em&gt;* right?"* Scope it, design it, write it, test it. One unit of work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The orientation loop:&lt;/strong&gt; &lt;em&gt;"do you and the agent share an honest picture of **what you're working on&lt;/em&gt;* across all the units?"* Capture, check state, prioritize, review, run over the whole board, daily and weekly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Almost every tool you've heard of lives in the first loop. That's not a criticism. It's just where the money and the visible pain were. But it means when people say "we solved agent memory" or "we solved context," they solved it &lt;em&gt;for the execution loop.&lt;/em&gt; The orientation loop got left to you and a markdown file.&lt;/p&gt;

&lt;p&gt;You feel the difference the moment each one breaks. When the execution loop breaks, something yells: a failing test, a red build, a review comment. When the orientation loop breaks, nothing yells. The agent confidently re-suggests the thing you rejected yesterday. You rebuild a mental map you already had this morning. The only signal is a vague sense that you're moving slower than the tools promised. One failure is loud and tooled. The other is silent, so it got moralized instead.&lt;/p&gt;

&lt;p&gt;Kief Morris, writing on martinfowler.com, maps this carefully in &lt;a href="https://martinfowler.com/articles/exploring-gen-ai/humans-and-agents.html" rel="noopener noreferrer"&gt;&lt;em&gt;Humans and Agents in Software Engineering Loops&lt;/em&gt;&lt;/a&gt;. His subject is where the &lt;em&gt;human sits inside the agent's loop&lt;/em&gt;: in the loop (inspecting every artifact) or on it (shaping the harness that produces them). As he puts it, "the 'on the loop' way is to change the harness that produced the artefact." Birgitta Böckeler gives that practice a name in the companion piece, &lt;a href="https://martinfowler.com/articles/harness-engineering.html" rel="noopener noreferrer"&gt;&lt;em&gt;Harness engineering for coding agent users&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This post is the next square over. Not where you sit in the agent's loop, but &lt;strong&gt;the loop that's yours&lt;/strong&gt;, and whether anything harnesses it the way we've now learned to harness the agent's. Harness engineering, pointed back at the operator.&lt;/p&gt;

&lt;h2&gt;
  
  
  The map
&lt;/h2&gt;

&lt;p&gt;Two axes do the work.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Horizontal, what layer the tool serves:&lt;/strong&gt; &lt;em&gt;Execution&lt;/em&gt; (one task) to &lt;em&gt;Orientation&lt;/em&gt; (across tasks).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical, how it holds:&lt;/strong&gt; &lt;em&gt;Advisory&lt;/em&gt; (you hope it gets read and kept current) to &lt;em&gt;Harnessed&lt;/em&gt; (it's hooked on, so it can't quietly drift or go stale).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That vertical axis is the one that matters, and researchers at ETH Zurich put a number on it. Testing four coding agents across 138 tasks, they found that &lt;a href="https://www.infoq.com/news/2026/03/agents-context-file-value-review/" rel="noopener noreferrer"&gt;AGENTS.md files barely help&lt;/a&gt;: a developer-written one buys a marginal gain, an AI-written one slightly hurts, and either way the context costs over 20% more to run. The reason is the axis. A file is just advice. Nothing forces the agent to follow it, and nothing checks whether it did, so it follows sometimes and skips other times. A harness doesn't ask. That difference is why every enforced tool below exists, and it's exactly what the empty corner is missing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1a5s1azamt4w5wk0ot79.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1a5s1azamt4w5wk0ot79.png" alt="The loop-tooling landscape: Execution to Orientation across the bottom, Advisory to Harnessed up the side. Enforcement fills three corners; the orientation-harnessed corner sits empty" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Walk it corner by corner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution and advisory, the crowd.&lt;/strong&gt; CLAUDE.md and &lt;a href="https://agents.md/" rel="noopener noreferrer"&gt;AGENTS.md&lt;/a&gt;, spec-driven dev (&lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;Spec Kit&lt;/a&gt;), external memory stores, Claude Code's native Tasks, agent-orchestration boards like &lt;a href="https://github.com/BloopAI/vibe-kanban" rel="noopener noreferrer"&gt;Vibe Kanban&lt;/a&gt;. Enormously useful, and &lt;em&gt;advisory&lt;/em&gt; by design: a file you hope the agent reads, a spec you hope stays current. This is where almost everyone is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Execution and harnessed, productized enforcement for builds.&lt;/strong&gt; This corner is real and mature: &lt;a href="https://github.com/typicode/husky" rel="noopener noreferrer"&gt;Husky&lt;/a&gt;, &lt;a href="https://github.com/evilmartians/lefthook" rel="noopener noreferrer"&gt;Lefthook&lt;/a&gt;, &lt;a href="https://pre-commit.com/" rel="noopener noreferrer"&gt;pre-commit&lt;/a&gt;, &lt;a href="https://trunk.io" rel="noopener noreferrer"&gt;Trunk&lt;/a&gt;, &lt;a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches" rel="noopener noreferrer"&gt;GitHub branch protection&lt;/a&gt;, on top of the underlying primitives (git, &lt;a href="https://code.claude.com/docs/en/hooks" rel="noopener noreferrer"&gt;Claude Code hooks&lt;/a&gt;, CI). These don't &lt;em&gt;hope&lt;/em&gt; your code is clean. They &lt;strong&gt;refuse the commit, fail the build, block the merge&lt;/strong&gt; until it is. Enforcement isn't exotic. It's a solved, shipping product category.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Orientation and advisory, hand-rolled and honest by discipline.&lt;/strong&gt; Here's where your &lt;em&gt;own&lt;/em&gt; loop lives today: a &lt;code&gt;STATUS.md&lt;/code&gt; or &lt;code&gt;CURRENT-FOCUS&lt;/code&gt; you re-read each session, &lt;a href="https://github.com/todotxt/todo.txt" rel="noopener noreferrer"&gt;todo.txt&lt;/a&gt;, &lt;a href="https://taskwarrior.org/" rel="noopener noreferrer"&gt;Taskwarrior&lt;/a&gt;, a Linear board you run solo. All operator-facing, all real, and all kept honest &lt;em&gt;by you remembering to update them.&lt;/em&gt; No enforcement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Orientation and harnessed, empty.&lt;/strong&gt; A harness for the loop you run: one honest, shared picture of what you're working on that &lt;strong&gt;you can't quietly let rot and keep building on&lt;/strong&gt;, that you and the agent both read. Map every tool you can think of and this corner stays blank.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on tools you actually use
&lt;/h2&gt;

&lt;p&gt;The lens is only worth anything if you can run it yourself, so place a few real tools.&lt;/p&gt;

&lt;p&gt;Take a &lt;strong&gt;memory MCP&lt;/strong&gt;, an agent that stores and recalls context across sessions. Genuinely useful, and tempting to file under "solved orientation." But put it on the axes. It serves the &lt;em&gt;agent's&lt;/em&gt; recall inside a task, so it sits execution-side. And it's advisory: it surfaces what it guesses is relevant, and nothing forces you or the agent to reconcile the whole board before acting. Bottom-left. It makes execution smoother; it doesn't hold your orientation loop honest.&lt;/p&gt;

&lt;p&gt;Take &lt;strong&gt;Claude Code's native Tasks&lt;/strong&gt;, or a board like &lt;strong&gt;Vibe Kanban&lt;/strong&gt; (whose hosted product is now winding down, though the project continues as open source). Closer to orientation, because they track units of work across a session. Still advisory, though: the board reflects reality only as well as whoever last updated it, and nothing blocks the next action when it's stale. Left of center, low.&lt;/p&gt;

&lt;p&gt;Take a &lt;strong&gt;Linear board you run solo&lt;/strong&gt;. Now you're genuinely orientation-layer: operator-facing, across tasks. It lands bottom-right. But it's still advisory. Linear will never refuse to let you start work because your statuses are three days old. The honesty rides entirely on you.&lt;/p&gt;

&lt;p&gt;Do this with any tool you like and the pull is the same. Things drift left toward execution and down toward advisory. The top-right stays empty. And you start to see what would move a tool into it: the thing would have to &lt;em&gt;gate&lt;/em&gt; (refuse the next build until the board is reconciled, the way pre-commit refuses a dirty commit), and it would have to serve &lt;em&gt;both&lt;/em&gt; readers off one surface (the list you prioritize is the one the agent reads to re-orient). Bolt a gate onto Linear-for-one and you're most of the way there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why three corners filled and one didn't
&lt;/h2&gt;

&lt;p&gt;It's not an accident, and it's not that the orientation problem is small. Two forces left this corner empty.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Effort pooled where the pain was visible and monetizable.&lt;/strong&gt; "The agent wrote bad code" is loud, demoable, and sellable, so the execution loop got tools. "I lost track of what I was working on" reads as a personal failing, so it got &lt;em&gt;advice&lt;/em&gt;: be disciplined, start fewer things.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enforcement never got pointed at orientation.&lt;/strong&gt; Look again at the harnessed column. Every occupant enforces &lt;em&gt;build correctness&lt;/em&gt;: lint, tests, secrets, merge rules. The enforcement primitive, a hook that blocks until a condition holds, is sitting right there, productized, in wide use. &lt;strong&gt;Nobody aimed it one layer up,&lt;/strong&gt; at the question of whether your board is telling the truth.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So the empty corner isn't "enforcement is rare." It's "enforcement is &lt;em&gt;everywhere, for builds,&lt;/em&gt; and absent for orientation." That's a much more specific, and more fixable, gap. And the split is worth naming plainly: the agent's job is execution, and ours is orientation. We decided execution was too important to leave to advice, so we made it enforceable. Orientation, the part that decides what the agent works on at all, we left to memory.&lt;/p&gt;

&lt;p&gt;It's worth being concrete about how close the missing piece actually is. A pre-commit hook is just a script that runs before an action and can block it. Claude Code ships the same primitive: a hook that fires before a tool runs and can deny it. The entire enforced column is built on that one idea, pointed at code. Pointing it at orientation isn't a research problem. It's the same hook with a different condition: has the board been reconciled today, before you build on it. Nobody shipped it not because it's hard, but because nobody framed staying oriented as a thing you enforce rather than a thing you should just have.&lt;/p&gt;

&lt;h2&gt;
  
  
  The empty corner is the interesting one
&lt;/h2&gt;

&lt;p&gt;Put the two findings together and the shape of what belongs there is obvious.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's &lt;strong&gt;orientation-layer:&lt;/strong&gt; story-grained, across the whole board, not inside one task.&lt;/li&gt;
&lt;li&gt;It's &lt;strong&gt;harnessed:&lt;/strong&gt; a deterministic gate, the way a pre-commit hook gates the commit. It blocks the &lt;em&gt;next build&lt;/em&gt; until you've reconciled. You don't &lt;em&gt;hope&lt;/em&gt; the board is current; you reconcile it before you build on it. The gate doesn't keep it honest &lt;em&gt;for&lt;/em&gt; you. It makes you.&lt;/li&gt;
&lt;li&gt;It serves &lt;strong&gt;both readers off one surface:&lt;/strong&gt; you set priority and capture; the agent reads the same list to re-orient each session and marks state as work lands.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of those properties is new on its own. Files are a solved substrate. Agent-readable state exists (CC Tasks, AGENTS.md). Boards exist. Enforcement exists (hooks). What's missing is the &lt;em&gt;combination&lt;/em&gt;, aimed at the orientation loop. The rarest ingredients are the two this map makes visible: &lt;strong&gt;harnessed&lt;/strong&gt; and &lt;strong&gt;serves-both-off-one-surface.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Take the map, not just the conclusion
&lt;/h2&gt;

&lt;p&gt;The useful thing to keep here isn't "4loops goes in the empty corner." It's &lt;strong&gt;the map.&lt;/strong&gt; Next time you evaluate an agent tool, a memory MCP, a kanban, a rules-file convention, place it on these two axes. Which loop does it serve: the agent's task, or your orientation across tasks? And does it &lt;em&gt;hold&lt;/em&gt; (gate, enforce, can't-drift), or merely &lt;em&gt;advise&lt;/em&gt; (hope it's read)? Almost everything clusters in the same three corners, and you'll feel the fourth one's emptiness yourself.&lt;/p&gt;

&lt;p&gt;What goes in that corner, a harness for your orientation loop with honesty enforced the way builds already enforce correctness, is the next post. This one only had to draw the map clearly enough that the hole is impossible to miss.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The framing this post branches off&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kief Morris, &lt;a href="https://martinfowler.com/articles/exploring-gen-ai/humans-and-agents.html" rel="noopener noreferrer"&gt;&lt;em&gt;Humans and Agents in Software Engineering Loops&lt;/em&gt;&lt;/a&gt; (martinfowler.com, 4 March 2026) — in the loop vs. on the loop.&lt;/li&gt;
&lt;li&gt;Birgitta Böckeler, &lt;a href="https://martinfowler.com/articles/harness-engineering.html" rel="noopener noreferrer"&gt;&lt;em&gt;Harness engineering for coding agent users&lt;/em&gt;&lt;/a&gt; (martinfowler.com, 2 April 2026) — where the term "harness engineering" comes from.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The measurement of the advisory corner&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gloaguen, Mündler et al. (ETH Zurich), &lt;em&gt;Evaluating AGENTS.md: Are Repository-Level Context Files Helpful for Coding Agents?&lt;/em&gt; (Feb 2026) — &lt;a href="https://arxiv.org/pdf/2602.11988" rel="noopener noreferrer"&gt;arXiv&lt;/a&gt; · &lt;a href="https://www.infoq.com/news/2026/03/agents-context-file-value-review/" rel="noopener noreferrer"&gt;InfoQ summary&lt;/a&gt;. Four agents, 138 tasks: developer-written context files give a marginal gain, AI-written ones slightly hurt, and both add 20%+ to cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The advisory corner (execution-layer, hope-it-gets-read)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://agents.md/" rel="noopener noreferrer"&gt;AGENTS.md&lt;/a&gt; — the open convention for agent instruction files, now stewarded by the Agentic AI Foundation.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;Spec Kit&lt;/a&gt; — GitHub's spec-driven development toolkit.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/BloopAI/vibe-kanban" rel="noopener noreferrer"&gt;Vibe Kanban&lt;/a&gt; — agent-orchestration board (hosted product winding down; continues as open source).&lt;/li&gt;
&lt;li&gt;Claude Code's native Tasks — cross-session agent state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The harnessed corner (enforcement, productized, for builds)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/typicode/husky" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; · &lt;a href="https://github.com/evilmartians/lefthook" rel="noopener noreferrer"&gt;Lefthook&lt;/a&gt; · &lt;a href="https://pre-commit.com/" rel="noopener noreferrer"&gt;pre-commit&lt;/a&gt; · &lt;a href="https://trunk.io" rel="noopener noreferrer"&gt;Trunk&lt;/a&gt; · &lt;a href="https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches" rel="noopener noreferrer"&gt;GitHub branch protection&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The underlying primitive: &lt;a href="https://code.claude.com/docs/en/hooks" rel="noopener noreferrer"&gt;Claude Code hooks&lt;/a&gt; — a script that runs before a tool call and can deny it. The whole enforced column is this one idea, pointed at code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The hand-rolled orientation corner&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/todotxt/todo.txt" rel="noopener noreferrer"&gt;todo.txt&lt;/a&gt; · &lt;a href="https://taskwarrior.org/" rel="noopener noreferrer"&gt;Taskwarrior&lt;/a&gt; · hand-rolled &lt;code&gt;STATUS.md&lt;/code&gt; / &lt;code&gt;CURRENT-FOCUS&lt;/code&gt; conventions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Part one of this series&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/idnk_2203/the-orientation-tax-its-missing-context-not-discipline-4ii9"&gt;The AI orientation tax: it's missing context, not discipline&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>devtools</category>
      <category>agentskills</category>
      <category>claude</category>
    </item>
    <item>
      <title>The AI orientation tax: it's missing context, not discipline</title>
      <dc:creator>Ese Idukpaye</dc:creator>
      <pubDate>Sat, 11 Jul 2026 15:17:37 +0000</pubDate>
      <link>https://dev.to/idnk2203/the-orientation-tax-its-missing-context-not-discipline-4ii9</link>
      <guid>https://dev.to/idnk2203/the-orientation-tax-its-missing-context-not-discipline-4ii9</guid>
      <description>&lt;p&gt;You have eleven things in flight. Three of them are "almost done." You can't remember which three. Every morning you spend the first ten minutes rebuilding the picture (what was I on, where did I leave it, what's actually next) before you do any real work. And the coding agent you brought in to go faster starts every session asking you the same questions you just answered yesterday.&lt;/p&gt;

&lt;p&gt;The usual diagnosis is &lt;strong&gt;discipline&lt;/strong&gt;: you start too much, you don't finish, you're scattered, get a system and stick to it. I think that diagnosis is wrong, or at least aimed one layer too high. The people who actually dug into this landed somewhere else: it's &lt;strong&gt;missing context, not discipline.&lt;/strong&gt; And the interesting part is that your agent now pays the exact same tax, for the exact same reason.&lt;/p&gt;

&lt;p&gt;This is a post about that tax: what it is, what it costs (there are numbers), why the AI era makes it &lt;em&gt;worse&lt;/em&gt; instead of better, and the small loop where it actually breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tax you're already paying
&lt;/h2&gt;

&lt;p&gt;Picture a normal day with three projects going at once. Underneath the actual work, you're running a second, smaller loop all day long:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;capture:&lt;/strong&gt; get what's on your plate into view&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;check state:&lt;/strong&gt; figure out where each piece actually is&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;prioritize:&lt;/strong&gt; pick what's next&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;review:&lt;/strong&gt; at the end, see what got done&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbx9zx4aelsye811nsr05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbx9zx4aelsye811nsr05.png" alt="The 4-act orientation loop: capture, check state, prioritize, review, run daily and weekly" width="800" height="811"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That loop is cheap when you're running one thing. It gets expensive fast when you're running several phased threads at once, because now you're holding all of it in your head, and your head has a ceiling. Past that ceiling, you start paying what I'll call the &lt;strong&gt;orientation tax&lt;/strong&gt;: the time and attention you burn just &lt;em&gt;staying oriented&lt;/em&gt; (re-contextualizing, re-deciding, re-finding your place) instead of moving the work forward.&lt;/p&gt;

&lt;p&gt;The tax is small per hit and easy to dismiss. That's exactly why it's expensive: you pay it dozens of times a day and never see the bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  The misdiagnosis: "just have more discipline"
&lt;/h2&gt;

&lt;p&gt;The dominant framing for this is moral. &lt;em&gt;You have too many half-finished projects. Finish what you start. Stop being a magpie.&lt;/em&gt; It shows up everywhere in dev culture, and it feels true, so nobody questions it.&lt;/p&gt;

&lt;p&gt;But look at what the people who took the problem seriously actually concluded. The developer behind &lt;a href="https://dev.to/__be2942592/i-have-47-unfinished-side-projects-heres-why-i-dont-feel-bad-about-it-3g4o"&gt;&lt;em&gt;I Have 47 Unfinished Side Projects&lt;/em&gt;&lt;/a&gt; expected the lesson to be discipline, then landed on &lt;strong&gt;context&lt;/strong&gt; instead: of the 47, the one project that actually shipped was the one that started from a real problem he had &lt;em&gt;right now&lt;/em&gt; ("I literally need this tomorrow"), not from forcing himself to finish the rest. &lt;a href="https://www.linkedin.com/pulse/developers-dilemma-managing-too-many-projects-once-bonaventure-ogeto-pingf" rel="noopener noreferrer"&gt;Bonaventure Ogeto&lt;/a&gt; keeps what he calls a "projects parking lot": &lt;em&gt;a single place to log every project and its current status, so you always know where everything lives and nothing feels lost.&lt;/em&gt; That's not a discipline fix. It's an &lt;strong&gt;orientation fix&lt;/strong&gt;: one honest place where the state of in-flight work lives.&lt;/p&gt;

&lt;p&gt;Here's the distinction that matters, because it's easy to blur. &lt;strong&gt;Deciding what to start&lt;/strong&gt; is a selection problem: upstream, real, but not this one. The tax I'm describing starts &lt;em&gt;after&lt;/em&gt; you've committed. You've got work you've decided to do, broken into pieces, and the cost is just &lt;strong&gt;staying oriented across it&lt;/strong&gt;. The grassroots fixes all quietly agree the lever is context (a single status home), not willpower. The discipline frame keeps people optimizing the wrong variable.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers (it's expensive, and some of it is measured)
&lt;/h2&gt;

&lt;p&gt;"Staying oriented" sounds soft. The cost isn't.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;th&gt;Figure&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Re-teaching the agent at the start of every session&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~12 min/session ≈ one workday/month&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ma (self-tracked)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refocusing after a single interruption (complex work)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;up to 23 min&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gloria Mark / APA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A 10-dev team losing 20% to switching&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~$240,000/year&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;onehorizon&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three angles on one cost: per session (the agent), per interruption (you), per year (the team). Two honest caveats, because the credibility is the point. The &lt;strong&gt;23-minute&lt;/strong&gt; refocus comes from Gloria Mark's interruption research, usually reported second-hand, so treat it as directional, not gospel. The &lt;strong&gt;12-minute/session&lt;/strong&gt; figure is newer and thinner: one developer's week of self-tracking. Strong as illustration, not yet replicated. I'm citing both as what they are.&lt;/p&gt;

&lt;p&gt;But the direction is unambiguous, and the two tiers point at the same thing: &lt;strong&gt;the cost of losing the thread, multiplied by how often you lose it.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI era makes it worse, not better
&lt;/h2&gt;

&lt;p&gt;You'd expect a coding agent to &lt;em&gt;reduce&lt;/em&gt; this. It does the opposite, in two ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First, it raises the thread count.&lt;/strong&gt; Agents let you start more and ship faster than you can stay oriented. Every capability jump (faster models, parallel agents, longer task horizons) increases how many pieces a solo operator can have in flight at once. That's the exact input that drives the tax. More throughput, more to keep straight.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;focus / context-switching research (decades, pre-AI)
        |  attention is serial; switching is costly
        v
indie-maker "too many threads" culture (2010s -&amp;gt;)
        |  more starts than you can hold
        v
agent era (2024-2026)   &amp;lt;-- the amplifier
        agents let you START more and SHIP faster than you can orient,
        AND the agent itself loses the thread between sessions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Second, and this is the new part: the agent pays the tax too.&lt;/strong&gt; It starts every session cold. As one tooling write-up puts it, model weights are frozen, the context window rebuilds from scratch, and &lt;em&gt;"most tools do not write cross-session memory by default. Manual files like AGENTS.md help, but they drift."&lt;/em&gt; That drift is the same staleness that rots your own notes, now happening to the agent.&lt;/p&gt;

&lt;p&gt;And it's not a one-way street where your mess flows downhill into the agent. The sharper read: &lt;strong&gt;you and the agent are running the same loop on the same work, on two different clocks.&lt;/strong&gt; Your clock spans days and weeks. The agent's clock is the &lt;em&gt;session&lt;/em&gt;, and it resets every time. When you ship fast, you spin up many sessions, often parallel, across days. Nothing &lt;em&gt;inside&lt;/em&gt; a single session can carry the picture across all those resets. The agent reaching for &lt;code&gt;AGENTS.md&lt;/code&gt;, the threads asking &lt;em&gt;"how do you handle context loss between Claude Code sessions?"&lt;/em&gt;: that's the agent &lt;strong&gt;trying to run check-state and review&lt;/strong&gt; and failing for lack of a durable, shared list. Same break as yours, different clock.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's one loop, and it breaks in the same place every time
&lt;/h2&gt;

&lt;p&gt;Step back and the whole thing collapses into a single mechanism. The tax isn't five unrelated annoyances. It's &lt;strong&gt;one loop breaking for one reason: there's no single honest list to run it on.&lt;/strong&gt; Take the list away and watch each act fail in order:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No list → capture fails.&lt;/strong&gt; Committed work never lands in one place, so you orient on a partial view.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;→ check-state fails.&lt;/strong&gt; State isn't updated, so the list (such as it is) lies: it says "in progress" for things that are done or dead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;→ prioritize fails.&lt;/strong&gt; What matters shifted; nothing flagged it; you keep working yesterday's order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;→ review fails.&lt;/strong&gt; Closure was never recorded, so "what did I actually ship this week" is unanswerable, and it stays invisible until the shame shows up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;→ it cascades.&lt;/strong&gt; Every break above is inherited by the agent, which is reading the same broken picture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the give-away here, the part worth keeping even if you never touch any tool: &lt;strong&gt;when your multi-threaded work feels like it's slipping, don't reach for more discipline. Find the act of the loop that's breaking, and notice it's breaking because nothing holds one honest list.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why nobody's built the fix
&lt;/h2&gt;

&lt;p&gt;If the problem is this legible, why is the slot empty? Because the field inherited the &lt;strong&gt;discipline&lt;/strong&gt; frame. Orientation got filed as a pre-existing human-character problem (&lt;em&gt;be more focused, start fewer things&lt;/em&gt;), so when agents arrived, nobody built the AI-native answer for it. The tooling that did get built lives one layer down, on &lt;strong&gt;execution&lt;/strong&gt;: making the agent build a single task correctly (spec files, rules files, memory stores). All useful. None of it keeps &lt;em&gt;you and the agent oriented across the whole board of in-flight work.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So the pain is mainstream and well-documented, but the &lt;em&gt;solo-operator-plus-agent&lt;/em&gt; framing is young and mostly open. The vocabulary is even splitting in real time: "context switching" on the productivity side, "agent memory" and "persistent context" forming on the tooling side, both circling the same hole from opposite directions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reframe, in one line
&lt;/h2&gt;

&lt;p&gt;Your scattered board and your forgetful agent are not two problems, and neither is a discipline problem. They're &lt;strong&gt;one orientation problem&lt;/strong&gt;: nothing holds a single honest picture of what's in flight, so you keep rebuilding it from memory and the agent keeps inheriting a broken copy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdyof0dt0dbqap8zgsqnb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdyof0dt0dbqap8zgsqnb.png" alt="Before and after the orientation tax: paid vs dropped. Same acts, same speed. The difference is one honest list both of you read" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fix isn't to want it more. It's to give the loop one surface to run on: honest, shared, and gated, so the honesty doesn't ride on memory. A board you reconcile before you build on it, instead of one you hope you updated. That's a design problem, not a character flaw. I've been building toward an answer to it, and that's the next post: &lt;a href="https://dev.to/idnk2203/ai-coding-agents-everyone-harnesses-the-agents-loop-heres-the-humans-55j3"&gt;everyone harnesses the agent's loop, here's the map of the human's&lt;/a&gt;. This one only had one job: to get you to stop blaming your discipline for a context bug.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agent context loss:&lt;/strong&gt; Augment Code, "Why AI Agents Keep Asking the Same Questions"; Marvin Ma, "Why Your AI Coding Agent Keeps Forgetting Everything" (the ~12-min/session figure).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interruption and team cost:&lt;/strong&gt; Gloria Mark / APA interruption research (via secondary reporting); onehorizon (the ~$240k/yr figure).&lt;/li&gt;
&lt;li&gt;Maker self-diagnoses (the 47-projects and parking-lot pieces) are linked inline. Full source ledger lives in the problem-convention dossier.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>claude</category>
      <category>agents</category>
    </item>
    <item>
      <title>Javascript (JS) Pass by Reference and Pass by Value</title>
      <dc:creator>Ese Idukpaye</dc:creator>
      <pubDate>Sat, 28 Jan 2023 20:28:35 +0000</pubDate>
      <link>https://dev.to/idnk2203/javascript-js-pass-by-reference-and-pass-by-value-b7f</link>
      <guid>https://dev.to/idnk2203/javascript-js-pass-by-reference-and-pass-by-value-b7f</guid>
      <description>&lt;h2&gt;
  
  
  Terms
&lt;/h2&gt;

&lt;p&gt;Passing: To assign a value to a variable or, pass it to function as a parameter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pass by Value
&lt;/h2&gt;

&lt;p&gt;Anytime a variable containing another value which is not an object or an array is passed along to let's say a function as a parameter, the variable being passed becomes a copy of the value it holds. As a result, the variable passed to the function will have its value unchanged despite whatever the function does with it, for example, reassign’s it or updates it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; 
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 60&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;boo&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;70&lt;/span&gt; 
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 70&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 60 : unchanged value of the x variable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pass by Reference
&lt;/h2&gt;

&lt;p&gt;Anytime a variable containing another value which is an object or array is passed along to let say a function as a parameter, the variable is passed to the parameter as a ref to its object/array value. As a result, the variable passed to the function will have its value changed if for example it is updated with a new element of the key/value pair.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;john&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// {name:"john",age:22} &lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;boo&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;statue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// {name:"john",age:22, status:true} &lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;foo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// {name:"john",age:22, status:true} &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>aws</category>
      <category>security</category>
      <category>discuss</category>
      <category>workplace</category>
    </item>
    <item>
      <title>5 Debugging Tips that can Save you 5hrs of Debugging Time</title>
      <dc:creator>Ese Idukpaye</dc:creator>
      <pubDate>Fri, 21 Oct 2022 23:14:17 +0000</pubDate>
      <link>https://dev.to/idnk2203/5-debugging-tips-that-can-save-you-5hrs-of-debugging-time-3c1d</link>
      <guid>https://dev.to/idnk2203/5-debugging-tips-that-can-save-you-5hrs-of-debugging-time-3c1d</guid>
      <description>&lt;h2&gt;
  
  
  1. Document Everything
&lt;/h2&gt;

&lt;p&gt;You should always document everything from instructions on how to replicate the bug, to defined strategies on how to resolve the bug, to any side effect that results from a solution implementation. This is probably the most important one and I learnt this from working at Loxe Inc.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Error Logging
&lt;/h2&gt;

&lt;p&gt;Always log your errors through a properly implemented error handler middleware and when an error occurs be sure to check your logs. I don't also forget the remove log statements from your debugged code. I learnt this from working at Loxe Inc.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Only refactor working code
&lt;/h2&gt;

&lt;p&gt;When debugging it is best to work with the most simplistic-looking code piece of code to speed up the refactoring process and refactor after the code has been debugged.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Fix one problem at a time
&lt;/h2&gt;

&lt;p&gt;This is also one major mistake most people make including myself of trying to resolve all the bugs at the same time before testing or grouping a lot of small bugs into one big bug, never do this. Always fix one bug at a time&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Take Breaks
&lt;/h2&gt;

&lt;p&gt;This can be linked to the spacing effect which refers to the finding that long-term memory is enhanced when learning events are spaced apart in time, rather than massed in immediate succession.&lt;br&gt;
What this translates is that when trying to resolve bugs don't feel that you have to do it all in one go. it's okay to take breaks while resolving a bug.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>jwt</category>
      <category>auth</category>
      <category>node</category>
    </item>
  </channel>
</rss>
