Compare commits

..

1 Commits

Author SHA1 Message Date
Eric Wagoner
3d8a18f7f7 Add weeknote for February 7–13, 2026
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 19:41:51 -05:00
23 changed files with 48 additions and 608 deletions

View File

@@ -0,0 +1,23 @@
{
"permissions": {
"allow": [
"Bash(hugo:*)",
"Bash(find:*)",
"Bash(cat:*)",
"Read(//Users/ericwagoner/Downloads/**)",
"Bash(mysql:*)",
"Read(//Users/ericwagoner/Sites/ericwagoner.com/**)",
"Bash(curl:*)",
"Bash(ssh:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(./deploy)",
"Bash(mkdir:*)",
"Bash(chmod:*)",
"Bash(ls:*)",
"Bash(pkill:*)"
],
"deny": [],
"ask": []
}
}

3
.gitignore vendored
View File

@@ -17,6 +17,3 @@ hugo.linux
/.hugo_build.lock /.hugo_build.lock
# End of https://www.toptal.com/developers/gitignore/api/hugo # End of https://www.toptal.com/developers/gitignore/api/hugo
# Local Claude Code settings
.claude/settings.local.json

View File

@@ -12,8 +12,9 @@ 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 March 29, 2026, and will be edited as things change. 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.
## Where I am now ## Where I am now
@@ -27,25 +28,25 @@ 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 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. 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.
[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.
## What I am reading now ## What I am reading now
Nearly finished with *Service Model* by Adrian Tchaikovsky — staying up too late every night because I can't put it down. Currently a few chapters into *Service Model* by Adrian Tchaikovsky.
## What I am playing now ## What I am playing now
- **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** — 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. - **Gloomhaven** — Finally playing with a regular group after the game sat on my shelf for years.
## What else? ## What else?
### Writing Again ### Writing Again
After months of silence, I'm writing regularly again. The words are flowing. 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.
### Creative Projects ### Creative Projects
@@ -55,11 +56,12 @@ After months of silence, I'm writing regularly again. The words are flowing.
### Upcoming Events ### Upcoming Events
- **Natera lab on-sites** — Started a series of visits to labs in San Carlos and Austin to meet the teams and see the environments the software needs to work in. - **[Inuhele](https://inuhele.com)** (January 2325, 2026) — Atlanta's annual Tiki Weekend. I'm on staff.
- **[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
Two months into Natera. The learning curve is still steep but the work is clicking — I just shipped observability dashboards for a system going live for testing next week, and I'm about to fly to San Carlos to meet the team and see the lab in person. The creative projects that feed my soul are still in motion. Writing is happening. Gloomhaven is happening. New game stores are being discovered. Life is good. 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.
--- ---

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 KiB

View File

@@ -1,170 +0,0 @@
---
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.

Before

Width:  |  Height:  |  Size: 523 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1020 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 KiB

View File

@@ -1,82 +0,0 @@
<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>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -4,10 +4,11 @@ date: 2026-02-06T12:00:00-05:00
draft: false draft: false
description: A joyful stress — managing everything necessary, letting go of the things I wanted to do but couldn't, and looking forward to being around people I love who I only see once a year. description: A joyful stress — managing everything necessary, letting go of the things I wanted to do but couldn't, and looking forward to being around people I love who I only see once a year.
tags: tags:
- weeknote
- weeknotes - weeknotes
- CONpossible - CONpossible
- conventions - conventions
lastmod: 2026-03-24T15:14:34.275Z lastmod: 2026-02-17T04:45:40.235Z
--- ---
*A joyful stress — managing everything necessary, letting go of the things I wanted to do but couldn't, and looking forward to being around people I love who I only see once a year.* *A joyful stress — managing everything necessary, letting go of the things I wanted to do but couldn't, and looking forward to being around people I love who I only see once a year.*

View File

@@ -1,55 +0,0 @@
---
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

@@ -1,67 +0,0 @@
---
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

@@ -1,52 +0,0 @@
---
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

@@ -1,54 +0,0 @@
---
title: "Weeknotes: March 713, 2026"
date: 2026-03-14T09:00:00-04:00
draft: false
tags:
- weeknotes
- work
- cooking
description: Week two at Natera, jumping into a launch sprint, Service Model robots, chasing apple fritters, OysterFest, Costco initiation, and upcoming travel Tetris.
---
*Settling in as well as I can in my second week, and being proactive in setting my route forward.*
## Shipped
The original plan was reasonable enough: explore the code, ask questions, meet the immediate team one-on-one, expand outward to stakeholders, and then start contributing. Instead, at the end of last week there was a pivot. I was put on the team about to launch a new internal application across several labs in two states, and they were scrambling to meet the deadline. They're the first team to launch an application on a new platform built entirely in-house, and there's a lot riding on its success.
So the previous plan went out the window. I rolled up my sleeves and jumped in to start smashing bugs, adding a few late-breaking features, and smoothing out the infrastructure. My git activity heat map is already glowing white-hot. I think I successfully grabbed that baton and took off at full speed.
## Read
Code, Jira tickets, wiki pages, HR policies, and more code. It will be a while before my pace *reading* that stuff slows down, and even then it will just be replaced with *writing* it all.
I have made it a point to dive back into *Service Model* by Adrian Tchaikovsky. I'd been slow getting into it, not because of anything wrong with the book itself but maybe just my own wariness about how the story was starting to play out. I finally got past that and now I'm having a hard time putting it down. This is the second book by Tchaikovsky I've read that features an all-too-relatable mentally ill robot, and I'm starting to wonder how he knows the inside of my head so well.
## Played
We had plans Saturday to go to the Firefly Lantern Festival, an event at a city park along the river downtown where people make and wear light-up costumes and puppets. Unfortunately, it got rained out.
That morning, though, it was beautiful. We drove to a neighboring town where an old-fashioned doughnut shop sits on the town square. They were out of my favorite item, apple fritters as good as my gold standard from an even older bakery in Union, Missouri that my buddy Scott and I would stop at before our college classes at the county community college our senior year of high school. I've been chasing fritters that good for thirty-five years and finally found them in Jefferson, Georgia. Have to get there earlier than we did, apparently.
We took our coffee and doughnuts to a nearby cemetery that goes back to at least the early 1800s, full of giant gothic memorials with names of families still present in the area. I love looking at the stonework, especially when it is covered with a couple centuries of moss and lichen.
## Cooked
We swung by a local brewery for OysterFest, mostly an excuse for my favorite local restaurant, Seabear, to bring out their mobile oyster truck. I had a dozen, raw on the half shell, while my bemused daughter watched. Also had a pint or two of a lovely oyster-themed stout they made for the occasion, which I do not think contained any actual oyster. Went quite well with them, though.
## Noticed
While looking through the company savings benefits at the new job, I noticed a discount for Costco. One opened up in Athens a year or so ago, but I never bothered to get a membership. With the discount, though, it was a no-brainer, so Sunday Juniper and I picked up my card and she got to experience her first Costco and, of course, the obligatory $1.50 hot dog. I am hoping I can wean myself off the bulk subscriptions I have set up through Amazon in favor of a more responsible retailer.
## Thinking About
Upcoming travel. As part of the software launch, I will be traveling on-site to San Carlos, California and Austin, Texas. Most of a week in San Carlos for testing, then two weeks later the same in Austin, then two weeks later back to San Carlos for the real launch, and then two weeks later the final deployment in Austin. I enjoy travel, even if the act of traveling is pretty terrible. And it has been ages since I had done anything at this frequency. It required changing around custody schedules, working around some important events, and a fair bit of calendar Tetris, but I think it will all work out.
I did notice that my passport expires in four days. Not essential for domestic travel, but I am glad I caught it when I did because online renewal was painless.
## What's Next
My eldest graduates from college in a month, with a shiny new degree in computer game design. Super proud of Vivian and all the work they have put in, the challenges they have overcome, and the accomplishments they have achieved. Almost to the finish line.
## Vibe Check
Baton grabbed. Sprinting.

View File

@@ -1,39 +0,0 @@
---
title: "Weeknotes: March 1420, 2026"
date: 2026-03-21T10:00:00-04:00
draft: false
tags:
- weeknotes
- work
- music
- games
- cooking
description: Week three at Natera, Camper Van Beethoven at the 40 Watt, Gloomhaven retirements, a brewery renn faire, avocado ice cream three times, and gearing up for on-site travel.
lastmod: 2026-03-29T02:03:52.380Z
---
*Three weeks at Natera under my belt, and it totally feels like I belong.*
## Shipped
Another full-speed week. I've moved past the bug fixes and last-minute features from the previous two weeks and started expanding into the larger ecosystem of services surrounding our application. Getting comfortable with the whole system, not just the piece I've been focused on. Three weeks in now, and I'm eager to meet everyone in person — the first on-site test run in San Carlos is in two weeks.
## Played
The weekend started at the 40 Watt for a Camper Van Beethoven show. One of the band's founders, David Lowery, went on to found Cracker and lives here in Athens, where he teaches at UGA as his day job. A friend and former co-worker, Bryan Howard, plays bass for them, and a chance encounter while grocery shopping led to him putting me on the guest list. Their album *Key Lime Pie* came out my freshman year of college and became one of those deeply affecting records that lodged itself into my identity. Seeing them live, with my friend playing bass for half the show, was sublime. I cried a little. I'll admit it.
Another Gloomhaven session, and we won two more scenarios in the most clutch way possible. Two of our four players retired their mercenaries, so next time we play half the party will be brand new. We started the session with our third player bringing in a new mercenary to replace one she retired last session, which means I'm now the senior party member. I've still got a while before retirement, though, and the next session might be delayed by my upcoming travel.
The local brewery hosted a one-day renn faire, and Carol and I went. I enjoy the brewery, but their events are hit and miss. This one turned out to be fantastic — more artisans set up than I've seen at any of their previous events. We dressed up in low-effort garb (my expectations were low) and ended up spending a good chunk of the afternoon drinking barleywine and browsing wares.
## Cooked
There is a boba place in the shopping center on our street, and our go-to item is their coffee, chocolate, and avocado smoothie. It could easily be a meal replacement, since each one contains an entire fresh avocado. For Christmas I got the house an ice cream machine with a built-in freezer — the kind where you can make ice cream any time without having to pre-freeze the container — and this week Carol had the idea of making avocado ice cream. I found a recipe that uses three whole avocados, Greek yogurt, dark chocolate, and heavy cream. We made it three times this week. It is that good.
## Thinking About
The realities of travel during the TSA shutdown the current administration has orchestrated. I'll be flying to San Carlos in two weeks, and the logistics of navigating a deliberately hobbled system add an unwelcome layer of stress to what should be straightforward.
## What's Next
Next week I transition from bug fixes and feature tweaks to preparing observability tooling for the production deployment. A big reason for us going on site is to provide quick in-person support if things go sideways, even in small ways. Being able to monitor application logs, server metrics, and performance data will be essential in helping us help them.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 MiB

View File

@@ -1,63 +0,0 @@
---
title: "Weeknotes: March 2127, 2026"
date: 2026-03-28T09:00:00-04:00
draft: false
description: "A flurry of last-minute code changes and travel preparations, mixed with meaningful local outings, before flying off into the unknown next week."
tags:
- weeknotes
- work
- music
- games
- cooking
- art
---
*A flurry of last-minute code changes and travel preparations, mixed with meaningful local outings, before flying off into the unknown next week.*
## Shipped
Code freeze hit at end of day Monday, which meant a morning of squeezing in quality-of-life features right up to the wire. Once the gate came down I shifted focus entirely to building out performance and logging dashboards — the kind of observability tooling that will let us actually see what's happening when we go live for testing next week. All of it was new tooling to me, which meant more of the steep learning curve I've been living on since I started, but by the end of the week I was genuinely happy with what I'd pulled together. I'm as ready as I can be for the trip to San Carlos. I'm going in with very little idea of what to expect on the ground, and I've made my peace with that.
## Read
*Service Model* keeps pulling me in. I've carved out a few chapters every night before bed even when that means staying up until 2am, because I can't not. At my current pace I'll finish it on the plane to San Francisco, which feels appropriate.
## Played
Saturday Juniper and I went to the grand opening of [The Painted Heretic](https://www.facebook.com/ThePaintedHeretic/), a new game store on our side of town. It's a good mix — tabletop miniatures, RPGs, card games — and the vibe was welcoming in that particular way that good local game stores manage. We bought a few things, entered the raffles, and left feeling like we'd found a new spot to paint minis and be among our people.
On the way to drop Vivian off at Georgia State after spring break, we stopped at [Level Up Games](https://www.levelupgamesco.com/) in Duluth. The place is massive, stocked like a warehouse, with seemingly every board game, RPG supplement, mini, and trading card in existence. I'd been hunting for the new Gloomhaven mercenary packs — sold out on the Cephalofair website — and Level Up had all four, at retail. More options as our party continues to retire characters and rebuild.
After dropping Viv off, Juniper and I made one more stop: a ska festival at [Outrun Brewing Company](https://www.outrunbrewing.com/) near Stone Mountain, which I'd never been to before. It's 80s-themed in a way that's earnest rather than gimmicky, and ska has been my first musical love since high school, so this required no convincing. I caught the second half of Left Hand Hotdog's set and then stayed for Space Mutiny — an 80s neon karate science fiction ska band, and they delivered exactly that. They were fantastic. The smash burger truck outside and a very odd but very good beer from the brewery were a bonus.
![Space Mutiny performing in the Outrun Brewing Company parking lot, with a movie projected on the building wall behind them](IMG_3333.JPG "Space Mutiny performing in the Outrun Brewing Company parking lot, with a movie projected on the building wall behind them.")
## Cooked
Hot pot in Decatur on the way into Atlanta with the kids. We always go to the same place even though there are at least a dozen to choose from, and it's never not worth it.
Outrun had a beer on tap I couldn't walk past: Echo of Harvest, a graf — half apple cider, half Belgian saison — brewed with smoked malt and fermented with fresh apples. Notes of smoke, tart apple, and a crisp mineral finish. I took a crowler home.
## Noticed
Outside Level Up, tucked into the concrete shopping center landscape, was a nesting Canada Goose pair. The male was sitting on a narrow strip of dirt between the parking lot and one of the buildings. Around the corner, up on a brick wall alongside a staircase, the female was on her nest. A deeply impractical place to lay eggs, but she'd committed. It was unusually hot for March and she was panting visibly. We walked into a nearby boba shop and asked if we could have a container of water for a goose outside, which apparently caused quite a stir — nobody had realized she was there, just a few dozen feet from their back door. They filled a to-go container, we carried it over, and the goose clearly knew what it was. She let us set it right next to her before offering a perfunctory hiss, then spent the next several minutes drinking.
![A Canada Goose on her nest in a Duluth shopping center, drinking from a plastic container of water we brought her](IMG_3319.JPG "A Canada Goose on her nest in a Duluth shopping center, drinking from a plastic container of water we brought her.")
## Thinking About
Thursday evening, while Juniper was teaching swimming lessons at the Y, I went to the [Lyndon House Arts Center](https://www.accgov.com/lyndonhouse) for a presentation by [Peter Loose](https://www.peterlooseart.com/) on the mountain dulcimers he's made and collected over the years. I've known Peter for a long time — he's a quiet fixture in the Athens arts community, the kind of person who doesn't announce himself, despite having paintings in museums around the world. I had no idea until that evening that he also makes dulcimers, in his own sculptural style, and that they're highly sought after by collectors. He showed a snake-shaped one, then a blue jay, then unveiled an enormous one shaped like a lobster.
![The snake dulcimer, painted with dense dot-work patterns and the words "we could all be dazed" along its body, displayed on a wooden pedestal](IMG_3374.JPG "The snake dulcimer, painted with dense dot-work patterns and the words 'we could all be dazed' along its body.")
![Peter Loose holds up his blue jay dulcimer at the Lyndon House Arts Center presentation. The instrument is nearly as tall as he is.](IMG_3370.JPG "Peter Loose holds up his blue jay dulcimer. The instrument is nearly as tall as he is.")
![The lobster dulcimer, leaning against a table at the Lyndon House Arts Center. It stands nearly five feet tall.](IMG_3371.JPG "The lobster dulcimer. It stands nearly five feet tall.")
Unusual shapes, but they all sounded beautiful.
I made a dulcimer once, years ago, in the traditional teardrop shape. For the sound holes I carved the coat of arms of my SCA kingdom. I barely knew how to play it, but I learned enough to carry it around at events and earn as much mead as I could drink by singing songs and telling stories at campfires. It was cheaply made and didn't survive the years. My parents, though, bought and played two beautiful dulcimers later in their lives, and I have both of them now, cases closed, sitting on a shelf in my office. After seeing Peter and his work that evening I brought them down and showed them to Juniper. I keep meaning to re-learn enough to play them. Maybe someday they'll be instruments again instead of artifacts.
## What's Next
My first on-site visit to a Natera lab in San Carlos. I'm genuinely eager — to meet my teammates face to face, to see the scientists who will actually be using the software I've been helping build, and to get a felt sense of the environment these tools need to work in. Specs and tickets tell me the *what*. Meeting the people tells me the *why*, and that shapes the *how* in ways that are hard to get any other way.

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 February 28, 2026. 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.
## What I finished building ## What I finished building
@@ -37,15 +37,10 @@ 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 2026** (January 2325) — Atlanta's annual Tiki Weekend. On staff. - **Inuhele** and **CONpossible** — annual Atlanta conventions where I'm 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,15 +2,17 @@
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 March 29, 2026. 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.
## Where I will be ## Where I will be
Nothing on the calendar yet. - **[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.
- **[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
- **LocallyGrown.net features** — New features, better tools for market managers, and continued growth of the platform. - **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.
- **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.
## What I will be making ## What I will be making
@@ -22,13 +24,15 @@ Nothing on the calendar yet.
## What I will be reading ## What I will be reading
- Several John Scalzi books queued up — might just grab one at random when *Service Model* is done. - Currently a few chapters into *Service Model* by Adrian Tchaikovsky. After that, the stack awaits.
## What I will be exploring ## What I will be exploring
- **n8n automations** — Keep noticing small friction points that could be automated away. More workflows coming. - **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. More of that ahead. - **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
New job, same me. The coat stays on. 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.
Forward motion, one project at a time.