in Project management

Cowboy Coders and the Hero Programmer Culture

Yeee-haaa! Get your compiler and debugger ready and saddle up, pardner. We got some codin’ to do.

Cowboy coders

There’s no denying it: The games industry is full of cowboy coders. Sure, other industries have their share as well, but something about game development seems to attract them like flies to honey. Maybe it’s living dangerously under the pressure of milestones, maybe it’s being able to surf the bleeding edge of technology, and maybe it’s because it’s the last refuge left for the rogue programmer. Whatever the reason, chances are you’ve worked with a cowboy coder or you’re one yourself (although that’s more doubtful if you’re reading this of your own will).

cowboy No, a cowboy coder doesn’t live in a ranch in Texas and wear a funny hat. A cowboy coder is a certain type of programmer who prefers to work in isolation, sets his own rules, and usually dives straight into a problem without much thinking or design (hence the “shooting from the hip” expression).

But not everything about the typical cowboy coder is negative. He is usually very talented; he knows it, and he makes sure everybody around him knows it too. He usually has very little respect for everybody around him, and he’ll try to work by himself, with his own rules and schedules. He can sometimes do great feats and can handle some of the most complicated code in this side of the Mississipi. Just don’t expect anybody else to touch his code. Not only will he be horrified by the thought, but nobody else has enough “skillz” to be able to understand his beautiful code.

To him, speed is life. Getting things working as quickly as possible is all it matters, so he’ll be able to really quickly put enormous amount of code together that actually do something. Just don’t expect much in the way of maintainability, reliability, tests, standard-compliance or any of those boring things. It’s working, so what’s the problem, right?

Does it sound familiar yet? Unfortunately, I suspect it does.

Hero culture

So, why is the games industry so packed with cowboy coders? The analogy of flies and honey makes it sound too nice. I was going to use worms and rotting carcasses, but then I would really show my bias. I really need to step back a second. Are cowboy coders born or developed? It’s the old nature vs. nurture question. I’m going to stick my neck out and say it’s 90% nurture in this case. There might be a certain predisposition based on personality or character, but it’s mostly what the person is used to, what is comfortable doing, and what everybody lets him get away with.

Unfortunately, a predominant company culture in the games industry is the “hero culture,” which seems to be the perfect breeding ground for those cowboys out there. A hero culture is one that values individual displays of effort above anything else. It’s a very human thing to do. Think about it, who got the poem written about him? The hero who rescued the princess from the clutches of the evil dragon in a bloody fight in front of the whole kingdom, or the one who quietly and efficiently destroyed the dragon eggs years before, ensuring many years of peace in the kingdom? Go figure. It’s the same thing with many companies in the games industry. Individuals who are willing to commit body and soul to a project (or at least stay long enough in the office to appear to be doing lots of work) are the ones who get rewarded and promoted.

While some might argue that such a culture provides a healthy dose of commitment, team building, and competition, it usually has very different effects. A hero culture fosters too much of a “can do” attitude. It’s a great thing to stay positive and be willing to do things. However, taking the “can do” attitude to the extreme leads to overcommitment and either to spectacular failures or an incredible victory against all odds (that happens to crash as soon as you look away, but it works, right?). Look at the track record of canceled, over time and over budget games, and then at how many shipped games that need patches and you can decide for yourself if that’s a prevalent attitude in the industry.

One of the other consequences of a hero culture is the lack of progress visibility. A programmer takes on an impossible task and disappears in his cubicle for a few weeks. He spends there nights and weekends (but no mornings or early afternoons) and when asked he reports that he’s 90% done. Only the day before the milestone is due he admits he’s having some problems getting that last bit done. Before you know it the task really needs another three weeks to be completed. I’m sure the publisher is going to appreciate such short notice.

cowboy Tasks will also be consistently estimated (or guessed is more like it) way shorter than they should be because nobody is learning from past mistakes and everybody continues to provide ridiculous estimates. All of this leads to unrealistic expectations from the company, which gets passed along as promises to the publisher. From this to a canceled project is a very small step.

An interesting social dynamic created by this culture is that since the hero culture values individual effort above all else, it ends up preventing the team from gelling and working together. Instead, it remains a group of individuals more or less working on the same project. Sometimes less than more. Let’s not even go into burn out, what it does to individuals, and the cost of staff turnover.

If things are really this terrible, how did we ever get anything accomplished in this industry? Here’s the rub: A culture like that probably worked fine ten years ago. Actually, it might have been the ideal culture for a company then. Very small teams and small budgets. Dealing with complexity and large teams wasn’t as much of an issue as conquering the technology and packing stuff into tiny amounts of memory. Priorities were different.

The future and now

What about now? Is that an acceptable culture? Are cowboy coders the ideal game developer? My personal answer is a resounding no (like you haven’t guessed that by now). I really think that priorities have shifted and now there’s no room in the industry for cowboy coders or the hero culture.

A recent Game Developer Magazine article about Everquest had a very telling message. Everquest, by its nature, has to be always up, and there’s no room for screw ups and heroics. Here’s an excerpt from the article:

[…] our experience has been that a solid professional eight hours a day delivers you far greater productivity than someone who works 14 hours a day every day.

That sounds like they’re choosing productivity over flash and individual effort and heroics. If we think of Everquest as the way many game projects are going to go in the future, that sounds like the death knell for cowboy coders.

Steve McConnell, one of my favorite writers, has a great chapter in After the Gold Rush (the second edition is titled Professional Software Development) about programmer personalities and heroics. Fortunately, Gamasutra has that chapter online. In particular, the closing thoughts are quite revealing:

As the current cohort of software workers grows older, the present hero-based approach to software development may naturally give way to an approach that relies more on working smart than on working hard. Software workers will become increasingly interested in the practices that allow them to complete their projects as promised and still be home in time for dinner.

It really sounds like it’s time to start thinking of different approaches to game development. Fortunately, some companies are already dealing with this, and hopefully that influence will slowly propagate to the rest of the industry.

What if you have such a talented cowboy coder that he’s single-handedly moving the company forward? Someone as talented as, say, John Carmack. Is that still something to be avoided? If he really, truly is that talented and the difference between his productivity and everybody else’s is a factor of 100, then you’d probably do well to keep him on the payroll. Watch out for the proverbial bus that leaves you without your superstar though. On the other hand, don’t ask me to provide funding for a company with an unproven “superstar” like that. I’d rather take a solid team any day of the week.

In the end, it’s time for all the cowboy coders to realize that their time is over. Civilization is advancing even towards the game industry and team-based cultures are needed. The cowboy way of life is no longer advantageous. They should either adapt to a modern development approach, or head towards the new frontier of handheld games and ride into the sunset towards the wild territories.