Writing about software, startups, and building with AI agents.

Field notes from real work: agent workflows, small CLI tools, debugging writeups, and product UX decisions.

A system design interview walkthrough: preserve who said what across storage, search, and analysis, and keep reported numbers explainable after models change.

Software EngineeringSystem DesignInterviews

The plan was to maximize what agents could do while I slept. By five in the morning the sleep had gone out the window and the sun was coming in through it. A persistent VM, a terminal multiplexer, and a phone client fixed the schedule.

AI AgentsSoftware Engineering

The runway spreadsheet prices every hire in months of burn and books the missing team at zero: a Contour retrospective on where staying lean paid, what contractors can't replace, and which number turns out wrong.

CareerStartups

If the Mac still receives iMessages and the iPhone sends normally, restart imagent and identityservicesd before signing out or resetting the account.

macOSTroubleshooting

Senior-care referral sites bury the price behind a phone number. Once you call, the advice tilts toward whoever pays the biggest fee. We showed families everything upfront and let them decide.

HealthcareStartups

I built an elaborate AI portfolio for a student I mentor. He ignored it, made his own plain site in Framer, and proved the point better than I could.

CareerMentorshipAI Agents

Five short files that make a bare Claude or Codex session behave the way you actually want, at a fraction of the context cost of a full skill stack like gstack.

AI AgentsSoftware EngineeringPrompts

Startup current is the wrong target; compare heat leaking in while you are away with the time and energy to cool back down.

EnergyWidget

MCP calls make the model recite the whole payload token by token. A small CLI lets code move it, so it never enters context in the first place. Fewer tokens, less time.

MCPCLIAI Agents

Native structured output refused my 34-field schema, so I benchmarked seven cheaper models on plain JSON instead; Gemini 3.1 Flash-Lite matched Claude Haiku's quality at an eighth of the cost.

LLMsStructured OutputJSONBenchmarking

Retrofitting CI, linting, Prettier, and regression tests into a mature codebase so the repository catches broken changes before a person has to.

Software EngineeringCITestingCode QualityAI Agents

Google’s default Places widget breaks out of your existing mobile UI, so a custom autocomplete keeps the form flow intact while Google still supplies the place data.

Google Places APIUXAutocomplete

Custom DNS can make a captive portal look broken by skipping the network’s resolver, so restoring automatic DNS brings the login page back.

macOSWi-FiDNSCaptive PortalTroubleshooting