I shipped about a hundred commits last week. Multi-tenant architecture, self-service signup, Stripe billing with tier enforcement, a marketing site with features and pricing pages, product screenshots generated by Playwright. Picket went from “side project that works for one flower farm” to “thing that could theoretically onboard a stranger.”
I didn’t write most of the code. Claude did.
I’m not being coy about this. Every commit in the log says Co-Authored-By: Claude Opus 4.6. That’s not a vanity tag — it’s accurate. I described what I wanted, Claude wrote the implementation, I reviewed it, we iterated, I merged. Over and over, for a week straight.
And I’m exhausted. Which is the part nobody warns you about. You’d think offloading the typing to a machine would make the work easier. It doesn’t. It makes the work faster, which means you do more of it, which means by Friday you’ve made a hundred decisions you would have normally spread across a month.
Here’s the thing nobody tells you about AI pair-programming: the code is the easy part. The hard part — the part that actually matters — is knowing what you want before you ask for it.
Early on I learned that throwing a vague idea at Claude produces vague results. “Add billing” gets you something that technically works but doesn’t reflect any real product thinking. So I started using a structured workflow — Jesse Vincent’s superpowers plugin for Claude Code — that forces you to brainstorm and plan before you write a line of code.
The pattern: brainstorm the feature through a series of multiple-choice questions, narrow the design, write a plan document, then implement. It sounds like overhead. It’s the opposite. The brainstorming session surfaces decisions I’d otherwise discover mid-implementation — how many tiers? What gets gated? Should analytics retention differ by plan? — and by the time Claude starts writing code, it has a spec to work from instead of a vibes-based prompt.
That’s how I shipped a week’s worth of sprints in actual days. Monday was multi-tenant architecture. Tuesday, self-service signup and tenant provisioning. Wednesday, Stripe Connect, then Stripe billing with tier enforcement. Thursday, the marketing site — features page, pricing page, product screenshots auto-generated by Playwright. Friday, billing settings, usage tracking, invoices.
Each feature started with a design doc. Each design doc came from a brainstorming session. Each brainstorming session took maybe twenty minutes. The implementation took two or three hours. And because the plan was solid, the implementation mostly just worked — fewer wrong turns, fewer “actually, let me rethink this” moments halfway through.
And yet — I’m exhausted. That’s the irony. Claude is doing most of the typing. I’m sitting in a chair making decisions and reviewing diffs. It shouldn’t be tiring.
But it is, because the work compresses. A month of decisions crammed into a week. Every feature that used to marinate in the back of your head while you wrote the boilerplate — you don’t get that anymore. The boilerplate is done in ten minutes and now you need the next answer. Product thinking becomes a continuous output instead of something you do between implementation blocks.
I caught myself Friday evening staring at a billing settings page that worked perfectly, feeling like I’d run a marathon. Claude built the page. I just told it what to put there. But “just” is doing a lot of work in that sentence — because deciding what goes on a billing page means deciding what your pricing model is, what usage looks like, what your customers care about, how much you show them. Those decisions don’t get easier when they come faster.
This is what working with AI actually feels like right now. Not effortless. Not replacing me. More like driving at a speed I didn’t know was possible and discovering that the hard part was never the engine — it was the steering.
Picket went from a single-tenant flower farm app to a multi-tenant SaaS with billing, signup, and a marketing site. In a week. I’m proud of it. I’m also going to bed.