Game Development Community

dev|Pro Game Development Curriculum

The Complexity Barrier

by Dan MacDonald · 09/02/2006 (4:14 pm) · 19 comments

www.planetthinktanks.com/dan/katsu_idle1.gif
Have you ever wondered why games are so fun to start and so hard to finish? How a project you were so excited about can become something you dread working on?

Anyone who's experienced this may attribute this lack of motivation and passion about their project to be their own failing, when in fact it may just be the result of hitting the complexity barrier.

So what is the complexity barrier? Simply put, it's the point at which a projects complexity prohibits you from making enough progress to keep you motivated. As a projects size increases the cost of integrating new features increases at an even faster rate. The reason for this is fairly straight forward, a game or any other large project is a series of interconnected features. Features that depend on or interact with one another, as the number of features and dependencies increases, so does the number of things you have to account for when you make a new change or add new functionality.

So what is the net result of the increasing costs of integrating new features? As the project grows you get less new functionality for your time invested. At a certain point you will hit the complexity barrier where it no longer seems worth your time to add a single feature to the project. These increasing integration costs are also what limit the size of a project any one individual can create.

As these practical issues of getting less new functionality for your time and spending more time bug fixing then adding functionality affect you, you begin to experience psychological affects as well. Moving from early in the project where new functionality was coming a mile a minute to a point where adding one attribute to one object results in 45 minutes of testing and regressions tends to frustrate a developer. As frustration builds the motivation to work on the project collapses and you are left with yet another unfinished project. This point of abandonment is the complexity barrier. This barrier indicates the largest project that you can hope to create given your technology and resources. Most people hit this point before their intended game is even half way done. The odds against recovering from this are nearly insurmountable.

So how do you ensure you do not hit the complexity barrier in the middle of your project?

There are a number of things you can do, the first is obviously selecting a game design that seems well within your ability to finish. Something like a casual game or retro game. I guarantee (unless you've already shipped a bunch of games) you will be amazed at just how hard it is to finish it.

Aside from that there are three main things that I have identified.

1. Write as little code as possible
The less code you have to write to add features and functionality to your game the less it will cost you to integrate new features. This is what makes technologies like TGB so attractive, so much of the work has been done for you that you really have to do very little to make things happen. If you are building your own technology as you build your game functionality you will increase your dependency chain exponentially. Every feature you want to add to the game means you have to add new features to your technology. Leveraging existing mature technology removes that dependency chain and enables you to focus entirely on game code. This pushes the complexity barrier much farther out enabling you to create a lot more game play features before you hit it.

2. Have a great content pipeline
So you've managed to build your own technology, get all the game mechanics you want and all you have left is to fill out some levels. You seem to have escaped the perils of the complexity barrier, right? Well no, what happens when you decided that you really need to add a new enemy type, or the artist wants to add some additional animations to the main character. Perhaps an animated tile would look really good in your level? If you (like most do) neglected to build a suite of tools that enable you to make these kinds of changes without writing more code you can still slam right into the complexity barrier. If every new enemy type requires you to sublcass a new class from your "CEnemy" class and implement it's interface all over again you will find you suddenly lose motivation to work on making new levels for your game.

Competing your technology is just the beginning, you'll find that once functionality stabilizes building your content and adding new assets will become a bigger headache then building your technology ever was.

3. Plan to spend more time building your game then you do working on its code.
This tip is a little more abstract. It ensure that you have the right focus for successfully completing your game. I know people who spend months (or even years) working on their technology only to bust out 30 levels in as many days, slap a shell around the thing and stick it on the market. It may be code complete but it's not a finished game. Customers don't care how much time and energy you put into coding the game, they are only interested in two things. The games design and it's production values. This is what customers will be willing to pay money for, to them the technology is invisible. So don't spend all your time focused on building game features and gloss over the most important features of a game, its design and production.

There is a lot more I could say on this topic but I will leave it there, to some of you this may be old news but I hope that it will be of use to developers who find themselves defeated by their projects and chronically unmotivated.

#1
09/02/2006 (5:10 pm)
Interesting reading. Unfortunately, I've hit that barrier a few times. :(
#2
09/02/2006 (5:15 pm)
Brilliantly written, Dan. Thumbs up.
#3
09/02/2006 (5:50 pm)
"Anyone who's experience this may attribute this lack of motivation and passion about their project to be their own failing, when in fact it may just be the result of hitting the complexity barrier."



...or maybe you, Dan MacDonald, are trying to come up with reasons why you haven't finished your own game, Katsu... When in fact it's just because you're a big sissy! ^-^
#4
09/02/2006 (5:55 pm)
SILENCE! >_<

You may be pleasantly suprised soon enough ;)
#5
09/02/2006 (6:28 pm)
I gotta agree with AdamD on this one - great write up, I hope every indie developer gets a chance to read this. Succinct, well reasoned, cleanly presented. Nice.
#6
09/02/2006 (10:30 pm)
What you describe hits it right on the head. I have gone through the process a few times already, and having read that beforehand would have been a big help.

Pride in the past has set my dreams back a few months/years. So to any start-up who is new to the indie thing, heed these words and those of Jeff Tunnell also. Time and children will be saved.
#7
09/02/2006 (11:16 pm)
And then there's the innocent artists who make the mistake of suggesting a slight change in a feature to a coder who has hit this complexity barrier. And then they get to listen to Robert Blanchet vent. heh heh. ;)

But it's all cool because Mr. Roberto is a coding machine. Domo Domo...
#8
09/02/2006 (11:30 pm)
Good read. Nice insight.
#9
09/03/2006 (1:26 am)
> There is a lot more I could say on this topic but...

You definately should! Great read!
#10
09/03/2006 (2:29 am)
Aye, I like the sentiment here Dan. Pretty much anyone who has finished a game has pushed through all of this stuff. Indies have it doubly hard in that by and large, it takes longer. (By indie I mean "havent quit thier day job" indies).

More!!
#11
09/03/2006 (8:46 am)
Yup,

I have to admit that in spite of their simplicity, some of the little budget games I have worked on were the most gratifying.

You are still excited about the game and the idea of playing it when it is actually released. Which is pretty much the opposite of the big projects.
#12
09/03/2006 (9:41 am)
Please do say more on the topic.
#13
09/03/2006 (2:20 pm)
Agreed entirely. Our project has been 90% complete for about 30% of its development time so far... It is a bit of madness. Ah well... at least I expected it -- this thing you mention is something a good number of indie-types haven't seen yet... Hopefully your advice will help 'em get through it the first time. btw- Where'd that little ninja guy at the top of the post come from? He's pretty slick.
#14
09/03/2006 (6:08 pm)
Very interesting read -- and to think, I kept blaming my all my unfinished projects on ADD when in fact it was this complexity barrier.

All jokes aside, this was quite a good read, well written, to the point and educational. Thanks.
#15
09/03/2006 (6:42 pm)
@Tim: That's Katsu, I added him after the fact for my buddy Mr. Boeh. ;)
#16
09/04/2006 (11:46 pm)
This is interesting and I think it plays into the blog I posted last year comparing game development to exercise. If you aren't in the proper shape to tackle a project then you'll hit this "complexity barrier". All it really is, is your limit as a developer at a certain point in time. I think that choosing an appropriate scope is the most important thing you can do.

Truth be told I run into people everyday who are so clueless as to how hard a game is to make and it straight up pisses me off. Someone I know actually suggested some art somewhere was done by a second or third rate artist, meanwhile something he produced is still lacking quite a bit in comparison. I've also seen plenty of other people bash many other games and even successful designers. To which I say the most important thing is to respect the work of everyone because none of it is that easy. Of course there's the put up or shut up mentality. At least if you're going to dog someone's work you'd better have proof that you can do better. It seems most of the time though that the people who do the best work are simultaneously the most modest because they actually put themselves to the test on a regular basis.

Basically, yeah ... most people would be mind f'd if they actually finished even a simple game at how radically complicated it can become.
#17
09/05/2006 (9:18 am)
Tru dat, Jeremy!
#18
09/05/2006 (12:18 pm)
well now I feel a little better about some of my projects that "didn't make it" I'll try some of these strategy's. I can second the content pipeline portion. My first C++ project, a text based game died because
Quote:If every new enemy type requires you to sublcass a new class from your "CEnemy" class and implement it's interface all over again you will find you suddenly lose motivation to work on making new levels for your game.
#19
09/07/2006 (7:00 pm)
Exactly what I wanted to hear coming into my first TGE project! Thanks! I'll have to remember this for the future! :)