Thursday, September 14, 2006

Idea Dump & Name Change

Over the last week or so I’ve had lots of ideas for the game and I’ve been typing away furiously to get them all down on paper. I even had a name change! I was originally going to call the game Code Wars as I envisaged players doing things like throwing unhandled exceptions at their opponents and silly things like that! Although the idea of programming constructs is still in there, it has now become part of the crafting system rather than the core game itself, so it’s Mod Wars now.

Decisions, Decisions!

I’ve been thinking about Mod Wars so much lately that I’ve actually managed to totally overwhelm myself before I’ve even got started. I have all these questions running around in my head and many of them I’ve written down. Questions such as:

  • Should I make the code platform-independent, including the client?
  • What Gui library should I use?
  • What about a networking library?
  • A transport protocol for network traffic?
  • Compression of traffic?
  • How should I store my server data – database or files?
  • If I went for database storage, what one?
  • How could I get my server hosted?
  • And on, and on…

All of these questions are valid and they will all need to be addressed at one point or another but thankfully I have been able to spot the trap that I was about to fall into…

Avoid the Analysis Paralysis Trap!

This is me all over; I get an idea for something I want to do, whether it’s a business I want to start, a game I want to write, a website I was to run etc. I get all these cool ideas and start writing them down and at first all is good. Then as my ideas unfold, I start reading up on the topics that I think I need to know about. The internet being what it is overloads me with information and very soon I have far more than I can handle.

I feel a need to get all the details right before implementation because of that old adage “failing to plan is planning to fail!”, which is something I believe in but the problem here is that you can get so bogged down in details (that you probably are not in a position to solve at the beginning) that you never get started. This is called ‘Analysis Paralysis’ and can be particularly rife amongst software projects.

Agile development methods such as Extreme Programming try to avoid this problem (and other development problems) by limiting the amount of documentation produced, focusing on incremental development of only small features at a time, on-going testing and so on. When I worked on Morde, I pretty much took this approach and I always asked myself, “what’s the smallest thing I could implement that I could build and test?” and I would do it. But I hit a big problem with Morde… Because it was so new to me, I simply didn’t anticipate around 60% of the development that I would end up having to do, and I only scratched the surface of my initial feature list. Because the code was built up day by day with no real foresight, it became a maintenance nightmare, almost impossible to extend.

So, what’s the solution? Well, I don’t know the answer to that as I’m not an expert! However I have some ideas that I am going to use for Mod Wars to enable me to get started without losing my sanity:

  • Write a basic feature list of all the things I can think of that I want Mod Wars to have
  • From that feature list, try to put together an idea for a basic framework that will support those features
  • This is the important one – in any area where I have unanswered questions, find away to encapsulate that part of the code into its own area so that I can make decisions later and be able to change the code accordingly
  • When I have a design for the whole framework, which uses abstraction to encapsulate all of my unanswered questions then I can use the “what’s the smallest thing…” approach to actually get started.
  • When in development, I’ll always be asking myself, “what could cause this code to change?” and “would it be easy to change this code if I had to?”

1 comment:

Emma Middlebrook said...

I'd definitely recommend database storage over files. MySQL is very popular these days and it has helpful connectors for use by C# and Java:

http://www.mysql.com/products/connector/