When starting a new project, it's tempting to dive right in with your sleeves rolled up and start making awesome, but it's often wiser to rein in those thoughts, and get all the boring stuff squared away.

This is what we're currently doing with our XNA project---we're not too concerned about what game we're making (yet); it's more a case of putting a good framework in place to make future development painless, and to minimise the gap between creating something new and being able to share it with the community.

For example, internationalisation (often abbreviated to i18n) is not something that's fun to bolt on later, after you've created an amazing game that you want to make available in as many different markets as possible. It's much better to solve that problem up-front, even if you only plan on releasing an English-language version, because separating out the data representing the English text from the codebase is nice and clean regardless.

Another example is ensuring that you only draw important GUI within the safe area, and elegantly handle the three common display ratios (of 4:3, 16:10 and 16:9). Converting a game that's hard-wired to widescreen to play nice on a 4:3 CRT display just ain't fun, and doing it at the end of a project is about a bazillion times less fun than just gritting your teeth and doing it correctly at the beginning.

That's the mode we're in now: create a generic framework for our future games that ticks all of the boxes, and narrows the gap between having an amazing game concept and launching an amazing game. So not too much exciting to report just yet, but we plan on being able to show something Real Soon Now.

Deployment

Also good to get out the way is deployment stuff. For example, making sure that your game and associated languages/libraries work and are easy to set up on a variety of platforms right through to the point of creating actual distributable installers for each platform you think you're going to target, before you've even written much game code. For me this is really important and helps me write as portable code as possible from the start. Unfortunately writing a game is 10% writing the game and 90% doing all the other crap like installers and business stuff.