Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

What Good is a Design Doc for Anyway?


Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

Somebody once told me that game design docs don’t cover 90% of what makes a game fun. He was right about that. He also said that this made design docs worthless. He was wrong about that. So what good is a design doc for anyway?

Iterative development is generally considered the best way to make games: you do a part of the game, see what works and doesn’t, refine it, evaluate it again and so on until you have a good game or you run out of money. This type of development covers the 90% that’s not in a design doc.

Since you find what’s good by iteration, you couldn’t have foreseen it while writing the design doc ahead of time. Trying to decide in advance the exact duration a character stays in the air while jumping or the detailed behavior of the AI of enemies is an exercise in futility — that’s what iteration is for.

What the design doc is good for is the 10% that’s the core of the game, its very essence: what it’s about, what makes it unique, the overall vision, its overall flow, etc. The perfect design doc would detail all of the important big picture elements of the game while leaving out implementation details for the team to figure out by iterations.

For example, a level’s description could detail how the player will have to sneak through a medieval town while avoiding patrolling guards, to reach the castle where he gets ambushed by his arch-nemesis. It would describe the overall look and feel of the town, the memorable events along the player’s path and the dialogue of the cutscene during the final ambush. What it wouldn’t describe is the specific layout of the city, the specific appearance of each building or the AI of the guards — these are things better left until they can be tried out and iterated upon.

Purists of the agile approach may claim it would be better to iterate on 100% of the game — to try out the core concepts of the game and if they don’t work, change them! This would indeed result in a better game, but it would also cost a huge amount of money. If you started with a RTS and realised halfway through that it would have been better as a turn-based game and retool it to make it so, you’ve just thrown months of development out the window.

Making sure the core of the game is solid before starting development is essential in avoiding costly failures. You should iterate on what’s quick and easy to change, you shouldn’t iterate on things that affect the entire project.

Actually, you should iterate on the core of the game, but you should do so while writing the design doc. Then is the right time to think of wild ideas and explore how they’d work, to approach the game from many different directions. It’s cheap to change high level ideas while they’re just a piece of paper, so it’s the time to do it.

So what good is a design doc for? It’s good for defining precisely the vision of the game: what the game should be like from a high level. It’s not good to detail every fine detail about everything. A screenplay doesn’t cover 90% of what make a good movie: it doesn’t cover the cameras’ positions, the specific way actors play, the special effects, etc. yet it’s a critical element of making a good movie. Likewise, a design doc doesn’t cover most of what makes a great game, but it’s an essential tool in communicating the vision of the game.

10 Responses

  1. maxest Says:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

    nice article. but it could have been longer though :)

  2. Pag Says:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

    Thanks. I find it a good sign you think I should write more, rather than I should write less ;)

  3. maxest Says:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

    there is a lot of good game programmers who wish to write some nice games and they start doing this without a design doc and have problems somewhere in the middle of the project to end what they started. i think i belong to them :) although i have finished some nice game i know i had many problems with this and i know, that before i start a next project i need to design it first so i started to look for some good tutorial about writing design docs. i was very happy i found some page with header like “What Good is a Design Doc for Anyway?” and soon i regretted that it is so short :)
    i hope this “comment” will give you motivation to write something extended :P

  4. Pag Says:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

    That’s actually a good subject for a post. It’s true there are very few guides on how to write good design docs out there… I’ll probably write something among those lines soon. I won’t make promises as to when — I want to make sure I actually have something intelligent to say — but keep checking here and I should have something :)

  5. Pag on Games » How to Write a Game Design Doc Says:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

    […] In a recent comment, Maxest mentioned how hard it was to find information on how to write a good game design document (to sound like a pro, call it a GDD, pronounced Gee-Dee-Dee). Honestly, the reason there’s so little info is that it’s mostly improvisation at the start of every project. There’s nothing near a standard format. Still, some GDDs are better than others, so how can you write good one? […]

  6. Pag Says:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

    Ask and ye shall receive: I’ve written a post on how to write good, pro-quality design docs (http://www.pagtech.com/2006/07/04/how-to-write-a-game-design-doc/)

  7. Tito Says:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

    Google is great! And I’m happy it brought me to this page. I’m in the process of writing my first GDD and what you’ve provided here already is extremely helpful. Hats off to you ;)

    Cheers

  8. Courtney Says:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

    Do you feel like you receive a great deal of animosity from those who feel a GDD and even to greater extent, a game designer, are virtually useless? I’ve read many an article with a poor attitude toward designers, and though I imagine they are more or less useful depending on the project, do you think this is a commonly-held view?

    As an aside, I’m glad to have found your blog, it’s been very interesting and inspiring. Thanks for sharing your thoughts and experiences!

  9. Pierre-Alexandre Garneau Says:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

    Actually, I don’t remember meeting anyone telling me a designer or a design doc were useless — maybe they just didn’t dare tell it to my face, though… Still, I think that idea is less popular nowadays. When games were small projects, it was easier to argue that you didn’t really need clear design. With today’s huge projects, it would be really hard to complete anything without a specific plan of what you’re building — that’s the role of the GDD.

  10. AltaGid Says:

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

    Hello! Help solve the problem.
    Very often try to enter the site, but says that the password is not correct.
    Regrettably use of remembering. Give like to be?
    Thank you!