Writing

Series

Multi-part pieces, each one following a single idea through the places it shows up.

Determinism vs reasoning

Reason once, encode, replay. The same trade, made in a different place each time.

  1. 1
    Specifications vs prompts: what to encode and what to ask

    Run the same prompt twice, get two answers, conclude the tool is broken. The machine is working as designed, and the real question is which half of your work should never have gone near it.

  2. 2
    Prompts are not configuration

    Your best prompt is doing real work and it lives in a text file on one laptop. When it stops working, nobody else can tell, and nobody else can fix it.

  3. 3
    A deterministic core, with reasoning at the edges

    Open three pull requests and you can tell three people wrote them. One convention, three readings of it. What fixes that is not a better shared document, it is a script that owns the decidable half.

  4. 4
    Script first, agent as fallback

    Somewhere in your setup a model is doing a job that grep would do better, on every commit. What you gave up to write it that way is the same answer twice.

  5. 5
    Fail fast: prefer tools that refuse ambiguous input

    You approve a small automated edit, it reports success, and the file no longer parses. The bug is not in the regex. It is in reaching for a tool that had no way to say no.

  6. 6
    Agentic workflows: from runbook to command

    Your delivery process is seven correct steps in an onboarding document, and everyone follows it roughly. Roughly is where the incidents come from, and an agent following it roughly is worse.

  7. 7
    Repo discoverability for humans and agents

    Your repo has a scripts directory nobody opens, and somebody rebuilt one of the files in it last month. An agent does the same thing, on every task, and bills you for the rediscovery.

  8. 8
    Pre-invocation gates: enforcing a rule before the action runs

    You have written the same rule in three places and it got broken again yesterday. Asking for test-first works most of the time. A non-zero exit code works every time.

  9. 9
    Put the shared gate in CI, not in git hooks

    Somebody joins on Monday and clones the repo. Every check you wrote is in that clone. None of them is running, and nothing tells either of you.