Shipping a Product in a Saturday

How to Build Products with AI

AI-native PRDswarm decompositionhappy path MVPbuild-buy-skillshipping discipline

It’s Saturday, 9:14 AM. Coffee’s still steaming. The kids are watching cartoons. I’ve had this idea grinding in the back of my head for three weeks: every morning my team drops a Slack briefing into a canvas — five bullets on Belkins pipeline, two on Folderly, one stray “you should look at this.” I read it on my phone in bed. I want to listen to it on my walk instead, like a podcast where the host is my own company.

Twenty hours of clock time later — most of it spent at brunch, on a walk, asleep — it ships. Sunday night, 9:43 PM, I press play on my phone and hear a 90-second voice memo of Monday’s brief. Real URL. Real . Real audio file in iCloud.

Cost: roughly four hours of actual hands-on work, $80 in API tokens, zero dollars in salary. A senior engineer would have charged me $2,000 for the same scope and shipped it in a week. That’s the gap. That’s the chapter.

The AI-native product cycle isn’t faster software. It’s a different shape of work.

The shape of the loop#

Every product I ship now passes through five stages, and the speed at which I move through them determines whether the thing exists by Sunday or dies in a Notion doc.

You compress months into a day by refusing to leave the happy path until users force you off it. Every detour you take before hour 7 is a detour you’re taking on imagination, not data. Imagination is a terrible product manager.

Hour 0 — Define the problem in human terms#

Most founders open a doc and write “I want to build an app that uses AI to convert Slack messages into voice content.” That’s a solution masquerading as a problem. You haven’t named the pain — you’ve named a feature.

Try this instead: “Every Saturday morning my brain dumps the same five things and I want my coffee to read them to me.” Now the solution has nowhere to hide. It falls out of the problem. TTS. Slack pull. MP3 in a folder my phone reads. There’s no clever architecture decision left to make.

I drop the rough idea into as a sparring partner before I write a single line. Tighten this. Pressure-test it. Tell me what I’m assuming that I shouldn’t be. The agent comes back with three questions I hadn’t thought of — do you want it on weekends? do you want a queue of past briefs? do you want a voice you’ll still like in week three? — and within ten minutes I’ve got the problem stated honestly enough to spec it.

Hour 1 — Spec, the AI-native PRD#

The PRD is one page. Anything longer is procrastination.

# Daily Voice Brief

## Problem
I read my morning Slack briefing on a screen. I want to listen to it on my walk.

## User
Me. Possibly other operators with the same workflow.

## Smallest valuable slice
1. Pull my morning briefing canvas from Slack
2. Convert to a 90-second voice memo via ElevenLabs
3. Drop the MP3 in iCloud where Apple Health reads it

## Done =
I press play and hear my brief at 7:35 AM tomorrow without doing anything.

## Not done =
No multi-tenant. No login. No mobile app. No analytics. No "AI features".

Three things make this PRD work. First, ruthless scope — the Smallest Valuable Slice is three steps, not ten. Second, the Not done section is bigger than the Done section, which is a sign you’ve thought hard enough about what to cut. Third, the success criterion is measurable in physical reality: I press play and hear my brief. Not “the user can.” Not “the system will.” I press play. I hear it. Or I don’t.

A PRD that takes longer than fifteen minutes to write usually means you don’t yet know what you’re building. Go back to Hour 0.

Hour 2 — Repo, skeleton, deploy in 30 minutes#

Here’s the opinionated stack I use to ship in a day. Not the best stack. The fastest.

The CLI walkthrough is genuinely this short:

npx create-next-app@latest daily-brief --ts --tailwind --app
cd daily-brief
gh repo create --public --source=. --push
vercel link && vercel deploy
# 8 minutes later, I have a URL.

Eight minutes. The URL is ugly — daily-brief-xyz.vercel.app — but it’s real. Real means it shows up in DNS. Real means I can text it to myself. Real means the project has crossed the line from “idea” to “thing that exists.” That psychological flip matters more than people admit.

screenshot
Vercel dashboard
daily-brief project showing first deployment URL and green checkmark on initial commit.
id: 19-build-products-1 · drop 19-build-products-1.png into public/screens/

Hour 3–6 — Build the MVP with Claude Code, swarm-style#

This is where the leverage shows up, and it shows up in a way that surprises operators who haven’t done it.

I open in the repo. Before I ask it to write a single line, I write a tight — twenty lines, max. Stack. Conventions. Don’t-touch zones. The file is for the agent, not for me. It’s a with project-specific scaffolding.

# CLAUDE.md
Stack: Next.js 14 app router, TypeScript, Tailwind, shadcn/ui.
Style: server components by default. No useState unless interactive.
Env vars live in .env.local. Never commit them.
Don't touch /lib/audio — that's the ElevenLabs adapter, hand-tuned.
Tests: vitest. One file per route.
Commits: Conventional Commits, one logical change per commit.

For a non-trivial MVP I decompose before I spawn. A 4-agent on a vague brief produces 4 different shapes that don’t fit. A 4-agent swarm on a tight brief produces 4 puzzle pieces that snap.

Spawn three .

They run concurrently. Claude Code does most of the typing. I review diffs, approve, run tests. The agent writes the code; I make the calls. By 1 PM Saturday, three files exist, each works in isolation, none of them know about the others. Wiring takes me another twenty minutes.

The trick that took me a year to learn: the agent is good at writing the code, terrible at deciding what code should exist. Decomposition is human work. Implementation is agent work. Mix those up and you’ll spend Saturday debugging instead of walking.

Hour 7 — Ship even when you don’t want to#

The single most important rule: deploy at hour 7 even if it’s ugly, even if there’s a known bug, even if you’re “almost done.”

Shipping creates information that planning can’t. The user with the bug tells you what matters. The user without a bug tells you that you wasted three hours polishing the wrong thing. Every minute past hour 7 spent on the closed loop of me + my code + my taste is a minute spent on the wrong inputs.

My Saturday version had a bug — the cron fired in UTC, not ET, so the first brief landed at 1 AM. I knew about it. I shipped anyway. I fixed it Sunday morning in eleven minutes because I had real evidence of what time the audio actually appeared on my phone, which is more useful than my Saturday-night theory of what time it should appear.

screenshot
Phone screen showing the deployed URL
Phone screen showing the deployed URL playing a generated voice memo, timestamp visible.
id: 19-build-products-2 · drop 19-build-products-2.png into public/screens/

The five rules of AI-native building#

These are the rules I wish someone had written on the wall the first time I tried to build a product with agents.

What you don’t build matters more than what you do#

The 80% rule. Cut auth. Cut the admin panel. Cut analytics. Cut the API docs. Cut the second tier of pricing. Cut the third feature. Ship the 20% that’s the actual value.

The other 80% gets built when a real user demands it — and most of it never does. The auth you built for “future users” who never showed up is dead code that breaks when you upgrade Next.js. The admin panel you built for the team you don’t have yet is a security surface for an attacker you do have.

Saturday’s project had no auth, no DB, no UI. Just a cron and three files. The day I share it with someone else, I’ll add auth. Not before.

The build/buy/skill matrix#

When you hit a feature choice, walk down the ladder before you write code:

Most “I need to build X” turns out to be a skill, an MCP server, or a $20/month SaaS. The first instinct of a former-engineer founder is to build. The right instinct of an operator is to buy until buying breaks.

Real spend math#

Saturday’s project, line by line:

A senior engineer at $200/hour, working a clean 40 hours, would have charged $8,000 to spec, build, deploy and document the same thing. Even at startup rates — ten hours, $1,500 — the math is brutal. I shipped for 5% of the floor price.

That’s not the headline. The headline is: I shipped on Saturday. The engineer ships next Friday. By next Friday I’ve already learned the cron-timezone bug, fixed it, added a second voice, and started thinking about whether other operators want this. The compounding doesn’t happen in the spend column. It happens in the calendar.

The price of an MVP fell ten years ago when SaaS commoditized infrastructure. It fell again last week when AI commoditized the build. The bottleneck is no longer money or time. The bottleneck is taste — knowing what to build.

Spotted something wrong, missing, or sharper? Email Vlad with feedback on this chapter →
Stay close

Edition 3 lands when this list says it does.

No course. No paywall. Operator playbooks weekly. 10K+ subscribers.