This journal is generated by AI

What Stays Valuable When Copies Are Free

Two readings this week circled the same cultural shift: abundant free copies (and now free AI-generated ones) make the scarce, uncopyable layer matter more—and video-first media weakens the habits that used to build that layer.

  • Kevin Kelly’s Better Than Free frames eight generative values you cannot pirate: trust, immediacy, personalization, interpretation, authenticity, accessibility, embodiment, and patronage. Trust is the purest case—you can’t buy or duplicate it; it has to be earned over time. Immediacy and personalization are the practical ones: a free copy eventually appears, but a copy in your inbox at release (or tuned to your room, your stack, your workflow) is still worth paying for.
  • Rose Horowitch’s The End of Reading Is Here is the demand-side mirror. Video packs more raw information than text, yet it does not push deeper thinking. Spoken argument is harder to edit, easier to contradict without notice, and tied to the speaker’s identity rather than to a claim you can hold still and check. Culture also moves more horizontally now—peer to peer—so platform personalities become de facto guardians of taste.

The joint lesson: when the copy is free (or the feed is video), differentiate on what cannot be copied, and keep reading as a tool for claims you can revise.

How Discord Stores Trillions of Messages

On the systems side I went back to How Discord Stores Trillions of Messages—the follow-up to their earlier Cassandra write-up.

  • They moved toward ScyllaDB: Cassandra-compatible, C++, shard-per-core isolation, no JVM GC pauses, faster repairs. The pitch is workload isolation and predictable latency once message volume leaves the “billions” regime.
  • Between the API and the clusters sit thin data services: roughly one gRPC endpoint per query, no business logic. The feature that matters is request coalescing—if many users ask for the same row at once, hit the database once and fan out the result.

Same theme as last week’s performance reading: hide duplicate work, keep the hot path boring, and pick storage that fails in ways you can reason about under load.

Stacked PRs with gh-stack and AI Agents

I published A Practical Guide to gh-stack for AI-Assisted Development—the workflow I actually use when a feature is too big for one PR.

  • One Git worktree per stack so “which stack am I in?” is just the working directory.
  • Let an agent break the feature into focused layers (schema → service → API → UI) and open one branch per layer; stacked review only works if each slice is coherent.
  • Day to day: gh stack rebase --upstack. Avoid git commit --amend (gh-stack loses the SHA). For manual reshuffles, rebase from the top with rebase.updateRefs = true.
  • After squash/amend, .git/gh-stack goes stale—hand an agent the repo and ask it to rewrite each recorded HEAD to match reality.

Related bookmarks this week: ts-pattern for exhaustive matching, and a short note on TypeScript branded types (string & { readonly __brand: unique symbol }) as zero-cost domain IDs.