Welcome to shell: revealed Sign in | Join | Help
in Search

Shell Blog

A look into the feature design process

(This is a long post but there's a special treat for you at the end!) 

My favorite part of the product cycle is right before we start the development phase. For me it’s extremely exciting to work with all of the different disciplines to build a feature that will affect millions of people across the world. At this point, I spend almost all of my time working with my “feature team” composed of dev, test, design, and usability to map out how the features that I work on are going to look and behave. Today I’d like to give you some insight into the process of designing a feature inside the Windows organization.

Brainstorming

Brainstorming starts with a kick off meeting with your feature team. My role in this meeting as a program manager is to kick off the discussion with high level problems that this feature will address. Once the problems are established, we start throwing out goals and scenarios that map to those goals. In this meeting it’s perfectly okay to go off-topic and talk about the technologies we could use or individual behaviors, all of these thoughts help mold the feature. When the meeting(s) wrap up I collect all the information and head back to my office to make sense of the madness.

The "Page 1"

Once all of the brainstorming ideas have been collected, I look though all of the notes and start mapping out what’s called a “Page 1.” This “Page 1” is essentially a rough draft of the feature vision and outlines the feature requirements. This typically contains the following information:

  • Overview & Scope – What is this feature and how does it fit into the overall vision of the product?
  • Problems – What are the problems users or developers face in this area?
  • Opportunities – What opportunities can we leverage inside or outside Microsoft to make this feature happen?
  • Goals – How can we address the problems in this area with this feature?
  • Non-Goals – What are we explicitly not going to address?

For me, this is probably the most difficult part of the process; it can take up to a week just to get a first draft ready. This “Page 1” essentially maps out exactly what the feature will do for a release. Once this “Page 1” is completed, it goes through multiple reviews with the feature team. This is where the program manager has an opportunity to really show what they’re made of. I’ll explain.

It’s been said at Microsoft that “Program Managers have all the responsibility but no authority.” Essentially, we can’t tell the feature team members what to do Big Smile If a feature team member doesn’t like your decision, it’s up to you to figure out why and either change your decision or convince the feature team member to go with your plan. So, during the “Page 1” process it’s extremely important to talk to your feature team members and get they’re feedback on the “Page 1.” 

Once the “Page 1” is polished and everyone agrees on the vision, it’s time to create a detailed spec.

The Spec

I love writing specs. Out of all of the things I do as a Program Manager, writing a spec has to be the most exciting and rewarding for me. When I first started at Microsoft, my specs were pretty terrible. In fact when I had my first spec review I felt like I just got an F on a paper for school and had to go back to re-write it! Of course, your spec writing only gets better over time. You learn what your feature team likes to have in a spec and you do your best to add as much information as possible.

There are two types of specs on the Windows Shell Team – a “Feature Spec” which outlines the UI look and behavior of a feature, and a “Developer Design Document” which outlines the technologies used for the feature as well as implementation details. Program Managers write the former.

When I write a spec, it’s important that I capture as many details as possible that describe the UI and behavior of a feature. The spec is extremely valuable for the developer and the tester. The developer will use this spec as a guide when building the feature and the tester will use it to create test cases for the feature. I like to take the top-down approach where I layout the overall plan, then start breaking the feature down into little details. I also put myself in the tester’s shoes (because they are the ones that find the holes in your spec) and try to come up with as many relevant issues as possible. Here are some examples:

  • Does this feature ship down-level?
  • What does it look like when it runs with Visual Styles?
  • What does it look like in Classic Color Scheme?
  • Is it Accessible?
    • What are the keyboard shortcuts?
    • What are the MSAA properties?
  • How does it respond to High Contrast?
  • How does it respond to High DPI?
  • What is the minimum screen resolution it will work on?
  • What does it do in low memory conditions?
  • How does it look in Right-To-Left (RTL) mode?
  • Are there any security implications?
  • Are there any cases where you would want to display any error messages?
    • If so, what are the error messages & what caused them to appear?
  • Does this feature change based on SKU?

The other set of questions I ask myself all relate to the customer:

  • Who am I building this feature for?
  • Could a novice user use this successfully?
  • Is it good enough for the power users?
  • Do we offer any ways for the power users to customize it?
  • Can a person with a vision/hearing/speech/motion impairment use it?

During this process it’s extremely important to involve the feature team to get constant feedback on the spec. I want to nail as many of the details as possible before it goes off to a review. I find I get the best feedback from my tester. If my tester likes my spec, I know I did a good job. Once I collect all the feedback on the spec, I send out copies to my feature team and we spend time reviewing every bullet point to catch anything I missed. I iterate on the spec until I’ve answered all the open issues and the spec is in a “stable” condition.

Building the feature

When development starts on the feature, this is where the spec can start to break down. Program Managers do their best to keep the spec up to date with any behavior changes or removing any ambiguity, but it’s hard to do that over time. Eventually when you’re in bug fix mode, the code becomes the spec. Right now we’re fixing bugs for Vista. Every day we make decisions based on bugs that comes in and most of the time those decisions don’t get reflected in the spec. It’s not important that the spec stays up to date as long as the information on that decision is recorded somewhere. In this case, the information is recorded in our bug database for us to refer too in the future.

A special treat

If you made it this far through this post I have a special treat for you. For the first time at Microsoft (that I know of), I’m posting a real feature spec to give you some insight into what our specs look like. This particular spec is for Aero Wizard. It’s one of the earlier specs that I wrote so if I’m missing anything try not to hold it against me Big Smile  It’s been a very long time since I touched this spec so it may be slightly out of date, but you get the idea. This particular spec is for the Windows Platform, so it’s written slightly different than a typical UI feature in Windows.
 
Hopefully this will be the first of many specs that we share with the Windows community! Enjoy!

Links:


 
Published Tuesday, September 26, 2006 7:03 PM by vinnyp

Comments

 

Adam Caudill’s Blog » A look into Vista said:

September 26, 2006 9:13 PM
 

PatriotB said:

Wow, this is amazing, you guys are sharing specs with us!

As you start working on the next version of Windows, can we expect you to post specs as they're being written?  That would allow you guys to receive lots of real feedback from real users, and in a timely manner so that there will actually be time to take our feedback into consideration.

September 26, 2006 11:33 PM
 

Jason Haley said:

September 26, 2006 11:48 PM
 

Tiago_Simoes said:

Joel, a previous PM at Microsoft had posted specs on the web before.

http://softwareaddiction.blogspot.com/2005/08/how-to-be-open-without-being-open.html

It's a great idea, keep it up.

Cheers,

Tiago

September 27, 2006 3:14 AM
 

kiwiblue said:

What is the "IUI" in 13.1? Inductive User Interface?

September 27, 2006 5:19 AM
 

Windows Vista Team Blog said:

Yet another fantastic post from Vinny Pasceri, Program Manager for the Windows Shell Team, appears over...

September 27, 2006 6:43 AM
 

Stoyanov said:

Vinny, thank you for the document - it is an interesting read, especially to developers.

Is it known whether an equivalent will be made available in the next iteration of Windows Forms or Windows Presentation Foundation, or as an extension, of sorts? I am interested to know that because I am working on a Dwm API wrapper and would like to include custom implementations deriving Form and Window which would have the Aero Wizard interface, layout and functions.

Best regards,

Stanimir Stoyanov.

September 27, 2006 5:33 PM
 

vinnyp said:

PatriotB - We'll see...

KiwiBlue - Yep.

Stoyanov - Not sure if the Winforms guys are planning on adding this for the next release. I've talked with them about it so I'm hopeful. WFP definitely won't have an Aero Wizard equivalent when they ship 1.0, but they do have all the basic building blocks available if someone wanted to create it.

September 27, 2006 11:53 PM
 

AnXa said:

Pretty interesting. I am impressed with you Microsoft guys. Thanks for sharing.

September 28, 2006 7:14 AM
 

lehmag said:

Thanks for the insightful post Vinny!  

In your post you mentioned that as feature development progresses, the spec becomes outdated and the code/bug database becomes the spec.  What happens when someone not directly involved with development of the particular feature needs to check something against the spec?  For example, I’m thinking about someone in upper management who may not be familiar with the technology being used to implement the feature.

September 28, 2006 2:45 PM
 

meneame.net said:

Completo e interesante overview de lo que será el "Wizard" del próximo sistema operativo de Microsoft. Al final del artículo propone las especificaciones, aunque se necesite IE o Word para verlo ( es un archivo MHT ). En inglés.

September 28, 2006 6:08 PM
 

Daniel Moth said:

Vista Shell revealed

October 9, 2006 6:57 PM
 

OneNote Extensibility & More.. said:

I was just reading this blog about the Windows Shell – shell:revealed blog and I saw a post from VinnyP

October 13, 2006 5:18 AM
Anonymous comments are disabled

About vinnyp

I'm a program manager on the Windows Shell Team working on Aero. I've been with Microsoft and the Shell Team for four years and all I've known is Windows Vista :) For Windows Vista I worked on Themes, Common Controls (comctl32), Task Dialog, Aero Wizard, High DPI, Display & Personalization CPLs. Have any questions about those areas? Just drop me a line!
Powered by Community Server, by Telligent Systems © 2006 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks | Privacy Statement.