Skip to content
Back to Blog
aiworkflowshipping

Claude Code changed how I ship

Claude Code is not a replacement for engineering judgment. It is an execution layer. Here is how that split actually changes the speed and quality of shipping.

3 min read

Claude Code did not make me a better typist. It made me a better decision-maker.

That distinction matters. Most conversations about AI coding tools collapse into two camps: either the tool is going to replace engineers, or it is a novelty that writes mediocre boilerplate. Neither is how I actually work.

I treat Claude as an execution partner. I own the problem, the architecture, and the product call. Claude owns scaffolding, debugging loops, refactors, and the mechanical wiring of integrations. The split is deliberate.

The bottleneck was never syntax

When I shipped Namora, Moulavi, and now Jewels, the expensive parts were never "how do I write an Express route." The expensive parts were:

  • What must be true for this business to stop failing in public?
  • Which constraints are real, and which are habits?
  • What should be impossible in the data model, not just discouraged in the UI?

Those questions do not get faster because a model can emit TypeScript. They get faster because I spend almost all of my attention on them.

If I am deep in a Prisma schema at 1 a.m., I am usually avoiding a product decision. Claude removing that work is not laziness. It is reallocating the only scarce resource I have: judgment.

Decision layer vs execution layer

I keep a hard line.

I decide: problem scope, customer questions, data model, state machine, approval rules, what ships, what never gets built.

Claude executes: file scaffolding, repetitive CRUD, test fixtures, migration drafts, error-trace walks, mechanical refactors, MCP lookups against Prisma, SQL, Context7, and Figma.

That line is the product. If I let the model invent the architecture, I get a system that compiles and fails in production for reasons nobody can explain. If I refuse to let it touch code, I spend weeks on work that does not change the customer's outcome.

What this looks like on a real product

On Jewels, the product decision was simple and non-negotiable: a double-booking cannot exist. Not as a toast. Not as a warning. As an invariant.

Once that was decided, the rest was execution. Schema constraints. Transaction boundaries. Calendar queries. UI states that only render legal actions. Claude can generate most of that once the invariant is named. It cannot name the invariant. The business could. I had to hear it.

On Moulavi, the visa workflow was a state machine. Invalid applications were not a support ticket. They were a transition that did not exist. That is a design decision. The generated forms and status badges were execution.

Speed without amnesia

People assume AI-assisted shipping means you no longer understand the code. The opposite is true if you keep the split honest.

I still read the diffs. I still reject the clever abstraction. I still know where the transaction starts. What I do not do is hand-type the 14th repository method.

Understanding is not the same as authorship. I understand the system because I designed the constraints. Claude authored a lot of the text that enforces them.

The actual upgrade

The upgrade is not "more code per hour." It is shorter distance between a customer sentence and a production invariant.

Ask better questions. Make the failure mode impossible. Let the execution layer catch up.

That is how I ship.