Shamus wrote an article on procedural generation and I figured I’d follow up with a few of my own thoughts.
Parametric stuff, rules based design. Random = creators decisions. Controllable = design patterns.
Do it manually first. Teaching the machine how to act is nearly impossible if you don’t know how to do it in the first place.
Consistency. Ensure that the “random” values are not truly random. Storing parameters instead of geometry allows elegant information processing.
Extensibility. Parametric systems will end up doing things you never expected. Build in hooks for all of this stuff. You never know when you might need it.
Randomization Standardization. Instead of randomizing everything randomly, create narrowed randomized templates. Subdividing the randomness instantiation will help to create a sense of purpose. Sets of similar objects can be created using the same system as vastly different ones, as long as there is a narrower template to work from.
Dealing with concepts instead of details. Parametric design means dealing with abstractions and design criteria instead of individual facets.