Last column I discussed how you can speed up a content team by decreasing turnaround and getting them a decent asset control system. There's another thing that slows your content team down, and that's having a broken game. If your content team can't play the game, they can't test their stuff, and one thing they constantly need to be doing is testing their stuff.
This is something we're always struggling with. On Spider-Man, one or two of the levels would break about every day. We did a daily build, so we'd catch the problem within twenty four hours and fix it, so if somebody needed to work on a level, chances are that level was functioning.
On Spider-Man 2, the problem was exacerbated because we're basically doing one giant level, and all the data is built for that level before the game is even run. If any data doesn't build, we're all brought to a screeching halt. Every day the data is broken a few times. A daily build no longer suffices.
Exhortations to the developers to pretty-please stop breaking the game are not successful. Increasing the stringency of the validation process before submit -- we call it "The Drill" -- helped some but not much, and means that developers had to spend anywhere from fifteen minutes to hours running tests just to submit new data.
What finally did help is the end-to-end autobuild, or, as we call it, "churning". As soon as one build completes and is successful, the testing machine gets the next change. If there is no new changelist yet, the testing machine idles until another change is submitted. Then it syncs to the new change, rebuilds the data, and e-mails the team if there are any failures. We've accepted that people are going to make mistakes -- giving up on Steve Maguire's claim that it's possible to keep bugs out of the master sources -- what we have now is a system that catches those mistakes within minutes of when they're made.
We currently have five machines constantly building and validating data; one for each platform, including the PC, and the "monkey" machine, which runs a test script that loads each portion of the game while mashing controller buttons. The "monkey" machine so far has not been as effective as I hoped; usually somewhere there's a crash bug in the game that takes many hours to solve and the monkey is sitting idle during those hours.
Getting these autobuild scripts built isn't free. It takes a few weeks of coder time, and then requires regular maintenance. Frequently our autobuild machines will fail for one reason or another; a human has to check on them on a semi-regular basis (daily isn't often enough; hourly is too often) to make sure they're still churning away.
One rule you have to have when you allow sloppy submits is this: don't submit if you're going to leave work soon. It's very tempting when you get to the end of the day, and you've put the finishing touch on that feature you were implementing, to submit it and go home. But then you might break the build and someone else is going to have to fix it. Either be willing to wait until the autobuild machines have validated your submit, or wait until the next morning to submit.
last thing: with Perforce, it's fairly easy to find points in the
change history that are stable. You can tell people to never sync
to the latest change, but only sync to changes that had been validated
by the autobuild. You can even write a script that automatically
syncs to the latest validated change.