Compare commits

..

5 Commits

Author SHA1 Message Date
Eric Wagoner
b598dd4c35 Add weeknote for Feb 28–March 6, 2026; update now page
- New weeknote covering first week at Natera, Gloomhaven returning,
  Dover sole, Girl Scout cookies, and spring allergies
- Update now.md: date, Gloomhaven status, remove Infinity Interactive
  blog link, rewrite "Where my head is" for new-job context

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-24 10:58:22 -04:00
Eric Wagoner
59a8a41bac Fix tag casing in weeknote; update upcoming page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 09:57:53 -04:00
Eric Wagoner
12cc4feed4 Add weeknote for Feb 21-27, 2026; update temporal pages for career change
Last day at Infinity Interactive; joined Natera as Staff Software Engineer.
Updates now/then/upcoming to reflect the job change and past events.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-17 09:49:45 -04:00
Eric Wagoner
09425a6d41 Add reprint of Plan/Assign/Build/Retro post from Infinity Interactive blog
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 23:27:40 -05:00
Eric Wagoner
e2e5a36d72 Add weeknote for February 14–20, 2026
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 22:09:29 -05:00
12 changed files with 443 additions and 17 deletions

View File

@@ -12,9 +12,8 @@ title: Eric in the Present
[pics]: https://pix.kestrelsnest.social/@eric [pics]: https://pix.kestrelsnest.social/@eric
[locallygrown]: /posts/locallygrown-origin-story/ [locallygrown]: /posts/locallygrown-origin-story/
[randomrecipe]: https://www.youtube.com/@RandomRecipeProject [randomrecipe]: https://www.youtube.com/@RandomRecipeProject
[conpossible]: https://www.conpossible.com
This page is all about what I am doing *now*. It was last updated on December 25, 2025, and will be edited as things change. This page is all about what I am doing *now*. It was last updated on March 7, 2026, and will be edited as things change.
## Where I am now ## Where I am now
@@ -28,7 +27,7 @@ We [lost Charlie](/posts/2023-07-24-goodbye,-charlie/) but our two remaining cat
## What I am doing now ## What I am doing now
I'm the Vice President of Technology at [Infinity Interactive][infinity]. Our whole industry is in turmoil, so work is hard. We're doing a wide range of consulting—from technical infrastructure and software development to workflows and solving both simple and complex problems. Basically, all things having to do with technology and helping organizations organize what they have. I just joined [Natera](https://www.natera.com) as a Staff Software Engineer. Natera is at the forefront of cell-free DNA testing, with work in oncology helping detect and fight cancers earlier and more effectively. After more than ten years at [Infinity Interactive][infinity]—the last several as VP of Technology—this is a big change, and a deeply personal one. Cancer took my mom. Writing code that plays even a small part in that fight is not something I could turn down.
[LocallyGrown.net][locallygrown] has settled into a rhythm of steady improvements after the massive six-month migration from Rails 3 to SvelteKit. The infrastructure work is behind us; now it's about new features, better tools for market managers, and growing the platform that serves 70+ farmers markets. [LocallyGrown.net][locallygrown] has settled into a rhythm of steady improvements after the massive six-month migration from Rails 3 to SvelteKit. The infrastructure work is behind us; now it's about new features, better tools for market managers, and growing the platform that serves 70+ farmers markets.
@@ -40,13 +39,13 @@ Currently a few chapters into *Service Model* by Adrian Tchaikovsky.
- **The Outer Worlds 2** — A whimsically dark RPG from Obsidian in the tradition of Fallout. Delightfully cynical corporate dystopia. - **The Outer Worlds 2** — A whimsically dark RPG from Obsidian in the tradition of Fallout. Delightfully cynical corporate dystopia.
- **Assassin's Creed: Valhalla** — Viking exploration on the Xbox. - **Assassin's Creed: Valhalla** — Viking exploration on the Xbox.
- **Gloomhaven** — Finally playing with a regular group after the game sat on my shelf for years. - **Gloomhaven** — Back at it after a two-month break. Approaching the endgame now, maybe three quarters through the story, and every scenario comes down to the wire.
## What else? ## What else?
### Writing Again ### Writing Again
After months of silence, I'm writing regularly again—both here and at the [Infinity Interactive blog](https://iinteractive.com/resources/blog). The words are flowing. After months of silence, I'm writing regularly again. The words are flowing.
### Creative Projects ### Creative Projects
@@ -56,12 +55,11 @@ After months of silence, I'm writing regularly again—both here and at the [Inf
### Upcoming Events ### Upcoming Events
- **[Inuhele](https://inuhele.com)** (January 2325, 2026) — Atlanta's annual Tiki Weekend. I'm on staff. Nothing on the calendar yet — just getting settled into the new role.
- **[CONpossible][conpossible]** (February 68, 2026) — I'm the Costuming Track Director. This year's theme is "Through the Faerie Ring"—magic mixed with technology.
## Where my head is ## Where my head is
The LocallyGrown marathon is behind me. Three months out from the migration, I've found my rhythm again. Writing is happening. Videos are being made. Games are being played. The creative projects that feed my soul are no longer waiting—they're in motion. Week one at Natera is behind me. The firehose is real, but the familiar faces help—several colleagues are people I've worked alongside at previous companies. I'm absorbing everything I can while looking for the places where I can start to make my mark. The creative projects that feed my soul are still in motion. Writing is happening. Gloomhaven is happening. Life is good.
--- ---

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

View File

@@ -0,0 +1,170 @@
---
title: "Plan, Assign, Build, Retro: A Replicable Workflow for AI-Augmented Development"
date: 2026-03-04T12:00:00-05:00
draft: false
tags:
- ai
- development
- workflow
- claude
- svelte
description: "I built a community events board from scratch, while making biang biang noodles. Here's the four-phase methodology that made it repeatable: structured planning, detailed tickets, supervised builds, and automated review."
lastmod: 2026-03-05T04:22:48.537Z
---
<link rel="canonical" href="https://iinteractive.com/resources/blog/plan-assign-build-retro-a-replicable-workflow-for-ai-augmented-development" />
{{< callout type="note" title="Originally published on the Infinity Interactive blog" >}}
This post originally appeared on the [Infinity Interactive blog](https://iinteractive.com/resources/blog/plan-assign-build-retro-a-replicable-workflow-for-ai-augmented-development). Reprinted here with minor edits.
{{< /callout >}}
I spent 2 hours and 10 minutes actively supervising the construction of a complete web application. Twenty-one tickets, 53 story points, 21 pull requests merged, roughly 8,500 lines of code. During one epic I was in the kitchen making biang biang noodles from scratch. During another I was helping my daughter with history homework. My total hands-on-keyboard time for the build phase was about what most developers spend in a single standup cycle.
![Biang biang noodles with chili oil and broccolini in a green ceramic bowl. The Epic 2 build session: 13 story points, 3 PRs, 10 minutes of my attention.](noodles.jpg)
_Biang biang noodles with chili oil and broccolini in a green ceramic bowl. The Epic 2 build session: 13 story points, 3 PRs, 10 minutes of my attention._
But the numbers aren't what made it repeatable. The process is.
Over the past year, I've been developing a methodology for AI-augmented web development across multiple client projects at Infinity Interactive. What started as "let me try having Claude write some code" evolved into a structured four-phase workflow that consistently compresses multi-month timelines into weeks of part-time work. The methodology got tighter with each project. By the most recent one, I'd stopped thinking of AI as a tool I used and started thinking of it as a team member I managed.
To validate that the methodology was teachable, not just something that worked in my hands, I designed a training exercise for my team: a small community event board built from scratch using the full workflow. I ran through it myself first, documenting everything obsessively so my teammates could see exactly how the decisions got made. This post is what I learned.
## How the Loop Works
The workflow has four phases that repeat in a sprint cycle: Plan, Assign, Build, Retro.
![The core loop: Plan → Assign → Build → Retro, with role labels showing who does what at each phase.](workflow-cycle.svg)
_The core loop: Plan → Assign → Build → Retro, with role labels showing who does what at each phase._
In **Plan**, I'm having an architecture conversation with Claude Desktop. I describe what we're building, what tech stack, what the constraints are. Claude asks questions I haven't thought of yet, then structures my thinking into documentation, epics, and detailed tickets. This phase typically takes 60 to 120 minutes and produces everything the build phase needs.
In **Assign**, I sequence the tickets, set priorities, identify dependencies. This is 15 minutes of manual work. Infrastructure before features, data layer before UI.
In **Build**, Claude Code (the CLI tool) does the implementation, ticket by ticket. I supervise. That means: kick off a ticket, let it work, check the diff when it's ready, approve the commit, approve the push, review the PR. Automated review agents catch what I miss. I merge when satisfied.
In **Retro**, Claude Code writes the initial retrospective document from the sprint artifacts and conversation history. Then Claude Desktop reviews and expands it with additional context, cross-referencing the planning docs and build logs. I review the analysis, and Claude Desktop adjusts tickets and epics for upcoming sprints accordingly.
The role division is the important part. I'm the architect who makes decisions. During planning, Claude is the stenographer who structures my thinking. During building, Claude Code is the developer who writes code. During retro, Claude is the analyst. At every stage, I approve every commit, every push, every merge. No exceptions.
## What I Built
The training project was a community event board for a fictional neighborhood association. Public-facing static site where residents can browse, search, and filter local events. Familiar domain, exercises the full workflow, mirrors real client patterns.
I chose SvelteKit with Svelte 5, static adapter, MDsveX for markdown-based event content. Eighteen sample events with search-as-you-type, category filters, responsive design, accessibility compliance. The whole thing [deploys to GitHub Pages](https://iinteractive.github.io/community-board-eric/).
![The Community Events page with the Social category filter active, showing 3 of 18 events. Search bar, category pills, and event cards with the Nightmare on Elm Street theme.](events-filtered.png)
_The Community Events page with the Social category filter active, showing 3 of 18 events. Search bar, category pills, and event cards with the Nightmare on Elm Street theme._
The creative direction was a Nightmare on Elm Street theme, because the fictional client was the "Elm Street Community Association" and I couldn't resist. Dark palette, blood red accents, Freddy's sweater green as the secondary color, event titles like "Nightmare 5K Fun Run" and "Elm Street Séance & Social Hour." One of the hero section components has a barely-visible striped Easter egg at 6% opacity.
Silly? Sure, but it's a quirk that worked. The strong creative direction forced the AI to make consistent aesthetic choices instead of defaulting to generic templates. Every event description, every color pairing, every piece of copy had a guiding sensibility to follow. Creative constraints helped here the same way they usually do — they gave the AI something specific to follow instead of reaching for safe defaults.
## What 105 Minutes of Planning Produced
Here's where most people's mental model of "AI coding" breaks down. They imagine typing a prompt and getting a project back. The reality is that the build phase was easy _because_ I spent 105 minutes planning before a single line of code existed.
The planning conversation was a real conversation, not a prompt. I described the architecture. Claude asked whether search should be client-side or server-side. I said client-side, it's a static site with 20 events, no need for a server round-trip. Claude asked about the content pipeline. I said MDsveX, one markdown file per event, frontmatter for metadata. Claude asked about the data model. I described the fields. It structured all of this into an epic plan with dependency chains and story point estimates.
A note on story points, since they're controversial even in conventional development: I'm not using them to estimate time. In this workflow, time-to-implement is almost meaningless as a planning metric. I use them as a shorthand for how complex the _ask_ is — how much architectural thinking the ticket requires, how carefully I'll need to review the output, how many moving parts are involved. A 2-point ticket means I'll glance at the diff and approve. A 5-point ticket means I'm reading every line and probably testing in the browser. They're a gauge for my review effort, not the AI's build effort.
That conversation produced three reference documents: a Technical Architecture spec (stack decisions, data flow, component hierarchy), a Design Brief (color theory, typography rationale, mood references, component-level direction), and an Event Content Guide (character names, tone, category definitions). Each document was detailed enough that a specialized AI agent could work from it independently, without needing me to re-explain context.
Then we wrote tickets. Twenty-one of them across five epics, each with detailed acceptance criteria. A good ticket for this workflow reads like a spec: exact field names, expected sort behavior, specific responsive breakpoints, accessibility requirements. This matters because the ticket becomes the prompt. When I hand a ticket to Claude Code, it should contain everything needed to complete the work without me re-explaining the architecture.
![Jira ticket CBERIC-22 showing the SearchBar component spec: acceptance criteria with file paths, styling requirements, keyboard behavior, and a Technical Context section with code references and cross-ticket dependencies. Story Points: 2.](jira-ticket.png)
_Jira ticket CBERIC-22 showing the SearchBar component spec: acceptance criteria with file paths, styling requirements, keyboard behavior, and a Technical Context section with code references and cross-ticket dependencies. Story Points: 2._
Here's a concrete example. The acceptance criteria for the EventCard component included: full-card link wrapped in `<a>`, `<article>` landmark with `aria-labelledby`, metadata rendered as `<dl>` with visually-hidden labels, category badge with token-based colors, three-line description clamping, hover lift with `prefers-reduced-motion` guard, and 44px minimum touch targets. Claude Code implemented all of it on the first pass. The review layer found one addition (a global reduced-motion reset) and zero bugs. That's what a good ticket produces.
The vaguer tickets produced worse results. The README/documentation ticket had loose acceptance criteria and became the most review-intensive PR of the project: five commits, five review rounds, ten issues. The documentation deserved the same rigor as the features. I didn't give it that, and it showed.
## What Supervision Actually Looks Like
During Epics 2 and 3, I was barely at my desk. I kicked off a ticket, went to the kitchen to knead dough for biang biang noodles, and came back ten minutes later. Claude Code had created the event loading utility, written 16 integration tests, set up ESLint and Prettier, configured a CI workflow, and was waiting for me to approve a commit. I read the diff on my phone, approved, went back to my dough. Came back again when it pinged for the push approval. Approved. The PR went up, automated reviews ran, I read the review comments while the noodles rested, told Claude Code to fix the two things the reviewers flagged, approved those commits, merged. Total active time for 13 story points: about ten minutes. The remaining epics were similar — homework help, vegetable prep, and occasionally walking over to the computer to approve a commit. Maybe fifteen minutes of active attention for the entire landing page.
I want to be careful about how this reads. The work itself was significant, but supervision stayed lightweight because I'd front-loaded the decisions. If I'd skipped the architecture conversation and the detailed tickets, the build phase would have been full of confusion, rework, and re-explanation. The noodle-making ratio only works when you've spent the time planning.
The approval gates are also non-negotiable. I approve every step. This isn't paranoia. Claude Code is good, but it makes mistakes that are easy to catch in a diff and hard to catch after they've shipped. The scaffold command overwrote my README with generic boilerplate. A favicon was generated at 1422x1422 pixels (259KB for a 16px icon). Event page titles were rendering URL slugs instead of human-readable names. Each of these was a quick catch at the approval stage and would have been a debugging session after the fact.
There was also an acceleration curve I didn't expect. Epic 1 (foundation) took about an hour of active work. By Epics 4 and 5 (event listing, detail pages, search, filters), the active time was 20 to 25 minutes combined. This wasn't just because later tickets were smaller. The foundation work compounded. Design tokens, global styles, tested utilities, established patterns. By mid-project, Claude Code was composing from existing conventions rather than inventing new ones, and I was reviewing familiar patterns rather than evaluating novel approaches.
## Three Layers of Review
The review system was the part of the workflow I was most skeptical about, and it turned out to be the most valuable.
Every PR gets three reviewers: Cursor's Bugbot, a Claude GitHub Action, and me. Each catches different things.
![Claude's automated PR review on the SearchBar component, showing three issues found with specific line numbers: redundant live region announcements, hardcoded IDs risking duplicates, and missing autocomplete attributes. Each issue has a "Fix this" link.](pr-review.png)
_Claude's automated PR review on the SearchBar component, showing three issues found with specific line numbers: redundant live region announcements, hardcoded IDs risking duplicates, and missing autocomplete attributes. Each issue has a "Fix this" link._
Bugbot writes a risk assessment summary at the top of each PR and flags structural concerns. It caught that CSS custom properties can't be used in `@media` queries (a spec limitation I'd forgotten about), flagged a machine-specific config file being committed, and identified sort-order inconsistencies between related utility functions. Good signal-to-noise ratio, maybe one false positive across the whole project.
The Claude GitHub Action does granular inline review. It caught a timezone bug that would have shipped to production: `new Date('2026-04-18')` parses as UTC midnight, which means US timezone users would see today's events listed as yesterday. The fix was three characters (`T00:00:00`), but I would not have caught it on my own. It also caught a `100vh` fallback gap for older browsers, focus ring inconsistencies, a z-index stacking issue where a gradient overlay was rendering on top of readable text, and a hard-coded color value that violated the project's design token convention.
My review handles judgment calls. When Bugbot flagged Vite scripts in `package.json` as "bypassing the SvelteKit CLI," I knew that was a false positive because modern SvelteKit uses Vite directly. When Claude suggested adding a new `--color-white` token, I chose the existing off-white token instead. When a review noted an orphaned card in a 3-column grid with 5 items, I decided that was fine. The bots surface issues. Which ones actually matter is still my call.
Across 21 PRs, the automated reviewers caught roughly 40 to 50 issues I didn't catch myself. The timezone bug alone justified the entire review setup.
But I should be honest about the limitation. There's a recurring accessibility bug that appeared four times across PRs #13 through #16: duplicate `aria-live` regions, where Claude Code would add `role="status"` to a new element without removing it from an existing one, causing screen readers to announce changes twice. The reviewers caught it every single time. But Claude Code kept reintroducing it because each PR started with fresh context. It couldn't carry the lesson forward.
The fix was adding a one-line rule to CLAUDE.md (the persistent project instructions file). After that, the bug never recurred. Which tells you something about the architecture of the system: cross-session learning doesn't happen automatically. You have to write it down. And you should write it down faster than I did, because three unnecessary review round-trips is a waste even when the reviewers are free.
## A Different Job
This workflow changes what you do all day. I spent more time on architecture conversations, requirements writing, diff reading, and judgment calls. I spent almost no time typing code, debugging syntax errors, or writing boilerplate.
The skills that matter shift accordingly. Decisiveness matters a lot. In the planning conversation, Claude surfaces questions you haven't considered. "Should the event cards link to detail pages or expand inline?" "Do past events sort reverse-chronologically or get hidden?" "What happens when a search returns zero results?" You need to answer these quickly and clearly, because the answer becomes part of the ticket, which becomes the implementation. Waffling in planning produces vague tickets, which produce confused implementations, which produce heavy review cycles.
Clear requirements writing matters. The difference between "make it responsive" and "test at 375px, 768px, and 1200px; navigation collapses to hamburger below 768px; touch targets minimum 44px; event cards stack to single column on mobile" is the difference between a one-pass implementation and three rounds of revision.
Diff reading matters. You need to understand what every line of code does, even though you didn't write it. When I reviewed the EventCard component, I needed to know whether `aria-labelledby` on both the `<article>` and the inner `<a>` was intentional and valid (it was), whether the three-line clamp used `-webkit-line-clamp` with proper fallbacks (it did), and whether the hover transform had a reduced-motion guard (it didn't, which the review caught). You can't approve what you can't evaluate.
And knowing when to push back matters. Claude Code occasionally proposes solutions that are technically correct but architecturally wrong for the project. When it suggested a separate component file for 30 lines of about-section content, I said no, inline it. When it generated a comprehensive test suite for a simple date formatting function, I kept the boundary tests and cut the redundant ones. When it wanted to add a new design token for a single use case, I pointed it at the existing token. These are small decisions, but they compound across a project.
I'll be direct about the tension, though. Some developers love the part of the job this workflow automates. The satisfaction of solving an algorithmic puzzle, the flow state of typing code, the craft of a well-structured function. This workflow moves your value away from that and toward management, architecture, and review. If you got into this field because you love writing code, the shift might feel like a loss. If you got into this field because you love building things, it might feel like a superpower.
## Cost and Practicality
The entire toolchain costs between $40 and $240 per month. Claude Pro at $20 gives you Claude Desktop for planning, Claude Code for building, and the model access for both. A code review tool runs $0 to $40 depending on what you choose. Claude Pro Max at $200 gives higher rate limits and is what I'd recommend for real client work, but Pro is fine for smaller projects and training exercises.
No API costs. Everything runs through the Claude subscription. The training project ran on Pro Max and never hit a rate limit.
Compare that to the traditional alternative. This project was scoped at roughly 50 story points across 21 tickets. In a conventional workflow, that's probably 40 to 60 developer-hours depending on experience and the framework. At shop rates, that's several thousand dollars of labor. The AI workflow compressed it to about 4 hours of my active time (2 hours planning, 2 hours 10 minutes supervising) plus 12 hours of wall-clock time. The economics are hard to argue with.
The caveat is that this requires architectural skill. You can't skip the planning phase and get these results. A junior developer who can write great code but hasn't internalized system design patterns will struggle with the "architect" role this workflow demands, because the AI handles implementation but the human still owns every judgment call. If you don't have the judgment yet, the AI just builds the wrong thing faster.
## What I'd Do Differently
I have a short list, and it's more useful than the success stories.
**Update CLAUDE.md faster.** The `aria-live` duplication recurred three times before I added the convention rule. Each recurrence was caught by reviewers, but it was wasted effort. Any time a review catches a pattern issue, that pattern should go into CLAUDE.md the same day. One line of persistent instruction prevents multiple rounds of review feedback.
**Batch tightly-coupled tickets.** The landing page had four tickets: Hero, Upcoming Events, About/CTA, and Assembly. The assembly ticket resolved itself naturally as the other three merged in sequence, because they all built on the same page file. Four separate PRs for one feature page created unnecessary review overhead. Next time I'd combine those into two tickets at most.
**Treat documentation with the same rigor as features.** The README ticket had loose acceptance criteria and became the most review-intensive PR of the project. It also spawned a CLI script that had three bugs caught in review (accepted impossible dates like February 30, allowed unsanitized input in slug overrides, and produced invalid YAML from double-quoted user input). I treated it as a wind-down task. It deserved a proper spec.
**Establish CSS conventions earlier.** The `width: 100vw` scrollbar issue appeared in two different PRs with two different fixes. After the first occurrence I should have documented the preferred pattern (`calc(50% - 50vw)` negative margins) so Claude Code would use it consistently. Instead I got two solutions to the same problem, one of which was worse than the other.
**Create a living conventions document from day one.** Beyond CLAUDE.md, a project-level conventions reference covering accessibility patterns, CSS approaches, and component structure would have prevented inconsistencies that accumulated across PRs. Each individual implementation was defensible in isolation. The inconsistency across the project created unnecessary review churn.
## Getting Started
If you want to try this workflow, here's what you actually need to do.
Get a Claude Pro subscription. Install Claude Code (`npm install -g @anthropic-ai/claude-code`). Set up at least one automated code review tool on your GitHub repo. The free Claude GitHub integration works fine to start.
Create a Claude Project and load it with context: your project requirements, technical constraints, design references, anything you'd hand to a new developer joining the team. Have a planning conversation. Let Claude ask questions. Make decisions. Let it structure your thinking into documentation and tickets.
Write tickets with detailed acceptance criteria. Specific fields, expected behaviors, responsive breakpoints, accessibility requirements. If the ticket is vague, the code will be too.
Turn off auto-commit, auto-push, and auto-merge. Read every diff. You need to understand what you're shipping.
Build ticket by ticket. Let Claude Code work. Check in when it's ready for approval. Feed review comments back for fixes. Merge when you're satisfied.
Run a retro after each sprint. Let Claude analyze what happened. Read the analysis. Apply the learnings. Update your project instructions with any conventions the reviews surfaced.
The acceleration curve is real. Your first epic will feel slow and unfamiliar. By the third or fourth, you'll be reviewing diffs while making dinner.
---
I made noodles while the AI built my project. I also spent almost two hours before that making sure it would build the right one. If there's a takeaway, it's that the ratio between those two activities matters more than either number on its own. The workflow redirects your time toward architecture, quality judgment, and creative direction. The code follows from that.

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1020 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 KiB

View File

@@ -0,0 +1,82 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 880 420">
<defs>
<style>
@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&amp;display=swap');
.phase-box { fill: #242220; stroke: #3d3835; stroke-width: 1.5; rx: 8; }
.phase-box-active { fill: #2a2422; stroke: #c45c3c; stroke-width: 1.5; rx: 8; }
.phase-label { font-family: 'DM Sans', sans-serif; font-weight: 700; font-size: 18px; fill: #e8e0d4; letter-spacing: 0.08em; }
.role-you { font-family: 'DM Sans', sans-serif; font-weight: 500; font-size: 12px; fill: #c45c3c; }
.role-ai { font-family: 'DM Sans', sans-serif; font-weight: 400; font-size: 12px; fill: #8a8078; }
.role-label { font-family: 'DM Sans', sans-serif; font-weight: 500; font-size: 10px; fill: #5a5550; letter-spacing: 0.06em; }
.arrow { fill: none; stroke: #c45c3c; stroke-width: 2; }
.arrow-head { fill: #c45c3c; }
.loop-arrow { fill: none; stroke: #c45c3c; stroke-width: 1.5; stroke-dasharray: 6 4; }
.loop-label { font-family: 'DM Sans', sans-serif; font-weight: 400; font-size: 11px; fill: #5a5550; font-style: italic; }
</style>
</defs>
<!-- Background -->
<rect width="880" height="420" fill="#1a1916" rx="12"/>
<!-- Phase boxes - horizontal layout with generous spacing -->
<!-- PLAN -->
<rect class="phase-box" x="40" y="120" width="170" height="160"/>
<text class="phase-label" x="125" y="168" text-anchor="middle">PLAN</text>
<line x1="70" y1="182" x2="180" y2="182" stroke="#3d3835" stroke-width="1"/>
<text class="role-label" x="125" y="206" text-anchor="middle">YOU</text>
<text class="role-you" x="125" y="222" text-anchor="middle">Architect</text>
<text class="role-label" x="125" y="246" text-anchor="middle">AI</text>
<text class="role-ai" x="125" y="262" text-anchor="middle">Stenographer</text>
<!-- ASSIGN -->
<rect class="phase-box" x="260" y="120" width="170" height="160"/>
<text class="phase-label" x="345" y="168" text-anchor="middle">ASSIGN</text>
<line x1="290" y1="182" x2="400" y2="182" stroke="#3d3835" stroke-width="1"/>
<text class="role-label" x="345" y="206" text-anchor="middle">YOU</text>
<text class="role-you" x="345" y="222" text-anchor="middle">Organizer</text>
<text class="role-label" x="345" y="246" text-anchor="middle">AI</text>
<text class="role-ai" x="345" y="262" text-anchor="middle"></text>
<!-- BUILD -->
<rect class="phase-box" x="480" y="120" width="170" height="160"/>
<text class="phase-label" x="565" y="168" text-anchor="middle">BUILD</text>
<line x1="510" y1="182" x2="620" y2="182" stroke="#3d3835" stroke-width="1"/>
<text class="role-label" x="565" y="206" text-anchor="middle">YOU</text>
<text class="role-you" x="565" y="222" text-anchor="middle">Supervisor</text>
<text class="role-label" x="565" y="246" text-anchor="middle">AI</text>
<text class="role-ai" x="565" y="262" text-anchor="middle">Developer</text>
<!-- RETRO -->
<rect class="phase-box" x="700" y="120" width="170" height="160"/>
<text class="phase-label" x="785" y="168" text-anchor="middle">RETRO</text>
<line x1="730" y1="182" x2="840" y2="182" stroke="#3d3835" stroke-width="1"/>
<text class="role-label" x="785" y="206" text-anchor="middle">YOU</text>
<text class="role-you" x="785" y="222" text-anchor="middle">Reader</text>
<text class="role-label" x="785" y="246" text-anchor="middle">AI</text>
<text class="role-ai" x="785" y="262" text-anchor="middle">Analyst</text>
<!-- Forward arrows between boxes -->
<!-- PLAN → ASSIGN -->
<line class="arrow" x1="210" y1="200" x2="254" y2="200"/>
<polygon class="arrow-head" points="254,195 264,200 254,205"/>
<!-- ASSIGN → BUILD -->
<line class="arrow" x1="430" y1="200" x2="474" y2="200"/>
<polygon class="arrow-head" points="474,195 484,200 474,205"/>
<!-- BUILD → RETRO -->
<line class="arrow" x1="650" y1="200" x2="694" y2="200"/>
<polygon class="arrow-head" points="694,195 704,200 694,205"/>
<!-- Loop arrow: RETRO back to PLAN (goes under) -->
<path class="loop-arrow" d="M 785,280 L 785,340 Q 785,360 765,360 L 145,360 Q 125,360 125,340 L 125,280"/>
<polygon class="arrow-head" points="120,284 125,272 130,284" opacity="0.6"/>
<!-- Loop label -->
<text class="loop-label" x="455" y="375" text-anchor="middle">repeat</text>
<!-- Top label -->
<text font-family="DM Sans, sans-serif" font-weight="400" font-size="13" fill="#5a5550" letter-spacing="0.12em" x="440" y="80" text-anchor="middle">THE CORE LOOP</text>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,55 @@
---
title: "Weeknotes: Feb 1420, 2026"
date: 2026-02-21T10:00:00-05:00
draft: false
description: Backend work delivered, a training program built, biang biang noodles made from scratch, and goodbye conversations with a team I'll miss.
tags:
- weeknotes
- cooking
- work
lastmod: 2026-03-02T03:01:46.662Z
---
_Carnitas on the stove, noodles on the counter, goodbyes in the virtual conference room._
## Shipped
I completed the back end work on a university's community engagement portal this week, wrapping up the bulk of the development effort. The client is, and I quote, "over the moon" with the results. I want to get all the way to the finish line before the end of the month, and this puts me firmly on track.
After showing my team how I built that portal using a structured workflow around AI-powered development tools, they wanted to try it themselves. So I spent a day building a soup-to-nuts training program for them to follow — a mock statement of work from a fictional client, documentation on my process, and enough guidance to produce a complete application without producing slop. It was genuinely fun to create. I'm looking forward to running through it myself as a participant to see where the rough edges are.
## Read
I finished [*Automatic Noodle*](https://books.kestrelsnest.social/book/50965/s/automatic-noodle) by Annalee Newitz, and I loved it. Fast, fun, hopeful, and cozy despite being set in a ruined San Francisco. A [five-star mini-review](https://books.kestrelsnest.social/user/eric/comment/10674#anchor-10674) is up on my BookWyrm site. I haven't written a full review yet, but the short version is that this book is going to stick with me.
I've also been reading many, many onboarding materials from my new employer — the first trickle of what will soon become a flood.
## Played
Dry spell. Con season is over and the groundwork for switching jobs is nearly done, so I think time will start opening up again soon. I'm eager to get back to playing Gloomhaven with my group and sitting down with the Xbox to explore more of Outer Worlds 2.
My partner and I did finally finish watching the first season of *Pluribus*. What a wonderfully weird show. Vince Gilligan doing something completely different, Rhea Seehorn carrying the whole thing, and a premise that just keeps unfolding in directions I didn't expect. Looking forward to seeing where it goes.
## Cooked
Two kitchen adventures this week, both involving pork and obsession.
When the pandemic hit and restaurants closed down, food prices in general shot up — but here in Georgia, where pulled pork BBQ is everywhere, the pork market cratered. Stores were regularly offering whole butts for 49 cents a pound or less. I found a recipe for [instant pot carnitas](https://www.gimmesomeoven.com/instant-pot-crispy-carnitas/) that were spectacularly delicious and adaptable to whatever we could find at the store any given week besides the pork. We made it constantly. It was exceptionally cheap, could be made in big batches, stored well, and worked in any number of ways — our go-to was piled on top of baked potatoes. This week pork butts were on sale for $1.50/lb, a far cry from the COVID lows but still really cheap for nowadays, so I cooked up a big batch of carnitas on Saturday.
And then there are the noodles. Somewhere around the halfway point of *Automatic Noodle* I became obsessed with the idea of biang biang noodles — the wide, hand-pulled, belt-like noodles from Xi'an. I'd never seen them in person, and there's nowhere in Athens to get them. After consulting a local Facebook food group I was pointed to a few places near Atlanta in Duluth, but I couldn't get there soon enough to satisfy the craving. So I did the totally normal thing and watched a few YouTube videos and decided to make them from scratch on Sunday. The process is an all-day affair — short bits of hand kneading followed by many repeated rests — but apart from the time involved they were remarkably low effort. And they came out spectacularly. I'll still find a time to try them in Duluth, but biang biang noodles have already entered regular rotation in my kitchen.
## Noticed
I went to see a silly comedy at the community theater I've been involved with — sometimes extremely heavily, though in the last decade or so not as much — since I moved to Athens in 1997. Several friends of mine were in the show, and it was fun to watch them be goofy in a production about mad scientists in love, along with a few re-animated monsters who were also in love.
## Thinking About
The realities of leaving what was in many ways a dream job for the unknown challenges of a new position. The professional challenges I'm actually looking forward to. The insurance coordination I am not. Pretty much everyone in the household is undergoing various treatment plans, and having to switch providers mid-stream is a major undertaking. I'm excited about the work ahead, but the prospect of cleaning up insurance messes terrifies me in a way that no codebase ever has.
## What's Next
The leadership team has known about my departure for a couple weeks now, but this week I had the difficult conversations with my immediate team to let them know I was leaving. These are extremely talented developers, every one of them. They've made my job easier in so many ways, and I'll be sad to not work alongside them anymore. It's been an honor to lead them.
## Vibe Check
After both telling my team and filling out tax forms, my impending job change is very, very real.

View File

@@ -0,0 +1,67 @@
---
title: "Weeknotes: Feb 2127, 2026"
date: 2026-02-28T09:00:00-04:00
draft: false
tags:
- weeknotes
- work
- cooking
- family
description: Last day at Infinity Interactive after ten years, a training program for the team, bones from an expo, biang biang noodles, and the announcement of what comes next.
---
*One door closes. Another opens before I've had time to take off my coat.*
## Shipped
You could say I shipped this stage of my career. Friday was my last day at Infinity Interactive after more than ten years.
I squeezed in one final client task just under the wire and then spent the rest of the week building out a hands-on training program for my team on effective use of Claude Code for building web applications you could actually be proud of. The training walks developers through a structured workflow — plan, assign, build, retro — with a mock client project to follow from start to finish. I wrote about the methodology in [my last post on the company blog](https://iinteractive.com/resources/blog/plan-assign-build-retro-a-replicable-workflow-for-ai-augmented-development), and the [demo application](https://iinteractive.github.io/community-board-eric/) I built using the program is up on GitHub Pages.
A strange feeling, writing a goodbye blog post for a company you still believe in. But I wanted to leave behind something useful, not just a clean desk.
## Read
The first of what I'm sure will be a flood of onboarding documents. I'm told there are many more where these came from.
## Played
On Saturday, Juniper and I drove into Atlanta for the traveling Oddities & Curiosities Expo — three whole floors of convention center space filled with booths of artists selling all sorts of whimsical or macabre (and often both at once) items. Juniper has been getting into art made from bones, and she was thrilled to come home with a box full of them sourced from a farmer who had her own booth there. I have questions about the interior of my child's bedroom that I have decided I do not need answered.
## Cooked
Made more biang biang noodles. They're so fun, and easy, and delicious. I might have a problem. After the Oddities expo, Juniper and I walked a few blocks over to meet my eldest, Vivian, at their apartment, and then we all walked to [Trader Vic's](https://www.tradervicsatl.com/) for tiki drinks and Polynesian-ish food. Both delicious and fun.
## Thinking About
Change. Voluntarily leaving an employer — especially a good one — seems like a foolish choice in this climate. I'm not someone who jumps from job to job. I've held only two positions between July 1997 and February 2026. But as great as Infinity Interactive was for me, I couldn't pass up what Natera was offering.
Here's the announcement I posted publicly this week:
---
After an incredible chapter at Infinity Interactive, I'm excited to share that I'm joining Natera as a Staff Software Engineer.
Leaving Infinity was one of the hardest professional decisions I've ever made. In many ways it was a perfect job. I came in as a developer and grew into a leadership role I never anticipated: managing a talented team, shaping technical strategy across multiple client engagements, and learning more about myself as both an engineer and a leader than I thought I had left to learn. The company gave me room to stretch, and the people gave me reasons to stay every single day.
I'm proud of what we built together. If you're curious about some of the thinking I got to do there, my [blog posts live here](https://iinteractive.com/resources/blog/author/eric-wagoner).
So why leave? Because this one is personal.
Natera is at the forefront of cell-free DNA testing, and their work in oncology is helping detect and fight cancers earlier and more effectively. Cancer took my mom. The chance to put my skills toward that fight, to write code that plays even a small part in making sure fewer families go through what mine did, isn't something I could turn down. The expectations are high, the work will be demanding, and I wouldn't have it any other way. Call it purpose, call it mission. I'm calling it revenge.
To everyone at Infinity — Jeremy, Tommy, Rob, and the whole team I hate leaving behind — thank you for years that genuinely changed the trajectory of my career. I'm not disappearing, and I'm not done being grateful.
On to what's next.
---
## What's Next
Honestly? I don't know what the next few weeks or months will look like. The interview process was quick, and I knew enough about the company and the general kind of work to feel good about the fit without getting into the specifics of what exactly I'd be doing day-to-day. They seemed sold on me before I even started the process, and the same was true from my side. I doubt there will be a slow ramp-up, but the work doesn't scare me.
What does scare me is having to switch insurance providers. Everyone in the household is in the middle of various treatment plans that have us seeing an unusually high number of providers right now — nothing serious, just coincidentally timed — and I am not looking forward to cleaning up whatever messes get caused by changing insurance mid-stream.
## Vibe Check
I can't afford to take time off between gigs, so I'm immediately walking out of one door and into another. The coat stays on.

View File

@@ -0,0 +1,52 @@
---
title: "Weeknotes: Feb 28March 6, 2026"
date: 2026-03-07T09:00:00-04:00
draft: false
tags:
- weeknotes
- work
- cooking
description: Week one at Natera, surviving the firehose, Gloomhaven returns, Dover sole, Girl Scout cookies, and spring allergies.
---
*This week has reminded me of my days as a sprinter, on a 4x100 relay. Everyone is running full speed and I need to use a very short runway to match them and seamlessly grab that baton and go.*
## Shipped
I survived week one at Natera. The firehose metaphor has never been more apt.
The company provided a locked-down laptop that requires VPN access to do anything at all. I've never worked this way before, and it will take some getting used to. The lack of control is annoying, but it comes with a corresponding lack of responsibility, which is a trade I can live with. The friction also means I'm far less likely to casually work after hours, and it's flat-out impossible to do anything from my phone or personal machine. There are worse guardrails to have imposed on you.
I did take the time to set up my shell exactly how I like it, with all the tooling I prefer, and created a dotfiles repo that automates everything. If I ever need to switch laptops for any reason, the whole environment comes with me.
## Read
About a gazillion onboarding documents, benefits applications, HR policies, and roughly a dozen code repositories with their associated documentation spread across wiki pages, Jira tickets, and Google documents. I think the last time I read this much in this short a time was finals week my last semester of college.
## Played
After a two-month break due to scheduling conflicts, my Gloomhaven group got back together. We're approaching the endgame now, maybe three quarters of our way through the story including side quests, and every scenario seems to come down to the wire. The balance is exquisite. I look forward to every session we have together.
## Cooked
The Publix a few houses up the road from me has an unusually good fish counter, and this week they had fresh Dover sole filets. I'd never cooked those before, so I grabbed a few and pan-seared them with a lemon caper sauce. Fantastic.
Some friends of mine have a young daughter in her first year of Girl Scouts, so naturally I had to buy a year's supply of cookies. We met up at the neighborhood brewery and I spent the afternoon catching up with them, munching on Thin Mints, and drinking a stout named after Henrietta Lacks. If you don't know the name, she's the woman whose cells became the first immortal human cell line, contributing to enormous advancements in health and cancer research, completely unknown to her or her family during her lifetime. Given my new employer's mission, the coincidence landed differently than it might have a month ago.
## Noticed
Spring has sprung, and my seasonal allergies have kicked in. Mine hit very early in the season, caused somewhat ironically by juniper pollen, and they're mercifully short.
I've worked alongside several of my new co-workers before at previous companies. Some are longtime friends. I helped build from the ground up software systems very similar to what they are building here. So much is familiar, and yet so much is new. The familiarity helps me settle in. The differences keep me on my toes and remind me I cannot be complacent about anything.
## Thinking About
How to balance two instincts that are both firing at once. My tendency in every new environment is to take things in, observe, listen. But my other tendency, the one that always follows close behind, is to naturally rise into leadership roles. I want to intentionally accelerate that here. Partly because a large organization is easy to get lost in, and partly because there seems to be a vacancy in the org that is somehow exactly Eric-shaped.
## What's Next
Grabbing the bull by the horns, as they say. I want the people around me to simultaneously feel like I've always been here and wonder how they ever managed without me.
## Vibe Check
Baton in hand. Running.

View File

@@ -2,7 +2,7 @@
title: Eric in the Past title: Eric in the Past
--- ---
This page is all about what I have done. As things roll off the [now page](/now), they'll show up here. It was last updated on December 25, 2025. This page is all about what I have done. As things roll off the [now page](/now), they'll show up here. It was last updated on February 28, 2026.
## What I finished building ## What I finished building
@@ -37,10 +37,15 @@ Recent reads (see my full [BookWyrm shelf](https://books.kestrelsnest.social/use
- All episodes of [Taskmaster][taskmaster] [on YouTube][taskmaster youtube]. Nothing has lifted my spirits quite like this show. - All episodes of [Taskmaster][taskmaster] [on YouTube][taskmaster youtube]. Nothing has lifted my spirits quite like this show.
## What I finished working on
- **Infinity Interactive** (20132026) — More than ten years, starting as a developer and growing into VP of Technology. Shaped technical strategy across dozens of client engagements, built and led a talented team, and learned more about myself as both an engineer and a leader than I thought I had left to learn. Left to join Natera.
## Events attended ## Events attended
- **Wild Rumpus 2025** — Athens' big outdoor Halloween parade festival - **Wild Rumpus 2025** — Athens' big outdoor Halloween parade festival
- **Inuhele** and **CONpossible** — annual Atlanta conventions where I'm on staff - **Inuhele 2026** (January 2325) — Atlanta's annual Tiki Weekend. On staff.
- **CONpossible 2026** (February 68) — Costuming Track Director. Theme: "Through the Faerie Ring."
- **The B-52's Farewell Concert** (January 2023) — in Athens, where it all started - **The B-52's Farewell Concert** (January 2023) — in Athens, where it all started
[taskmaster]: https://taskmaster.fandom.com/wiki/Taskmaster_Wiki [taskmaster]: https://taskmaster.fandom.com/wiki/Taskmaster_Wiki

View File

@@ -2,16 +2,14 @@
title: Eric Yet To Come title: Eric Yet To Come
--- ---
This page is all about what I am planning on doing in the not too distant future. As I get to them, they'll leave here and appear on my [now page](/now). It was last updated on December 25, 2025. This page is all about what I am planning on doing in the not too distant future. As I get to them, they'll leave here and appear on my [now page](/now). It was last updated on February 28, 2026.
## Where I will be ## Where I will be
- **[Inuhele](https://inuhele.com)** (January 2325, 2026) — Atlanta's annual Tiki Weekend at the Omni Atlanta Hotel at Centennial Park. I'm on staff and it's always a blast. Nothing on the calendar yet.
- **[CONpossible](https://www.conpossible.org)** (February 68, 2026) — I'm the Costuming Track Director for this annual convention at the Sonesta Gwinnett Place Atlanta. This year's theme is "Through the Faerie Ring"—magic mixed with technology should be a lot of fun.
## What I will be building ## What I will be building
- **Loops for YunoHost** — I'm planning on packaging [Loops](https://loops.video), an alternative TikTok-style video platform, for the YunoHost self-hosting ecosystem. Another piece in the Kestrel's Nest federation.
- **LocallyGrown.net features** — Now that the massive Rails-to-SvelteKit migration is complete, the real work is ongoing: new features, better tools for market managers, and growing the platform that serves 70+ farmers markets. - **LocallyGrown.net features** — Now that the massive Rails-to-SvelteKit migration is complete, the real work is ongoing: new features, better tools for market managers, and growing the platform that serves 70+ farmers markets.
- **More tiny apps** — The pantry inventory app reminded me how satisfying it is to build small, focused tools that solve specific household problems. More of those are coming. - **More tiny apps** — The pantry inventory app reminded me how satisfying it is to build small, focused tools that solve specific household problems. More of those are coming.
@@ -28,11 +26,10 @@ This page is all about what I am planning on doing in the not too distant future
## What I will be exploring ## What I will be exploring
- **Natera onboarding** — A new codebase, a new team, a new domain. The ramp-up will be steep and I'm here for it.
- **n8n automations** — The standup prep workflow opened my eyes to what's possible. I keep noticing small friction points that could be automated away. - **n8n automations** — The standup prep workflow opened my eyes to what's possible. I keep noticing small friction points that could be automated away.
- **Claude Code workflows** — Finding new ways to collaborate with AI on rapid prototyping. The two-hour pantry app was an example of what's possible when you're sculpting code instead of typing it. - **Claude Code workflows** — Finding new ways to collaborate with AI on rapid prototyping. The two-hour pantry app was an example of what's possible when you're sculpting code instead of typing it.
## Where my head is going ## Where my head is going
The LocallyGrown marathon consumed everything for six months. Now I'm slowly emerging, rediscovering equilibrium, and reconnecting with the creative projects that feed my soul. The self-hosting work continues to expand Kestrel's Nest. The making and creating is resuming. The writing is happening again. New job, same me. The coat stays on.
Forward motion, one project at a time.