The Microsoft Future… pretty cool actually…

My friend (and Microsoft employee) Steve shared a video with me that is kind of a concept video for what Microsoft sees interfacing with computers will be like in 2019. The original post for the videos is located here and is really cool. Cool enough that I felt the need to comment on it, at least a little. In general, I think the concepts are pretty achievable, if not by Microsoft than at least by someone by 2019. The general concessions throughout the video are that the future of interaction is:

  1. Very thin, multitouch screens and surfaces, that will be prevalent in every aspect of your life.
  2. Lots of portable devices, with screens and without, that will automatically detect each other and react accordingly
  3. Lots of systems that use digital paper or some form of digital paper.

I think most of this is achievable, but there are a few things that stand in their way, even for these assumptions. For the second point, you HAVE to have a better networking protocol than Windows Networking, and a better discovery system than Bluetooth. mDNS / DNS-SD may be a start, but I don't know of any good protocols that exist to automatically detect new devices in close proximity to each other, and what services they provide. That's the first problem that has to be solved, sooner rather than later. For the third part, you first have to make digital paper affordable. That's an issue, as it's out of reach for most consumers right now. Maybe by 2019 I'll eat my words, but I don't see it being economically feasible any time soon.

In addition, there are a few things I have to say look cool, but I don't see being in the future.

Right at the start of the film (at about 10 seconds in) the system recognizes that a girl has drawn a dog, and what's there acts like a dog. I'd be surprised if that's actually achievable for everyone's version of a dog, especially for a 10 year old's drawing. The ball part is realistic, but having the system recognize "dog" and "ball" and have them interact… that seems a little pie in the sky to me, and this is coming from a game developer. Let's face it, even Spore had to seriously limit their drawing capabilities to enable their procedural animation system.

At about 3:46, we see somewhere where identity management becomes an issue. Would it be awesome for me to just carry around a device that had all my meeting notes on it, and have it automatically detect a co-worker's computer, network to it, and show communication history on a set of projects? Certainly. And it's certainly possible. But what if I store personal things on that same keychain? Or conversations with other clients? I don't want the business table showing that. I don't want it reading it, or attempting to read it. I don't want to have to specify to the table right there "This is what you have access to." In some cases, I just want it to know. Identity management is a huge issue there, and no one's solved it, let alone Microsoft.

Starting at about 4:10, we have that digital paper problem. Not only is it inexpensive digital paper (I assume) but it's touch screen, foldable, networkable digital paper. This seems a little far fetched. I look forward to hardware companies proving me wrong.

Aside from these problems, much of what's there gets me excited about the future of interactivity. I certainly think the future will look similar to this, but I think the larger issues of identity and task management are far from solved, and more important than the flashy ability to point at a piece of information and drag it to your tablet. This type of interactivity is going to require a new way of looking at how we want to share information, with whom, and when. It's going to require a new look at how we group pieces of information (Mozilla Labs is actually more interesting in this respect) and how we use applications together in tasks, projects, etc. That's solvable now (in some cases) but even Windows 7 (as cool as it is) only begins to scratch the surface. In addition, this goes beyond the Office team, and should be looked at by Microsoft as a new initiative, to break free of the start menu, task bar, quick launch, etc. and start thinking about how all of their applications work together to form a meaningful whole in this fashion.

I'd love to be a part of this, but I work on games right now… and I don't see that changing soon.

Jamming Postmortem

I took part in the Global Game Jam this weekend, and I have to tell you, it was a lot of fun. Version 1 of the game we created, The Game Of Nom, is available from the Global Game Jam site, and was voted third favorite at the location we were participating in, and I think that was a fair place for it to be (Move Mouse To Fulfill Destiny and The Beat were really awesome). I'm really happy with how the game turned out. It had the right feel and I think it really extracted the emotions from players that we wanted. The rules were simple enough that you could easily sit down and play it, hard enough that you could play for a while before winning, and interesting enough to be fun. That all said, the game is fairly buggy, especially when you're moving around flocks or trying to combine them, and that's a huge detriment to the game. At some point, Darren or I may actually fix a few of the issues and post a new version on the game jam site, but don't hold your breath.

So, for my own sanity and for future reference for everyone, I thought I'd do a post mortem of my experience.

What Went Right

  1. Enlisting the full time help of an artist. Amanda did an amazing job of giving us a feel for the game very early. I have no doubt that without her, the game wouldn't have been nearly as fun or interesting, and wouldn't have achieved this balance of fun and message that we wanted. By having a cute style to the game, we were able to present the dark message without seeming overly pretentious, which was awesome. My new rule is "artists make things look cool quickly," so get them involved early and things will look cool early, and get everyone really energized for the rest of the jam.
  2. Having a team. The first game jam I participated in, it was just me. Now, that was great for rapid iteration, but not for making something really interesting. I didn't have anyone to bounce ideas off of, and no one to really keep me focused and in line. Working with Darren not only allowed us to do something a little bit more complicated than we would have been able to do alone, but also ended up producing a much better product.
  3. Not sweating the small stuff. For the most part, I think we did a good job not worrying about some of our problems until later, and getting the game playable quickly so we could test it and refine it as needed, instead of spending lots of time doing things like improving the flocking behavior (which, I'll admit, I spent a little too much time on anyway ;)). The key to Jams is knowing when things are "good enough," and I think we did a pretty good job with that.
  4. Tools choice. Although we had some problems with it, XNA/C# is a really great prototyping language. Right before the Jam, Darren and I were considering other options, including the beta of Unity that was made available to the jammers. The things was, we didn't want to spend lots of time fighting to get things on screen and working, when we could spend time on the game play. XNA didn't give us a lot of pain for our simple little 2D game, and for that we were pretty thankful.

What Went Wrong

  1. Needing a prototyping framework. XNA is awesome, but it's not a great prototyping framework. As I don't do too much prototyping, I really don't know what I need and what's overkill. I found that the two things I really ended up wanting / needing were a simple object manager and an actor framework / state machine framework. We actually implemented states very late in the process and they were very hacked together. I found myself wishing we'd had OnEnter / OnExit / ChangeState for the little blobs frequently, but implementing states would have taken more time than hacking around them. In this respect, we maybe should have gone with Angel which has that stuff already built in, but it'd come out the day of the Jam, and I didn't want to try to learn it while Jamming (I've learned my lesson from the OLPC jam).
  2. Clear message, not so clear implementation. We knew what we wanted to get across to the player early, but not how to do it, and trying to discuss it mid jam was hard. Another twenty minutes talking about implementation would have helped, though during our initial discussion I was itching to get things running. What we really should have done is a "stand up" style meeting when everyone arrived in the morning to discuss where we were, and where we wanted to be each day. I think it would have helped a lot.
  3. Not enough testing / balancing. We should have pulled in more people to play the game earlier, and should have gotten things for Amanda to play so he should see the results of her art changes quickly. As it was, I spent most of Saturday and Sunday balancing, but was so close to the game that I missed little problems. Having just one person play mid-day Saturday would have exposed lots of problems that could have been fixed by the deadline.

I'd love to know what people have to say about the game. We're rating well, and I think if we get around to fixing the bugs, it will rate even better. Thanks to everyone who organized the Game Jam for this great opportunity!

Playing it Tight and Loose

So this post has nothing to do with games, and more to do with just real world usability of applications. It's a rant I've been talking to people about for a while, but I decided to get it up on my blog for people to discuss in the greater cloud of the web. Generally, the post is about the battle between Microsoft, Apple, Google and Open Source. Not from a doctrine perspective, but entirely from a usability perspective.

The Apple Approach

So, without a doubt, Apple has some of the best usability in the market. There are lots of reasons for this, but the one I want to focus on is their tight application integration. Apple products understand other apple products really well. Syncing an iPod or an iPhone through iTunes is ridiculously easy, because it's designed to be easy for 90% of the customer base. That's why people use it. And no other company can control the hardware and the software the way Apple can.

Then there's the other 10% of the customer base. People like me that would rather use other applications to sync their music collections to their iPod or iPhone. This is where Apple fails. In an attempt to make sure that you always use their software with their hardware, they've unnecessarily (and sometimes very purposefully) obfuscated the way an iPod sync works. Certainly, certain products can do it, but from my understanding these products have reverse engineered the iPod database, and this reverse engineering frequently breaks when Apple releases new versions of their firmware.

Now, Apple has a good reason for this. They want things to be as simple as possible for the 90% of people that own or want an iPod. But what they don't do is make it easy for the other 10% that want an iPod, but have use cases outside of the bounds of what they offer.

The iPod / iTunes integration is just one example, but Apple does this all the time. Very rarely does Apple offer a product that communicates in a standard way unless that standard is so ubiquitous that they have no other choice. So Apple is tightly integrated, with no loose coupling.

The Open Source Approach

Open Source has the opposite approach. Loosely couple everything and have the programmers sort it out. This means, a lot of the time, that the average user is completely screwed. Figuring out how to get two systems to talk to each other in the Open Source world generally requires some wicked voodoo magic. Everything understands everything else, but only if you're really careful and tell them where and how to contact each other.

Now, this is a blanket statement, and I know many applications have improved in the Open Source world concerning this, but the problem is that when you allow everything to communicate freely, you lose any possibility of creating a reasonable user interface that would have come about through two products having tight integration. It's great that every open source calendar product understands iCal, but if you can't get them to communicate easily, what's the point?

The Microsoft Approach

Now, Microsoft is interesting because it's schizophrenic when it comes to integration. Individual Microsoft products are tightly integrated with a strange variety of loose coupling (or at least have been in the past). Applications like Office, Windows Media Player, Visual Studio, and others, are very tightly integrated with themselves, and they offer the options for extension and integration with other applications, so long as you're working within a very tightly confined area that Microsoft has defined.

This is basically Microsoft's history: offer a lot of developer support and allow extensions for almost everything you do, but only so long as they're developing for your platform. Only in recent years has Microsoft opened their data exchange systems so that applications outside of the controlled Microsoft environment can potentially understand what's going on.

The problem is that outside of a single application, Microsoft doesn't integrate with itself at all, and depends on third parties to offer features that are prominently displayed in Apple software. Is this bad? Well, for the average user… absolutely. Say, for example, that I want to order a set a pictures from an album I've made in my favorite piece of photo software, or let's say I want to publish them online. This can easily be accomplished from both Microsoft's offering and Apple's offering. The problem is that Apple has an offering that it owns and prominently displays as an option. Microsoft, on the other hand, would allow you to sync to any number of picture website systems, but you'd have to do some searching. The average user can't be bothered with that, and even if they could, the number of options is way too overwhelming. The average user is more likely to get confused than actually published their pictures online.

In my opinion Microsoft's approach to letting 3rd parties integrate into (almost) any piece of software they make is the "better" option, as it encourages independent development. The problem is that it only really helps power users, and hurts their general interface design. So, with Microsoft, you don't get the benefits of either the tight integration or the loose coupling.

The Google Approach

Just when you though Microsoft was schizophrenic, along comes Google. Google boasts over 13 products that integrate with your Google account, and they… well sort of, kind of, not really integrate together. Mail allows me to look at my documents and calendar (through a Labs extension), as well as allows me to add information to my calendar by detecting information in emails. But the whole system feels very disjointed. More importantly, the communication protocol between the applications is proprietary and hidden (so far as I know).

Things become more interesting when you talk about the new G1. Here's a phone that's based on an open standard for communication between applications and wants them to behave like they're tightly integrated without using tight integration. But apparently the first thing the G1 does is force you to sign in with a Google account, something you can't change. What if I want that phone, but not a Google account? Really, what was the point there?

The problem with Google is that it offers a lot to users in weird chunks. There's no unifying vision like there is with Apple, and its developer support (at least for its applications) is spotty. So you don't get external extensions and you don't get tight integration. It's the interface of any given application that draws you in, but is anyone really happy with how it works beyond that?

The End All Problem

This all comes to a head in one way: the management of your multiple personalities. My name is Jeff, and I have 3 identities on the internet: Jeff as employee and co-founder of Orbus Gameworks, Jeff as an IGDA volunteer, Jeff as just me. In some places, I want to have access to all of these personalities at once (say on my phone). In some cases, I want to share just select information with other people. I want to share my business calendar with my business associates, for example, and I want to share my personal calendar with my friends. I want my phone to have access to all my business contacts and personal contacts, and sync them to the proper places, and I want my music to stream be able to sync to my home computer and maybe my work computer without issue.

The problem with tightly integrated software is that it either can't or doesn't understand this concept. You are you regardless of what you say. The problem with loosely integrated software is that you don't get the usability of power of integration. You have to play the game tight and loose. Tightly integrate across platforms and across communication lines while communicating via loose protocols that anyone can understand.

Will this ever happen? Who knows. The problem is that each company has to fight significant hurdles to make a tightly integrated, loosely communicative application suite. Apple has to open up communications and fight against their urge to make integrated suites. Microsoft has to integrate more, communicate more loosely, and become less schizophrenic when it comes to application design. Google has to decide what they're doing, and Open Source has to get some user interface designers (seriously guys, you're killing me). It's an uphill battle for everyone.

Agency Theory Talk (WPI)

I gave another talk on Agency Theory today to students at WPI.  This talk was a bit more in depth that the Agency Theory in 20/20 talk, but covered a little bit more .  I was also able to talk slower, which was nice.  The slides, if you'd like to see them, are here, and, as usual, the entire talk is contained in the slide notes.

The talk was recorded, but I don't know when the video will be up, so I'll have to get back to you on that.

NXE First Impressions

So, as promised, I have some NXE first impressions. I think it's pretty important to do these "First Impressions" posts, because I think that the success of failure of an interface can really be determined by its first impressions. Once people get used to an interface, they start to forgive some of its failings, and sometimes even get used to them so much that the failure itself is considered a feature, not a failure. But I digress.

First, the positive about the NXE.

  • It's way better than the old blade system. The blades were generally confusing and at some points just unusable. In addition, the blades weren't really extendible. They had limited real estate to offer advertisers. Now, while you may think that's a good thing, it really meant it was hard for you to get information about what had just been released on LIVE, especially if you're not as "plugged in" to the game industry as I'm sure many of my readers are. Despite other failings, the spotlight system actually allows Microsoft (and its advertisers) the opportunity to really get the word out.
  • Avatars are a nice addition. Make as many jokes about Miis and Microsoft appealing to the "Casual Market" as you want. The only people that I know that haven't made an awesome avatar already are casual gamers. Seriously. Avatars are a nice addition, and a great way for you to personalize your experience on the Xbox. The Xbox has always (at least partially) been about personalization, so having avatars is nice.
  • New Features. Netflix, Community Games, Party, Avatar integration into games, all excellent additions. Maybe more down the road? Who knows, but I'm happy for now.

Now, the negative.

  • Sign In is still 3 clicks away. Signing in is normally the first step for most people that have an Xbox that are online. Sure, whatever game you play will immediately ask you to sign in, but if the box has more than one profile, isn't set to sign in automatically, and goes to the dashboard instead of directly into the game (which is a setting), I think there's a 99.9% chance that the person wants to sign in before doing anything else. And honestly, one button to cancel sign in, rather than 3 to confirm (or 4, depending on if you disabled the welcome profile) makes more sense to me.
  • Spotlight is Occasionally Confusing. I'm a smart guy. I couldn't find the community games library on my first try. And I'm not the only one. Worse, even after I found it, I couldn't find it again. The problem is this: the spotlight for Community Games looks like it's the community games section, but it's not. This carries actually throughout the spotlight interface. The spotlight is an advertisement that explains that something is available, but doesn't take you there. In only a few cases, can you get what you want directly from the spotlight.
  • Game Marketplace Spotlight is Always Confusing. This is where I wish I had a screenshot or a video. See, when you go into the main "Game Marketplace" portion of the NXE, it brings up its own spotlight. You have to hit a separate button to go into the actual games marketplace. It's weird! Maybe I'll do a post on this in the future and expose this as confusing with a video or something. Not sure how I'll do that, but I want to.
  • Organization is still an issue. On the marketplace it's still very difficult to find what you want. I'm not sure why this is, as it's 100 times better than it was in the blades, but I can't tell you how many times I still get confused as to where I am, what I'm looking for, and what's available. I wish I could explain better, but really I can't.
  • Hidden Options, Hidden Friends. On the NXE, you can't see all the options available to you. One or two are dimmed out at the top of the screen. I know why Microsoft did this. First was to prevent too much clutter, which is fine. Second, though this is speculation, I'm sure that list is partially populated by the LIVE servers, so they could now add categories without breaking the current functionality. But, the new friends channel I don't understand. Why take up all of the screen real estate with one friend at a time? Most of which is taken up with a background that the friend can't change anyway? Why can't you show me 4 or 5 avatars at a time, that way I can see most of who's on line at once without scrolling through the channel? Sure, I can still use the blade interface but, let's face it, the channel is way cooler, just not as usable.
  • Breadcrumbs? For some reason, I always find myself wanting breadcrumbs in the NXE. I'd like to know where I came from to get to where I am, and where I'm going back to when I hit B. Personal preference.
  • Reports of NXE instability. This is really disconcerting. There have been reports that not only does the NXE crash in the interface itself, but that it causes once stable games to crash more frequently. I didn't believe this until I actually saw some stable games crash on a friend's Xbox. Hopefully this isn't too widespread?

Again, the NXE is 100 times better than the blades. There are just a few places where I feel confused by the interface itself, and that's never a good thing. Thankfully, once I get used to it, I'll probably forgive it of its flaws, and maybe even come to depend on them.

GameLoop

This weekend, I was fortunate enough to attend (and present at) Boston Gameloop. I was fortunate enough, partially, because it was co-organized by my boss, but that's beside the point. I presented two sessions, one on distributed version control (which I gave twice), and the other was a co-talk with me and IF luminary Andrew Plotkin about agency / complicity in games. I'm hoping someone took notes at that talk because I think it was pretty awesome, and being able to basically have a public discussion about agency / complicity with Andrew was pretty awesome. In addition to presenting, I was able to attend talks on implied ethics in game rules, see some demos / a presentation on dynamic animation of virtual actors, and spend a little bit of time in a round table on Scrum, all of which was awesome.

So all in all GameLoop was definitely a great experience, and props to both Darius and Scott who organized the whole thing. I'm looking forward to the conference occurring again next year!

Willing Suspension of Freedom and Disbelief

Gamasutra has an opinion piece up on suspension of disbelief in video games up. With this article, I feel the author is trying to express something he's frustrated with in games, but doesn't know how to express it because I'm not sure he's fully thought it through. He's talking about player limitations, but can't figure out where being limited is okay, and where it isn't. While he reaches the correct conclusion ("Games shouldn't imply choices that players cannot actually make"), I feel he's struggling to figure out why in one case the limitation is warranted, but not in another. In a way, he's trying to find a way to talk about what a player's willing suspension of freedom, not his willing suspension of disbelief. That said, even I find that sometimes it's easy to confuse where a game creator has violated suspension of freedom, and where he has violated suspension of disbelief and thus created a violation of suspension of freedom, since the two can be tied very closely tied together. So what's the difference, why is it important, and where do they combine?

Suspension of disbelief is "the willingness of a person to accept as true the premises of a work of fiction, even if they are fantastic or impossible." (Wikipedia). With suspension of disbelief we are specifically looking at aesthetics of a game: plasma ray guns, space ships, magic, monsters, etc. Suspension of disbelief violations occur when a narrative or a game's aesthetic qualities are not internally consistent (deus ex machina stuff will frequently violate suspension of disbelief).

Suspension of freedom is the willingness of a person to accept limitation in an interactive application. In games, this is mechanical: inability to walk in various areas, jump, break things, swim, place pieces anywhere, etc. Suspension of freedom violation occur when a player believes a mechanic should be possible, but isn't. In addition, a worse violation is when a mechanic is offered, then suddenly taken away.

The two combine when a game's aesthetics make you believe a certain mechanic should be available, but isn't. The example given in the article about Silent Hill 3 is pretty good. Because the game presents itself as "realistic," and has a graphical quality that reinforces that, the designer has violated suspension of disbelief, which in turn violates your suspension of freedom. You believe that you should be able to break boxes (because of the realistic quality of the graphics and other elements of the game), but you can't, which is a suspension of freedom violation.

Interestingly, this can also be genre based, and game literacy based. A lot of genres didn't have, or still don't have, breakable objects, and we just accept that in that genre. In addition, people who are fairly game literate may look at boxes and realize its code for a wall (which can bite them in the ass if it's not) and not feel any suspension of disbelief or freedom.

Games don't have to be realistic, just consistent. Just realize that if your aesthetics are realistic, players will be less willing to suspend freedoms that they would have in real life.

Dark Democracy?

Hot on the heels of me praising the Xbox Live Community Marketplace comes this opinion piece on Gamasutra that's actually fairly angry at Microsoft's practices in this regard. I definitely see his problems with the promotion thing, but almost everyone did. That was the single most asked question at GameFest, so I'm sure you'll see a change in policy about it before the fall launch, or probably very shortly after. The exchange rate issue is… interesting… to say the least, but that said, I can see how it's very difficult for Microsoft to track how points were purchased and in what country. I'm sure it hurts foreign developers a lot more than it hurts Americans though.

So, although I think a few of Ron's complaints are understandable, I think he's missing one key component of the XBLCM vision: lowering the barrier for entry so that anyone can make games for a console. As I pointed out in my last post, this is the first time any console manufacturer has ever done this, so, obviously, they may get a few things wrong. The comparisons to WiiWare / PSN I think were completely misplaced here, since hobbyists can't actually develop for those platforms without hacking around the systems. Even then, both Nintendo and Sony have tried to stop such hacks, effectively attempting to close off their console as much as possible.

So I think Microsoft took a very brave step in the right direction. Not only that, but I think it's WAY more than what most hobbyist / community game creators were expecting. To have their games "published" on an actual console, with potential for pretty large returns. I can understand the backlash from indies, since once you have a budget you can get shafted from the XBLA point of view, and price caps, royalty and exchange rates may hurt your actual prospects as a developer, but, honestly, look at this for what it is: a very positive move for creating a new caste of developer who have no budget, no team, and a desire to see their own game on a console, and maybe make some money while they're at it.

If you have problems with the rest of the system (which you should), that's something between you and the XBLA team. I feel pretty good about XBLCM.

Democratizing Games

So, if you haven't heard, Microsoft announced at GameFest that they'd be deploying a new community market place this fall on the Xbox 360, and that developers will be able to keep (up to) 70% of the revenue generated from games on the community marketplace. While not unexpected, this is pretty huge news.

Before getting on to commentary, I'd like to quickly point out how revolutionary this whole set up is. This is the first time in my knowledge that a major console company has actively encouraged (or even allowed) development on a retail console at any price (Sony had a version of the PSOne you could develop for, but it was not a retail kit). In addition, this is certainly the first time that any console manufacturer has encouraged a community in which to share those games (the Creators Club) and even more importantly, this is the first time a console manufacturer has created a marketplace where anyone can download created games and anyone can make money off of those games. Even with the fact that you are limited to a .NET sandbox, this is pretty huge, and I'm pretty excited about it.

That said, when Community Arcade was announced, and later when they announced Community Marketplace, I was nervous, though I couldn't figure out why. It struck me when I was at a game store over the weekend. There are a lot of freaking games out there now. A ton. And, honestly, 90% of them aren't any good. There are also a lot of XBLA games, and, honestly, about 90% of them aren't any good. With Community Arcade/Community Marketplace, you can be sure 99% of games on there won't be any good. It makes it really hard and frequently frustrating attempting to find those hidden gems that really make it all worth it. Certainly, community reviews, Metacritic, and similar sites help find games, but what do you do for those games that are fringe (and therefore generally ignored or given low Metacritic and community scores), but awesome? Certainly the viral aspects that Microsoft is putting in (send this to a friend and, hopefully, a rating system) will help, but even then many fringe games get overlooked because there's just too much else coming out right at the same time. I just hope that the game industry isn't a victim of its own success, having so much content that none of it makes any real money.

Regardless, I'm not sure it's an actual issue. You can be sure I'm already working on XNA prototype games. I'm not going to miss this opportunity.

Disable All You Want

I'm not one to disagree with Joel, but I actually think I will disagree (sort-of) with this post.

Personally, I have no problem with disabling menu items (graying them out), and I have no problem with showing / hiding items in context sensitive areas of your UI (be they right click menus or elsewhere). I think disabled items give a quick indication of what you can and can't do given your location current context. How horrible would it be to think you're inside a table and click something to format it, only to get an error saying "You can't do that because you're not in a table," then you click OK, then you click in the table, then you go back to your menu. That extra error box plus OK click can get real annoying real fast, whereas grey text tells you quickly that you're in the wrong place. Hiding items is fine too, so long as you're hiding the items in areas the user understand are context sensitive. Right click is always assumed to be context sensitive, but properties windows, and certain toolbars could benefit significantly from some amount of context sensitivity.

I will say, though, that I absolutely agree that a disabled menu item should always be able to display a descriptive reason for why its disabled. In addition, hidden items should only be hidden from areas that are known to be context sensitive. If an item is hidden, a user should still be able to find it in the menu, find that it's disabled, and get a reason why. I think a tool-tip or similar is sufficient for when you see the grayed out item but have no idea why it's disabled, but of course in the desktop application world support for that can be fairly limited (last I checked) which is why almost no companies do it, which is what is irking Joel (I think).

So in conclusion, hide and disable all you want because I think even the general user can work faster seeing disabled menu items and hiding unnecessary commands. Just be sure that when you hide or disable, the user can find out quickly why you've hidden or disabled the item. That assertion's nothing new, though. Chris Crawford called for that in his self-published Understanding Interactivity some 8 years ago.