One of the most important thing I've learned about making games is planning. It's one of the most difficult things to do right, believe it or not.

Underplanning
Underplanning causes a lot of problems because there are a lot of times when you try to add a new feature, only to realize that you have to re-code most of the things you did a few weeks ago to suit it.

Overplanning
Those who used to underplan tend to overplan, sometimes when giving instructions to other people. This can be almost as bad as underplanning. For one thing, you're planning something that you might not even need in the future.

What's worse is that every bit of planning makes the game more inflexible. This really hurts when you realize that some piece of code is impossible. It has the same effect as underplanning: You'll have some obsolete bit which you need to throw out but it's too ingrained into the game. Also, when giving orders, like for graphics and design, your limitations could prevent your assistant from doing something that might the game better.

The balance?
The right balance is in planning everything, but giving all of them as much flexibility as possible. If you have a game, scout out all the core parts of the game, and spot every point that things will rely on.


Don't plan as you go along
Planning only the next step is asking for trouble. Usually you'll need to backtrack to add a feature that you're going to add 3 steps later. Instead of having a formula with 3 variables, you might need 4 of them in the future, and going back to change every formula is a waste of time and effort.

Plan everything you're going to do, but not but don't work on the details yet. Things like stats, the actual numbers, height of jump, hair color, you won't know most of the things, so you'd better leave them blank because you could change them at any time.

Every engine, every level, everything, should be planned in advance. Think of it like a puzzle. You have no idea what puzzle piece goes where, so you place them in areas, by color, or sometimes by shape, with the most obvious parts first.

If you can't plan your entire game in advance, then your game won't be completed. Just remember to avoid the minor details for now.


Seeing the future
Now this is a useful trick. Instead of planning what features you want to put out - plan how you want the game to play, and then create features to suit it.

Most high-quality, boring games are boring simply because the designer didn't have a vision for the game. He had no idea what it would turn out like, and just went ahead with it.

Try to write a story or imagine a video clip of how the game will play out. If you can, write a review of how you want your game to be. It'll tell you what features you need and what you don't.

Remember, features are there to make your game what it is, not the other way around.


Dead ends
There are times when you'll reach a dead end. Many times you won't be able to plan the design without the code, or the code without the design. My best advice is to go ahead and place the code first. Design can be changed to suit the code, but it's not always easy to suit code around design.

These things are what makes the skeleton of your game. They will give your game form. But you'll have to learn to build on and around them. And things like these are very difficult to change, so give it your best guess and backup your files in case you have to revert to them