The reading list
Essays, tech notes, and the in-between.
- Product·3 min read
Before You Write an OKR — OKRs vs. Rocks vs. a Bare North Star
Three goal-setting systems, each claiming to be the best — and all three are right, for different organizations at different stages, which is why the real skill isn't writing OKRs but knowing which framework your team actually needs.

- Product·3 min read
What a PO Absorbs vs. Hands Off, by Team Size — and the Hat Nobody Actually Writes
At eight people the PO role develops a blind spot so consistent I've started calling it the orphan gap — QA ownership falls through the space between the PO's shoulders and the team's expectations, and nobody notices until the first real bug reaches production.

- Product·3 min read
When to Sit in on Discovery, Not Just the Demo
Founders who only show up for demos are perpetually surprised by what the team built — because they're seeing the output of decisions they could have influenced three months earlier, at a cost thirty times higher.

- Product·3 min read
When You Need a Dedicated BA, and When the PO Already Does This Job
A team that hired a BA too early burned six months of salary on documentation nobody read; a team that hired one too late lost a regulatory deal because requirements were scattered across Slack threads. The split point isn't team size — it's the ratio of domain complexity to product complexity.

- AI·3 min read
Workflow vs Agent Team: Two Ways to Run Many Claudes
Once you're spawning subagents, you hit a fork: let the lead agent decide who to spawn and when, or script the orchestration deterministically up front. They feel similar and fail differently. Here's how I pick.

- AI·3 min read
The Subagent I Deleted: A Field Note on Layer Discipline
I wrote a subagent that worked. I deleted it ten days later. The replacement was three lines of Prettier config. A short note on the wrong-layer trap, the four-questions test, and why a mature agent-ready repo isn't the one with the most artifacts in it.

- technical-notes·3 min read
The first real Alembic revision: a column, a backfill, and the parts autogenerate can't do
Last post set up Alembic in clipdex. This one cashes the bet: add a duration_ms column to processed_videos, backfill from the existing aggregation, and switch the /episodes endpoint to read it. Three commits. The parts autogenerate gets right, the parts it doesn't, and why the backfill is the line where raw SQL would have started to hurt.

- technical-notes·3 min read
Adopting Alembic in clipdex without rewriting the query layer
The previous post named four cracks in clipdex's raw-SQL migration story. This one closes them. Declarative models that mirror the live schema, a no-op baseline revision, `alembic stamp head`, and a frozen `migrations/legacy/` directory. No query code changes. Ninety minutes.

- Technical Notes·3 min read
Lefthook for a Static Site: Four Hooks That Earn Their Keep
A static Astro site doesn't need Husky-grade ceremony. But it does have four failure modes worth catching before they reach `main`: a broken type, a leaked key, a post without a `directory:` field, and a build that silently breaks production. Here's the lefthook.yml I landed on, and why each hook is there.

- AI·3 min read
Installing Isn't Teaching: What I Learned From Auditing My Own Shell History
I asked Claude what new CLI tools I should install based on my last week of shell history. The honest answer wasn't a list of tools — it was that I'd already installed half the modern tools I needed and was still typing `cat` and `cd` like it was 2010. A short note on the gap between *having* a tool and *reaching* for one, and where that same gap shows up in your `CLAUDE.md`.
