The reading list
Essays, tech notes, and the in-between.
- technical-notes·3 min read
uv in Docker and CI: lockfile-driven builds that actually cache
Two patterns — multi-stage Docker with uv sync --frozen and GitHub Actions with setup-uv — give you reproducible, fast Python builds with almost no boilerplate.

- Technical Notes·3 min read
`uv tool` and Single-File Scripts: pipx and Shebang-Python, Replaced
Two uv features outside project management — uv tool for global CLIs and PEP 723 inline-deps for single-file scripts — quietly close out the last reasons to reach for pip or pipx.

- code-quality·3 min read
Fix mise GitHub Rate Limit with a Token
mise makes unauthenticated GitHub API calls by default. When you hit the rate limit installing tools, a personal access token (no scopes required) fixes it permanently.

- technical-notes·3 min read
Migrating to uv from pip + venv + requirements.txt: a pragmatic path
You don't have to commit to a full migration to benefit from uv. The pip compatibility layer is a zero-effort speedup. Move source-of-truth to pyproject.toml only when it earns its keep.

- Technical Notes·3 min read
Starting a new Python project in 2026 with uv
Six commands, five files, zero `source activate`. A walkthrough from `uv init` to a project that runs tests, ships a CLI, and is ready to dockerize.

- technical-notes·3 min read
uv vs pip + venv + pyenv: speed, lockfiles, and the death of `source activate`
Three axes where uv wins and they compound: raw speed from a Rust resolver and a global hardlink cache, a real lockfile instead of a pip freeze snapshot, and a workflow that finally retires source .venv/bin/activate.

- technical-notes·3 min read
Why uv Exists: The Pre-uv Python Tooling Mess, and What Astral Consolidated
Before uv, a working Python project needed five tools and a working knowledge of how they fail at the seams. uv collapsed them into one Rust binary because the seams were the problem.

- Product·3 min read
Making Discovery a Habit: CDH Alongside Shape Up, OKRs, and Agile
Six weeks in, Donut CRM's tree almost died — not from bad discovery, but from a launch crunch. The habit, not the artifact, is the product. This closing module builds the weekly cadence that survives a real delivery calendar, shows where JTBD, Lean Startup, OKRs, and dual-track agile plug into the tree, runs the honest CDH-versus-Shape-Up comparison, and ends with your first six weeks, week by week.

- Product·3 min read
Assumption Mapping: Experiments That Test the Riskiest Thing First
The auto-drafted follow-up email looked obviously good — which is exactly when a team stops asking questions. This module turns one build decision into a list of testable guesses: surfacing assumptions from the happy path, sorting them on the importance-vs-evidence 2×2, and running the smallest test that could change your mind. Two fully specified experiment cards included, plus what Donut CRM's concierge test actually found.

- Product·3 min read
From Opportunities to Solutions: Ideating Alone and Together
Your first idea is almost always a category cliché, and your team's first shared idea is usually whatever the most senior person said out loud. This module covers picking ONE target opportunity, generating real solution variety solo, and running two Liberating Structures — 1-2-4-All and 25/10 — that beat groupthink with facilitation scripts you can copy. Then you put three solutions on your own tree.
