April 29, 2014

From AAA Games to Indie Games - Why I can't let go of Perforce!

In 1999, I joined Stainless Steel Studios as a programmer working on the original Empire Earth. We were a small but mighty team of 10 programmers using Microsoft Visual Source Safe for source control. Looking back, I shake my head at how little trust we had for merging. We would lock files, allowing only one developer access to a file at a time. We were constantly asking other programmers to hurry up and checkin and release the file we needed. We also had issues with our source control - the VPN performance was so unusable that even the operation “Get Latest Version” could take hours, regardless of any files being different. Luckily for me, the next and every company I worked for after Stainless Steel used Perforce.

In 2008, when I left traditional AAA games to start Lunchtime Studios with my wife, I was concerned about what kind of a SCM system a small new shop like ours could afford. We were both spoiled for years on Perforce and I doubted we could afford the same enterprise-grade software used by all the AAA games.

With a tight budget and hearing lots of buzz about different version control systems, we decided to try out something new. I found a service where I could have a private depot in the cloud with visual clients, which sounded perfect. I assumed that by now, all popular version control software is as stable, fast, powerful and effective as Perforce. Right? Wrong.

I started out making an account (Mercurial), with a clean source tree of my engine, home-grown tools, game code and 3rd party libraries. I started the checkin process in the initial version and left it running overnight. In the morning, it was still trying to checkin. I gave up, cancelled the action, and concluded it was trying to checkin a big 3rd party library. It was no Perforce, so I removed the library and checked in just the code. It took a long time, but it worked. Despite the hick-up, I was setup in the cloud, for free.

A few days later, things went belly up again when I modified a file on both my machines and it had a conflict. I went to checkin and it told me there was an error. I thought it was probably just a file that needed to merge, so I tried to merge it manually. As I tried to merge and checkin again I got the same error code number. I checked online and found that other people had a similar error question with no useful responses. By now, I noticed I had several branches, but they were all named the same thing. I tried it on all the branches, feverishly hitting more “merge” buttons, trying for the latest code versions, checkin attempts, forced checkin attempts, manual merges, everything. After an hour, multiple reboots, and maybe a stiff drink, I decided to back up the source to another folder, delete the entire repository and start over with a fresh repository of the entire tree.

That’s when the stars aligned and all was well in the world. An angel came down from the heavens and told me that Perforce is free for up to 20 users. We signed up immediately. It felt so good to be home and we’ve never looked back.