Prototype code must be ugly, filled with bugs and smell bad – my #7DFPS post mortem

Recently, the 7dfps prototyping challenge got tons of attention. The idea of the challenge was to prototype a 1st person shooter in just 7 days. I participated, sort of. Since 7 consecutive days didn’t fit my plans, I decided to work on my prototype on 7 days scattered around a few weeks of time.

I brainstormed tons of ideas and started doing a multiplayer prototype.

What went right
I used some of my old code, and was able to knock together plenty of things (but not first person… and not shooter… but well, something)

In this very short period of time (bearing in mind 1 day meant few hours of work to me) I was able to put together very simple level loading system, animated character, raknet system for multiplayer (handled movement, animations ok enough) and some other stuff.

What went wrong
What I couldn’t get in shape: playable prototype. The most important part of prototyping is that you do something you can prototype. In retrospect, I can find that the main reason fort not being able to do playable (with some sort of goal, now it was just moving objects) prototype was this:

Using multiplayer library (raknet) meant some hours was spent making it work, and working on my own server-client system. Perhaps too much for a contest like this. It would have been okay, if I had earlier used the raknet library. Now it was too bit much work (for this prototype). Raknet is damn cool, and it made the difference that I even had any network system in place at all. It was hugely easy & fast to implement (just few hours), but for this prototype, it was few hours too much.

Second important thing was that I perhaps wrote bit too classy code. When I code, I nowadays usually try keep the code clean. I try get rid of useless methods, useless classes and keep things tidy. I believe that in all serious projects, that’s the best way to go. I’m too lazy to try clean the code just before the release.

But that’s quite wrong way to go with small prototypes. In prototyping, the code must be ugly, filled with bugs and smell bad. The shittier the code looks, the more copy & pasting you do, the better… as long as the code does the thing it’s supposed to do.

I think it requires talent to write messy code for prototypes. Refactoring & cleaning can come later.

What next time?
What is cool that I managed to try out raknet and even get it to work. That was the biggest thing for me. I could test the code with a buddies in different parts of this planet.

For the next prototype… I can consider writing smelly code, but it might be hard. I’ve spent more than half of my life writing/designing/thinking/doing-something code related stuff, and going back to very messy coding (even for a short period of time) can be difficult.

We’ll see.

Juuso Hietalahti