Engineering Windows 7

Welcome to our blog dedicated to the engineering of Microsoft Windows 7

The Windows 7 Team

The Windows 7 Team

Thanks to everyone who provided comments and sent me mail. I definitely appreciate the discussion we have kicked off. There’s also a ton of energy in our hallways as this blog started. It seems like a good thing to do to start off is sort of an introduction to the Windows development team. This post provides an overview of the team that is represented by this blog.

Before diving into the main topic, let’s talk a bit more about what to expect from this blog. First a few words on the comments and emails I’ve received. I’ve received a ton—most of the weekend was spent reading emails and comments. There are definitely some themes. I would say by and large the reception has been very warm and we definitely appreciate that. The most frequent request was to discuss Windows performance and/or just “make Windows faster”. There’s a lot to this topic so we expect to talk about this quite a bit over the next months. There are many specific requests—often representing all possible sides of an issue such as some folks saying “please get rid of (or don’t do) <x>” and then other folks saying “whatever you do it is really important to keep (or do) <x>”. A big part of this blog for me personally is having the discussion about the multiple facets of any given issue. Even something that sounds as binary as performance proves to have many subtle elements. For example, some folks suggested that the best thing for boot performance is to not start anything until idle time and others suggested that the delay loading feels like it slows them down and still others have suggested that the best approach is to provide a startup manager that pushes everyone to choose what to start up. All of these have merit worth discussing and also demonstrate the subtlety and complexity of even the most straight forward request.

Second, much to the surprise of both Jon and I a number of folks questioned the “authenticity” of the post. A few even suggested that the posts are being “ghost written” or that this blog is some sort of ploy. I am typing this directly in Windows Live Writer and hitting publish. This blog is the real deal—typos, mistakes, and all. There’s no intermediary or vetting of the posts. We have folks on the team who will be contributing, but we’re not having any posts written by anyone other than who signs it. We will us one user name for all the posts since that keeps the blog security and ownership clear, but posts will be signed by the person that hit publish. (If I participate in the comments I will use my msdn name, steven_sinofsky.)

And third, what frequency should folks expect and when do we get to the “features of Windows 7”. When we wrote that we would post “regularly” we meant that we don’t have a schedule or calendar of posts and we don’t want to commit to an artificial frequency which generally seems inconsistent with blogging. We do expect to follow a pattern similar to what you have become familiar with on the IEBlog. FWIW, on my internal blog no one has yet accused me of not contributing enough. :-)

As we said in the introductory post we think it will be good to talk about the engineering of Windows 7 (the “how”) and the first step is establishing who the engineers are that do the engineering before we dive into the product itself (the “why” and “what”).

So let’s meet the team...

It is pretty easy to think of the Windows team as one group or one entity, and then occasionally one specific person comes to represent the team—perhaps she gave a talk at a conference, wrote a book or article folks become familiar with, or maybe he has a blog. Within Microsoft, the Windows product is really a product of the whole company with people across all the development groups contributing in some form or another. The Windows engineering team “proper” is jointly managed by Jon and me. Jon manages the core operating system, which is, among many things, the kernel, device infrastructure, networking, and the engineering tools and system (all of which are both client and server). I am part of the Windows client experience team which develops, among many things, the shell and desktop, graphics, and media support. One other significant part of the Windows product is the Windows Media Center which is a key contribution managed along with all of Microsoft’s TV support (IPTV, extenders, etc.).

There’s a lot to building an org structure for a large team, but the most important part is planning the work of the team. This planning is integral to realizing our goal of improving the overall consistency and “togetherness” for Windows 7. So rather than think of one big org, or two teams, we say that the Windows 7 engineering team is made up of about 25 different feature teams.

A feature team represents those that own a specific part of Windows 7—the code, features, quality, and overall development. The feature teams represent the locus of work and coordination across the team. This also provides a much more manageable size—feature teams fit in meeting spaces, can go to movies, and so on. On average a feature team is about 40 developers, but there are a variety of team sizes. There are two parts to a feature team: what the team works on and who makes up a team.

Windows 7’s feature teams sound a lot like parts of Windows with which you are familiar. Because of the platform elements of Windows we have many teams that have remained fairly constant over several releases, whereas some teams are brand new or represent relatively new areas composed of some new code and the code that formed the basis of the team. Some teams do lots of work for Server (such as the VM work) and some might have big deliverables outside of Windows 7 (such as Internet Explorer).

In general a feature team encompasses ownership of combination of architectural components and scenarios across Windows. “Feature” is always a tricky word since some folks think of feature as one element in the user-interface and others think of the feature as a traditional architectural component (say TCP/IP). Our approach is to balance across scenarios and architecture such that we have the right level of end-to-end coverage and the right parts of the architecture. One thing we do try to avoid is separating the “plumbing” from the “user interface” so that teams do have end-to-end ownership of work (as an example of that, “Find and Organize” builds both the indexer and the user interface for search). Some of the main feature teams for Windows 7 include (alphabetically):

  • Applets and Gadgets
  • Assistance and Support Technologies
  • Core User Experience
  • Customer Engineering and Telemetry
  • Deployment and Component Platform
  • Desktop Graphics
  • Devices and Media
  • Devices and Storage
  • Documents and Printing
  • Engineering System and Tools
  • File System
  • Find and Organize
  • Fundamentals
  • Internet Explorer (including IE 8 down-level)
  • International
  • Kernel & VM
  • Media Center
  • Networking - Core
  • Networking - Enterprise
  • Networking - Wireless
  • Security
  • User Interface Platform
  • Windows App Platform

I think most of these names are intuitive enough for the purposes of this post—as we post more the members of the team will identify which feature team they are on. This gives you an idea of the subsystems of Windows and how we break down a significant project into meaningful teams. Of course throughout the project we are coordinating and building features across teams. This is a matter of practice because you often want to engineer the code in one set of layers for efficiency and performance (say bottom up), but end-users might experience it across layers, and IT pros might want to manage a desktop from the top-down. I admit sometimes this is a little bit too much of an insider view as you can’t see where some interesting things “live”. For example, the tablet and inking functionality is in our User Interface Platform team along with speech recognition, multi-touch and accessibility. The reason for this is the architectural need to share the infrastructure for all mechanisms of “input” even if any one person might not cross all those layers. This way when we design the APIs for managing input, developers will see the benefits of all the modes of user interaction through one set of APIs.

The other aspect of our feature teams is the exact composition. A feature team represents three core engineering disciplines of software development engineers (sde or dev), software development engineers in test (sdet or test, sorry but I haven’t written a job description externally), and program managers (pm). Having all three of these engineering disciplines is a unique aspect of Microsoft that has even caught the attention of some researchers. In my old blog I described dev and pm which I linked to above (I still owe a similar post on SDET!).

The shortest version of these roles is dev is responsible for the architecture and code, pm is responsible for the feature set and specification, and test is responsible for validation and the ultimate advocate for the customer experience. Everyone is responsible for quality and performance, each bringing their perspective to the work. For any given feature, each of dev, test, and pm work as a team of peers (both literally and conceptually). This is a key “balance of power” in terms of how we work and makes sure that we take a balanced approach to developing Windows 7. Organizationally, we are structured such that devs work for devs, sdets work for sdets, and pm works for pm. That is we are organized by these “engineering functions”. This allows for two optimizations—the focus on expertise in both domain and discipline and also the ability to make sure we are not building the product in silos, but focused on the product as a whole.

We talk about these three disciplines together because we create feature teams with n developers, n testers, and 1/2n program managers. This ratio is pretty constant across the team. On average a feature team is about 40 developers across the Windows 7 project.

We also have core members of our engineering team that work across the entire product:

  • Content Development – the writers and editors that create the online assistance, web site, SDK documents, and deployment documents.
  • Product Planning – responsible for the customer research and learning that informs the selection of features. Product Planning also coordinates the work we do with partners across the ecosystem in terms of partnering through the design and development of the release.
  • Product Design – develops the overall interaction model, graphical language, and design language for Windows 7
  • Research and Usability – creates field and lab studies that show how existing products and proposed feature perform with customers

Some have said that the Windows team is just too big and that it has reached a size that causes engineering problems. At the same time, I might point out that just looking at the comments there is a pretty significant demand for a broad set of features and changes to Windows. It takes a set of people to build Windows and it is a big project. The way that I look at this is that our job is to have the Windows team be the right size—that sounds cliché but I mean by that is that the team is neither too large nor too small, but is effectively managed so that the work of the team reflects the size of the team and you see the project as having the benefits we articulate. I’m reminded of a scene from Amadeus where the Emperor suggests that the Marriage of Figaro contains “too many notes” to which Mozart proclaims “there are just as many notes, Majesty, as are required, neither more nor less.” Upon the Emperor suggesting that Mozart remove a few notes, Mozart simply asks “which few did you have in mind?” Of course the people on the team represent the way we get feature requests implemented and develop end to end scenarios, so the challenge is to have the right team and the right structure to maximize the ability to get those done—neither too many nor too few.

I promised myself no post would be longer than 4 pages and I am getting close. The comments are great and are helping us to shape future posts. I hope this post starts to develop some additional shared context.

--Steven

Leave a Comment
  • Please add 7 and 4 and type the answer here:
  • Post
  • Couple of comments.

    First, kudo's on the blog.  It's a great initiative, and I hope it will prove an effective weapon against entrenched anti-MS (aka "anti-Goliath") biases.

    Secondly, I would like to voice my personal opinion of what the scope of an OS should be.  An OS should be centered around the management, preservation, and access to computer hardward (and network) resources.  I think the biggest reason why there is such disappointment with OS's is that laypeople don't know what an OS is or what it is supposed to do.  An OS is not a web browser, it's not a filesharing app, and its not a movie-making application.  My own suggestion (and I know this is controversial) is that you make the OS as good as it can be, while letting the Windows Live team handle the movie makers, filesharing apps, and photo applications.  In short, give us an awesome OS, but don't follow apples footsteps in marketing their OS as a video editing tool.

    Which brings me to my final point: that is, your real challenge in revolutionizing the core of the OS is that people just don't want the OS to change.  People will complain if you change things and they will complain if you don't.  The bigger and more revolutionary the change, the more people will complain.  All of the traditional core OS paradigms are so entrenched in our community psyche that I pity the person who is responsible for telling the world "Look, we fixed it! Look how much better it is now..."

    In closing, good luck!  You've got your work cut out for you.

    (Sorry for the long post.)

  • Where are the testers? Surely there should be a testing team.

  • Steven and Brian,

    I think there has been an enormous amount of work on creating a standard UI platform that's both easy for developers and very methodical.  It's called WPF.  The problem is the fact that 99 percent of the applications created on windows are still using separate UI frameworks developed by separate teams.

    So why aren't they using WPF?  I think the main reason is the number of developers still working on windows in native C++.  I think this is great when it comes to performance but at least work the methodologies and tools form WPF into the core native libraries.  WPF as a whole has created some very clean development paradigms but it looks like there might be some adoption issues (at least architecturally) inside MS.

    This is the differentiation between a clean, high performance user experience and one that is stuck in the old world.

    Apple has been able to create complete ux unification.

  • What about the team that removes features in every release? :P (http://en.wikipedia.org/wiki/Features_removed_from_Windows_Vista)

    Jokes apart, Microsoft, please make Windows 7 fast and responsive, optimize Vista's code, add back some much loved features (not everything in that list needs to be added back), make 64-bit a commitment, don't end up with a UI like Vista and have compeitive feature parity with Apple's OS. I would be delighted to see equivalents to Automator, Keychain, Quartz Composer, iChat, GarageBand etc. And of course better support for pro audio is long overdue.

    I'm scared after reading some of the comments and will be even more scared if MS starts listening to each one of them. Some of them seem to have absolutely no knowledge of NT's architecture/internals after so many years of usage and some are requesting features which are well-implemented in Windows Vista.

  • Please improve the desktop publishing (DTP) support by including a more robust text engine such as http://www.hopelessgeek.com/2003/10/24/panthers-major-text-services-upgrade.

  • every time i install windows i install Winrar, copy handler and Avafind. this 3 tools are far better that what Windows gives us. hope Windows 7 can match all the above. Good luck steven

  • I am curious about how new features get proposed and kicked around. How often does a developer put something in on their own time?

  • Hey! Big thanks for this blog, allowing users to put there two cents(and more) in.  I have  request for the DirectX technologies, PLEASE Un-depricate the main DirectX api's: DirectDraw, DirectInput, DirectSound, etc.  Bring these all into the 9.0c version, 10.0 if your feeling generous.  DirectDraw? YES!, ask hardware venders to fill in missing features that have gone undone for so long.  Suggestions: rotation's in one degree increments, ROP effects that actually work, hardware pixel perfect collision detection.

    Thanks for your time!

    Matt C.

  • First, a very simple (but obvious) question.

    What exactly do our comments matter? That is, how much of 7 is set in stone? If we suggest a new feature, is it even *possible* that it'll be implemented? What if we suggest a smaller tweak to how existing functionality works?

    Basically, how much of this is really two-way communication?

    Anyway, the one thing I hate more than anything in Windows is best described in one of the earliest Vista reviews.

    Where Mac OSX acts like a traditional british butler, staying in the background, getting you what you need without a word, Windows (Vista and XP alike) seem more like a hyperactive 4-year old soooo eager to show you what he just did in his potty.

    Yes, well done, but I don't *want* to know that Windows has detected that I disconnected an USB stick. Or that I connected one. Or any of the dozens balloon tooltips we're constantly assaulted with.

    I think you need to change your focus fundamentally. Vista was very much a "see how nice we can make Windows so that you *want* to use it" release.

    And that is completely besides the point. An OS should not be sometihng you "want to use". It should be something you don't *have* to use. Something that churns away in the background, ensuring things work, and otherwise does not compete for the users attention.

    You are *always* going to lose that competition anyway.

    No matter what applications I'm running, I'm running them by choice, because I chose to run them right now, and presumably, that is what I want to do. That will *always* have a higher priority with the user than whatever the OS itself is doing in the background. Don't bother trying to compete for the user's attention. Let the applications have it. Trying to bring attention to the OS only frustrates the user.

    A good start would be to ditch the system tray balloon tips. They are constantly abused, making them useless. They are almost always used to show information that wasn't actually that urgent in the first place, and certainly didn't warrant popping up on top of whatever you were doing. Either give us an *easy* way to disable them (I know it can be done through the registry now, but it has to be straightforward so people *writing* these damn tooltips understands that it's a bad idea too), or maybe move them to a less obtrusive place. Render them onto the desktop, perhaps. That way I can see them if I need to, but they won't get in the way if I have windows on top.

    That'd be a start, but there are a lot of places where you need to stop trying to get the user's attention.

    Another major frustration about Windows is how painfully hard it is to migrate your applications and data after a reinstall. And the chief offender here is the registry. I have no way to package everything application X installed/configured, and copy that to another machine. If settings were stored in application-specific files *somehow* and *somewhere*, I could just copy those, and I'd have a new machine set up in minutes.

    The registry is a huge binary blob, and the only sane approach to copying it is all-or-nothing. I can migrate the entire registry, in which case I might as well not bother reinstalling, or I can ditch it completely. I can't grab the keys that application X needs to run.

    Please. I don't care how much virtualization and magic redirection you have to create under the hood to make it work in a backwards compatible manner, change this to keep Windows-, user- and application settings separate. Windows settings one place, settings for each user in a separate location, and settings for each application in a separate location.

  • Let's hope Windows 7 isn't just Vista with a bunch of changes. It's obvious that the current line of Windows products have reached the end of their life. They are insecure, bloated and blighted with backwards compatibility. I'd love to see MS bring new ideas to W7. Make the core OS lightweight, stable, secure and very fast. Get rid of the taskbar and start menu and try something more interesting. Oh and get rid of the registry - possibly the worst thing MS came up with. So MS, show us that your billions of dollars and hundreds/thousands of employees can make something decent for once, without buying a product from another company. Go on, I dare you!

    P.S. My employer is moving to open source - they got tired of licensing costs. :)

  • The Movie Maker is a joke. I am an amateur movie producer and Movie Maker is one of the worst edit tools there is. iMovie far much better and I hope in Windows 7. There will be a Movie Maker 4 that is worth using.

    The new Movie Maker should be easy to use, but have some advanced functions like: Chroma Key, Unlimited Tracks and support for many codecs (import and export).

    Snorre

  • Some quick general blogging suggestions if i may:

    1) Include some simple images/diagrams to better illustrate some lengthy text points.

    2) A few titles and sections to long posts would help readability.

    3) Great work so far, hope to see some dev/code/software architecture related posts soon!

  • I'm using ubuntu at work and use Windows at home only because of some drivers problem with linux. Will Windows 7 be open sourced? This doesn't mean free! If I've a bug and I'm able to fix it or I want a feature not implemented what can I do without sources? It could also speed up development/improvement and understanding of the operating system.

  • Most people don't know much about computers. The only thing they care of is that "IT IS WORKING". As long as they don't face any problems with Windows and there files they are happy. One of the things they complain about is: "Media Player doesn't read my files!" If had integrated many codecs in the Media Player, people would be happy. A normal person often don't know about VLC Player and Codec packs, and when the files doesn't work, they get angry about windows.

    Have you guys ever heard about GForce? GForce is a visualization addon for The Media Player. The visualization they have is far much better than the ones in Windows. They are high quality with many differt cool types. Cool visualizations built-in in WMP would be very cool.

    There is something that I (advanced user) miss about Media Player. QuickTime Pro can save streaming online videos and save them on your computer. That is just a genius ide!! When I see online movies often I want to store them on my computer to view for others.

    WMP Bugs:

    My Media Player often stop working and I get the message: Not Responding. This is not a good thing for a program and it is not positive. Many of my friends choose not to use WMP (because of all these thing I have been writing down) and instead they install VLC and iTunes.

    I hope you will think more about the WMP and WMC in Windows 7 than you did with the other versions of Windows.

    Snorre

  • a few of suggestions for windows 7:

    1. small small small! make it fly on a netbook. cut the deadwood and unnecessary features. 80% of vista is just plain bloat

    2. do things for the users, not the big corporations. we all loathe drm, so just get rid of it. bring windows back to the people and they will love you for it

    3. don't make the 'idiot mode' the default; stop pandering to the lowest common denominator. do i really need a pop-up telling me my ethernet is running at 1gbit? of course not!

Page 7 of 11 (164 items) «56789»