Raph Koster has a couple of posts on game Design Fundamentals on the Metaplace blog.
The first post notes:
The first thing to understand is that games are made out of games. A large game is actually composed of minigames. Even a small game is built out of very simple small games. The smallest games are ones that are so simple and stupid, you can’t lose. You can think of this as “game atoms,” if you like.
and gives three pieces of advice (summarized here – far more detail in the original post):
Advice #1: Design one game at a time (with each game having 4 components: input; model; feedback and mastery)
Advice #2: make sure the controls match up well to what the player is attempting to do.
Advice #3: make sure the player can actually learn from the feedback you give them.
The second post notes:
The fun comes from the mastery process. But what the player is mastering is the model. All games are mathematical models of something. We often speak, for example, of Chess being like war (we actually speak of lots of games as being like war!).
and gives three more pieces of advice:
Advice #4: try to stop thinking about what your game looks like, for a moment, and think about what it is actually modeling:
..(ask) yourself the following questions about your game atom:
* Do you have to prepare for the challenge?
…where prep includes prior moves? …and you can prep in multiple ways?
* Does the topology of the space matter?
…does the topology change?
* Is there a core verb for the challenge?
…can it be modified by content?
* Can you use different abilities on it?
…will you have to in order to succeed?
* Is there skill to using the ability?
…or is this a basic UI action?
* Are there multiple success states?
…with no bottomfeeding? …and a cost to failure?
Advice #5: check this list for every goal, every objective, every button press, every action a user can take, every decision they make.
Advice #6: watch others play your game – you’ll quickly see where you didn’t provide enough feedback, or where they can’t figure out the underlying model. (ie Prototype and iterate)
Budding social game designers should read both posts.