Keep a list of all code areas with name, color, max memory, time/frame. Usefull for debugging, logging, profiling. Use a per-user profiles stored on HD to map type of error and severity to action (assert, log, ignore). http://www.incagold.com/pipermail/sweng-gamedev/2001-February/002883.html http://www.incagold.com/pipermail/sweng-gamedev/2001-February/002890.html www.gamearchitect.net Versioning! Important feature for file formats. First step in making tools: make a UI library => ensures a consistent look and feel. Then artists/users don't have to relearn as much every project. Debug: serialize and deserialize a default object as a test In debug build, serialize and deserialize are type safe (tag values with types). Better if debug and release builds are interoperable. Abstract player input: it helps with debugging and being able to replay. Readable data format in debug mode (including for network messages, etc.) Worked well: All changes to game state go through an "Arbiter." Arbiter contains a router that has different versions for single and multiplayer. Can still query data by going to the corresponding subsystem directly. Worked well: sniffing message stream instead of modifying all places where effect generated: simplifies architecture. Worked well: System A stores foos. System B can ask system A to store some extra data (opaque to A) with each foo. "ReadDirectoryChangesW" fuction so artists can drop a bitmap (or whatever) into a directory and it immediately appears in the game