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.
- Diagnose
I find where the work actually breaks down before I build anything.
- Decide
I write down what I chose, what I passed on, and why.
- Build
I build the smallest system that fixes the real problem.
- Verify
I check the result the way the people using it will see it.
- 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 pageBefore 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: DiagnoseAfter 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 DecisionsThe 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 DecisionsWhen 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 BrokeA 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 BrokeThe 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 BrokeA 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 BrokeEvery 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: SimplifyAfter 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: SimplifyI 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.
In the harness a deterministic bash driver does all the git bookkeeping, because a script does that and a prompt might not. On this site every PR still waits for me to merge it.
Agent Harness: Key DecisionsAt MAXX Potential, moving QA tracking to Linear and an AI-agent workflow cut bug-filing time by about 80%.
Linear Adoption + Agentic Bug Workflow: Project pageNothing downloads on its own: the first real download is mine to approve, by hand. As of Oct 17 the download path had not run live.
Self-hosted music library & DJ crate pipeline: Key Decisions
This site update was built that way, one verified milestone at a time. Read the agent harness case study