Notes on comments.
Welcome to our blog dedicated to the engineering of Microsoft Windows 7
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):
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:
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.
I have created a wishlist together with members of several bulletin boards.
Check it out at Jaxl.com.
Thank you for this awesome blog :)
What does "including IE 8 down-level" mean?
I'd like windows to be completely re-written. 0 legacy code. Include software that can run old programs written for older versions of windows, but have it install only if needed.
I'd like IE NOT to be embedded into the OS. Same with Media player (although I think you were made to stop that practice anyway). I love my windows, but I use my own programs.
Keep an option to remove whatever eye candy you choose to include. I don't care about people with Macs or Vista who have big transitions when they swap a program. I just want it to swap instantly, as and when I say. My Vista Desktop is pretty much indistinguishable from my old Windows 2000 desktop. I like my PC to be well structured, clutter free and FAST.
Please rethink the folder structures.
I much prefer
Richard > My Documents > My Music
Richard > My Music
Richard > My Documents
- I hope I'm not alone in that.
Make the OS run separately to programs. I never, ever want to see explorer restart because a program has crashed.
The important part for me.
When a program installs it adds files to the machine, and entries to the registry. When I remove the program often it leaves information behind. Make windows remove what files were added when I install a program, and get windows to remove them if left behind.
Just my views, hope some of my thoughts help.
bazzlad: This is already done in Vista?
I wonder: will you decide what features should be added, where we provide feedback on how the feature should be implemented? Or do we have something to say on which features should be added as well?
Hi, very good news that we can discuss the future Windows OS. Thanks for the blog and news released so far.
I saw that many "pro" left comments about structure, performance and the companies expectations. In fact most of these expectation are the same for the average end user.
The main purpose of my comment is the point of view of a random Windows user.
First about the GUI : since XP, we saw more and more self starting, self opening, self informing things appearing in the GUI. Some of them are very handfull like the usb device plug/unplug notification, but i'm really crazy when i have to close 5 information popups in the systray or just after a windows installation.
Second : The updaters - the view of "always online or get stuck"
Please remember that in many countries we are not 24/24h on the net or have a connexion available. Most programs try to update while the computer is offline and all of them hang on making us loosing time.
A good way should be to have windows "detect" if an Internet connexion is available (like a remote ping)and all 3rd party programs should bypass the update procedure if Internet is not available.
Third and last : GAMES
Yes, people likes games but :
1) In xp (not checked vista) we still have the same games since WIN95
2) Games use loads of CPU/GPU/RAM ressources, and when I heard vista would use directX 9 to run its desktop I just thought : "oh my... that OS will be so fat that my computer will never run my favorite games on it"
3) Gamers, and even occasional gamers have their old favorite games and would be disapointed if they can't run them on the new winodws 7
just think of having E7 not running World of Warcraft or the Sims 2... would be incredible.
Do you plan to integrate an emulator, some kind of unbuild/rebuild program or a compatible mode ?
European User - Regards
Great post to start the inning!
Personally I'd like to see following changes in Windows 7.
1. Performance improvments, I don't mean Vista is slow in perticular but we can do better. I have 4GB RAM on a Dual Core Vista x64 notebook and it does not seem tobe as fast as it should.
2. Can we have basic separation of Windows i.e. Consumers & Business. Both must use same core components, but the Businesses don't need Media Center and Consumers don't want other business only features i.e BitLocker. Ofcourse they can download and install these extra components if required. I think this will give good experience to both.
3. Perhaps a special version of Windows (for x64 only) which does not have any backward compatability components. so we can start with a clean slate with lean and mean codebase.
4. WinFS please!
5. Hosted CLR inside the Windows so we can write managed shell extentions etc.
6. Unified UI throughout, I recently bought an macbook to run Windows on it but I occasionally look at MAC OSX and what I like about it(amongst many I don't like) is simple and consitent user interface. I know it is easier for Apple to adopt new platforms and UI thanks to tiny market share etc. but I'm greedy that's all
7. 64bit versions of all MS applications, how else will we developers feel confident about the platform. OK excluding Office ;-)
8. I know we are promised better integration with Windows Live with Windows 7, but can we host all of my 'My documents' up in SkyDrive or Mesh and see these online storage as a drive on Windows?
9. To please the businesses who like to run Windows 3.11 apps on modern OS. Can we integrate a lean version of Hyper-V within windows which can run legacy apps on XP codebase via Emulation or something. and not spoil the nice clean Windows for the rest of us.
Hope I'm making some sense.
I think I understand the benefits of your "end-to-end ownership of work" organization. But is there a team responsible of global cohesion ?
Everybody knows Windows terribly lacks of UI/UX consistency. For developers, even recent APIs are often difficult to connect. Take your "Find and Organize" example ; Windows Search API is great, Linq is an amazing tool, Linq for Windows Search is... missing.
FXCop, StyleCop are late but good initiative for .Net. "Windows Vista User Experience Guidelines" is a great document but should has been written BEFORE Vista was implemented to avoid such amusing but afflicting incoherence : http://msdn.microsoft.com/en-us/library/aa974173.aspx#guidelines (scroll down to "incorrect" image example of Glass section)!
Windows 7 should impress us by its consistency, its fit and finish.
Mac OSX is not the plateform of choice for me as a developer. But dropping controls in Interface Builder immediately build a rich interface which conforms to system and Apple apps look and feel. WPF is really an amazing technology but drop a control in Blend and you'll realize you have lot to do before your app looks like Office or maybe Expression or Vista... ?!
As an independent developer, I want rules, standards to make my life easier, I want to be amazed by consistency and concern of details of my system to integrate my app in a global experience to improve my clients experience.
Windows 7 should not be 25 well designed but different experiences.
Throw all the DRM stuff. It will be the best to boost performance
I'm always more exciting.
Great Steven :D
Wishlist from my blog (the list is still under development):
o Resizable. Let the user resize the taskbar’s width, so it doesn’t have to fill 100% of the screen.
o Improved multi-screen support. Currently, if you use a second- or third screen, there will be no taskbars on those. Only the mainscreen. Add support for stretching the taskbar over several screens.
o Split the taskbar into several colored sections to improve the overview. Also, increase the height of the taskbar, so it’s 2 times normal height.
o Icon spacing grid. A transparent grid should fade in when dragging an icon. When it’s dropped. The grid should fade out again. Would help a lot when customizing the desktop.
o Sidebar does currently run as a program in Vista. So when you e.g. use “Show Desktop” (Windows+D), the Sidebar is hidden. Therefore Microsoft should integrate Sidebar into Windows.
o Make a Gadget-overlay, so if you press a defined shortcut, an overlay will fade in showing the users’ gadgets.
o Move windows, even if they are parent to a dialogue etc.
o Disable UAC as standard, but make an option to enable it for parents on the child’s account etc.
o Run low-level processes (like viruses) in a closed sandbox, to prevent them destroy the partition/Windows 7 installation..
o Improve Sidebar’s performance. Sidebar does currently take up a lot of memory, and decreases the computers’ startup time.
o Computers which supports Vista should be able to run Windows 7 too. Don’t face the same problems as Windows XP vs. Windows Vista.
o Improved boot- and startup-time. Should’t take 2-10 minutes from you start your computer, until you are able to use it.
o Fewer restarts. For example when you have installed a program.
o Better scheduling of updates. Maybe, Microsoft releases 2-3 or more updates every day, and you computer will download then and want’s to restart the computer to instal them. Schedule low priority updates to e.g. every Friday. High-priority (security leaks etc.) should be installed imideatly, but without interaction of the user.
o MAXIMUM 4 packages. Vista’s Home Basic, Home Premium, Enterprise, Business, Ultimate etc. is TOO much.
Just wondering, has the team structures always been this way, or have they changed for Windows 7??
I agree with Kosher, it would be very interesting to see more Windows software using .net technologies (which are amazing). For the moment, you (microsoft) are using them in professional products (Visual Studio/Sql Server/Accounting) but not much in personal ones (Windows Live/Media Player/Media Center are still in compiled code). Show the example to the developer community by using the .net technologies everywhere !
On the topic of the post, it's really interesting to see how you guys are structured and what team divisions you have.
I'm also enjoying reading these first few posts overall. It's good that you're taking some time to set the scene for us, introduce the players and get us familiarised with what's already in place so that we can have more of an understanding when you start talking about the juicy stuff.
I look forward to many more four-page posts!
Off the topic of this post but on the overall topic of W7, I must say I agree with RotoSequence on the following point:
"I'd like to see a more granular approach to features and the user interface. If a user does not want to have things [...] on their machine, they should be able to choose not to install them the first time the OS is loaded to the machine.
If a user knows what features they need, or want, to be using, the power to disable them would be of great benefit in the performance front."
I know that a lot of users need/prefer the hand-holding approach when it comes to installing their OS, so you have to keep a version of the installer that just works by pressing Next > Next > Finish and installs the whole shebang, but if it is at all plausible for a little button or tick-box to be added at some stage which says "Advanced Install" or something like that, which provides those users who know what they want with the ability to cut out individual packages from the long list of those available on the disc (IE, WMP, Aero are just a couple of obvious examples, but the more modular it can realistically be the better) I'm sure it would make a lot of us customisation geeks or performance junkies who like our software just-so reeeally satisfied.
Keep up the good work!
@jchung2007 - "including IE8 down-level" means IE8 running on a previous version of Windows; Vista for example. It means that one team is responsible for all of IE8 - there aren't separate teams for "IE8 on Win7" and "IE8 on earlier Windows".