Dreaming up a feature is easy. Just think about the most annoying experience you've had with a product and come up with a simple alternative. Designing a feature is a whole different ball game. When you design a feature, you need to worry about a whole bunch of things like:
- How is the new feature going to affect existing applications/interfaces/UI?
- How might this feature evolve in the future?
- What about the various "-abilities" (manageability, accessibility, programmability, and so on)?
- How will we support this feature as time goes on?
That's just four questions, and it's only the tip of the iceberg. Let's take a look at some real world examples:
Per-application volume
One of the cool features that debuted in Vista is per application volume control. If you have multiple applications playing sounds, Vista's volume control now lets you set the volume level for each application independently. Sounds simple.
Pop quiz, genius -- what's an application? Most developers would instantly blurt out "Well, that's easy -- applications are processes!". Except that users don't see processes. User's see windows in the taskbar. A single application can have multiple windows sitting in the taskbar. Should each of those windows get their own volume control? What about sounds that come from web pages within browser tabs? If you're running Firefox, all your tabs are in the same process. Should each tab get a volume control? Maybe I want to listen to YouTube at full blast, and silence out some annoying midi sounds playing on some other tab.
Head over to hanselminutes, and listen to Scott Hanselman and Larry Osterman talk about this feature (and a whole bunch of other stuff about Microsoft and Windows). Larry's the guy who spent 4 years re-writing the audio system for Vista. Or, as he likes to put it, "I'm the guy who makes Windows go 'ding'!"
Windows Vista User Interface Privilege Isolation (UIPI)
First, a little background for those who aren't familiar with the new User Account Control features of Windows Vista. UAC is a new set of rules that allows the system to run processes with different privileges even when they're being run under the same user account. Until Windows XP and Windows Server 2003, if your user account had admin privileges, so did every application that you run while you're logged in with that account. Yes, even Notepad could format your hard disk if it wanted to. Starting with Vista, however, even applications that are started by a user logged in with an account that has admin privileges aren't capable of doing certain things. Let's not get into the details of what those things are, or how the whole system works for now; all of that is orthogonal to our current topic.
Effectively, processes in Vista are assigned privilege levels. Processes with higher privilege levels can do more things than those with lower privilege levels.
Now, all this privilege assignment is meaningless if a process with lower privileges can simply send window messages to a process with higher privilege and get it to do things. Imagine Notepad sending a window message to Explorer asking it to delete everything on your hard disk. Needless to say, this is undesirable.
The answer, of course, is to introduce a new rule in the message pipeline that says, "Hey, you've got lower privileges than Explorer. You can't send any messages to any of Explorer's windows."
Sounds perfect. Except now, you can't drag and drop from Explorer to the Command Prompt anymore. I've gotten so used to relying on this feature in command prompts that I can't imagine not living without it. Yes, I want the protective coolness of UAC and UIPI, but darn it does it really have to break CMD!? (BTW, you can workaround this by doing a Shift+Right click on the files/folders and choosing "Copy as Path". Yes, it's not drag n' drop but it's the only solution.)
Apparently, it does have to be broken. As Raymond Chen says in this post, the problem is that all console windows are owned by the Client Server Runtime System (CSRSS). CSRSS runs as a system service. Explorer runs with lower privileges. Bye bye, Explorer window messages. Bye bye, drag and drop. Check out the post and the comments that follow. Raymond's posts are always gems.
So, do you really want to be the guy that designs a feature today? Think about it.