The writing desk
Notes on the
systems I build.
Decisions, experiments, and lessons from building AI and data systems. An evolving record of how I think about the work.
Choose a year to narrow the archive. Switch to Month for a closer look.
25 articles
Newest firstNovember 2026
1 entryOctober 2026
1 entrySeptember 2026
1 entryAugust 2026
1 entryJuly 2026
1 entryJune 2026
1 entryMay 2026
4 entriesTrust is the next decade's problem
Intelligence is rapidly becoming abundant. Trust is becoming scarce. The interesting products of the next ten years won't be about generating better output. They'll be about figuring out which output to rely on.
Refusal is the feature grounded RAG actually needs
Trying to make the model better at admitting uncertainty is a losing game. Refusing in the orchestration layer. When the retrieval signal is too weak to support an answer. Is a winning one. Plus the companion move that matters at least as much.
The MCP proxy is the enforcement primitive
Voluntary safety checks don't survive contact with a real agent. If you want a policy layer that actually stops destructive tools, it has to be in the request path. And once it is, you also get the team's shared context for free.
Tool contracts are the agent interface
A tool schema describes the shape of a call. A dependable agent also needs prerequisites, effect scope, result meaning, and retry policy. Those contracts should drive both selection and dispatch.
April 2026
2 entriesAnalyzing NYC vehicle crashes. A cloud-native data engineering build
A GCP build that pulls NYC's open crash, taxi, traffic, and weather feeds into a single analytical surface. Notes on why we picked Compute Engine + Dataproc over Composer + Dataflow, where the batching limits actually bit, and what would change in v2.
Context provenance is a privacy boundary
Permission checks at source-read time are insufficient when information survives in summaries, conversation history, and task journals. The restriction has to survive with the information.
March 2026
2 entriesWhy AI should reason over metadata, not raw data
Schemas, contracts, lineage, and policies carry the structure an LLM needs to be useful inside a regulated environment. The bytes don't. And shouldn't leave the perimeter.
Cancellation belongs in the execution protocol
Stopping token output, terminating a worker, and establishing the state of an external effect are different operations. An agent needs explicit rules for all three.
February 2026
2 entriesAgent memory as infrastructure, not chat history
Treating agent memory as persistent infrastructure. With typed writes, provenance, retrieval policy, and decay. Changes what agents can do across sessions and tools. Chat history is a symptom, not a system.
Approval is a contract over an action
A confirmation dialog collects a decision. The execution system needs to know which intent, revision, arguments, and destination that decision authorizes, and whether it has already been consumed.
January 2026
2 entriesThe case for local-first semantic layers
When the operator is the user, a single binary on their laptop beats a hosted control plane more often than the industry admits. Iceberg + DuckDB on hardware you already own does more than expected. And the trade-offs aren't where you'd guess.
Agent recovery is a state-machine problem
Saving the conversation preserves what was said. Recovering an agent requires a separate account of what was authorized, what ran, and which external effects are still uncertain.
December 2025
2 entriesA working note on database partitioning
Partitioning strategies, secondary index trade-offs, rebalancing, and service discovery. The four decisions you actually have to make when a single node stops being enough. Plus what Discord learned moving trillions of messages from Cassandra to ScyllaDB.
The agent harness is the product
A model can choose the next action. Something else has to own permission, execution, recovery, and proof that the action happened. That system is where an agent becomes a product.
November 2025
1 entryJuly 2020
4 entriesIntroduction to Linux
A starter cheatsheet for working in a shell. Terminal controls, file management, permissions, process inspection, services, and the small set of commands you'll reach for daily. Written for someone moving from a GUI-only OS.
The data engineering guide
A learning roadmap I wish I'd had when I started. Programming & data structures, SQL and database internals, big-data systems, data stores, and the DevOps surface area you can't avoid. Five years later most of it still holds.
The web architecture
A walkthrough of three-tier web architecture, request lifecycle, and the trade-offs between single-server, multi-server, and serverless deployments. Notes from when I was learning to design backend systems.
Version control. Git
A practical walk through local, centralized, and distributed VCS, then a working command reference for Git. Branching, stashing, the commit object model. Written for someone learning the tool from first principles.