Everyone has a game idea. Mine arrive uninvited, usually while I'm in the middle of something else: it's like a card game, but the cards argue back, a city builder where the city remembers what you did to it — and it's not happy about it. Good ideas, some of them. None of them is a game. They're moods.
The gap between the two is the whole job, and it's wider than it looks.
An idea is not a game
An idea is a feeling about a game that doesn't exist yet. The game is the rules. What does the player actually do — not in spirit, but in detail? What can they do, and what can't they? What happens when they win, and what does winning even mean here? Until you've answered that, you don't have a game — you have a wish. And you can't compile a wish.
This is the unglamorous truth nobody leads with: the inspiration — the idea — is the part that's already finished. Everything after it is perspiration.
Reminder #1 — Stop overthinking; start building.
A universe that needs collapsing
Before you write anything down, the game can be anything. Every "or maybe we could" is still alive, and that feels wonderful but produces precisely nothing. A pile of live possibilities isn't a design; it's a fog.
A GDD is where the fog collapses into a thing. Each line you write closes a door — no, it's turn-based; no, there's one currency; no, death is permanent — and the closed doors are the entire point. An unmade decision isn't freedom you're keeping in reserve. It's a bug you haven't reached yet.
It's uncomfortable on purpose. If writing your GDD doesn't feel a little like losing something, you haven't decided anything yet.
Reminder #2 — Make the decisions, and write them down.
Now there are two of you reading it
Here's the part that moved the GDD from good practice to non-negotiable for me: I don't build alone. There's an LLM doing a lot of the typing, and the model can't read my mind (yet).
Vague requests get you plausible, confident, wrong code — it'll cheerfully build the game it guessed, not the one you wanted. Point your main instruction file — the one the AI reads every session — at gdd.md, and the guessing stops. We're both working from the same decisions, because those decisions are shared context that carries across sessions. It also saves you retyping the same setup every single time.
Reminder #3 — Tell the AI where the decisions live.
Keep it a file, not a monument
So: gdd.md. Lowercase, markdown, living in the repo right next to the code — not a sixty-page document in a folder nobody opens twice. Version-controlled, so when the design changes (it will), you change a line and the diff tells you what you decided and when. A contract between me, future-me, and the robot — and contracts work precisely because they're written down.
It doesn't need to be long. Mine usually start life as four headings:
# <Game> — GDD
## Pitch
One sentence. If you need two, the game isn't decided yet.
## Core loop
What the player does, second to second — the thing they repeat.
## Rules
The non-negotiables: win, lose, resources, what's allowed.
## Out of scope
Doors I'm deliberately keeping shut — for now.
You're allowed to change your mind
So now you have a contract with yourself — and three weeks in, the idea doesn't play the way you imagined. Change your mind. A GDD is a draft, not a vow. If you're not having fun building it — or playing it — don't soldier on out of loyalty to a document. Edit the file, tear out the parts that died, start a section over from scratch if you have to. The GDD exists to serve the game, not the other way around.
Reminder #4 — Pivot the moment it stops being fun.
Write the file. RSS if you'd like to watch me keep deciding things in public.
