Monday, 21 June 2010

Stabbing at the scope

I've been building bits in and pieces for online games for about 18 months now, and the result is a considerable gain in experience and understanding of just how difficult bringing everything together coherently is going to be.

I have played with Torque, Unity, C# (and XNA), DirectX (v8), Python, LISP, Actionscript (and as little Flash as possible), Blender, Paintshop Pro and many, many (sob, many many many) more tools and libraries.

I have also played with WoW, Lotro, Vanguard, EQ, Runescape, Second Life and been hunted mercilessly in COD4 and COD6 (by my two teenage sons, on the family Xbox).

One conclusion I draw, after luxuriating in all this fun and learning for far too long, is that 'paralysed by choice' is a great aphorism for the wall of any organisation building software, let alone open-ended creative fun like games.

At least when you are writing a device driver to interface a gigantic flat-bed plotter to AutoCad you have the advantage that you know what will qualify as a solution... something which makes the plotter move as desired when AutoCad tells it to move.  Problems like device driver writing may well be difficult, and require arcane incantations in assembler or C and fighting with obscure APIs (don't try to tell me AutoCad in the mid '80s had an easy to understand API developer manual).  BUT at least these problems have an end-point.  YES it works, YES you finished.  Thanks and here's your cheque.

I _wish_ that creating a multiplayer online game was so straightforward.  Here's the spec... now off you go.

It is not that simple.

Firstly, and most significantly, I'm doing it by myself.  Well I should credit my sons, again.  When they are not chasing me around in COD4 or COD6 (Favela is their favourite killing ground) then they are playing football or chatting on MSN.  But when even MSN gets boring, which it apparently does after 5 or 6 hours in one session, then they sometimes make sound effects or music (#1 son) or Blender models (#2 son) for me.  This support activity has dropped off somewhat recently, but I think that is because of my lack of direction, rather than their lacking enthusiasm when I am clear about what I want.

But, as I digress... Firstly, for the second time of asking, I am doing the coding and engine building myself.
I considered using a world building engine, but these are really geared towards asset builders first and software developers second.  No doubt plenty of programming challenges would exist if I were to use some fantastic (and hugely expensive) MMO engine, but the world would just be a clone... and the result a poor imitation of AION, Vanguard, WoW, Lotro and the rest...

Perhaps I should expand a little on what I mean by 'scope'.  The scope of a project of any complexity is the full range of resources and activities required in order to complete the project.  I have learned the hard way that what the client thinks the sales team has promised them is very often different to what the senior project designer has 'documented' in their blame-transferring spec. email, which has been designed mainly to ensure that everyone except the programmers avoid responsibility when delivery fails completely or falls below expectations.

I am reminded of a famous example from my estimating training more than two decades ago.  Question:  How long will it take you to make tea ?  The ONLY correct answer from a professional (except a professional gambler perhaps) is: What do you mean by 'make tea'  ?

[if you're not sure why, then think about it... Do they want a cup of tea, Devonshire Cream Tea, tea at precisely 3.30pm, mint tea ?? does it ever stop]

In other words, the only answer is a question.  This sort of thing has tied philosophers and theologians in knots for millenia and you only have to glance at their output of successful MMOGs to realise it is the wrong direction.  So we steel our resolve and must draw our sharp incisive sword of professional software development and cut vigorously through the Gordian Knot.

Cutting the scope knot professionally (as a one-man MMOG builder):
Whenever a question is raised we will think about the wide ranging scope of possibilities attempting to spread before our eyes, and enlarge the project into it's third decade, and then choose the most obvious answer which shrinks the scope but without making version 1 unplayable.

It's a bit like having a buddy developer in my head who is both lazy and direct.  Whenever he notices me considering including this feature or that feature, he will scream NO NO NO A THOUSAND TIMES NO at me.  This is pretty much the approach of any successful developer of projects which actually get used in the real world to their immediate clients.  Concomitant strategies are YES BUT I CAN NO LONGER GUARANTEE ANY PARTICULAR DEADLINE and YES BUT IT WILL COST A POTENTIALLY INFINITE AMOUNT OF MONEY.

If you want something to work, then build something which works. THEN refine it, carefully, continuously checking to make sure it still works.

Oh, you say, I thought this was an MMOG ?  I want to see dragons, oh yes and flying bats in swarms and teleporting and PvP and self-assembling goblin robots made of sludge and rocks and, and, and...

YES we all want those things, really we do, but NOT first.  FIRST we want something which actually works and includes all the required layers which, in my imagination, an AAA MMO would have.

[Aside: at this point I notice that CAPITALS are becoming more frequent and am therefore going to stop this post pretty soon and get a drink of water.  Emotion and blogging seem to be caught in an intimate and unavoidable embrace]


So, what do we have so far ?

1. I know some stuff
2. Scope control is tricky and even worse when I am my own client.
3. Blogging begets a passionate writing style if you're not careful.

I was hoping to actually start to pin down something of the scope of the project.  That will be for another post.  I also want to describe my Second Life programming experience because it is perhaps the environment which is closest to what I want to achieve - while simultaneously being completely unlike what I want.

More later.

No comments:

Post a Comment