Skip to content

Approach

How I work

I work in five steps, at work and at home.

Most examples below link to the place in a case study where it happened, including the times it went wrong.

  1. Diagnose

    I find where the work actually breaks down before I build anything.

  2. Decide

    I write down what I chose, what I passed on, and why.

  3. Build

    I build the smallest system that fixes the real problem.

  4. Verify

    I check the result the way the people using it will see it.

  5. Simplify

    Once it runs, I cut what nobody needs.

Diagnose before building

I look for where the work actually breaks and name it with a symptom or a number someone can check. Only then do I pick a fix.

  • At MAXX Potential I traced a QA bottleneck to the tracking itself: one spreadsheet per person, with no status history. Moving the team to Linear and an AI-agent workflow brought 2× sprint throughput.

    Linear Adoption + Agentic Bug Workflow: Project page
  • Before the harness, every single-session approach hit one of three walls: the context limit, the usage limit or the permission classifier. One night every repo went silent from 00:12 to 07:19.

    Agent Harness: Diagnose
  • After the first night live, the counts matched while 92 titles were still wrong on my phone and 28 files were second copies of the same audio.

    Self-hosted music library & DJ crate pipeline: Diagnose

Make decisions explicit

I write each decision down: what I chose, what I passed on, and why. The next session, or the next person, reads the reasoning instead of guessing it.

  • The harness keeps a numbered decision ledger. The first entry, D-H1: a fresh session per feature, because subagents only delay the context limit and fresh sessions force state onto disk.

    Agent Harness: Key Decisions
  • The crate flag first lived as a #crate tag in playlist comments. I moved it into the crates app's own database and wrote down why: the app owns the flag.

    Self-hosted music library & DJ crate pipeline: Key Decisions
  • When the agent put batch import on the Profile tab, I rejected it as bad UX and moved it to the Spots tab. The ledger records it as D12.

    HitList: Key Decisions

Fakes mirror reality

Tests run against fakes, so the fakes have to behave like the real thing. I build them from captured real responses, not from what I expect the system to say.

  • The harness broke its own rule. I tested its usage-limit detector against a message I made up; the real one read differently, and 45 sessions were counted as failed attempts in 6 minutes. The fix was a fixture captured from the real CLI.

    Agent Harness: What Broke
  • A fake written from a guess at the download client's API hid 3 critical bugs. The fakes are now built from captured real responses.

    Self-hosted music library & DJ crate pipeline: What Broke
  • The test database enforced foreign keys and the phone's did not. Test fakes now start the way the device starts.

    HitList: What Broke

Verify what the human will see

Passing tests and matching counts are not the finish line. A milestone ends when I have looked at the screen the person will use.

  • After the first night every count matched, 859 = 859 = 859, while 92 titles were still wrong on my phone.

    Self-hosted music library & DJ crate pipeline: What Broke
  • A spot saved without GPS showed as "7679.1 mi" away. No test failed; a table of what the screen would show, row by row, caught it.

    HitList: What Broke
  • Every finished milestone gets an independent verify session that re-runs each step and writes one evidence row per step. Nothing merges unless it is the tree that was verified.

    Agent Harness: Verify

Simplify after use

The first version carries guesses. After I have used it, I cut what nobody needs, and sometimes I decide not to build at all.

  • I built four download-quality tiers, used them, then replaced them with one rule: lossless or 256 kbps and up.

    Self-hosted music library & DJ crate pipeline: Simplify
  • After using HitList on my phone, I wrote a spec that cuts a 20+ field form in five sections to seven fields. It is specified, not yet built.

    HitList: Simplify
  • I spec'd an invite and gig-broadcast app over five rounds of questions, then chose not to build it. An iOS Shortcut does the job with zero code, and the spec records when building it would become worth it.

Automate the bookkeeping, keep judgment human

Scripts and agents take the repetitive, checkable work. The calls that need judgment, what to build and the rules for what ships, stay with a person.

This site update was built that way, one verified milestone at a time. Read the agent harness case study