How a non-developer built and shipped a real game with an AI coding partner
You don't need to be a programmer to build and ship a real game anymore. This is the proof, and the playbook.


I'm not a game developer. My day job is accounting. I spend more time in spreadsheets than in code editors. But I had a small idea for a tap-to-fly game, a laptop, and an AI coding assistant that could actually write the software for me — and a few weeks later the game was live on the internet, with a global leaderboard, that anyone in the world could play.
This book is the exact story of how that happened: every decision, every wrong turn, and every "wait, it can just do that?" moment — told so that you can do the same thing, even if the most code you've ever written is =SUM(A1:A10).
been waiting to "learn to program" first. You may not have to.
realistically looks like — including the limits.
You do not need a computer science degree, a team, a Mac, or money for servers. You need an idea, a few hours here and there, and a willingness to describe what you want clearly.
Most "build a game" tutorials invent a tidy example and walk you through it. This one follows a real game that's really live, built in the open. When you read "here's how we added a global leaderboard," it's the leaderboard real players are using right now. The screenshots are real. The mistakes were real and cost real hours.
And the through-line — the thing that makes any of this possible for a non-developer — is that I didn't write most of the code. I worked with an AI coding partner. My job was to know what I wanted, describe it, look at the result, and say "yes" or "not quite, here's what's off." The AI's job was to turn that into working software, explain trade- offs, catch its own bugs, and remember the plan between sessions. Throughout the book, the 👉 Working with your AI partner boxes show you exactly how that collaboration works in practice.
Jubo is a one-tap arcade game — tap to fly your little purple comet-bird, dodge the obstacles, grab power-ups, climb the leaderboard. Simple on purpose: a small enough idea to actually finish, with enough room to keep making it better. By the end of this book it has themes, multiple game modes, online leaderboards, a fair in-game economy, daily rewards, and a path to the App Store.
One thing to know before you start: for almost the entire build, this game was called LEAP — that's the name you'll see in most of the screenshots and in the early chapters. Right before launch we renamed it Jubo, after its hero. It's the same game the whole way through; Chapter 15 tells you why we changed the name at the last minute, and why that decision may matter more than any single feature.
Read it straight through for the story, or jump to the chapter for the thing you're stuck on. Every chapter ends with 🛠️ Try it yourself — small, concrete steps you can do today. You learn this by doing it, not by reading about it.
Let's start where every project starts: with an idea, and the courage to keep it small.
→ [Chapter 01 — The Idea](01-the-idea.md)
The hardest part of finishing a project is choosing one small enough to finish.
The goal. Pick something I could actually build and ship — not a dream game with open worlds and multiplayer battles, but a complete, fun, small thing with a beginning and an end.
The snag. Every exciting idea I had was too big. "An RPG." "A racing game." Those are years of work for whole studios. When you can't code yet, a big idea isn't ambitious — it's a guarantee you'll quit halfway.
What we did. I went the other direction and asked: what's the smallest game that's still genuinely fun? The answer is the one-tap genre — games like Flappy Bird. One button. You tap to fly up; gravity pulls you down; you thread through gaps. A child understands it in three seconds. And crucially, it's small enough to finish — which means it's small enough to then make better, and better, and better.
That "small enough to finish, big enough to grow" test is the most important decision in this whole book. We picked a tap-to-fly game and named it LEAP. (That name rode along for almost the entire build — until, right before launch, we renamed the game Jubo, after its hero. Chapter 15 is the story of why a studio would rename its own game at the eleventh hour, and why it was worth the nerve.)
The lightbulb. Scope is the real enemy, not difficulty. A finished tiny game beats an unfinished masterpiece every single time — because once it's finished and live, you can improve it forever. Shipping is a habit you build on the small stuff first.
This is where an AI assistant changes the math for a non-coder. I described the game in plain English — "a game where you tap to make a character fly up, and you dodge pipes coming at you, and it gets harder over time" — and asked it to build the simplest playable version in a single file I could open in a web browser.
A few things I learned to do from the start:
should feel like. "It should feel floaty but responsive" is a perfectly good instruction.
tools, just one file." That decision (more in the next chapter) paid off for months.
new working session started by reading "where we are and what's next." The AI updates it at the end of each session. That's how a part-time project stays coherent over weeks.
too big — shrink it.
weekends?* If no, cut features until yes.
"the simplest possible playable version, in one file I can open in a browser." Don't worry about "good" yet. Worry about running.
→ [Chapter 02 — The First Playable](02-first-playable.md)
The goal isn't "good." The goal is "it runs, and I can tap it."

The goal. Get something on screen that I could actually play — a character that flies when I tap and falls when I don't. Ugly is fine. Buggy is fine. Playable is the bar.
The snag. When you've never built software, the setup is scarier than the building. Tutorials tell you to install five tools, create accounts, run mysterious commands in a black terminal window. Most people quit before they ever see their idea move.
What we did. We made one deliberate choice that removed almost all of that pain: the entire game would be a single file you open in a web browser. No installs, no build tools, no accounts. Just one file — open it, and the game runs. Double-click, play.
That sounds like a limitation. It was actually a superpower:
The AI wrote that first version: a glowing dot that flew up when I tapped and fell when I didn't, with obstacles scrolling toward me. It looked like nothing. It was thrilling, because it was mine and it worked.
The lightbulb. Reduce the distance between "I had a thought" and "I can see it on screen" to almost zero. That short loop — tweak, refresh, react — is the engine of the entire project. Everything else is just doing that loop a few thousand times.
The single-file, no-setup approach isn't just easier for you — it's easier to collaborate with an AI on, because the whole project is one thing you can both look at.
How the loop actually went:
what it changed in plain terms.
literally say "undo that, I liked the last one better.")
Two habits worth stealing:
("10% less gravity") and judge with your hands, not your head.
one file with no extra tools. That suggestion saved countless hours later.
for your idea. Avoid anything that needs installing tools on day one.
the urge to make it pretty.
ideas turn real. That speed is the whole game.
→ [Chapter 03 — Making It Feel Good](03-making-it-feel-good.md)
The difference between a toy and a game is a thousand tiny touches called "juice."
The goal. Take the working-but-lifeless first version and make it satisfying — the kind of thing where dying makes you immediately tap "again."
The snag. "Fun" isn't a feature you can add. It's the sum of dozens of tiny details, most of which you don't consciously notice while playing — but you'd absolutely notice if they were missing.
What we did. Game designers have a word for this: juice. It's all the little reactions that make the game feel alive and responsive. We added them one at a time:
best — a nudge to try again right now.
None of these change the rules of the game. All of them change how it feels to play. Add them up and a flat little demo becomes something your hands don't want to put down.
The lightbulb. Players can't tell you why a game feels good, but they can instantly tell that it does. Juice is mostly invisible and almost entirely responsible for whether people keep playing. Budget real time for it — it's not polish-at-the-end, it's the product.
Juice is a perfect thing to build with an AI, because each touch is small, self-contained, and easy to judge by feel.
How we worked:
options — screen shake, a flash, a sound, a slow-motion beat — and add one to try.
together over a few quick rounds.
A subtle but important point: I learned to protect the things that already felt good. Once the core game felt right, I'd tell the AI "the core feel is locked — add and decorate, but don't change the handling unless I ask." That keeps experiments from quietly ruining the part you nailed.
pops) — and add them one at a time, judging each by feel.
make noise. Ask the AI to generate simple sounds in code so you don't have to hunt for audio files.
handling as locked. Decorate freely; protect the foundation.
→ [Chapter 04 — Dressing It Up](04-themes-and-art.md)
You don't need an artist. You need a description and a willingness to iterate.

This chapter is written as we build it. What it covers:
stadium, and more) that the player can switch between — and why offering a choice makes people feel ownership.
glow drawn on the fly, so a non-artist can still ship a good-looking game.
Describe a mood ("retro 80s sunset, neon and purple") and let the AI translate it into colors and shapes. Judge by screenshot, refine, repeat.
One game, many ways to enjoy it — and a racing saga that taught us to listen to how a thing feels, not just whether it works.

The goal. Once the core "tap to fly" game felt good, the cheapest way to add depth wasn't a second game — it was more modes: different rule-twists on the same engine. An endless arcade run. A pure "one mistake and you're out" classic. A level-by-level challenge. A high-stakes Gauntlet. And, the one this chapter is really about, a racing mode. Each new mode is a fresh reason to come back, built on the foundation we already trusted.
The snag. Racing is where I learned the difference between works and feels right — the hard way, across about five rewrites.
Version one was a time-trial through the usual pipes: same course every run, and clipping a pipe slowed you down instead of killing you, so you raced the clock. It worked. I played it and told my AI partner the truth: it's frustrating — you're constantly correcting, you never build any speed, and there's no sense of flow. That one sentence — about the feeling — was worth more than any bug report.
What we did. We threw the pipes out. The new Race is an open sky: you build momentum by chaining floating boost rings, and clipping a hazard costs you that momentum instead of ending the run. Suddenly it had the rush I was after. But the next playtest note was just as telling: it's choppy — speed up, slow down, speed up — like gas-and-brake. The culprit was a tiny design choice (each ring gave a short turbo burst). We made rings feed momentum smoothly instead, and the stutter became a glide.
Then I wanted an opponent. We added a computer rival — and it was unbeatable, because it ran on a fixed "perfect" pace while I had to actually fly. So we rebuilt it as a real flyer with a skill level that makes it fumble sometimes. Now it was too easy. The fix was the most "obvious in hindsight" idea of the whole project: let the computer grab the speed boosts too, like I do. Once the rival played by the same rules, it became a genuine fight.
From there it almost designed itself: three rivals of similar skill, a Grand Prix of three races with points for each finish, and — because finishing a cup should feel like something — a podium celebration where the winners fly in and land on their steps, a trophy drops in, and confetti rains. Same engine the whole time. No second game.
The lightbulb. Two of them. First: *playtest feedback about feeling ("it's choppy," "no flow," "it's frustrating") is gold — more useful than "there's a bug," because it points at the experience, which is the actual product. Second: build modes on top of one engine, never fork it.* Every fix to the shared core — physics, themes, the finish line — improved all of them at once.
Competing against the world is the moment a toy becomes a game people talk about.

This chapter is written as we build it. What it covers:
cloud database tier.
cloud isn't reachable.
Ask for the free-tier path and for the offline fallback up front. Have the AI explain, in plain terms, what data goes to the cloud — you're the privacy owner.
Players can smell a money trap. Trust is worth more than a quick dollar.

This chapter is written as we build it. What it covers:
game, so the leaderboard stays fair and players stay trusting.
State your values as rules ("cosmetics only, never power") and ask the AI to hold the whole design to them. It will flag when a new feature would break the rule.
Making a fun game is half the job. Giving people a reason to come back tomorrow is the other half.
This chapter is written as we build it. What it covers:
come back next week** — and the features that serve each.
near-miss nudges, a weekly season reward track, login streaks, and quests**.
Ask the AI to map features to the three jobs above so you build reasons-to-return on purpose, not at random. Have it keep rewards fair-by-design.
Going from "it runs on my laptop" to "anyone on earth can play it" — for free, and automatically.
This chapter is written as we build it. What it covers:
itself — no manual uploading.
go live to real players.
one clean setup beats two half-configured ones.
Ask for the free tier and for "deploy automatically when I save changes." Have the AI write the automation once; then it just works in the background forever.
Even a team of one benefits from a room where progress announces itself.
This chapter is written as we build it. What it covers:
automatically — a living changelog your friends or testers can follow.
(like the book you're reading) — and why we gave each its own channel.
steps — and how to work around them.
Automation like this is a perfect AI task: describe the outcome ("post our changes to this channel when we publish"), and let it build the plumbing once.
audience, even a small one.
How do you know a change works if you can't tap through every version yourself? You teach the computer to check — and to show you.
The goal. Ship changes confidently without manually replaying the whole game every time — and, later, see how the game looks as a real phone app before owning the right hardware or paying for a store account.
The snag. A human can glance at a screen and instantly say "that text is covering the bird." A coding AI can't see — it works with code, not pictures. And early on I was only testing in a desktop browser, which doesn't prove much about how the game behaves inside a real phone app.
What we did. Two habits, both about proof over promises.
First, the AI verifies its own work. It runs the game's code in a test harness and renders screenshots of each screen, then looks at those images to catch layout problems — a banner over the bird, a button off the edge — the way a person would. "Prove it works" became a normal thing to ask, and it caught real bugs before any player saw them.
Second, the Simulator. When we set the game up to build as an iPhone app, we didn't need to own an iPhone to check it. Apple's tools include a Simulator — a fully working iPhone right on the computer screen. We launched LEAP inside it and watched the actual app boot up: home screen, buttons, the works, exactly as it would on a phone in someone's hand. Free, instant, and honest.

The lightbulb. "I can't test this myself" is almost never true anymore. Between code harnesses, auto-screenshots, and device simulators, there's nearly always a way to see a change working before you trust it — you just have to ask for it. (In fact, every screenshot in this book was made this way: the AI rendered each version of the game and captured it.)
Ask the AI to show you, not just tell you — screenshots, test results, a walk-through of the edge cases — before you believe something's done. The phrase "prove it works — show me" is one of the most useful things you can say.
The last mile: turning a web game into real apps people download — and discovering the final hurdle isn't code at all.

The goal. LEAP already lived on the web, playable in any browser. But "playable in a browser" and "downloadable from the App Store and Google Play" are different worlds. This stage is about turning the same game into a real app that installs on a phone from the official stores.
The snag. Two of them — and the second one was a surprise.
First, the technical one: an Apple App Store build can only be made on a Mac. For most of this project I'd assumed I could dodge that. Android can be built "in the cloud" on rented build machines, no Mac required, and that was the plan. iPhone is stricter — at some point a real Mac has to compile the app. So for a long time, iPhone was simply parked.
Then I got a Mac, and the whole iPhone path opened up in a single sitting. We installed Apple's developer tools, added the iPhone "wrapper" around the game (the same kind of web-inside-an-app shell we'd used for Android), and within the hour LEAP booted up inside a simulated iPhone right on the screen — home screen, PLAY button, the little ship drifting through space, all running as a genuine iOS app for the first time. Honestly, that part was almost anticlimactic. It just worked.
Which led to the real snag — the one nobody warns you about. *Getting the app to build is the easy half. Getting permission to publish it is the slow half.* To put an app on the App Store under a studio's name, Apple wants proof the studio is a real business: a registered company, plus a special business ID number (a "D-U-N-S number") that an outside agency issues — and that issuance can take up to two weeks. None of that is code. It's paperwork, a naming decision, and waiting.
What we did. We split the work cleanly into things the computer can do today and things only a human can decide.
The computer side we finished in one session: install the tools, wrap the game, and — crucially — prove it runs on a simulated iPhone before trusting anything. (A screenshot of the game actually running is worth more than any "it should work.")
The human side we wrote down so it couldn't get lost — one checklist the whole studio shares, because a single developer account publishes all our games:
Google's side is gentler: a one-time ~$25 account, no business-ID gauntlet.
The lightbulb. The blocker was never the technology. I'd spent ages assuming "ship to iPhone" was a hard coding problem. It turned out the code took an afternoon — the real long pole is a business decision (what are we even called?) and a paperwork clock I don't control. Knowing that flips your whole plan: you kick off the slow paperwork first, in the background, and do the fun build work while it churns.
A checklist-and-dashboards stage is exactly where an AI partner earns its keep. I had it install and configure the Mac tools step by step — explaining each one as a non-coder needs — wrap the game, and actually launch it in the simulator and screenshot it so we had proof, not a promise. Then I had it write the shared launch checklist in plain English and file it where the whole studio can see it. The thing to watch: an AI will happily set up tools, but it can't make the human calls — it can't pick your company name, register your business, or pay Apple. Ask it to call those out separately so you always know which balls are in your court.
The skill that replaced "learning to code" wasn't a new programming language. It was learning how to collaborate with an AI that already knows them all.
This is the chapter the rest of the book is secretly about. Every other chapter is a what — leaderboards, hosting, retention. This one is the how it was possible at all for someone who doesn't write code.
The goal. Turn a person with ideas (me) and an AI that can write software into a team that actually ships.
The snag. An AI coding assistant is wildly capable, but it isn't magic and it isn't a mind reader. Treat it like a vending machine — type request, expect perfection — and you'll be frustrated. Treat it like a talented teammate who needs clear direction and honest feedback, and it's transformative.
What we did. Over the project, a handful of habits turned into a reliable way of working.
and I don't need them. "It should feel floaty but responsive" and "players should feel a little panic when the screen gets crowded" are excellent instructions. The AI translates feelings into code.
steps you can actually judge beat giant requests you can't.
text is too small and it doesn't feel exciting when I win" is gold. Point at exactly what's off; the AI fixes faster the more precisely you describe it.
conversation starts fresh. We kept a short "where we are / what's next" notes file in the project that the AI reads at the start and updates at the end of every session. That single habit is why weeks of on-and-off work stayed coherent.
locked, don't change it unless I ask."* Otherwise a new feature can quietly undo an old win.
ask it to verify — to test its own changes, render screenshots, or reason through the edge cases — before declaring something done. "Prove it works" is a fair and useful request.
explained why it did something, I understood the project a little better — enough to make better decisions next time. You absorb a surprising amount just by collaborating.
The lightbulb. The valuable skill in this new world isn't memorizing syntax — the AI has that covered. It's knowing what you want, describing it clearly, judging the result honestly, and keeping the plan. Those are taste-and-communication skills, and you already use them every day. That's why a non-developer can now do this at all.
most important input in the whole project.
play the game and tell the truth about how it feels.
collaborator, not an authority.
are and what's next." End every session by having it update that file.**
you got and what you wanted. Precision is the cheat code.
before we move on?"*
Every so often you stop adding new things and go looking, on purpose, for what's quietly broken.
The goal. A game that keeps growing also keeps collecting tiny cracks. A countdown that's right for you but wrong for a player in another timezone. A button that can fire twice if you tap it fast. A saved "ghost" race that gets silently cut short. None of these crash anything, so nobody files a complaint — they just make the game feel a little off. A bug sweep is a session where the whole job is to hunt those down before a player ever meets them.
The snag. You can't fix what you can't see, and the worst bugs are the polite ones that never announce themselves. Reading 4,500 lines of code looking for "anything subtly wrong" is exhausting and easy to skim past.
What we did. We pointed the AI at the game in small, named areas — "review only the racing mode," "review only the leaderboard," "review only the daily rewards" — and asked it to report concrete bugs with exact line numbers, ranked by how badly they'd hurt a player. Then we did the part that actually matters: we checked every single claim against the real code before changing a thing. The handful that held up were fixed; the rest were thrown out.
The keepers from this round were exactly the quiet kind: the daily-reset clock counted down to the wrong midnight for anyone outside one timezone; a "watch an ad for double coins" button could burn your reward if the ad failed to load; and a slow race could get its saved ghost truncated, which then skewed the next race's progress bar.
The lightbulb. The AI's first sweep flagged a dozen "critical" bugs. Most of them weren't real — it had guessed at problems that the code already guarded against. That sounds like a failure, but it's actually the whole technique: treat the AI's bug report as a list of suspects, not a list of verdicts. The cost of a wrong suspect is two minutes of checking; the cost of a missed real bug is a player having a bad time. Cast a wide net, then prove each catch before you act on it.
probably isn't one.
real result, not a non-answer.
when a change would alter how the game feels or plays.
of weeks. Adding-features time and finding-bugs time are different moods; don't blur them.
proof for each before you approve any fix.
→ [Chapter 15 — The Rename: LEAP Becomes Jubo](15-the-rename.md)
The bravest thing we did to the game wasn't a feature. It was giving up a name we'd used for months — on purpose, right before launch.
The goal. Give the game a name it could actually own — one that could grow into a brand, a character, a thing people recognize — instead of a nice-but-generic word that a hundred other apps already share.
The snag. The game already had a name. LEAP. We'd been calling it that for the entire build. It was on the title screen, in the screenshots, in every chapter of this book, in our own heads. Changing it meant admitting the name we'd been happily using for months wasn't the right one — and doing the swap late, when the easy, comfortable move is to leave it alone and ship.
And here's the quiet trap: "LEAP" isn't a bad name. It's punchy, it fits a jump-and-fly game, it feels good to say. That's exactly what makes it dangerous. A name that's merely fine is the hardest kind to give up, because nothing is obviously wrong with it. You have to talk yourself out of "good enough" and toward "right."
What we did. We stepped back and asked a bigger question than "what should this game be called?" We asked: what makes a game brand last for decades?
Look at the games that became household names — Sonic, Mario, Kirby, Crash, Pac-Man. Notice the pattern: they're named after a character, not an activity. Not "Fast Hedgehog Runner." Not "Jump Quest." A hero — a face you can put on a shirt, a plush toy, a sequel, a spin-off. The character is the thing people fall in love with, and the character's name becomes the brand. The game is just where you first meet them.
"LEAP" described what you do (you leap). It had no hero in it. And as a plain English word it's everywhere — try to imagine trademarking "leap," or being the top result when someone searches it. You can't own a common verb. It's crowded, generic, and unprotectable.
So we made two decisions at once, and each one made the other stronger:
"Jubo" isn't in the dictionary, and that's the entire point. It's short, friendly, easy for a kid to say, and — because nobody else is using it — it's the kind of name a small studio can actually trademark and own. "LEAP" you share with the whole world. "Jubo" is ours.
Then we did the unglamorous cleanup that a real fresh start requires. We changed the name everywhere it's a name — the title screen, the store-listing plans, this book. And we wiped the old leaderboard. It only held a handful of throwaway scores from testing — no real players had truly competed yet — so there was nothing to lose and plenty to gain: Jubo starts with a clean board and a fair, empty ladder. Day one for the brand is day one for the scores.
The lightbulb. A named character is the real asset — the thing that makes a studio sellable. A game can be copied. A genre is free for anyone to use. But a hero with a name, a look, and fans is intellectual property — the one thing that's genuinely yours, that can grow into sequels, merchandise, and a studio someone might one day want to buy. We weren't just relabeling a game. We were creating the first real piece of property the studio owns.
And the timing was the whole trick. Pre-launch is the one cheap moment to do this. Before a single real player has learned the name, before it's printed on a store page people have bookmarked, before reviews and word-of-mouth are tied to it — a rename costs almost nothing but nerve. One month after launch, the same change would mean throwing away every player who knew the old name. The window was open right now, and it was about to close for good.
That's the honest, slightly uncomfortable heart of this chapter: choosing the long-term brand over the sunk cost took a gut-check. We'd spent months on "LEAP." Every instinct says keep going, you're almost done. But building something meant to last sometimes means spending your last cheap window on the least glamorous task on the list — and trusting that a name you can own is worth more than a name you're merely used to. That nerve is the story.
A rename sounds like a five-minute find-and-replace — and that mindset is exactly how you break things. The word "leap" wasn't only the brand. It was also woven through the plumbing: internal labels, saved-progress keys, the web address, the code project's own name. Change the wrong "leap" and you either wipe every player's saved coins or take the live site down.
So the useful way to work with an AI partner here is to make it *draw a hard line between the brand and the plumbing. We asked it to change the name only where it's a human-facing word — titles, headings, the story — and to leave every technical identifier exactly alone, listing anything it wasn't sure about instead of guessing. Something as simple as: "Rename the game to Jubo in the writing, but do not touch anything that could be a settings key, a web link, or a filename — flag those for me instead."* That one sentence is the difference between a clean rebrand and a broken game. An AI is wonderful at the tedious, careful sweep; your job is to hand it the guardrails and keep the two kinds of "leap" from ever getting confused.
The most valuable thing we made wasn't a game. It was the system that makes games — the moment the project stopped being "a game" and started being "a studio."
The goal. Stop hand-building every game from scratch. Build a repeatable line — a set process that carries an idea from a single sentence all the way to a finished, sellable app — so that two people can ship not one game, but many.
The snag. Up to now, everything was handwork. We designed each screen by hand, made each store picture by hand, dragged each file into the right folder by hand. That's fine for one game. It falls apart the moment you want a second, and a third. The bottleneck was never the computer — it was us. Every game needed a founder's hands on every step. A studio that works that way can only ever be as big as the hours its founders can stay awake.
There's a quieter trap, too. When everything lives in one person's head — how we name things, where files go, which steps come in which order — the company is that person. You can't hand it to a teammate, and you certainly can't sell it. Knowledge that isn't written down isn't an asset. It's a liability wearing a disguise.
What we did. We stopped thinking of ourselves as people who make games, and started thinking of ourselves as people who build the factory that makes them. Three moves, together:
The part I'm proudest of is how we made that automatic copying safe. The naive way is to hand the robot a password and hope it never leaks — and stored passwords are exactly the thing that leaks and hurts companies. So we insisted on the modern, keyless way instead: our build system proves who it is directly, and briefly borrows only the access it needs, only when it needs it. Nothing is stored, nothing can be copied off a laptop, nothing has to be changed if someone leaves. It was a few more steps to set up — and worth every one.
And we set the whole thing up once, at the company level. It now covers every game and every teammate, on any device, with nothing to install and no secret to hold. When my co-founder pushes a change from his own machine, it just works. He never had to set up a thing.
The lightbulb. The factory is the asset — not any game that rolls off it. A game can be copied. A genre is free for anyone to use. But a documented, running system for producing games cheaply and consistently is a real, ownable thing: it's what lets two people act like a much larger team, it's what a new hire can plug into on day one, and it's what an eventual buyer is actually paying for. Games are the output. The machine is the company.
There's a business shape hiding in here, too. Once the cost of trying one more game falls close to zero, you can afford to be wrong often and cheaply — ship many small, fair games, see which ones players love, and pour your attention only into those. That strategy is impossible by hand and obvious once the line exists.
This is the chapter where the AI stops being a helper and becomes something more like a workforce — but only if you make it write things down. The single most useful instruction we gave was: "Before you build any of this, describe the whole process for me in plain English, as a document a non-coder could read." That document became the blueprint everyone — human and AI — works from. Build first and you get a black box; write first and you get a company.
Two more things worth insisting on. First, make the AI verify its own work end-to-end, not just claim success — ours actually ran the real automation and then checked that the files had truly landed in the drive before it told me it worked. "It should work" and "I watched it work" are different sentences, and you want the second one. Second, when the AI offers you a quick-but-sloppy path and a slightly-longer-but-proper one — like storing a password versus doing it keyless — take the proper one now. Foundations are the things you can't cheaply redo later. The AI will happily do it right if you ask; it will also happily do it fast if you don't.
The goal. We had just rebuilt the whole game around a big idea: strip away every bolted-on mode and menu, and rebuild Jubo as two clean things — an endless arcade mode, and a Candy-Crush-style campaign of hand-authored levels. Twenty levels shipped to our private preview build, each one mathematically proven beatable. We were proud of it.
The snag. Then a founder actually played it. The verdict, typed from a phone at 1:37 AM, was the most valuable document the project produced that week: "Just played through all 20 levels in about 5 min. All of the levels seemed like the same. Not really sure why. Where are the enemies? Power ups? Was way too easy to complete and boring since no variety. Didn't see anything that was a boss to get past. Nothing happened after you beat level 20."
Every word of it was true. And here's the humbling part: our proof system — the one that guaranteed every level was beatable — had quietly encouraged the blandness. When you optimize for "provably safe," you drift toward wide gaps, gentle curves, and nothing that fights back. We had built twenty certified-boring levels.
What we did (plain English). Instead of throwing away the proof system, we taught it to prove harder things. We asked our AI game-design lead for a numbers-first diagnosis, and it measured exactly why the levels felt identical: every level lasted under 30 seconds, the flight path never left the middle quarter of the screen, and every gap was five times wider than it needed to be. Then it designed a 100-level campaign — five themed worlds of twenty levels, each world with its own enemies that behave differently: crows that dive off fenceposts, swarms of bees you weave through, laser gates that strobe on a rhythm, meteors that rake the sky, phantoms that only turn deadly when they turn solid.
The trick that made it all possible: every enemy's movement is pure math — a formula of time, with zero randomness. That means the same proof machine that checked empty pipes can now simulate every enemy, every moving gap, and every boss attack pattern, frame by frame, and refuse to ship any level a real player couldn't survive. Even the ten boss fights are proven: a boss in Jubo is a scripted gauntlet of readable attacks — walls of crows with one safe hole, sweeping tractor beams, coiling aurora serpents — and the checker flies every one of them before a player ever does. It caught three of our own design mistakes in the first hour, which is exactly what a good gate is for.
And the playtests kept coming — four rounds of them, each one a phone-typed list of things that still felt wrong. Round two: the first world was still too easy and the graphics needed to be better (a tuning bug was quietly flattening the difficulty we thought we'd shipped). Round three: the map was cluttered, the wings looked wrong, the old project name was still everywhere. Round four was the most granular yet: no visible progress bar for the character's evolution, evolutions arriving too fast to feel earned, coins always sitting dead-center in the gaps, a mini-boss that never shot anything. Each round the fix was the same shape: turn the complaint into something measurable, make the change, and make the proof machine re-certify all hundred levels before anyone played them again. By round four the "randomly" scattered coins weren't random at all — each one's position comes from a repeatable formula, so the checker can still prove every single coin is physically reachable. The game got harder, prettier, and more surprising, and the guarantee never lapsed.
Round five brought the best kind of feedback: ideas. Give the player a choice of two openings — one high, one low, a pipe between them. Let the bird finally shoot back, earning a new weapon at each world's boss. And from a friend in the Discord: what about cave levels, where instead of pipes the whole ceiling and floor rise and fall around you? Each idea had to pass the same bar as every complaint before it: the proof machine had to learn it. Forked pipes taught the checker to accept either opening; caves taught it to treat a winding tunnel as a thousand tiny walls it must fly the whole length of; and weapons — the easiest of all — needed no new proof, because shooting an enemy only ever removes a danger the checker already survived without firing a shot. The same round, a simulation of the laziest possible player caught two bosses that could still be beaten by parking in one spot, and both got new attacks that sweep every hiding place. When testers hand you ideas instead of bug reports, the game has crossed from broken to interesting.
The lightbulb. A guarantee is only as good as the thing it guarantees. "Every level is beatable" was never the promise players cared about — the promise is "every level is worth beating." The playtest note that stung the most ("all the levels seemed like the same") wasn't a request for more content; it was a reminder that difficulty, surprise, and spectacle are the content. The proof system's job was never to make the game easy — it was to let us make the game hard, fairly.
Raw, unfiltered playtest notes are the best prompt there is. We pasted the founder's 1:37 AM message into the session verbatim — typos, frustration, and all — and the AI turned each complaint into a concrete workstream, brought in its specialist personas exactly as asked, and reported back against every line of the original note. Don't sanitize your feedback for the AI; the annoyance is the signal. And when something "did nothing when tapped," the AI didn't guess — it traced the actual button events in a headless browser and found the button had been silencing itself. Insist on diagnosis before fixes; the first plausible explanation is often wrong.
builder admiring their own work. Write down their words exactly.
how long is a level, how much of the screen do you actually use, how often does anything threaten you?
the timid version of your idea, extend the checker — don't shrink the idea.
behavior the player must learn. One new behavior per world is plenty.
clear "here's what's next." Nothing kills momentum like beating the last level and having the game simply... stop.