Writing
Essays on applied AI - agents, evaluation, retrieval, developer tooling - plus engineering craft. 20 posts. Shorter thoughts live in notes; new here? Start with the curated path.
2026
- The Fail-Open I Shipped Three Times
A completeness check that had to be safe over time, three state machines that each leaked a fail-open, and the pure function that finally fixed it.
- Ground-Truthing Your LLM Judge: Does Your Eval Actually Track Reality?
LLM-as-judge is the default eval now, but a judge is just another unreliable model. Here is how to check whether its verdicts correlate with real outcomes, and catch the leniency bias most judges have.
- The Agent Harness Ate My Workflow
A year ago I kept a 6,000-line migration coherent with a hand-maintained progress file. Most of that scaffolding now ships inside the agent CLIs. Here is what the harness absorbed, and the part it still cannot.
- I Built 50 AI Skills for the Parts of My Day I Never Got Around To
The biggest productivity gap is the work around the code: context gathering, note-taking, and status updates. I built 50 AI workflow skills to make those 15-minute tasks actually happen every day.
- Use /insights to Improve Your Claude Code Setup
I ran /insights in Claude Code and walked through what it found - friction patterns I hadn't noticed, CLAUDE.md rules I should have written weeks ago, and what changed after I applied the suggestions.
2025
- Reward Engineering and Evaluation
This is the third post in our series on probabilistic prompt pipelines. In our first post, we explored why static prompts become bottlenecks. The second…
- Building the Selector: Retrieval, Bandits, and Cold Start Solutions
This is the second post in our series on probabilistic prompt pipelines. In the first post, we explored why static prompts become bottlenecks and saw a…
- Why Static Prompts Fail and How Probabilistic Selection Fixes It
This is the first post in a four-part series on building production-ready probabilistic prompt pipelines. By the end of this post, you'll understand why…
- Claude Code: The Hidden Testing Ground for AI Agents
I've been using Claude Code daily since it launched for general use. After months of working with it, I've developed a theory about what's actually…
- Staying Sane on a 6,000-Line Refactor with Claude Code
As large language models become more capable, it's tempting to rely on them for increasingly complex engineering tasks. Tools like Anthropic's Claude Code…
- Conditional Types in TypeScript
Conditional types give you type-level if/else logic in TypeScript. How to build recursive utilities like DeepNullable, use distributive conditionals and infer, and avoid the common pitfalls.
- Understanding useEffect vs. useLayoutEffect in React
useEffect runs after the browser paints; useLayoutEffect runs before it. When to use each, with performance notes and edge cases.
- Why Returning Cleanup Functions in useEffect Matters in React
React’s useEffect hook is one of the most powerful and commonly used features in functional components. It enables side effects like data fetching,…
- A Guide to Setting Up Vercel Log Storage in AWS S3
Vercel retains logs for only 24 hours. This guide sets up a log drain to AWS S3 so you can store, query, and analyze them long-term with lifecycle policies, Lambda, and Athena.
- Enhancing Retrieval-Augmented Generation with XML Prompting
In my current role, I’ve been working on a Retrieval-Augmented Generation (RAG) system designed to provide safe, reliable personal finance guidance. Given…
- One Thing: Cursor, Claude, and the Mocking Struggle
As someone who spends a lot of time coding, I rely heavily on Cursor as my daily IDE, and I most often use Claude 3.5 Sonnet as my preferred model for…
- One Thing: Kneading a New Hobby
I’m kicking off a new blogging experiment I’m calling “One Thing.” Each day, I plan to share one thing I learned, big or small, tech-related or totally…
- Automating Meeting Note Management with Krisp, Zapier, Google Drive, and Notion
An automated workflow for meeting notes using Krisp, Zapier, Google Drive, and Notion. Capture transcripts, save them to cloud storage, and sync them into a Notion database with AI summaries.
2017
- Creating A Blog With GatsbyJS - Part Two
Create a blog with GatsbyJS
- Creating A Blog With GatsbyJS - Part One
Create a blog with GatsbyJS
No posts tagged that yet.