Thursday, January 21, 2010

Large-Scale Developing: A First Look

A Small Introduction

During my relatively short experience as a programmer, I have developed a few applications, although none of them are anything big. A few months ago, I started helping with the development of the online game HackWars, for a few reasons, mainly because I think it's a great game, and would love to see it go places. HackWars is a project orders of magnitude greater than anything I had ever worked on before, but I was (and still am) willing to learn and help out as best I can.

I could spend a while talking on the state of HackWars when I joined, but that has already been discussed over at Hackstock Design and Dev. Examining the state of HackWars naturally leads to the question: how should one approach the process of developing a large application? I will be exploring possible answers to this question, as well as looking at it through different perspectives.

A Programmer's Perspective

I joined HackWars as a programmer. This means I would be given instructions of some sort (fix bug X, work on feature Y, etc.), and then do my best to complete what was asked. This seems straightforward, and it is in most circumstances. With HackWars, however, the situation was very different. The primary developers were busy with various activities like job hunting and finishing off a Master's degree, so after some initial discussion, I was more or less left on my own. I would talk with the primary developers for maybe a few minutes to an hour per week. As a result, I spent most of the time fixing bugs (something that always needs to be done). This changed when DraconisRavenix, another recent player-become-dev, began to take the design and development process into his own hands. We had been given a rough idea of where the game was supposed to go next: adding a massive amount of new content and quests. He was able to take the rough specification and convert it into a much more specific set of tasks, and I was able to start working on code needed for the new content. The key player in this change was communication. Draco and I talk on an almost daily basis, and this enabled us to keep information and feedback flowing between us about the update in progress.

It's Not All In The Code

Unfortunately, most of the work-load needed for the new content update fell in Draco's realm: game balance and in-game content. This could potentially create a choke point on the speed of development process. However, I had another realization here, which I will explain. I was talking to Draco one day, and he started to complain about how arduous the task of editing NPC save files was. Somewhere in my head a lightbulb went on, and I asked him if a custom tool to edit the files would make things easier. We both jumped on the idea, and he immediately provided me with several specifications that would make the editing process better. Within a few days, I had produced a tool which was usable, although it still lacked many of the requested features. After another week or two, I had polished off a full version. This tool sped up the development process considerably, as well as making it much easier. The conclusion: external tools can be invaluable aids in the development process.

New Beginnings

With the coming of the new year, I have been asked to help out in another major project, which will be starting from the ground up. I will be assisting in the entire development process from the beginning, and I will be able to apply lessons I have learned from developing HackWars to this new project, as well as learn much more about the development process for large projects. I will still be developing for HackWars, of course, and will hopefully see it growing and improving. All this is in addition to my schoolwork, so it looks to be an awesomely busy year ahead.

1 comment:

  1. Great new blog and awesome read!

    Thanks for the 'kudos' given throughout but, I'm nothing without my team, even if the most active member is just you. You're right about the fact that "It's not all in the code" as without a direction, what is the code going to do? However, if done correctly the initial design is only a choke point at the start. You can't expect to build a house without a sturdy foundation, nor can you build a car without a chassis or a computer without a motherboard.

    As for the tools... they are a must. Tools are a developer's gift to the project, linking design to implementation creating a bridge by which those without 'internal knowledge' (i.e. source code) can easily travel.

    I'm extremely lucky to have a great partner in development such as yourself. Keep up the great work as it can (and will) inspire and motivate any team you are a part of.

    ReplyDelete