My last post, about the lessons that Wizards of the Coast has for software developers, had many oversimplifications. One of them is this: Wizards of the Coast actually is a software developer. They have an online version of their product (clearly labeled as “Magic: The Gathering Online”) that they develop in-house. MTGO is pretty terrible. It’s a passable program that spent years being a crappy program. It was a perfect example of how monopolies produce shitty products. It’s still the only remotely serious product in its specific market (part of how the monopoly exists is that they can offer value-adds that no one else can).
This shouldn’t be surprising, though. One thing that makes it unsurprising is that, as Nathan Bowers likes to say, Quality Is Fractal. Look at the Magic: The Gathering web site. It survives and thrives because there’s good content in there, but in many ways it’s a design trainwreck. Similarly, you could look at Magic itself. Another thing that I omitted in the last post is Magic’s bugs. Magic’s creators are making a game that is played by humans against humans, so the game needs to be fair. To that end, Wizards maintains a list of banned and restricted cards that have to be treated differently so that the game remains fair. The game contains over 10,000 cards as of this writing, and a bit over 100 have ever been on the banned/restricted list (which grows and shrinks over time). Any card that creates enough problems to go on the list can be considered roughly equivalent to a showstopper bug in your average software program - and making it onto the list means that the “bug” made it into the wild instead of being caught during QA. So despite Magic’s impressive QA operation, bugs still get by them.
Making complex products - like Magic or a piece of software - isn’t easy. We have a whole industry built on top of our tradition of telling other people how to do things, and still the complexity of the world stymies us. To our great benefit, we’ve advanced to the point where we can actually solve some problems by throwing lots of computing resources at them. Other problems, however, still need a lot of human thought and creativity put into them before they’re soluble, and the best that we can hope for is that we can add computing resources that will let us most efficiently allocate our human thought and creativity.