For games, especially if you are designing, you are much less an engineer and much more a sculptor, constantly pushing and pulling things around, removing unneeded bits and adding extra bits. Plan for things to change,
- Get a playable version as fast as possible. Even if it all gets thrown away.
- Prototyping is a design step, a pre-production step.
- Its going to help in planning and identifying what really needs to be implemented.
- Design up front just enough to get a good idea of what you really need.
- Implement the minimal amount.
- Schedule the minimal amount.
- Art and sound and nice assets can wait. Make things work first.
And the last thing is my personal law for programming. It might sound stupid but it helps in about a million ways.
- Never write a function longer than 50 lines (including white space and comments). Decompose. make it fit on a single page.