I've gotten some good and interesting feedback on the post about doing usability for Generics. The question on some people's minds is, “Did the language design team really listen to us when they designed how we will use Generics in C#, or were they too focused on their technical constraints and what they wanted, so they couldn't make something really usable?“

As a usability engineer, I have a lot of sympathy for this kind of concern, and with some teams I still struggle with this. It's true that some people who design and implement software don't have the gift of seeing things from their users' point of view, and then are also resistant to feedback from users. This results in incomprehensibly complex software that doesn't solve users' problems. A big part of my job in these cases is to promote “user empathy.“ There are several techniques that I use to help teams feel the users' pain in these situations, (help the teams management feel the pain if I can't get through to the team :)). Maybe I'll post on some of those techniques if anyone is interested.

However, the the C# language team is not one ofthose teams. While they do have a healthy interest in the elegance and technical aspects of the C# language, they are quite good at getting and using feedback from users. For example, before I did the usability study I described below, they regularly sought feedback from various types of users in various settings, and used that feedback in their language design. For example, we gathered a lot of feedback about Generics before and while it was being implemented in the language and in .NET. The concerns that people raised generally broke out into the following four areas.

  1. How will performance be impacted in different situations?
  2. How will having Generics in the runtime impact other .NET languages besides C#?
  3. Will adding Generics to the language make the language too complex for me other other developers?
  4. How hard will it be to create test fixtures for a Generic class? (Mostly from Agile programmers)

Generally, though, the majority of users thought that Generics was a critical addition to the language for type safety and code elegance reasons. Many users cited Generics as a key reason to upgrade to Whidbey when it ships. I think it was because the C# syntax tracked the C++ language fairly closely, but users didn't provide much feedback on the syntax, and they seemed to understand the syntax when it was shown to them. The few users who got really early bits of Whidbey were generally positive about the syntax, but they were the kind of user who immediately tried everything they could to push the language to it's limit.

Generics isn't the only new language feature for Whideby, but it is probably the one that users will use the most frequently. There were other language features that the team was considering, but when they reviewed the new features with users, users saw little utility in them or serious problems, and so they ended up not implementing them becuase the cost/benefit ratio for users just didn't seem to be there.

I know I sound defensive :) But I really do think that the C# language design team is a world class design team that is very active about getting user feedback, and that takes that feedback very seriously. In terms of the results of the usability study, my interpretation of the user data is that it is the psychological notion of Generics that will create a bottle neck for some users, but with the right tools support and examples the syntax itself will come easily after that.

Maybe I'm too close to the problem though. If you think I didn't do due diligence in making sure that the team got the syntax right, you should call me on it. Should I have held their feat to the fire more?