Though I complained at the time, I am grateful to have started my career in what I consider the boot camp of software development, the semi-conductor / hardware industry. Most people get their first gig as a tester or writing GUI’s for high level software.
I was employed as a tester for SCSI devices to start, but I must have been a good programmer even then because I was only in the test lab for two weeks and then offered a position as a developer. The reason I bring this up is that I believe that my “perfect code” affliction with previous game projects stem from where I started out in the industry.
You see, as a developer for SCSI, IDE… you had to know C, and assembly really damn well to even get a job due to the liability of bad code. It was a development environment where absolute perfection was always sought. The reason for this is simple; you have to stay ahead of the competition, which meant literally shaving clock cycles off your code. Not to mention that a lot of code was device driver related that chained to interrupts or pieces of code that had to fit on a 32-64K piece of NVRAM.
When you do that it has to be perfect. You can’t release non-flashable firmware for a hard drive interface and then send out a patch when you screwed it up. To make matters even more tense, it was SCSI which meant RAID (they didn’t have IDE RAID at the time) So all of the really big boys like AOL, EMC, Intel and anyone using RAID was using your software and hardware.
Needless to say, if you send a product to someone like AOL and it causes an entire RAID to get corrupted losing thousands of user’s info they probably just call their lawyers….not sure how they handle that.
A SCSI card I worked on
Unfortunately this mindset sorta boiled over into all my code including game development. I started tons of games that never saw the light of day. I would find that it ran on one system and not another because of a sound card issue, or a software change to an OS introduced a new problem….Then when I would get close to releasing the game it was out of style graphically, or the market was flooded with games similar….so on and so forth.
It has only been in the past five years that I have come to the realization that the perfect project is the one that never gets shipped. You spend so much time trying to make it better and bullet proof against errors that the schedule continues to creep and finally you are out of the game.
This is because with SCSI you deal with a very finite set of issues in a much regulated space. With games, there are too many variables to account for them all. I have also discovered that the last 10% of a project seems to be 90% of the project. It reminds me of the bridge in “Beyond Zork” where you try to cross and it says, “You are ½ closer to the other side. Then you try again and it says, “You are 1/4th closer than before” then 1/8th…and on and on. So you never get there basically. You just keep tweaking and tweaking and tweaking…
So the point of this blog is to awaken developers of all levels from newbies to veterans that may have my same affliction. Don’t try to make a perfect, bullet proof game or you will never get it out the door.
That being said, that doesn’t mean make a piece of crap that needs a patch by nearly everyone the day of release either. However, I do know that you don’t really have to be the best, just the first :)
You can read more and follow me and Neuron Games, Inc. here: