TJ's Desk

2026-11-10 · ~5 min

Our CTO Said Move Bugs to the Left. My Tech Lead Built the Tool.

Matt's standing rule is that a wrong assumption gets cheaper the earlier you catch it. Kercwin turned that rule into an epic checker that reads every ticket and pull request against the plan before the drift sets in.

ai leadership tooling

An epic at Career Team has a lot of hands on it: the plan owner, product, leads from potentially more than one team, and the developers doing the work. Decisions change while the work is moving, and the code written last sprint can quietly drift from the decision made this sprint. Nobody notices until review, or testing, or a customer.

Kercwin, the tech lead on my team, built the thing that notices first. This note is about that tool and the rule it came from. How it started, with a demo of my own dashboards, is in I Showed My Team a Dashboard. Two Weeks Later They Showed Me Theirs.

Matt's rule

The idea underneath it is not his or mine. It comes from Matt, our CTO, and it is his standing rule:

Move bugs as far to the left in the process as possible. My interpretation, from what I remember of a knowledge-sharing session by Matt Monroe, CTO at Career Team. Not his exact words.

A wrong assumption caught on a ticket is cheaper than one caught in review, which is cheaper than one caught in production. The epic checker is that rule turned into a tool.

TicketReviewTestingProduction the epic checker works here cheaper to fix more expensive to fix

Matt's rule, drawn. Every step right costs more than the one before it.

Kercwin credits it the same way. At the team's engineering knowledge-sharing session, he opened his presentation about his skill and dashboard with his own reading of what Matt said, and then put the job in his own terms: preventative and proactive measures, tracking and auditing to steer technical direction, and bridging delivery between product, leads and developers, in any order the cycle runs.

Who built it

Full credit goes to Kercwin. He went from developer to tech lead in about a year, which is fast for anyone. I pushed him into the role because I saw something in him before he did, which is a feeling I know from the other side. A lot of my job with him is the stuff nobody puts on a ticket: the inner voice in your head that says you are not ready, learning to hand work off instead of carrying it, getting him to see in himself what the rest of us already see. He is doing a great job, and he is still working out what kind of leader he wants to be, which is the correct amount of figured out for anyone.

Before he built anything, he showed the team how he makes Claude talk to him. Tables, diagrams, specific wording, a format his brain reads fast. I laughed, because mine went the opposite way. Every rule I have written is about how the AI should sound when it writes as me. His is about how it should sound when it writes to him. Same tool, opposite direction, and both of them right.

How the epic checker works

Inspired by my review board, he built the epic checker. It keeps an epic's code and tickets aligned with its architecture plan, so he can stay on top of technical decisions while they are still moving.

The architecture plan in Confluence, the source of truth A ticket before any code exists A pull request while it is still open The epic check against the plan and every open PR New decisions, conflicts, ticket problems each one a row someone owns The decision board the plan owner ticks decisions, drafts tickets and moves conflicts dashed: every decision goes back into the plan

The plan stays the source of truth. The checker only ever points at where the work and the plan disagree.

That matters more than it sounds, because of all those hands from the opening. With that many people, alignment is the hard part, and his checker is the thing that keeps everyone reading the same page. Two of its choices started as my advice, and I like that he kept them. Confluence is the source of truth, so decisions live where everyone already reads them instead of inside a tool only one person opens. And the run logs are shared, so anyone can see what the checker did, when, and on whose run.

Kercwin's epic board open as a Claude dashboard in a mock of the Claude sidebar, on an invented epic called Reports export: tabs for what blocks a merge, what needs deciding and open conflicts, a list headed fix first with two conflicts between pull requests, and one flagged decision open on the right with Claude's recommendation and accept, accept with changes and reject buttons.
Kercwin's board, his latest version, running on an invented epic inside the same mock sidebar. A flagged decision goes against the plan, Claude recommends a change, and a person picks the button.

The checker does not decide anything. It puts the decision in front of the person who owns it, with a recommendation and three buttons, and a person picks one. That is the rule I hold the whole team to: the tool is allowed to type, and someone with their name on it signs.

What came back to me

I helped him plan it, and then I did the most flattering thing a manager can do to a teammate's project: I started using it and sending commits. As a snapshot, the history has about 81 commits from him and 14 from me. Mine are mostly plumbing, a daily refresh routine for every epic on the index, a run log and stats view on the board, workday-only scheduling, and the hook that lets my review kit fold the epic check's decided deviations into its verdict.

His tool now makes my reviews smarter. I did not plan that, and I like it a lot. It is the part of this project I would point at first: a tool built for one tech lead's epics ended up improving a reviewer that runs on every pull request the team opens. My reviews now know which deviations from an epic were decided on purpose, so a deliberate change no longer gets flagged like a mistake.

One person's tool made another person's tool better. When one of us shares what helps them, the whole team gets the benefit, and that is the lesson I would keep from this project.

What my reviewer already learned the hard way

My review kit has been through this road, and the story of it is in Seven Hundred Commits to Teach a Reviewer It Was Wrong. Three of its lessons carry straight over to an epic checker, and I have been passing them to Kercwin.

My reviewerThe epic checker Keep score each comment graded by what happened next Grade every flag accepted, changed, rejected, or never touched Score per topic sharp on databases, noisy on frontend speed Split by kind of flag conflicts apart from new decisions A miss beats a hit the fix replayed on the commit it missed A late decision becomes a test the next run must pass

The same three lessons, carried from one tool to the other.

The first is to keep score. My reviewer only got good once every comment it left was graded by what happened next: fixed, answered, closed without a change, or ignored. A flag on the epic board can be graded the same way. A decision that got accepted, changed or rejected is a result, and a flag nobody ever touched is a result too, just a less flattering one.

The second is to read the scores per topic, never as one average. My reviewer can be sharp on database changes and noisy on frontend speed, and the mean of those two looks fine. A checker can be right about conflicts between pull requests and wrong about what counts as a new decision, and only a split by kind of flag shows which.

The third is that a miss is worth more than a hit. When my reviewer lets something through, the fix to its lens is replayed on the exact commit it missed before the fix counts. The epic checker's version of that is a decision that surfaced in review or in testing instead of on the ticket. Every one of those is a test the next run should pass.

None of that replaces the person with the buttons. It only tells them, with a record rather than a feeling, how much the flags are worth reading.

What the board says so far

Everything the checker produces lands in Confluence and Jira, so the numbers are easy to count. As a snapshot on Nov 10, about ten days after the Epic Alignment space was set up:

WhatCount
Architecture plans the checker reads against16
Conflict pages it has openedabout 19
Conflicts already closed7
Follow-up tickets it drafted, labeled epic-review48
Of those, already done28

These numbers do not say whether a flag was right. A closed conflict can mean two pull requests merged cleanly or that someone decided it was not a conflict at all, and the board does not grade that yet. That is the first lesson above, waiting to be applied.

What I have not earned yet

It is a few weeks old. I do not know yet whether it still gets opened in three months, or whether the leads on other teams come to trust its flags enough to act on them without double-checking. The cheaper-to-the-left curve is Matt's rule and a well-worn one, but I have no number of my own yet for bugs it caught early. What I can say is smaller: when the checker flags a drift, it flags it on the ticket or the open pull request, in front of the person who owns the decision, which is exactly where Matt said it belongs.


The judgment is human. The typing, by design, is not.