← Back to articles

A case on working method

Running AI like a
product team.

I run my AI tools the way I would run a delivery team. I write the definition of done, the rules and the gates. The models draft, check and do the legwork. Every decision that matters is still mine, and the setup is built so that it has to be.

  • Product ownership
  • AI tooling
  • Claude Code
  • Figma
  • Quality gates
The setupI write the definition of done and the gates. The decision at the end stays mine.

Who owns what

The Scrum Guide is blunt: “The Product Owner is one person, not a committee.” When the team is a set of models, that line is the design brief. A model cannot be answerable for the result, so accountability stays where it was.

The workspace is Claude Code with a written constitution: rules that load every session, agent definitions with their own anti patterns, and parallel subagents for independent work. Confirmation is reserved for the edges that cannot be undone, anything that leaves my control, frozen layout files and destructive operations. Inside those edges the work runs without asking. At them, it waits for me.

The backlog and the sprint

The product owner agent drafts a sprint in a fixed shape: a one sentence goal, at most seven tickets, and a “not this sprint” list with a reason for each item. Its own definition counts a ticket without acceptance criteria as an anti pattern. A finding during work, a contradiction between files or a failing hook, becomes a ticket in the same session.

The draft is not the plan. I review it, and nothing closes a phase without my sign off.

A backlog itemThe agent drafts the ticket and its criteria. Nothing closes without my sign off.

Design work in Figma

Figma’s MCP server lets an agent read a file’s variables, components and layout, and write to the canvas. Every frame uses auto layout, anything repeated is a component, text and colour come from styles and variables, and a screenshot of an interface never goes into a file.

The case illustrations for my portfolio went through four versions. I rejected or redirected the first three, because they invented metaphors instead of depicting the actual work. That became a rule: trace the latest design file for the case. The fourth version set the calm rules the set follows now: complete cards, one accent per tile, one highlighted element that breaks out modestly.

Nothing reaches me before it passes proof. A script checks that every drawing is centred within one pixel, covers 65 to 75 percent of its ground and overflows nothing. After at least three runs, a screenshot beside the approved version comes to me.

Figma’s own help pages say “AI outputs may be misleading or wrong.” Its 2025 AI report found 78% agree AI makes their work more efficient, and only 32% can rely on the output. The review lives in that gap.

The change I can state plainly is speed: a case bento that took hours now takes minutes, because the geometry comes from one file and the proof runs before I see it. Of 360 deploys since May, three were stopped by the content gate.

Four versionsThe first three were rejected or redirected. The fourth set the rules the set follows now.

Gates, not instructions

Anthropic’s documentation calls project instructions “context, not enforced configuration”, and hooks the way to get “deterministic control”. So a rule I care about gets a check that runs whether or not the model remembers it.

Every write in the workspace passes two blocking hooks. A voice scan stops banned wording, and a source trace stops any percentage that is not in my sourced numbers file. Both started as warnings and have blocked since June 2026, so the model has to rewrite instead of reading past them.

The website has its own release gate. The deploy stops on banned wording, a separator character the house style does not allow, an unbalanced div or a broken reference inside an inline drawing. A second script renders every page at five widths and fails if any page scrolls sideways. It caught a row of cards that pushed a page 27 pixels sideways on a phone, which no text check would have found.

A blocked releaseThe deploy stops on a failed check, and the page does not ship until it is fixed.

Facts first

Every claim traces to a source, and a missing fact is asked for, never guessed. Anthropic’s guidance on hallucinations agrees: let the model say “I don’t know”, and if no supporting quote exists, “it must retract the claim.” NIST calls the failure confabulation, “confidently stated but erroneous or false content”.

My iOS Photos case shows why. Before the Figma file was used, every load bearing claim was fetched again from Apple’s primary sources rather than taken on a subagent’s word. One did not hold. The API that keeps a tab visible while the bar collapses had been credited to SwiftUI. Apple’s WWDC session shows it is UIKit, and that it pins one tab where my solution applies the idea to two. Six text nodes across four pages were corrected.

I found two more errors myself on the shipping app. The subtitle under Library is a photo count, not a date, and two controls stay on screen through the scroll. The first build had overstated the case.

What it may not touch

Governance here is about what the system may not touch. No real client data and no internal work data ever lands in the setup. The site records one row per page view, the time, the page and the country, with no IP address and no cookie on the visitor.

Corrections become rules

When I correct the system, the correction is written down in the same session as a rule: what I said, why it matters, and how to apply it. There are more than sixty now, and their index loads at the start of every session. Having to say something twice is recorded as the failure.

At the end of a session a hook captures what changed, and a background step suggests patterns into a review file. A suggestion becomes a rule only when I accept it.

Anthropic’s eval guidance says “failures become test cases”. A written rule is weaker than a test case, and still changes the next run.

The corrections are now a test set. Seventy cases, each with the situation, the answer that was wrong and the answer the rule requires. The first run failed four of ten representative cases, and the failures were not model behaviour. Four write gates had been reading an input the tool no longer sends, so they had let everything through for 106 days, and each session was loading the first 80 lines of a 280 line constitution. Both are repaired, and nine fixtures now prove each gate twice, once refused and once allowed. The same test set also showed what a gate cannot do: three of the four cases are about wording in a reply, where no file is written and no hook can look.

A correctionWhat I said becomes a rule file, and its index loads at the start of every session.

Limits

This setup is run by one person, for one person’s work.

With five engineers the parts would stay and the checkpoints would move. The gates already run as CI, so they would block a pull request instead of my working tree, the rules would become shared config a team argues over rather than a file I edit alone, and code review would carry the human checkpoint. I have not run it with a team, so that is a design, not a result.

The gates are pattern checks. They catch a banned word, a figure with no source or a page that overflows, not a well formed sentence that is wrong. That is why the fact check and the decision stay with a person.

There is no graded eval suite with pass rates; building a regression set from the recorded corrections is the next honest step. The setup does not learn by itself: every rule was written after a correction.

Currently available.

Product ownership and user experience leadership. Evidence based. Across banking, fintech, SaaS and more.

Let’s talk