Shit Programmers Get Into

Patrick Wyatt wrote about his experience developing Starcraft in Tough Times on the road to Starcraft and it isn’t pretty at all.

I am a big fan of Starcraft since I was 13. The game could easily be one of the reasons for why I pursue a career of programming, with a keen interest in game development (not at the moment though). Starcraft always seems like the benchmark game for the RTS genre, together with Warcraft, especially after I participated in the development of Deep Quest. I was thrilled to be able to get an insight into the development of Starcraft.

It really surprise me that the development of Starcraft is hectic. I was expecting something more “pretty and nice”, instead I get something I could relate to, a development situation I have been in for the longest time, even today.

I am not too bad a programmer as I have bagged 7-8 years of code writing experience at a regular interval but I observed that I haven’t move out much of such hectic situations before. It sadden me that in local (Singapore) development environment, we are still going through the same hectic process. Personally, I pick up tips to deal with such development situations, but it doesn’t shield you completely and I feel I’m getting paid dealing with these issues instead of solving real world problems.

The post really magnify a number of these issues and I list some of them here. To have a more complete picture, I recommend reading the whole post.

Complete everything in X hours/days/months

Given the number of game units and behaviors that needed to be added, the changes necessary to switch from top-down to isometric artwork, a completely new map editor, and the addition of Internet play over battle.net, it was inconceivable that the game actually could ship in that time, even assuming that the art team, designers, sound engineers, game-balancers and testers could finish their end of the bargain. But the programming team continually worked towards shipping in only two months for the next fourteen months!

Almost every project I worked on would have some variant of such ridiculous timeline, and every of them will eventually get slipped even after I already warned them. I always see these as a lack of understanding of the programming aspect of the development. It is (really!) a much more complicated process. I stop treating these requests with any real seriousness because some work just can’t be cut. This will often leads to…

Groggy programmers

The entire team worked long hours, with Bob working stretches of 40 hours, 42 hours, even 48 hours programming. As I recall no one else attempted these sorts of masochistic endeavors, though everyone was putting in massive, ridiculous hours.

My experiences developing Warcraft, with frequent all-nighters coding, and later Diablo, where I coded fourteen-plus hour days seven days a week for weeks at a time, suffered me to learn that there wasn’t any point in all-nighters. Any code submissions [ha! what an appropriate word] written after a certain point in the evening would only be regretted and rewritten in the clear light of following days.

Working these long hours made people groggy, and that’s bad when trying to accomplish knowledge-based tasks requiring an excess of creativity, so there should have been no surprises about the number of mistakes, misfeatures and outright bugs.

I still had to put in around 30+ hours from time to time. Sometimes, I don’t even bother putting in more hours precisely because, I quoted “Any code submissions [ha! what an appropriate word] written after a certain point in the evening would only be regretted and rewritten in the clear light of following days.” It other words, those code written will be wasted by the time i recuperated, and I will have to waste more time fixing my bugs. People who doesn’t understand will attempt to discredit you or give you the “you are such a lousy programmer” look and it annoy the hell out of me. It stroke my ego and I fall for these easily. When you are not shield by a project manager, these things happened.

Not solving the root of the problem because of ridiculous deadline

So after fixing many, many linked list bugs, I argued vehemently that we should switch back to using Storm’s linked lists, even if that made the save-game code more complicated. When I say “argued vehemently”, I should mention that was more or less the only way we knew how to argue at Blizzard — with our youthful brashness and arrogant hubris, there was no argument that wasn’t vehement unless it was what was for lunch that day, which no one much wanted to decide.

I didn’t win that argument. Since we were only “two months” from shipping, making changes to the engine for the better was regularly passed over for band-aiding existing but sub-optimal solutions, which led to many months of suffering, so much that it affected my approach to coding (for the better) ever since, which is what I’ll discuss in part two of this article.

Many people don’t buy the “taking the longer path now to save future effort” mantra, another things that annoy the hell out of me. It seems to me that for them, if they don’t see it now, its does not exists. Then these bugs just keep coming back to delay the projects and they start yelling at the top of their voice, “why this isn’t fixed! I thought we have worked on this before!” This is one of the most WTF moment a programmer have to endure in its career. But for me the most important thing is

Sacrificing personal health and family/friends life, putting unheard hours into the project for?

The team was incredibly invested in the project, and put in unheard of efforts to complete the project while sacrificing personal health and family life. I’ve never been on a project where every member worked so fiercely. But several key coding decisions in the project, which I’ll detail presently, would haunt the programming team for the remainder of the project.

Often that not, this is not recognized. Even if it is recognized, it is not compensated. I put in my fair share of sacrifice. It's like a ritual, you do it for nothing. I get to the point that its no longer worth it. Why get yourself hurt for nothing? But as a programmer you will keep doing that. It's not for the recognition or compensation obviously, they never come, it's for yourself. You don't stop until its solved, isn't it. But these issues add up.

Conclusion

As I read the post, I keep nodding towards the scenarios I could relate to. Starcraft development doesn’t seems too different from the many I have been through, but of course, the author doesn’t get lost in the dark path (as mentioned in his Guild Wars development), while I am a still in.