Tuesday, April 29, 2008

Gonzo's Wishing Song

Sometimes, my words don't flow. Sometimes my songs come out flat. Sometimes I realize just how fragile everything is. In the times of doubt and fear, I retreat to the wisdom passed on to us by the old masters. I rely on musicians, poets, and storytellers to put my tangled emotions back into their proper context. Dreamers all, and the world is a better place for being filled with them.

Tonight I pass on one of the most wise and touching poems I have ever heard or am ever likely to hear. It was written by one of the greatest dreamers of our age, and it shows.

Ladies and gentlemen, The Great Gonzo:

Monday, April 21, 2008

The Real Danger of Global Warming

So you think you don't care about global warming? Consider that if climate change makes some crops more scarce, it's quite possible that the price of beer will go up. Who's ready to save the planet now?

F-117 Retires Today

Good grief, has it been nearly thirty years since the F-117, widely known as THE Stealth Fighter, went into service? Apparently so, as the Nighthawks are being retired today. The first true stealth warplane, it's faceted appearance was, at least in part, because the computers of the day couldn't practically simulate the radar reflective performance of curved surfaces. The Nighthawk proved its worth in the early nineties during Operation Desert Storm when while flying 2% of the sorties it struck nearly 40% of the strategic targets hit. It's design, while apparently quite stealthy, does pose limits. It's heir apparent, the F-22 Raptor, has the air-to-ground capability of the F-117 but adds supersonic speed and air-superiority capabilities the F-117 lacks.

Monday, April 14, 2008

Sometimes the Wild Goose Chases You

Some cities have pigeons. In Greensboro, we have Canadian Geese. In the last week or so, a pair of geese made a nest in a nook at the foot of the building where I work. It's a good spot, sheltered from most of the elements and warmed by the south-facing building. The only downside is the parking lot within about eight feet of the nest, which frequently hosts a bunch of large, noisy animals, all of which must be driven off by the half of the pair of geese not currently sitting on the nest. The normally oblivious geese are hissing, flapping their wings, and even buzzing these perceived threats. The funny thing is: the geese don't know what the pavement means. You just know they think they are scaring away the giant cars.

Wednesday, April 9, 2008

Software Engineering in a Blizzard

[Editorial note: This is a rewrite of my previous post. I've preserved both forms to show the differences in style and tone. I also think it plays into the theme of the lessons I'm trying to draw from Blizzard's example as depicted in the source article.]

Colin Stewart posted an article a few days ago touting eleven lessons in innovation that can be found by looking at Blizzard's World of Warcraft game. I'm not sure I would call any of them innovations, but I do think they are worth looking at as an example of good software development practices.

Usability Testing is the formal name for the practice of having people in a real environment test your software to make sure it does what it was intended to do. Blizzard does early and ongoing usability testing by having the developers use the software, a practice known within the industry as "eating your own dog food." This allows (or forces) developers to confront issues with the intent of the software first hand. There is some danger that using their own software can blind developers to an issue that they have worked around or gotten used to through repetition. User interfaces commonly fall victim to this. To combat this problem and expose many others, Blizzard makes heavy use of testing internally, publicly, and on an ongoing basis. Being involved in this testing is optional for the players, with the traditional incentive being early access to new features. The game itself gathers quantitative statistics on how players are using it, these can be used to find subtle flaws in the design or execution of the game. They have an in-game mechanism to report perceived defects, user forums where players can interact with the development and quality assurance teams, and an automated update process to deploy fixes when they become available. Blizzard's quality assurance and ongoing support of their products are a huge selling point for their games, because the customer knows that when the game comes out, it will be relatively solid, and any issues that are found will be fixed quickly.

Talking about continuing support for a software product leads into Blizzard's Software Lifecycle practices. All that ongoing customer and quality assurance feedback must be addressed, and this leads to the idea of continuous improvement. For new development, the emphasis on being able to throw away something that doesn't work is very important, and it runs from prototyping individual pieces to evaluating whether the entire product is coming together. Encouraging failure rather than trying to prevent it allows for a much looser development environment where people aren't afraid to take a risk from time to time. When the risks pay off they can really improve the software, and when they don't they can be quickly removed. Incremental and iterative development facilitates quick fixes, prototypes, and changes by necessitating more modular software. All of this feeds back into the testing and user input cycle to improve the product at every stage of its development and deployment.

Blizzard also addresses that most nebulous of business techniques: motivation. Demanding excellence is a nice theory, but to actually deliver, you have to have motivated people. Peopleware and The Art of Innovation both spend a large number of pages on the importance of a cohesive, motivated team. Giving employees something extra is the icing on the cake of good development practices that can make the difference between a content team and an energized one. Caring not just about the product, but how the employees feel about working on the product is probably the hardest thing to get right in modern software development.

Making sure that as much of the software as possible is done correctly as early as possible is what the field of Software Engineering is all about. Blizzard is one outstanding example of good practices in an extremely demanding area of software development.

Tuesday, April 8, 2008

These Should Be Standard Practice, not Innovation.

[Editorial note: After writing and posting this, I realized that I was very unhappy with the tone and style. I have attempted a rewrite that is more in line with what I had intended to convey, but in the spirit of the development practices I am trying to defend, I will leave this up as a comparison.]

Colin Stewart put up an article a few days ago touting eleven lessons in innovation that can be found by looking at Blizzard's World of Warcraft. Many commenters have pointed out the inaccuracies of using World of Warcraft as an example of innovation, but I'm going to take a wider view and claim that not a single one of the so-called innovations are new to the software industry. Hopefully, I can demonstrate that what the reporter sees as innovation is just good engineering practice at work. Please don't confuse this with an insult to Blizzard; I hail the work that they have done as examples of what you can get by fusing great design, art, and software. They absolutely should be held up as an example of excellence in one of the most challenging branches of software development.

Here is the list of "innovations" cited and why I believe they are not innovative at all in the context of modern software engineering:

1. Rely on critics.
Studying how end users interact with your product is formally known as Usability Testing. This form of testing is a must for any product to succeed, and to its credit, the article does mention alpha and beta testing. These forms of testing are both extremely common and not the only means of usability testing.

2. Use your own product.
Software developers know this one as "eating your own dog food" or simply "dogfooding." This too is a form of usability testing.

3. Make continual improvements.
The philosophy of always fixing issues you find in your product is encapsulated neatly by Tip 4 from The Pragmatic Programmer: Don't Live With Broken Windows. The various philosophical movements within software engineering that are collectively known as agile development have elevated the idea of continuous improvement to a central practice.

4. Go back to the drawing board.
This is just prototyping. The generally ephemeral nature of software development can allow you to do these sorts of things at a much finer grained level than physical prototyping. The Pragmatic Programmer not only advises using software prototypes, but goes so far as to advise that no decision is final (tips 14, 15, and 16).

5. Design for different kinds of customers.
This one appears to me to be a mass-market special case of designing for a particular market. I'll also refer you to Joel Spolsky's 2002 piece about the different realms of software development.

6. The importance of frequent failures.
As was kindly pointed out by the representative from Blizzard, "fail early, fail often" is not a new innovation. It's reached the point where it's enough of a meme in the software development community that it's hard to pin down the original source. See also the Rule of Repair in Eric Raymond's The Art of Unix Programming for a direct application of the philosophy to the operation of software programs.

7. Move quickly, in pieces.
Incremental and iterative development and self-contained features have been a well understood part of the software development since at least the mid 90s. See also the Lifecycle Planning chapter (7) of Steve McConnell's book Rapid Development.

8. Statistics bolster experience.
I don't think I will even need to dignify this one with a comment on the roles of quantitative and qualitative data.

9. Demand excellence or you'll get mediocrity.
This item isn't innovation, it's motivation. Though I will concede that the art of proper programmer motivation seems to have vanished from large swaths of the industry.

10. Create a new type of product.
Calling creating a new type of product an innovation looks to me like something of a tautology. And using the particular Blizzard property in question as an example is somewhat silly. Blizzard's reputation is built on the quality, depth, polish, and support of all aspects their games. They are generally known as perfectors, not innovators. Nowhere is that pattern more obvious than in World of Warcraft.

11. Offer employees something extra.
Again, we are talking about motivation. Motivation is critical to innovation, but it's hardly a new concept. See also Peopleware and The Art of Innovation.