Is quality going out of fashion?
That's the thing about people who think they hate computers. What they really hate is lousy programmers.
-- Larry Niven
Is quality going out of fashion?
A lot of times it's very useful to have your users drive whenever you are looking for bugs or problems at their computers. Even though I'm a very inpatient person when I look at somebody else searching for the key 'A' on their keyboard or moving the mouse slowly to cut and paste through the menu, you have to preserve and look at what they are doing since often what they are saying that they are doing and what they are actually doing can be very different. So every now and then I'm standing behind someone watching what they are doing and my jaw drops. Once someone were in the middle of doing things and the application just crashed. Very quickly the user clicked on the dialog box that said it crashed and relaunched the application, ready to continue with whatever we were in the middle of. Without batting an eye! This happens on occasion and I see it more and more. I call it the windows syndrome.
Windows has this stigma around it that if you have any trouble at all, the first thing you should try is to reboot your computer. If the problem magically goes away, then it's considered to be fixed [1]. Second, if the problem is just that the program crashes every now and then, the solution is to save often and then just get very good at relaunching the app again (perhaps create a shortcut on the desktop, or the quick launch menu?). If you're a windows user, this pretty much describes your daily workflow I presume.
However, if you tell a UNIX person this same workflow, he/she would be horrified. Rebooting?!? That's that thing you do perhaps once a year! And it's scary! Crashing programs? That's serious business, have you hollered up their support for an emergency patch?
The important part here to note is that windows users expect a couple of reboots and crashes as part of their daily workflow, where on any other platform it would be unacceptable. Or at least it used to be, this mentality is spreading.
Console games
One of the things that I used to like about making console games is the fact that you need to get it right the first time, there are no second chances. You need to find all the bugs, all the crashes and get it right.To help you in this endeavor you have a uniform machine park, all the machines that you will run on will be exactly the same. It forced you to pay extra attention to quality, any crashes that were in the game once you went gold master were catastrophic. Today it's a very different matter it seems. While the above is supposed to be true, I guess people are playing it fast and loose now that they can provide a zero day patch through the internet. A lot of games have patches applied to them when you run them, even if it's on day 1 (launch day). This is kind of bad (and I'm sure that since I've written this I'll be eating crow), but I would very much like to get back to the old days where a console game simply didn't crash when it came out in the wild. I understand that you might want to patch for something else, like online games might want to patch balancing parameters (e.g. make weapons weaker, or more powerful, or more expensive to buy etc) still after launch, or make a patch that adds extra functionality (for example, adding trophy support to older games). But it should still be possible to run a game without any internet connection and have it not crash!
Ship early, ship often.
The mantra "ship early, ship often" is repeated as something that is a good thing, often for startups or independent game developers. But there is a big pink elephant in the room: "make it work first". It's very similar to the optimization problem, where if you don't actually have to make the algorithm work, then you can just "optimize" the problem away to 0 instructions. Shipping anything used to have an implicit assumption that the product was working! And by working I include all the crashes not happening. If you have any crash in your app then it's not working. Bulletproofing an application/game is part of those last 90%[2] of effort you need to put in.
Shipping early doesn't really make it better, if you ship beta level quality of a product that keeps crashing and gives the user a bad impression it's very hard to reverse this impression and make the users come back. Now for the masses, this might actually work since they are all blind to the crashes. "It's just the price of doing business on computers today, programs crash". Noooooo! A crashing program is a broken program. Claim a refund! If you bought a car and it had tires that would blow every 30 miles, that would be unacceptable. It's broken and treat it as such.
I see this quite a lot on the iPhone side actually, people release half baked applications and people then pay for the thing, and act like beta testers. That's just weird, we usually pay our testers, but people are drinking the Kool-Aid and asking for seconds.
In closing
Yes it's hard to make a proper program that doesn't crash. The more code you pile onto your shipping executable and the more features you add, the more time you will spend making it bulletproof. Because once it is out in your user's hands it's not allowed to crash. Ever. It sounds simple, several people even think they can make it, even though they probably failed. But let's all at least aim for it, and not simply give up and ship shitty software that crashes (ever installed a video card driver and not have it crash on you?) it simply doesn't make any sense for a user to keep buying software that crashes. Well, at least not when they've stopped drinking the Kool-Aid. Oh, yeah, users: stop drinking the Kool-Aid, crashing applications are not acceptable!
Footnotes
[1] Actually, rebooting your computer in the case of a problem is probably the worst thing you can do. Sure it most probably will make the problem go away. Temporarily. Then it will return again, and you still don't know exactly what the hell is wrong! No better to diagnose the problem right then and there when you have it the first time, understand it and the fix it once and for all. No rebooting necessary.
[2] Did I mention that making anything is part 90% easy and quick development, and then 90% hard work? Yes, that is 180% of total.
So, what triggered this, Jim? What program kept crashing and crashing until you couldn't take it anymore? :-)
I agree with most of what you said. Ship often, ship early is important in some cases (clearly not console games), but not at the expense of quality (i.e. lack of crashing). The only exception is that it's something so unique and it's so important getting to market first, that users will put up with the occassional crash.
Oh yeah, and Fallout 3 crashed on me last night when I was drinking from a toilet. Oh wait... ;-b
I think you're spot-on.
Certain developers and publishers have become noticeably blasé when it comes to launch day show-stoppers. This is particularly the case with games distributed via Steam and the like. The new attitude seems to be "well, if it crashes or has a game-breaking bug, we can just patch it more or less immediately". I'm guessing some companies are inclined to let their customers take the hit than delay their game after booking advertising slots etc.
It used to be that if a PC game shipped with serious bugs, there'd be the whole rigmarole of creating client + server patchers, sending out word to the gaming sites, ensuring all of the servers were updated and so forth. Now it's something they can spam out whenever and wherever. Most of the time it's a positive change as companies can react to bugs iteratively -- there's no need to batch up huge amounts of fixes when handfuls can easily be rolled out at a time. However, it does provide an excuse for shipping broken software, plus I get the feeling that patches are tested less strenuously now (as if it goes wrong, they can always patch the patch).
Take L4D2. It shipped with a bug where if a charger slammed a survivor into a wall, sometimes the survivor got stuck. You were then worm food, leaving the rest of your team screwed. This happened to my friends and me _every single game_, and yet the game shipped like that -- obviously broken. About a week and a half later and it's just been fixed on the PC. 360 customers are not so lucky -- I'm guessing they'll have to wait weeks or even months after the ship date to get the fix. This is not acceptable!
Mind you, it's not as bad as Battlefield 2. I bought that game and it crashed on launching a multiplayer game. I had to wait a month for the first patch, and while I could then play, the first patch introduced an enormous memory leak. Quality through and through.
Noel,
No application in particular, they all seem kind of bad and crash prone. I guess I've just had a lot of pent up anger since I've seen all sorts of really bad OS crashes and such for a long time now, and every time I foolishly click on an update the new version seems to be anything but more stable, rather crash more often (yes, I'm looking at you iTunes, stop updating!). All the while people are proclaiming that you should release earlier, ship ship ship! Sure, shipping is important, but just second place. First place is make it work.
And I don't think you're supposed to drink out of the toilet... what the heck are you doing in that game anyways!?!
Mark,
You just described the reasons why I've abandonded PC gaming. I've tried to run a couple of games through steam latley, but of course almost all of them just seem to crash in the video driver. And I'm not upgrading my video driver, last time I tried I had to sit through a couple of hours of frenetic disaster recovery because of course the new video driver caused my whole system to freeze up, and at times not even boot. Rolling back was much trickier than it used to be of course. It seems that once you find a driver that works resonably well, you never upgrade since that will break existing functionality and drivers are not necessarily faster as the version number increases, but rather just optimized for whatever game was hottest at the time.
Mark,
I still strongly favour the PC, though only because I'm a FPS junkie and I can't bear to play with control pads. I agree that there's way too much hassle. From flawed copy protection to driver and config woes, PC gaming really is the poor relation of console gaming when it comes to software "just working" out of the box.
Sometimes I encounter problems that I -- a PC games nerd -- have real difficulty solving. How are casual gamers meant to face such problems? They probably just give up and chalk it up to experience.
The "release early, release often" mantra comes from two sources where I believe it is justified:
Open Source - Someone once said that launching a successful Open Source project is a matter of starting with the right level of incompleteness. Launching with nothing at all will not get any people interested in the project. On the opposite end, launching with a complete, finished, polished solution also won't get people to download your code.
Agile - From day 1 of a project, agile teams release working, bug-free builds weekly or more often. This is to get fast, continuous feedback from customers or designer. Instead of building a huge system that will take 3 months before it does anything useful, an agile team will add feature by feature, fixing any defects (bugs, duplicate code, suboptimal design) as they appear.
Sadly, a lot of developers have picked up those terms and are now calling their planless cowboy coding Agile and explain their unwillingness to create working release with "release early, release often".
I haven't seen this being recommended to indies or startups so far, though.
Good post (finally got around to reading it). I've definitely observed more and more crashes in console games as of late. And headlines about save games becoming corrupted and players getting trapped in inescapable situations, hours into a game, are pretty bad too. It seems like the "worse is better" philosophy is alive and well.