EA Tiburon

Electronic Arts Tiburon was unlike any other place I’ve worked. Obviously every company is unique, with its own culture, but EA with its thousands of employees and billions in annual revenue was the largest company I had ever worked for. That has plusses and minuses.

My role was to support game teams in preparation of a customized game server for their title. EA Tiburon housed game teams for NCAA Football, Madden Football, NASCAR, and NFL Street, among others. My team was separate from these, and was responsible for the code used to manage network gaming; this code was used by numerous teams, not just those at EA Tiburon. My team consisted of people in Orlando, Vancouver, El Paso, and Minnesota. I spent a fair amount of my day on the phone with my teammates, and learned a lot about remote collaboration.

Our code was essentially two large chunks. One chunk was a complete lobby server, where game clients could log in, chat with other users, challenge each other to games, manage tournaments, search through ranking lists, and so on. The other chunk was the client-side library, not only for communicating with the lobby server, but also for managing the peer-to-peer connection(s) for the actual gameplay. Due to some quirks in how the lobby server code was built, each game needed a customized version of the code, forked from the main branch. My job was to help the game teams integrate weekly builds of generic lobby server code with their customizations or, if they didn’t feel the need to tightly control everything, to simply write the customizations for them. (NCAA’s team allowed me to do a fair amount of the work. Madden’s team wanted complete control. NASCAR’s team was happy to have me write the whole thing.) Sometimes the game teams used source control1 effectively, and integration of weekly releases took just a few minutes. Sometimes the game teams didn’t use source control all that well, and integration could take hours.

In addition to integrating code and supporting game teams with troubleshooting and bug fixes, I had some opportunities to extend the core server code. But the most interesting work was to develop a new player ranking formula. Within each title, players are ranked overall with a points rating; they earn points by winning, and lose points by losing (sensibly enough). The amount gained or lost was based on the opponent’s rank. Savvy players had found ways to exploit the system to boost their ranking; the intent of the ranking system was to indicate who was best at a particular title, not who could best manipulate the system to place them at the head of the list. An extra problem was that the ranking system capped at 8,000 points, which was supposed to be unachievable on a realistic timeline; several titles, however, had leaderboards where dozens of players had reached the cap.

To develop a new system, I first modeled the existing system, creating different scenarios to test my assumptions and comparing results with current reality.2 This gave me a baseline to work from. Then I tried various new systems for awarding and deducting points, charting the results. Each test run used thousands of players and hundreds of thousands of simulated matches between those players; players were of varying skill, play frequency, and other behaviors. After several different models were tested, one was selected as being the best; not only did it produce the desired results (in terms of point distribution) but it also resisted attempts to exploit the formula through every method we could think of.3

Once the simulator for testing formulas was built, it was entertaining to hear suggestions from various game teams on how to improve or alter the formula for their title. Some suggestions were accepted (for example, NCAA Football’s formula was tweaked to give a bonus to winning a game in a “difficult” stadium) while others showed such abysmal results that the game team quickly abandoned their request. This saved them from having to change the formula after the game was shipped, which would be a bit of a black eye with the game players.

One of the other characteristics of the new formula was that it readily extended to games involving more than two players. The 2005 NASCAR title introduced four-player races, and other racing titles allowed more players. Since the NASCAR team was happy to let me implement the details of their customized server, I was able to make sure the multiple-player logic was right. In a three-player race it became possible to come in second, and either gain points or lose points based on the relative rankings of the other players. This presented some interesting testing challenges, as sometimes the QA team indicated a bug in the ranking that actually wasn’t a bug.4

While at EA I got to work with a lot of different people, as each game title went through its development cycle to alpha, beta, release, and maintenance. Those teams weren’t just at Tiburon; I also worked with teams in Vancouver, California, and the UK. Sometimes we stayed late at night to “test” the games for ourselves. One of the “perks” of working at a game company. (smile)

1 While I was there I encountered three different source control systems: CVS, ClearCase, and Perforce. Everyone was supposed to be migrating to Perforce, and the game teams were sometimes unfamiliar with how to make the best use of it.

2 Having millions of real player records to start from was a nice bonus.

3 Later I checked the leaderboard for the 2005 sports titles (the only games that I knew for certain used the formula) and verified that only one player out of all the titles I checked was able to achieve the maximum points rating; distributions were as expected from the model otherwise.

4 You can make a reasonable argument that if it defies users’ expectations to the point where their perceive it as a bug, then it is a bug, even if it’s technically correct. That wasn’t my call to make; I was charged with creating a ranking system resistant to corruption by players. Explaining it to players was a producer’s job.

Photo Credits: some games I worked on: Damien Jones