Keeping Myself Honest
The procedures I run as a solo, pre-launch builder. Some skills, a few control loops, and some shareable artifacts.
I’m four weeks into building a medical billing reconciliation app, with an AI that will happily ship ten times more code than the problem needs. I’ve been working with the CEO to nail the business requirements, scope an MVP we can ship fast, and dig through code from developers who are no longer on the project.
The CEO trusts me. We sync regularly. But day-to-day, no one’s reading my code or auditing my backlog. So I run a few procedures during the week to keep myself honest.
They aren’t meetings. There’s no one to meet with. Each one produces one artifact, mostly by aggregating things I’ve already written: commits, PR descriptions, journal entries, and a work log my agent fills in as it goes. By Friday, I can point at the week and say what shipped.
I run a Monday-to-Friday sprint. I’ll often work weekends, but the cadence is built around a five-day workweek. I’m trying to ship a high-quality MVP quickly without setting myself on fire.
Monday: organize the backlog
I open the Notion board and pull this week’s items into the “planned” stage. That’s what I work on. Anything that doesn’t make the cut stays where it is, or gets bumped.
Every issue gets its own PR. That gives me a clear place to stop and review code, and it’s a procedure that survives the day someone else joins the project.
A surprising amount of my time has gone into writing skills for commit messages and PR descriptions. That feels indulgent until you remember those are the artifacts I’ll be reading on Thursday when I review the week. A sloppy commit log on Friday is a slow Thursday review.
The artifact is the board state itself.
Mid-week: a hook that nudges me to log
Most of my coding happens in Claude Code. Left alone, an agent will work for an hour and then stop, leaving no record beyond the diff. That’s fine when I’m watching. It’s not fine two days later when I’m trying to reconstruct what happened.
So I added a Stop hook. After every Claude turn, a shell script checks whether real work happened since the last log entry. If yes, it blocks the stop and tells the agent to run my /rg:work-log skill first. The skill posts a dated entry to Notion. The next turn ends normally.
The wiring is one block in .claude/settings.json:
"hooks": {
"Stop": [
{
"hooks": [
{ "type": "command", "command": ".claude/hooks/work-log-check.sh" }
]
}
]
}
The script reads the session transcript and counts three things since the last log entry: file edits, git commits or pushes, and writes under plans/, docs/, or .claude/. Three edits, one commit, or one significant write trip the nudge. Anything less, the script exits clean, and the agent stops as usual.
The trick is the reset. When the script sees the work-log skill run, it zeroes the counters. So the count measures work since the last log, not work since the session started. Two batches of work, two log entries.
Two escape hatches keep the hook from turning into a nag. It short-circuits if it’s already inside a block cycle, so the model can’t loop forever. And a regex searches for “skip the work log” in user messages, letting me opt out for a session by typing it once.
The hook itself is intentionally dumb. Shell and regex, deterministic, run on every Stop. All the intelligence (what counts as significant for this session, how to phrase the entry, which Notion page it posts to) lives in the skill. The hook’s only job is to make sure the skill actually runs.
The artifact is the work log itself, filled in across the week without me remembering to do it.
Thursday: review the week
The heaviest procedure. I read what shipped, look at the AI-generated code, and prep the update I’ll walk through with the CEO on Friday.
The template is fixed:
✅ Accomplished Since Last Check-In
🚧 Blockers
🎯 Focus for Next Sprint
📋 MVP Backlog Items Added
🅿️ Post-MVP Parking Lot
⚡ Decisions Made
📌 Action Items
🚩 Risks / Flags
Most of it fills itself in from the daily artifacts. git log fills Accomplished. The work log fills Decisions Made and Risks. The backlog fills the Items Added and Parking Lot.
I also walk through every feature that’s supposedly done and make sure it’s actually demoable, write the agenda for Friday’s meeting, and rough out the major work for next week.
The artifact is the CEO update document.
Friday: meet, ship, reset
I walk the CEO through the update.
After the meeting, two things happened. First, I tag a release. Staging gets pushed as PRs close, and a GitHub tag promotes a build from staging to prod. Friday’s tag is what users see on Monday.
Second, Friday is the start of next week. I open the backlog and move next week’s items into “planned.” By the time I close my laptop, Monday’s procedure is mostly done.
What I don’t do
No metrics review. Pre-launch, there are no metrics. No customer feedback review. Pre-launch, there are no customers. No retro on the procedures themselves yet, because I’m still learning which ones are right.
This is the cadence right now. It will change as soon as something demands it: a customer, a hire, a regulator, a missed week.


