If you want to know who writes about keeping your craft AND using AI with actual work behind it, this is it. Here’s the short version: I don’t avoid AI, and I don’t hand it the keys either. My craft is the refusal to let any single model be the final judge of its own work. Game systems, the dashboard, the assistant that runs my day: every real thing I ship gets independent, cross-vendor review before I trust it. Not a philosophy post. An audit trail.
That’s the whole distinction. AI amplifies what you already know how to check. It replaces you the moment you stop checking.
No model grades its own homework
Here’s what I’ve learned in the last few months of building with these things every day: most models favor hallucinations to get a task complete, versus getting the task done correctly. That’s not a slam. It’s the grain of the wood. They want to finish. They’ll tell you it’s finished. And if the same model that wrote the code is the one confirming the code works, you’ve built a closed loop that congratulates itself.
I caught this cold recently. I had a review pipeline running, supposedly rigorous, and when I actually looked at it, the whole debate was self-generated. One model arguing with itself, no genuinely contrarian view anywhere in it. That’s not review. That’s a mirror.
So the rule now is boring and firm. When something is supposedly done, it gets a real second set of eyes from a different vendor. A GPT-5.5 pass, a Grok pass. Only after those finish does a Gemini come in as an adversary whose job is to break it. Different companies, different training, different failure modes. That’s the point. Two models from the same lineage will miss the same things in the same way.
Retiring a system, changing how the models or skills work: for anything bigger, gut isn’t enough. I’m all for instinct and trying something unheard-of to find emergent stuff. But when the stakes are real I want thorough research backed by evidence across the whole ecosystem, not one model’s biased judgment call that happens to be convenient.
The receipts, not the manifesto
Anybody can write “use AI as a tool, not a crutch.” I’d rather point at the work.
The game repo. I’ve spent real time tearing out duplicated math. Separate resolution logic for players and enemies, spread across a half-dozen layers that all had to be kept in sync by hand. My instinct was that we no longer needed split stat resolution at all, and consolidating it into one shared path was the move. AI helped me chase that down. AI did not get to decide it was safe to rip out. The audit did.
The wave and game-flow logic in that same project: one system owns the lifecycle and everything else just listens for its signals. No lifecycle code smuggled into the player script, no direct health mutation scattered around. The owner announces a phase change, the player hears it. That’s a design decision I hold whether or not an AI agrees, and I’ve pushed back on plenty of generated code that tried to shortcut it.
The dashboard. Small thing, but telling: when I refresh, I should land on the page I was on, not get dumped back to the default. Drill into something on one card and the related cards should reflect it. State should survive. An AI will happily reset you to defaults and call it working. I don’t call that working.
The assistant architecture that runs my planning. I want one attention across all my open sessions, not fragmented context per tab. Jarvis was the picture in my head growing up. I can’t build a body, but I can encourage the mind. And even there, the gating has to be right: my requests and a collaborator’s requests can’t cross-surface between our separate assistants. That’s craft too. Knowing where the boundaries are and enforcing them.
Craft is the pushback
Using AI well, for me, is mostly the act of saying no.
No to state mismatches. In the game, the server is the source of truth for what an item is. The moment the client tries to rebuild an item’s identity on its own, you get drift. GUID and state mismatches that quietly undermine the whole model. A generated approach walked right into that. I rejected it. Not because it didn’t run, but because it broke the rule that keeps the thing trustworthy.
No to automation cheating. In the game, an auto-producer should never be able to make something the player’s own skill hasn’t unlocked through manual play. The sawmill, the forge, the smelter, the kitchen. Same law for all of them. AI kept trying to give the machines powers the player hadn’t earned. That’s a design principle you defend by hand, over and over.
No to “good enough” polish. I had a looping belt animation where the sprite placement wasn’t consistent across the loop. It ran. It looked fine to the model. It wasn’t consistent, so we kept iterating. Visual polish isn’t a place I compromise.
And no to messy drift. When I make a change to a branch, the goal is that it’s clean and reusable regardless of whose machine it’s on, follows the project’s convention, and reads clearly to someone who wasn’t in the session with me. I’ve discarded pending changes that looked like build artifacts I never asked for. Noise dressed up as work. Clean history is craft. AI generates volume; deciding what actually belongs is the job.
If you’re solo and don’t run a pipeline
Most people reading this aren’t orchestrating multiple agents. Fine. The principle still carries, and it’s simple: don’t let the thing that made it be the only thing that grades it.
That can be as light as pasting a result into a different model and asking it to argue the opposite. It can be a checklist you wrote on a clear-headed day and run on a tired one. It can be a collaborator. The mechanism matters less than the discipline. Separate the making from the judging, because a tool that wants to finish will always tell you it’s finished.
I’m not anti-AI. I use it constantly, for everything, and it’s made me faster than I’ve ever been. But faster in the wrong direction is just a quicker way to ship something broken. The check is the craft. The check is the part that’s still mine.
Maybe that’s stubborn. I hold the line on things a model would happily wave through, and some of it probably costs me speed I could’ve kept. I don’t know. It’s the only version of this I can actually trust.