Welcome to MSDN Blogs Sign in | Join | Help


I've recently changed jobs at Microsoft and decided that this would be a good time to take a break from external blogging.  I started a blog inside the firewall (using the beta of SharePoint no less!) and am going to focus there for a while.  There's lots to talk about with the members of the team I joined and thought it would be better to do so internally.

I suspect I will be back as this has been a great experience.  I am very appreciative of all the supportive mail and comments, and of course to all those college students who are helping us have a record-breaking year hiring the best and brightest to join our product team!

As always, please feel free to use the contact link to get in touch. 

Thank you,


We’re actively hiring interns from the college campuses we visit.  I wanted to use this as an opportunity to talk about what it is like to be an intern in Office. 

You can read about the specifics of the intern program on the intern web site: http://www.microsoft.com/college/ip_overview.mspx.  You can read about the job types available (SDE, SDET, PM) on the product groups as well as the structure of the internship (12 weeks min), and the benefits (endless fun).  I’m going to focus on the part I like the most which is the work you get to do on Office.

First and foremost, as an intern you are considered a regular member of the team from the day you start.  There is a lot of opportunity to learn and of course we don’t expect you to be proficient in your discipline at a commercial level when you show up.  In fact the point of the summer is to offer you the opportunity to rapidly learn the skills necessary to write code, test products, or design features at a commercial scale for 400 million customers around the world.  My goal for all the interns is to work on something that customers will see when Office12 ships.  So whether you are an SDE, SDET, or PM we structure our projects so you have the opportunity to contribute to something broadly used.

I would emphasize “opportunity” because a big part of the internship is offering you the opportunity.  Microsoft has always offered a place where if you have the skills and abilities your work has an opportunity to shine.  What we ask for the opportunity is hard work, an open mind, and a commitment to the project.  Being an intern in Office is not easy, and it certainly isn’t a summer vacation.  In fact, some students are a bit surprised at the challenges at contributing software to such a broadly used product.  It is a lot different than working on an assignment at school, that’s for sure.  Some of the big differences:

Tools and techniques – building software (whether on a PC or on a server) for a broad set of customers requires a different set of tools and techniques.  You are likely to be using tools such as Visual Studio and the .NET framework designed to work with large numbers of developers on big projects.  So you will spend some time getting up to speed on C#, C++, etc. if you do not already know them—don’t worry you don’t need to know them.  We also of course have a group internally that trains on these tools and offers courses in these and all sorts of other areas which you can tap into.

Security, Privacy, and Quality in general – perhaps the biggest difference between commercial software at scale and other projects is the need for all of the factors that customers expect under the umbrella of quality.  This means you will spend a lot of time designing in, coding, or validating these needs of the product.  You will spend way more time on this than you have spent previously on non-commercial products.

Performance – performance (speed, memory usage) are key to commercial code.  All that stuff you learned in algorithms will matter a ton.  You will need to consider your design in the context of a large system so you will not have the freedom to use a ton of resources on just your part of the world. 

Iteration – The biggest difference I always think is that you will spend more time on one area than you would in a course.  You will spend time iterating on the design, test plan, or code because getting it right is the goal.

Scale – Perhaps the biggest contrast to coursework is going to be the scale of working on software like Office.  As described before, while in theory it is cool if you can make a few billion dollars with a group of 20 people, in practice this hasn’t proven to be the case.  Microsoft, Yahoo, Google, and others are all very big companies.  In fact we are at the point where most of us have a number of developers that pretty much feels the same—once you get past about 1500 or 2000 developers it is tough to tell the difference, which is why Microsoft feels the same to me now as it did when I started (the company was a total of 3,500).  By the way, don’t get confused by the numbers you read about the size of a company overall.  Microsoft in particular (among those) has a large global sales force which requires a lot of corporate infrastructure outside of “developers”.  For what it is worth, the team that creates all of the Microsoft Office Professional code fits in building 36 (and some in Mountain View!) and the number of developers is in the mid 100’s.

Mentorship – and finally an important part of working in a commercial setting, and perhaps the biggest learning opportunity as an intern, is getting to work closely with an experienced member of the team.  You will have daily contact with your “mentor” and you will frequently interact with your group manager.  I would add that I will definitely be on the lookout for cool projects and might drop by your office for a quick demo when you’re not expecting it :-)


Leaving out all the details of the cool furnished apartments and stuff, your internship will start with an orientation that all interns receive—you learn about all the benefits, meet lots of other interns, and get the scoop on the summer event schedule (activities, parties, outings, etc.).  Shortly after that  you’ll head over to your office.  Interns work in the same offices that full time employees do though generally, just like in college, you’ll share an office with another intern.  You’ll get all your hardware and spend some time getting your @microsoft.com email address and the like.

Next up you will start to talk about your project and what the summer holds for you.  Things will move pretty quickly since you only have two weeks.  Your mentor has written up your project plan—the plan will outline resources, objectives, and explain the overall project to you.  Of course this is just the start and your own view of things will contribute greatly to how the project plays out.  You will probably spend the next day or two getting oriented around the code, tools, and finding the drinks and cafeteria.

You will work with your mentor pretty consistently.  You’ll begin to get a handle on the project, but you’ll have a ton of questions and you will start learning right away.  You’ll see the amazing stuff that goes into building a product like Office.  You can head over to the labs where we have all the hardware that builds and tests Office if you want to get a real sense of things.  If you are in program management you might spend some time in the usability labs or in focus groups/field studies. 

Specifically for Office 2007 we are going to be at a super exciting time as a team because we’re heading into the final phases of the project.  You will have an opportunity to be on the inside of a super important project.  Because we’re winding up, in all likelihood you will be working on forward-looking projects helping us to define the next product.  You might work on an area that we are going to release on the web or put in the first post-release service pack.  Or you might actually get to work on the final phases of 2007.  It all depends on the project and a little bit on your job.  If you are an SDE or PM, there is a good chance you will work on future work, which is appropriate since many on the team will be doing the same.  If you are an SDET you will want to join up with the full-time SDETs who are focused on the 2007 quality issues—performance, security, etc.  In all cases, there is a ton of cool stuff we’ll be working on.

Since you are a full fledged member of the team you will also participate in all the team activities—events outside of work or team meetings and the other things that go on as we build Office.  There will be a lot of neat stuff to see in action—how we release the products, how our OfficeOnline web site works, how customers are using the beta release, etc.  Team meetings are all about keeping up to date on that sort of information.

Let’s fast forward to the end of the summer—your project is rocking, you did way more than you were supposed to, and in general had a great time.  The final thing we ask of all interns is to present their work to the team and to the corporate VP of your group.  This is the most fun for me since I try to go to as many of these as I can.  You’ll find a very receptive and supportive audience.  This is an important part of your experience because in the corporate environment you are often called upon to present your work and undergo a peer review ;-)

The work is challenging—there is no doubt about that.  It is not a vacation since you are contributing real code to products customers will pay real money to use.  The stakes are high so we will take the work seriously.  In exchange you’ll have an experience that is pretty close to real world.  We don’t try to dress it up and we don’t hide the hard parts.  Sure there is the party at the Chairman’s house and more stuff planned and scheduled than you can imagine, but the work is real!

I should also mention the opportunity you have to learn about the rest of Microsoft and things like Microsoft Research (MSR).  Throughout the summer there are open talks by leading researchers and guest speakers of all sorts invited by MSR.  These are streamed to your desk or you can head over in person.  In addition, each week there is a “tech talk” (where the name of this blog came from) from a product group VP who offers up a view from their product/area (and in my case, a bunch of cool free stuff if you know how to work the system!)

I hope to see you at the tech talk this summer!



We're out there visiting a bunch of schools in the next few weeks.  At each of these schools you will run into a senior member of the Office development team--we're representing all of Microsoft, not just Office, interviewing for full time and internships on our product teams.

Stop by your college career office for information on how to sign up and take part in the process.  If your school isn't on the list, check with the office anyway since there is a good chance we have a visit planned and I just missed it in the listing below.

For more information on the process check out http://www.microsoft.com/college.  There are instructions on who to contact and how to apply in general.

Also stay tuned since at many of these schools we will also be giving a tech talk on Office. 

And finally, we are doing LiveMeeting interviews with a number of other schools.  We're working with the career office so no need to sign up for anything special, should this apply to your school.

Hope to see you there!

Brigham Young University
California Polytechnic State University SLO
Carnegie Mellon University
Cornell University
Duke University
Florida Institute of Technology
Illinois Institute of Technology
Iowa State
Michigan State University
Northwestern University
Ohio State University
Oregon State University
Pennsylvania State University - University Park
Purdue University
Rensselaer Polytechnic Institute
Rochester Institute of Technology
Stanford University
Texas A & M University - College Station
University of Arizona
University of California - Berkeley
University of California - Davis
University of California - Irvine
University of California - Los Angeles
University of California - San Diego
University of California - Santa Barbara
University of Illinois - Chicago
University of Maryland - College Park
University of Michigan - Ann Arbor
University of Minnesota
University of Notre Dame
University of Pennsylvania
University of Texas - Austin
University of Victoria
University of Virginia
University of Washington
University of Waterloo
University of Wisconsin
Virginia Polytechnic Institute and State University
Washington University in St. Louis


Filed under:

As we hit the college campuses for the second half of recruiting, it seemed like a good idea to pick up where we left off.

Development at Microsoft

Let's talk about development at Microsoft and what it is like to be a Software Design Engineer (or SDE as we call them, or just "dev").  My last post described PM at Microsoft (Office in particular) so I thought I would talk about Development today.  Development does not have the subtleties that PM does so I don't think it will take as many bytes to describe.  From the very beginning Microsoft has been a development driven culture and organization.  Of course this starts with Bill Gates and Paul Allen two developers with a very famous story about writing a BASIC interpreter in a weekend. 

Obviously the first thing that comes to mind is that at a software company, without developers the company really doesn't exist.  And of course Microsoft is no exception.  While the company has grown from what I would say was a "developer-driven" company where basically everything was about development, to a more grown-up and well-rounded company with the right focus on customers, business, and the market, we have consistently remained very much a technical and product company.  Of course this starts at the top, where our Chairman of the Board is also the company's Chief Software Architect.  Also, this post might show a bit more of me and be a bit more personal because development is where I started at Microsoft and because I am one of those folks that has a very romantic view of programming. 

At the risk of perhaps ruffling the feathers of some others at Microsoft (myself included), one analogy that was shared with me back when I was a developer is that being a developer at Microsoft is like being a fighter pilot on an aircraft carrier (can you tell about what year this was and what movie was still top of mind?)  An aircraft carrier exists to push the airpower and does so on ships that have over 80 aircraft on them, and those aircraft are supported by a crew of nearly 6,000 (on a ship like the Nimitz).  So you can imagine while there are a bunch of pilots, the infrastructure of the ship (from mechanics, to naval officers, to doctors, ship's defenses, etc.) are all focused on insuring that the aircraft and resources and doing their duty.  So in a sense, if you're a developer at Microsoft then you're on a ship that is all about making sure you can accomplish your mission.

The mission of being a developer is much easier to detail than that of program management--developers write the tightest, most secure, most robust, most performant code possible.  At the same time, it is not just any code, but the best code that addresses customer problems in innovative ways for the broadest audience.  You can write great code in a lot of places.  Being a developer at Microsoft means you're writing code used by hundreds of millions of people who literally bet their livelihood on us. 

A year after I joined Microsoft, my recruiter asked me for a quote for our recruiting brochure (I can't find it or I'd scan it in) saying why I wanted to work at Microsoft.  For me, the thing about being a developer here is that impact.  In graduate school I was working on a class library and working on connecting it up to databases. It was super cool and I had a great time.  I came to Microsoft and worked on that same type of project, but instead of sharing the code with my lab mates and a few other interested researchers we were selling the product as a big part of our C++ product line.  And before I knew it we had hundreds of thousands of developers using our tools making software for millions.  For me that has always been the greatest rush.

As a quick story, I was on one of my reasonably regular recruiting trips to Cornell back around 1995 or so.  It was late at night and of course high on my agenda was returning to the Hot Truck on west campus for on of Bob's PMPs ("French bread pizza", an idea copied by Stouffer's mind you).  As a quick side note, about 10 years after you graduate your body is not really able to handle these treats, which explains why they only serve PMPs at your 5 year reunion.  In any event, it was cold and some others were waiting for food along with me (waiting means standing on a stairway in front of the truck) and I'm sure they were wondering what this grown up was doing there ("loser grad student" comes to mind).  They were talking about a cool program they were using in their comp sci class.  As the details unfolded it was clear they were talking about Microsoft Visual C++. 

I couldn't resist so I jumped in with a "hey I worked on that".  Somewhat amazed (perhaps at my rudeness) but nonetheless interested.  We ended up having a detailed conversation about the emerging importance of C++ and the implementation issues they faced in class, with particular emphasis on code and technical details (multiple inheritance, virtual function tables, etc.).  One student was so excited he said "wait a minute" and ran back to his room to get his box of C++ so that I could autograph it. 

Here's the hot truck in action (this is a reunion photo so it is warm and the people waiting are not students):

OK you get it, being a developer is cool.  So what does a developer do at Microsoft?  Like all the product development jobs, a good way to think about this is to look at the primary phases of a product cycle -- in developer terms you could think of these as evaluate, architecture and scaffolding, construction, and polish.  Like all disciplines, development is one equal part of our product development process.  In some ways, the other disciplines exist to make sure our developers are 100% focused on building great features, writing great code, and doing a great job.  For the record, this most certainly includes me! 

As is often the case when I talk with students about the product cycle, the conventional wisdom these days continues to be that it is way cool to work on short projects and that the world has moved on from big long software projects--this is the myth of cool projects can be done in one summer.  It is hard to disagree in some sense--if you can have all the benefits of lots of customers, long term success, and profits by doing a small amount of work in a short time, then that is definitely preferable to doing a lot of work over 24 months.  Unfortunately, there are very few small programs that are also interesting from a business perspective, especially over any sustained time.  And of course today's small program is tomorrow's big program and asset that customers want to bring forward.  In several posts I've talked about the product cycle and how we work in Office.  I think the rewards that come from building a unique "economic asset" for Microsoft and customers are very great (from a personal accomplishment and a business perspective).  I love a cool "project" and we definitely have those for interns, but trying to make a big company out of a lot of projects is exceedingly difficult (a wise leader of Microsoft once said, you can't make a billion dollar company out of one hundred $10 million dollar products).  There are some other myths of development that I will follow up on next post.

Evaluate and Estimate

Let’s assume program management has done the groundwork to come up with a good range of feature ideas and you’re now facing a long list of potential features.  Many of them are exciting.  Many are things you wish you had *today*.  Some of them look dorky.  Some of them look like implementing them in code involves changing the laws of physics.  This is where development brings their point of view to the picture and collaborates with program management (and test) to determine what can possibly be implemented. 

At this point a lot of organizations would just pass the baton to development and they would take a “spec” or a “market requirements document” and do the set of things that make sense to them, without much of a feedback loop (until perhaps later when some features that were important to the boss fail to show up).  In Office, this feedback loop is a critical one that takes a lot of energy—we call this “adds/cuts” since during this time we are building a list of the features we will implement and deciding which ones go on the list (add) and which ones fall off (cut). 

At the same time, particularly for work that is reworking past ideas or improving in-market features, developers have their own ideas about what makes sense.  Just as a program manager would do, the role of development is to convince program management to devote the bandwidth to adding those features.  It goes without saying, but developers dream up some of the coolest ideas around. One of the coolest that I can think of recently has been the evolution of “Watson” – this is the quality assurance feature in Office that uses the internet to reflect back to Microsoft (anonymously and privately and opt-in) the experience customers are having with the software.  This was dreamed up and executed by developers in their spare time.

So development is not there just to “code” the aspirations of program management.  Development is also not there to dream up all the features on their own.  Remember, there is a lot that went into the program management feature list, vision, and other groundwork.  Of course in the end developers “own the code” and they could just go off and do things their own way, but this does not scale very well—you can imagine that as a developer you might know a whole lot about how to use a feature like pivot tables in Excel, but unless you’ve spent the time with bankers looking at how they use them and time talking to VARs who build solutions on pivot tables there is a good chance your views of what to do are based more on the code and the possibilities of the code, rather than the customer’s needs.  After all, the most amazing developers are those that make the code do what the customer wants, rather than make the customer like what the code (or developer) wants to do :-)

With this rough list of features in hand, as a developer you are responsible for looking at the challenge and looking at the cost of implementing it.  You are responsible for understanding the problem to a level of depth that can allow you to estimate the cost of the feature, including all the edge conditions, error handling, scale and performance, quality, globalization, and more.  Of course at this phase you are not expected to get the estimate down to the day (and frankly, it is not likely your program manager counterparts have ironed out the details enough anyway).  But what you need to do is to be able to determine the feasibility of the work.  This feasibility is super important.  If you are off in this area then there is a good chance your work will be very hard to ship.  The best part about being a developer, even a new one out of college, is that you own this decision.  You can say "no it cannot be done" or "it can be done, but perhaps there is a better way", or "you bet, I'm the one to get this done just like you described".  This back-and-forth is critical to being able to successfully determine what is in the product or not.

This brings us to another quick aside, which is the notion that you should just try stuff out and see if it works and if it doesn't, "oh well".  I think this is a great notion to strive for and for small products it might be a good idea.  But for anything that has any level of complexity, even trying something out is expensive enough that you want to have a high confidence in success before you start.  What's the old carpenter saying, measure twice, cut once -- I think that holds just as much for software even though you don't immediately see the downside of a bad estimate. While this looks like some serial “waterfall” process, in fact it is entirely iterative and the goal of this is to allow small groups of people to act as a small team within a big team.  But having this information allows us to coordinate and make decisions as a whole.  So this way you can have two small teams contribute to a mission, work independently as possible, and have some coordination.  It fosters shared code that does not have to get defined at a very rigorous level, but a much more collaborative level, which is often what grinds cooperating teams and code sharing to a halt.

As a developer exits this phase of the product he/she is equipped with a set of features and a rough estimate for the time it will take to get the work done.  The developer, working with the dev lead and dev manager, is busy at this point developing a high level task list of what aspects of the work need to get done and an ordering.  At this point you will iron out things like scoping the amount of user interface work, the amount of new infrastructure work, the amount of backward compatibility work, the amount of developer/API work, etc.  These big buckets look a lot like the specification areas from program management, but of course as a developer you are thinking about the amount of code that needs to get done for each based on those areas.  There is also work across the team because there are likely some serializations that will need to take place.  Of course the next step is to develop some architectural view of how to really go about implementing this work.

Architect and Scaffold

For many developers the really fun part of a project is determining the architecture.  By architecture I mean precisely what you learn about in college courses--what are the systems, sub-systems, data-structures, and algorithms you will use for the major parts of a project.  As a developer, you are of course entirely responsible for these decisions.  Even if you are new you own these choices.  The good news in that case is you will have a dev lead who has experience with the code base and the project who will likely work very closely with you on this phase. 

I love walking by developer offices during this phase of the project.  Whiteboards are filled with diagrams of pointers, data structures, and lots of "DO NOT ERASE".  There are always heated discussions about what choices to make.  It is during this phase that I believe developers make the most crucial decisions of a project.  As you know the architecture determines not just what can be built well right now, but how responsive to changing requirements the project will be in the future.  While it is great for every architecture you design to be able to respond to any change, that is really tough to do in practice.  So the best developers are those that work the closest with program management to really understand the direction that things might evolve--to the best of everyone's knowledge.  At the same time, it is always worth cautioning that trying to get your PM to say "no I will never ask you for this" might get you into trouble later in the project when things change.  That can lead to frustration, but it is of course always the best way to demonstrate the flexibility of your architecture.

During this phase developers make up not just the code architecture, but the assumptions about what the code can handle down the road.  The data structures will be chosen to assume certain field lengths, certain limitations, or certain performance traits.  All the size v. space tradeoffs you learn about in college come into play here because as you know you can't just use infinite memory or infinite cycles.  It turns out that for client based applications the primary gating factor is memory usage, so being very clever about how you use memory and how many pages you touch can make a big difference in how your code performs (for example, in toolbars it is often an elegant design to just have each button be a bitmap, but loading 100 bitmaps off disk can be insanely time consuming at boot time when all you want to do is get work done, so you have to be clever about designing a system that can load one bitmap and create 100 buttons).  At the same time, the success of client applications depend immensely on the perceived performance.  So these choices early on have a big impact.  This is where experience and you mentor really help, because there are many things that come up time and time again.  Similarly on server code, the use of CPU and networking have similar issues and an architecture that assumes these are low cost might be very elegant but in practice be problematic. The creativity involved in elegance plus performance plus making something meaningful for customers is very fun!

I have met a lot of developers that say they want to be architects.  At Microsoft (and definitely in Office) *all* developers are architects.  In some ways I think the job title for everyone on our team should be Software Design Architect.  The reason is simple in that we want everyone to be thinking and acting architecturally with their code.  Because of that we have not historically needed separate people to be telling people what to do and how to do it without actually doing the work themselves. 

With the idea of what the overall architecture will be the next step is to put in place the scaffolding of the project.  This is a very personal thing for developers as each have their own way to go about doing this.  Some prefer take a depth first approach (I once read that great programmers spend 90% of the time on 10% of the problem, so maybe depth first isn't best, then again I think I spent my life on the CFile class of MFC).  Others prefer to take a breadth approach.  One of the most architecturally focused developers in Office who designed the line and page layout code in modern Word used a process where before any code at all was written all the header files and structure definitions needed to be complete--and the rule was that once coding started these were not going to change.  He wasn't stubborn, but rather just brilliant at doing the complete design ahead of time after appropriately studying the problem. 

There are a lot of things to consider at this point as well such as what code can be reused--why implement a new data structure when one exists to do the work.  There are items to consider like compatibility.  If your work will trample on an existing API that customers used then you will need to figure out how to continue to support that API.  You can look at these as a burden or as I prefer you get to look at them as useful engineering constraints.  An architect once told me that he loves doing projects where the land the house will be on has a lot of quirks--it makes the project interesting because it introduces constraints that aren't there in a flat quarter acre lot with no trees.

In a three milestone project, this portion usually takes the first milestone.  As a developer you exit this milestone with a much clearer idea of the schedule and a much clearer idea of the work ahead of you.  Closing out this work and getting all the scaffolding checked in and getting those data structures working is a very significant milestone -- you feel like you wrapped your arms around the problem and can move on.


Of course what comes next is just solid coding.  This too is super fun because this is where you get those feelings of coming into work, writing some code, and showing off a new feature by lunch and maybe another new feature at the end of the day.  Like a long car trip from Florida to New England it feels like you made it through Florida and Georgia are hitting the Carolinas and you're knocking off states at a rapid pace (don't forget to stop at South of the Border though).

For the most part during the construction phase you are writing code and making things work.  Every day brings new excitement.  You know you have really rounded the corner when people start dropping by your office because word traveled around the hallways about a new feature that is running on your machine. Often you'll see a screen shot passed around in email or a URL mailed around that we should all try out.  One of the new features in Office "12" that was done was the ability to use InfoPath forms in Groove -- this is a super important scenario for reliably collecting data when you are using a laptop not connected to the internet (such as when Groove is used in disaster relief work, for example).  I remember being in the Beverly,MA office where Groove is and seeing a super early demo -- you could literally open up a form in Groove.  You couldn't type or anything yet, but it was super exciting because it showed that the scaffolding and architecture were well on their way to being proven.

Of course other folks are hard at work while you are writing code, namely the testers you work with.  As you complete features or sub-systems the testers will begin to investigate the work you are doing and they might find some problems :-)  Some of these will be because features are not done or the error handling code is not there, but you might also have things that didn't work as planned.  In fact the more you make it through this the more testing will likely be able to push your code to the limits.  All of this of course helps you to make the code better.  As a developer you always strive to make no mistakes, but we know that is not possible, and so your best ally in building a great product in this phase are your coworkers in testing.  Similarly during this phase as a developer you will need to be very aware of the real world performance--things that are slow now will only get slower.  So you might find yourself revisiting some architectural decisions, since you know that it is much easier to deal with these upstream than hold off.

As you wrap up this phase we are generally in what we call "code complete".  This means the feature work is done.  It means all the edge cases that were planned on are handled.  It means that as far as development is concerned the feature is ready for people to start to use and for the real feedback to begin.  There is still a lot of work to do, but your work now looks like a product.

Integrate and Polish

We're now getting ready for the beta test for the product.  The product is rough and we can't sell it, but you know what it is going to look like and most of all you are very excited to see what others might think.  When you build the product you see the incremental steps so when it all comes together it sometimes isn't as exciting as the first look at the feature.  For me, in Office "12" the PDF feature was like this.  Alex (and others) worked away on this for quite some time of course, but to us we knew it was a very simple "save as PDF" feature that would be on the "File" menu.  It was super cool of course but we'd seen the work evolve.  Then we had the chance to demo it to the MVPs when we announced the support and for those that were there we got to hear the memorable quote "if this works, I'll have your baby".  We were in the end-phase of the product but it sure reminded us just how cool customers thought the feature was!

One of the most fun parts of this phase is when we invite BillG to the Office hallway and he spends the day going to developer offices and talking about the details of the code and architecture.  This is a tradition we do each release and is enormous fun for everyone, especially Bill.  We pick devs from each of our teams to demo their features and they prepare and plan on Bill stopping by.  You just hang out in your office and then Bill pops his head in.  You start your demo and hope that he doesn't stump you out of the gate!

Of course the polish phase is not always just fun reactions from customers.  There is a lot of great development that takes place as we really smooth out the product, nail the performance, and nail the quality.  The polish phase really is about fixing the bugs.  The fun part about being a developer during this phase is that you are working from a list of bugs and fixing them--a lot of people really like this style of work in that you know where you stand every day and nothing is too open ended.  Bug fixing for many is a sport.  My first manager was just amazing at being able to almost detect the source of the bug by sensing some sort of EMF from the monitor--he was especially adept at using intel hardware breakpoints to track down errant pointers.  Some developers will likely become informal tech leads of projects at this phase because they can track down anything.  There is also a big aspect of being experienced here that shows and so the more experience you have the easier this phase becomes.  Of course from an agility perspective, the buglist represents the backlog of work and one could argue the buglist should always be a “virtual zero”.

Similar to bugs is performance.  Even with 3ghz multi-core processors and 1gb of RAM performance is still critical.  A lot of people think that perf shouldn't be a problem or if it is it is just because we add too many features.  I wish it were that since we could just do less features and not have to work on perf.  But the reality is that as fast as we can add features people use more and more of their PCs.  So our original benchmarks for Excel were around booting Excel into a Windows runtime used only for Excel--no network, no AV software, and basically nothing but Excel.  It is no wonder it could work in 1MB of real mode memory!But today when you boot Excel you are probably running mail, Word, a browser, a media player, a network and firewall, and on and on.  So we can’t let our resource utilization grow because there is always contention.  All of our work on the server has these same issues relative to scale, pages per second, etc.   As a developer on Office you will spend a lot of time looking at how your new work impacts the release-over-release benchmarks.  Our goal is that each release should use the same resources and take the same time to do the same tasks.  This is a tough goal for software and it is a testament to the team that our applications still perform at these relative levels. And at the same time people can do lots of new stuff.

During this phase some of the classic integration engineering takes place as well.  Software represents a complex system and when you bring those systems together the behavior across them and the boundary conditions yields some interesting issues to track down.  Microsoft develops a lot of automation testing and a lot of scenario based views of how the products should function that assist the developer during this phase. 

Finally for features that interact with users, this is the time we get tons of feedback on the experience and we work hard to incorporate that as appropriate.  We learn lots about the features at this point and because the product is working, program management is out there learning.  And developers are watching the reviews and feedback and responding as well.  I remember when working on the VC++ compiler/IDE and we really wanted to compile the most lines per minute relative to the competition as the spec said we should.  The beta feedback I saw said people thought we were slower.  Now I was pissed--I had like 3 stop watches and 4 machines in my office and I knew every benchmark for compile speed and tracked these on a daily basis.  I knew our speed was faster.  Well I talked to some outside developers on the beta and I realized that they thought it was slower and they showed me how the competitor had a very fancy spinning line count telling you how many lines were compiled and we just had a status bar thing.  I got so excited because I got to tell them that I used to have that but realized it slowed the compile down by a fixed overhead of about 0.2s and for big files it really slowed things down even more just to TextOut those line numbers.  Of course I learned something too that sometimes perceived responsiveness matters just as much as clock time.  A good lesson for all.

The best feedback of all though is reading reviews, watching your friends, and maybe signing a few autographs at the Hot Truck! 


With that we've made it through the product cycle -- we've architected, estimated, scaffolded, constructed, and polished.  The product is ready for customers.  Whether that was a customer requested DCR that took 2 weeks, an update of OfficeOnline that took 6 months, or a full release of Office, as a developer you will take your code through all of these phases.  If you're considering an SDE role at Microsoft (or Office), from my perspective a couple of things you will get:

  • Part of a small team focused on the customer or technology area
  • The opportunity to write the very best code for products used by millions of people, not just used but relied on to earn a living, get a degree, or run governments.
  • Access to the best resources to get your job done -- working with the best in the industry in product groups to being able to tap the resources of Microsoft Research
  • A very strong mentor who as part of small team will be there for you on a daily basis

Of course it goes without saying that to be a great developer you need to write great code, but the following are a few characteristics that our team finds valuable when finding great developers for our team:

  • Able to foresee what will need to change in the next round without over-architecting the current round -- many people can write a quick solution to a problem, but quickly program themselves into a corner.  That is why you might get asked an interview question and then after you answer it you might get asked "ok, now what if the person's language reads right to left".  So great developers know the foresight they are building into the code and understand the limitations that will appear down the road--all code has that of course, but being deliberate and informed about that is a great skill.
  • Debugs other people's code -- Great developers can jump into other code and make progress in pretty short order.  This is super hard.  So getting good at building a mental map of a new system and understanding the patterns in foreign code is a great skill.
  • Makes the code dance for customers -- Many developers are very content to prove their code does cool things.  That is definitely good.  But to be really great, a developer should be able to show how their code solves a problem that a paying customer would have.  
  • Works well with others -- All great programmers that I've known have told me how much they love The Fountainhead or Atlas Shrugged.  Yet at the same time, programming is inherently a collaborative field so all great programmers know when to work well with others and how to use their dev skills to get the most out of the team.  This is not just other devs, but test, pm, design, usability, and others.
  • Knows when to say "no" and when to say "yes" -- Many developers are spectacular at saying "yes" early in their careers which is quickly followed by a tremendous ability to say "no" (after a tough project or two).  Great developers know how to make it work and know when something is important that they can find a way to get a quality job done.  They can find clever solutions to incredibly hard problems. 
  • Humble -- Everyone probably remembers the scene in Top Gun when Maverick was explaining his MIG encounter--Maverick was calm, cool, collected, and understated.  As confident as he was in his flying he told the story with a certain modesty ("[cough] we were inverted" with emphasis added by Goose "no really we were").  Most of all, great programmers are humble about their ability to crank out the best code and make it look easy.



PS: A word on comments – I strongly encourage comments.  I especially encourage comments from college students and people considering a career at Microsoft.  If you already work here, feel free to drop by my office, send me mail, or anything—we can have a great discussion without going through this pipe that is a bit more narrow that my front door!

In a comment in the previous post there was a mention of maybe the PM role will go away with the advent of new technologies that make it easier to drive data directly to the developers.  In particular there was a mention of Watson -- which is our online crash data -- which has been a miraculous help to developers (an amazing innovation, created almost entirely by development at the early stages).

My opinion is that the more data there is the more there is going to be a need to step back and to really understand what is valuable and what is not.  The next evolution of data along the lines of Watson has been the Office Customer Experience Improvement Program (sometimes called SQM internally) which was pioneered by the MSN team and is used by many groups at Microsoft (and has been used in Office previously).

In his BayCHI talk last week, Jensen described some of the data used by PM to help to develop the new UI.  In many ways the UI work in Office "12" shows how the joint work across all the disciplines mentioned can yield a success that would not be possible with only one perspective.  One thing to keep in mind is the scale of this design--no product does as many things for as many people in as many different ways as Microsoft Office, so the decision to evolve the experience and the chosen designs are a big deal to us and our customers.

Rashmi Sinha at BayCHI posted some kind words about the whole interaction we are having with customers, which I think dovetails with the comments previously.

Jensen's slides are also posted from that talk.  From the slides you can see that the data helped us to better understand how the product is used by a large number of people, but the design was still a collaborative effort that followed the model I outlined.  And of course we're still in beta so we have been going through a significant amount of feedback and iteration.  Also as a reminder, Jensen's manager, Julie Larson-Green, has a video that shows the UI in action.



While at Stanford this week I was asked by a number of PM (program manager) candidates to talk about the PM role at Microsoft.  The PM role is unique to Microsoft and was actually created in response to developing software that is more usable and at the same time pushes the state of the art of technology.  So when we talk about PM at Microsoft, we're talking from a perspective of creating and evolving the role over the lifetime of the PC industry.

I have been both a PM and an SDE (software design engineer) during my career at Microsoft.  When I was recruited I started off as an SDE candidate and then I learned about PM during the course of my interviews and I thought "COOL!" that has to be a job for me--after all it sure sounds like an incredibly cool role, since it has the title "manager" in it and if you read/hear the description it sure sounds like you're running the show. The job title "program manager" is a bit of a misnomer, since program managers do not program nor do they manage--go figure.  I went with SDE because I wanted to write code in my job.  After being an SDE for 4 years I moved to program management.  I think that was a good move for me because while I like to think I was competent at development, I was probably never going to hit it out of the park with my ability to write code, but I think what I wasn’t able to do in writing code I made up for with the skills required of a program manager :-)

What follows is a description of program management from a PM perspective -- that means through the lens of a PM.  It is also an analytical description based on my experience.  I'm not trying to hype the job or make it seem too over the top.  In fact, I've recently talked with an number of candidates who have been told of PM roles at other companies and my feeling is that they are not being told the whole story.  So with my blog I try to be a bit more complete and not "sell".  This might make it seem like there's no room for change or to impact the definition of the role, but that is not the case.  What I'm describing is in constant evolution and it is the members of the team that are constantly evolving the role.  PM is a role that has a lot of responsibility but you also define it--working in partnership with expert designers, clever developers, super smart testers, etc. you all work together to define the product AND the responsibilities each of you have.  PM is one equal part of a whole system. 

Program managers got started at Microsoft while developing Excel for the Macintosh.  The challenge the company saw was that we were stretched thin trying to push the state of the art in technology (in this case develop for a brand new OS using brand new Graphical User Interface concepts) and so the developers were very busy just trying to make things like printing, display, graphics, etc. work as well as trying to develop new algorithms for spreadsheets and modeling.  That meant that the place where we were not focusing enough attention was on the usability or the scenarios for how people would use the software.  In a very classic sense the high order bit of our development was the code--this is pretty classic in most organizations today where you really only see development and test (sometimes called QA) and to the degree that there is input from users/customers this is usually done by the demand generation or marketing team (called product managers in Silicon Valley).  So at Microsoft a new role was created in Program Management with the explicit goal of partnering with development and working through the entire product cycle as the advocate for end-users and customers. 

The challenge of trying to write code using the latest technologies and bringing ever more complex scenarios to end-users in a simple way continues today as we build web sites (OfficeOnline), server products like SharePoint, and entirely new products like OneNote, as well as build whole new user experiences to replace the aging menus/toolbar paradigm.

Up front I would say that the PM role at Microsoft is both unique and one that has unlimited potential -- it is PMs that can bring together a team and rally them around a new idea and bring it to market (like OneNote, InfoPath).  It is PMs that can tackle a business problem and work with marketing and sales to really solve a big customer issue with unique and innovative software (like SharePoint Portal Server).  It is PMs that can take a technology like XML or graphics and turn it into an end-user feature benefitting 400 million people (Office Open XML format or the new graphics functionality in Office12).  I could go on and paint a very emotional picture, but let's spend some time digging into the more analytical aspects of the job.

Where developers were focused on code, architecture, performance, and engineering, the PM would focus on the big picture of "what are we trying to do" and on the details of the user experience, the feature set, the way the product will get used.  In fact the job has matured significantly and it is almost impossible to document a complete list of the responsibilities of program management.  One way to do that is to list the sections of a specification for features in Office that a PM would complete before the code gets written which includes nailing the scenario you are solving for, the worldwide implications (will your work make sense to customers in China, India, Estonia), how will developer customers extend the product (object models, programmability), is the product secure and is privacy maintained, what are the other features your work interacts with, will the feature be responsive and performant, and more.  These are critical parts of the design of any product, and when you will have 400 million potential customers thinking these through before you start the work is critical.

As an aside a lot has been said lately about "agile development".  A key benefit of program management is that we are far more agile because we have program management.  That can be counter-intuitive (even for many developers at Microsoft who might be waiting for their PM to iron out the spec).  But the idea that you can just start writing code without having a clear view of the details and specification is a recipe for a poorly architected features.  A great PM knows when the details are thought through enough to begin and a great developer knows when they can start coding even without the details for sure.  But like building a house--you don't start without the plans.  While software is "soft" the cost of remodeling or rebuilding is no different than if you decide the walls are in the wrong place or you forgot to leave room for the HVAC system--sometimes because we don't have material costs in software we think that "rewriting" is perfectly ok.  That generally works super well in two cases.  First, if the program is small then of course you can rewrite it.  In the commercial software world most software projects are not the work of one or two people--in fact one way to think of it is that if a project is only the work of one or two people (or is only a 100KLOC) then the economic value (and thus the impact) of that product is probably pretty finite (at the very least a competitor is likely to catch up very quickly).  And second, rewriting works well when you are looking backwards and re-doing what has been done (like cloning an existing product, implementing something for the n-th time).  When you're doing innovative work, the time spent on design and analysis pays off handsomely in the ability to develop a complete program and to have something of lasting economic value.  AND when you have a process that embraces design and up front thinking you also find your development much more agile because when you do get the code in the hands of customers--after 2 months or 2 years--there is time to respond and react with changes because you are not overwhelmed with the basics.

The last point is worth re-emphasizing.  There's a school of thought that just getting your software out in beta and then "reacting" to the feedback is the best way to get the product done.  Again, this tends to work for products that already have a definition you are chasing of if you're interested in incremental feedback.  So if you're building an email experience and release it in beta, your customers/users can help you to prioritize which features in the universe of email to add next assuming you did not have all of them up front.  But if you're doing something new and innovative or more importantly if you want more than incremental feedback then you need to have much more sophisticated mechanisms than just beta feedback from power users.  Most importantly, the role of PM is to represent all customers, not just the ones who do beta tests or the ones who take the time to send in feedback or use early products.  A key skill of program management is to have empathy with a broad range of customers.  Often when you are just getting started you will see how easy it is to over-emphasize early power user feedback or anecdotes over broad based feedback.  Don't get me wrong, power users are great but they are just one type of user.  A great advocate for the "little guy" is Walt Mossberg and he really does point out when you're missing the mark on a product and too focused on "techies" as he calls them.  The bottom line is that most people are not techies, but most beta customers and most early adopters are so you as a PM have to do the leg work to validate your work with a broader audience. 

Before talking about what PM does specifically it is important to look at PM in the context of the relationships with the others that contribute to building products.  A PM serves as the coordinating point where all the disciplines come together--this is why you can think of the PM as being the hub.  What is critical about the Microsoft PM role is that all the different people serve as a "virtual team" building the product--the PM does not have to go pull them together but rather has to help get everyone aligned.  The resources for a project are dedicated to the project--these resources include development, test, product planning, usability, and product design.  Each role brings a unique perspective a unique set of skills to the product development process.  While you can often be someone who has an affinity for another discipline, rarely can any one person bring all of these skills and experiences.  And I can promise that any project of significance really needs the specialized skills to do a world class job and build a sustainable and uniquely innovative product.  I should probably write a blog like this on each role--maybe after the holidays!

  • Development -- developers write the code.  They are in charge of the code's architecture, the performance, the reliability, the security, and getting the functionality into the product. Of course development is at the core of what we do as a software company, but it cannot stand on its own.
  • Test -- software design engineers in test insure the quality of the product but more importantly that the product ultimately meets the needs of the customer we set out to meet.  SDETs will review all specifications as first class members of the team and use their perspective and experience in working with PM and SDEs to insure that the product is not going to be fragile and that it will be possible to insure a successful implementation.
  • Usability -- usability engineers validate the designs of our software and incorporate the statistical understanding of customers into the process. Microsoft was an early pioneer in integrating usability in the product development process (though some might say how in the world we released the Hot Dog Stand theme if we had usability).  Many usability team members have PhDs in HCI or related research areas such as anthropology, and many are undergraduates with a HCI or psychology background.  These team members design mechanisms to test and validate designs and design assumptions.
  • Product Design -- Design work in partnership with PM to develop the interaction model for our products and also own the overall product look and feel.  While many companies use design for "graphical design" (which we do) our designers are expert in computer interaction--many have studied at programs like Delft's or CMU.  When you look at the new user interface in Office12 what you see is a strong collaboration between the PM experts and the Design and Usability experts.
  • Product Planning -- our planners are experts in understanding the market place and understanding what our customers need from software.  Planners own research and communicating that research to the product team PMs and to the executives deciding the overall goals of a release.  Planners are assigned to broad technology and business areas (collaboration, business intelligence) where they become expert in all the products and solutions on the market and how Microsoft can offer customers improvements over what is in the market.  Many planners have business background and have worked in marketing before.

Many companies will "sell" you on being able to do many of these different things from one job.  This is just not a reality that exists and I always feel a bit bad for folks who believe this.  There are two times I hear this a bunch.  First is at startups you hear "come join us from college and you can own all of this".  Of course at a startup the real experience is that you are the college hire, which means you will do the grunt work while the founders and the venture people do all the strategic work--so you might find yourself setting up the build machines rather than interacting with customers.  Second, I hear this a lot when companies are selling against Microsoft and point out that "at our company we do not specialize and everyone does everything".  This is another "well in reality..." situation, since of course even when I have seen companies that claim to do the specifications or customer research and up front planning they do that work from Product Management, and those people are just as specialized, they just report to the marketing team.  And we know what that means, which is when push comes to shove the marketing team will need to use every hand to get out there and generate the business and sell--so even if there is a single group that does the work, those roles are specialized, and rarely dedicated specifically to the role.  These are my experiences and of course your specific situation might be different.  I've just seen these patterns repeat themselves over many years of hiring students and having them come back to Microsoft after a short experience with something like that.

It is worth talking about the size of the PM team for a bit.  In Office our PM teams are small (our dev teams are usually about 20-30 developers as talked about previously).  The entire user interface for Office12 was developed by a team of about 12 program managers--imagine that 12 program managers did all the work to totally define the new interaction model for 400M customers of Office.  But along with the fact that the team is small is the fact that a team like this is also one where even the newest members of the team receive significant mentorship and training from a very senior member of Microsoft (you can watch this video to meet the head of the user interface PM team).  So you have the biggest impact you could have in designing software while receiving a very high level of management attention.  And then of course each PM has developers they are responsible to equip with features and specs -- the whole user interface development team was less than 30 people (so about 2 devs for each PM).  A critical part about PM (also one that is unique for Microsoft) is that as a PM you have dedicated developers for your feature area--your job is to get the most out of those developers in terms of bang for the buck by having great feature ideas and great specs to get them done. 

So what does a program manager do?  Well there are three phases to program management: learn, convince, spec, refine.  These roughly mirror the product development timeline written about previously.  Do keep in mind that the timeline is not fixed--rather the phases of the timeline are.  So if we're doing a 12 month project then the time is divided accordingly, same as if the project is 24 or 30 months.

Learn --> Output of learning is a prototype

During the learn phase, program managers spend their time learning about customer problems and learning about the products and technologies out there that are relevant to these problems.  There is a lot of work with planning to understand competitive products or new products in the marketplace.  As you can imagine, customers have huge challenges in getting their computing systems to do what they need.  So often we will spend days at a customer's place of business learning from them and watching them trying to get their work done.  A great example of this is the work we did to understand how customers manage documents in an organization.  It is easy to see that organizations like law firms or pharmaceuticals are heavily dependent on the flow of documents in an organization (contracts, drug approval and research) and so the systems are both mission critical and elaborate.  Companies really want to automate more and to make things more usable and reliable.  The work of program management was to deeply understand how to model the flow of documents in an organization--spending time at big drug companies, small startups, big law firms, local law firms, Public Relations agencies that produce press releases, or government offices that produce legislation to name a few.  Out of this work PM and Planning developed a conceptual model called the "document lifecycle" (DLC).  This helped us to frame the way that customers would like features to work.  So for this work the PM needs to be really good at working directly with customers, learning from them, listening, being open minded to different ways of working, etc.  When you're hired from college you will participate in this work for your area.

At the same time there are deep technical problems to solve.  We need to solve the control and access to information (drug test results and contracts need a high degree of security, yet they need to be collaboratively authored).  PMs spent a lot of time working with the Windows platform team who develop platform technologies like our Rights Management Server or the Windows Workflow Foundation (WinWF).  These technologies are critical to enabling a robust and extensible implementation of the DLC. So in this phase of learning, the PM has to become well-versed in new platform technologies or in how to apply existing technologies.  Often this is where some people say "it would be easier to roll our own" -- which of course in the immediate term it is (just build your own linked list and event source/sink) but what you miss out on is the expertise and leverage that comes from a deep platform technology.  For example, by learning the WinWF and being an ISV of that technology we can take advantage of advances in workflow, integration with Visual Studio, and a very robust and scalable server without us doing any work--just like when developers reuse the process model of Windows, or the client side drawing code of GDI.

With this information at hand the role of the PM is to synthesize this learning into a series of prototypes.  These prototypes are of varying fidelity.  This is where the analogy to architecture holds--sometimes you do a drawing, sometimes you do a high fidelity diagram, and sometimes you build a model.  In software we sometimes build static screen shots, we sometimes prototype in tools like VB.NET, sometimes we prototype in a series of static bitmaps that illustrate a scenario.  For our new user experience in Office12 we went through a series of high fidelity prototypes development first in PowerPoint (you'd be amazed at the depth of interaction you can do) and then in more high-end design oriented tools.  By the time we were ready to exit the learning phase, we had a full mockup of the user interface (which I have shown at my campus tech talks this year).

The output of this phase is a prototype upon which we will author specifications.

Convince --> Output of convince phase is a plan and goals

Once you've learned a lot you have to go out and convince your peers, your manager, and the dev team that your ideas are worth pursuing.  This is where being a solid communicator and someone who is able to bring together customer needs, technologies, and scenarios really comes together. 

As an aside, a lot of companies will tell you that you can come and pursue your ideas.  That is probably not a good plan -- that is a recipe for chaos.  But more importantly, if you can do whatever you want there is a good chance someone else in the company has the right to come in and tell you to change.  If there is this level of empowerment it means the management team is empowered as well :-)  The ability to just start at a company and pursue your own agenda is much more of a lore than any reality--all companies have a strategy and a business framework that the work needs to fit within.  At the very least, eventually shareholders will want a return on your R&D investment.

So at Microsoft the convince phase is really where your entrepreneurial skills come to play.  While you will always have work to do, during this phase you are working to expand your vision and get as many lined up behind your area as you can handle.  Your ability to convince people of your ideas is a lot like trying to get funding from venture capital folks.  That is why if you have a great conviction of your ideas and a lot of energy you probably have the makings of a great PM.

The best part about this is that the teams you work with are all working in unison on the vision and everyone is on board trying to make sure the ideas come together super well.  In particular your mentor is there to work with you.  But ultimately, the ideas will succeed based on your own initiative and ability to convince the team of the chances for success and the high priority nature of the work. 

The output of this phase is the set of objectives for the project area.  What follows is developing things at the next level of detail.

Spec --> Output of spec phase are a series of written specifications

The first thing people always think of is "specs are for bureaucrats".  That drives me a bit crazy.  I know as Americans we have a tendency to use new products without reading the instructions, but it is lunacy to develop a new product without first writing down the goals.  The mere process of writing is thinking, and the thinking will always push you to uncover more issues sooner before it is way too expensive to change things.  For all the talk about agile development, few ever talk about specifications as being the most important step in agility.  It is way easier to change a bitmap or do some editing of English in Word than it is to move around and rearchitect code. 

Yet at the same time we do not sell our specifications, we only sell our code.  So while we work to be very hardcore about having up front planning we do not develop our specifications to the point that they are the full documentation of the product.  It is too much work and not enough of a pay off.  So if you make a late breaking design change we might document the change in the change log but we don't go back and redo all the words in the spec.  Another fun one for reading specs from a long time ago is that the actual feature name used in the product is never what we named it during development--the Office Assistant was famously named TFC during development.  The "C" stood for clown.  I will let your active imagination figure out what the TF stood for.

So in writing a specification, the PM that worked on the learn phase now has to turn that learning into an experience that customers will have.  This is where the entire series of features, user interactions, boundary conditions, localization, ISV opportunity, and all the details are filled in.  A specification is how a developer will estimate the amount of time it will take to write the code.  So if your spec omits a lot of details and developers need to guess, then there is a good chance you will end up not being able to realize all of your dreams because too many things needed to get filled in a the last minute, plus your developers will not be very happy working with you.  So doing a good job on the spec is important. 

A great program manager will take their whole feature area and divide it up into specifications that match the developers or break the feature up into workable "chunks".  On average a PM writes about 8-10 specs for their area, and each one can be 30-50 pages depending on how visual (how many pictures).  Some specs are significantly longer and some PMs choose to write a larger number of smaller specs. 

Specs are not just for developers.  But the usability, product designers, and testers are all contributors to and refiners of the specifications.  In fact while the output of the Spec phase is the document, the final output is an "inspected specification".  If you've ever gone through a code review with a professor or mentor (as an intern) a spec inspection is like a code review.  During this time testers might push on you about boundary conditions or compatibility with existing products.  Product designers might work with you to improve the way the spec describes the overall interaction.  Usability might research the instrumentation from in-market products and use that to refine the priorities for the feature.  In fact the role of data is critical to Office PMs--if you run a web site you have click streams and logs, and Office through the Office Customer Experience Program has exactly the same--usage information for millions of volunteers (anonymous and private of course) and that educates us immensely on how to design features (Jensen's blog describes this as well).  So the spec, while owned by PM, is a work product of many contributors.

It is worth noting that many times along with a spec is a more detailed prototype.  This is particularly true for heavily interactive features.  In this case product design and PM work together to develop detailed prototypes of the work (often these will be tested in the labs with customers as well).

When the spec is complete the core part of development begins.  PM then transitions to refining the product.

Refine --> Output is the product

During the development of the product, PMs are constantly refining the details, working with development and test to determine what needs more clarity and what is working better than expected (that can happen) and what is going less well (that happens more).  PMs are on call to answer questions and "unblock" development.

More importantly as the real code becomes available, PM is anxious to try it out and make sure it is meeting their own design expectations.  Once the real code creeps along we will bring that into our usability labs to further understand how the product works.  A famous story of this phase of developing the PM role was that the first PMs were trying to improve a feature under development and ran some usability tests.  The feature bombed.  The PMs tried to explain this to the developers, but the developers insisted that the PM just picked "dumb users" because the feature was great.  So after a few rounds of this the PM dragged the Dev to the tests to watch 10 out of 10 users fail to use the feature.  The developer finally relented and the feature was fixed.  Today, developers can watch tests via streams or go downstairs to our usability labs and watch the tests in person.  Almost all developers I know are keenly interested in how their features are doing (and how the PMs are doing designing those features!) 

Another aspect of refinement is working with customers who use the early code.  While it is cool to throw a product out to beta and get some instrumentation and maybe get some qualitative input via mail, the only true way to understand how the product is doing is by deep engagement with real world users.  We do this this through a number of mechanisms that gradually expand the number of customers involved.

Early in the process we meet with a very small number (10-20) customers who spend days with us here on campus and learn about the product.  We walk them through all the details and solicit their feedback and input.  We did this for Office12 last summer and it was critical to our ability to get to Beta1 with a product that reflects real world usage and learning.  As a PM you will be responsible for getting together with these customers and learning from them.  We often follow up on site.

Another group we learn from that is a bit larger are our MVPs -- the most valued professionals.  These folks are the power users of Office. Our PMs all got involved with the MVP summit on campus and again worked with the MVPs in small groups to get their feedback and expertise into Office12.  The MVPs know more about Office than any other customers on earth--they are a wealth of information.

We're currently in the phase of learning from a broad set of beta1 customers.  We are doing this through newsgroups and through direct communication. 

You might also notice that many of our PMs are blogging (see the links to the right).  This is new for us (well for everyone) and also a great source of information and a great way that PMs are connecting with the web community.

Of course our senior program managers are also responsible for working with the press and product management.  So a lot of time is spent on communicating Office12.  There are a lot of reporters interested in Office and a lot of information to get out there. 

All of this Refine work feeds back into the developers where we prioritize and make sure that the very best product is built.  Of course that doesn't end with RTM since we're always refining and listening to customers (even though we're not "Web 2.0").  As I mentioned previously, we make over 100 changes every month to Office based on customer input -- so the product is always improving, and we're always learning!

PM Attributes

So those are the phases of program management and what you do as a PM in Office.  I would say that there are many unique elements to the role of PM in Office that are not emulated by other companies who have tried to create this role.  A good book that describes the uniqueness of PM at Microsoft is Michael Cussumano's book "Microsoft Secrets" or his new book, "The Business of Software".  If you're considering a PM role at Microsoft (or Office), from my perspective a couple of things you will get:

  • A small team dedicated to solving customer problems and bringing the best technologies to the table
  • Access to dedicated developers who are there to implement your ideas if you can live up to creating a great idea and making sure the details are thought through
  • A very strong mentor who as part of small team will be there for you on a daily basis

If I had to think of the qualities that make a great PM I might list a few, but your recruiter and the interviews will help out a lot so don't let these discourage you from applying:

  • Strong interest in what computing can do -- a great interest in technology and how to apply that to problems people have in life and work
  • Great communication skills -- you do a lot of writing, presenting, and convincing
  • Strong views on what is right, but very open to new ideas -- the best PMs are not necessarily those with the best ideas, but those that insure the best ideas get done
  • Selfless -- PM is about making sure the best work gets done by the team, not that your ideas get done. 
  • Empathy -- As a PM you are the voice of the customer so you have to really understand their point of view and context 
  • Entrepreneur -- as a PM you need to get out there and convince others of your ideas, so being able to is a good skill

PM is unique to Microsoft and I think it is fair to say this is a role that is often copied but never duplicated.


I had a great time at Stanford--though it was cold and cloudy :-) :-)  Thanks everyone for taking the time to get together today.

As I expected, the questions and discussion really kept me on my toes all day!  I tip my hat to Dhyanesh and Greg for working me over with a number of deep and thoughtful questions! I loved it.  Julie--you can't go wrong so don't worry!  Lee--you don't worry either!  I don't want to leave anyone out, but it is getting late for me!

Congrats to everyone who just finished finals.  Have a fun and well-deserved vacation!  You know how to get in touch with me if I can help in any way!


PS: At least one of you caught Jensen's talk at BayCHI last night.  In January, Julie Green will be at Stanford also talking about the new user interface in Office12 so be sure to catch that.


I will be at Stanford on wednesday the 14th meeting with Develpment and Program Management hires.  I'm definitely looking forward to the time so bring your tough questions!


A few weeks ago I was on a panel discussion at Cyberposium 2005.  The panel's moderator was Ken Morse, a lecturer and managing director of the MIT Entrepreneurship Center.  Professor Morse has quite a lot of experience with startups in the technology industry (having been involved in launching companies like 3COM, Aspen, and others) and is also a founder of the MIT center. 

In the closing of our panel Professor Morse offered some words of advice to the attendees (mostly students graduating from business school at Harvard and Sloan).  I think the advice was worth repeating as it is equally appropriate for those pursuing careers on the technical side of product development.  He suggested two key things (my paraphrase from memory):

  • First, get experience at a company that can "teach" and can help you to learn about how to get things done.  Building products and businesses is a lot harder than it looks.  He mentioned that while many companies have been started by people without much experience, that is not really the method that is repeatable.  Most companies that start do not achieve success, and most that achieve success do have a lot of people with experience from established companies.
  • Second, you really need to love what you're doing and you need to be in it for the right reasons.  The right reasons are being passionate about the product or service you are building and not just passionate about making money.  When you build a product, business, company it can take many years and you will need more than a desire to make money to keep you motivated and focused during that time.

Just wanted to pass that along.  I joined Microsoft because I wanted to learn how to make the things we were talking about in graduate school--make things for millions of people (you can read that in the recruiting brochure from 1990!)  The one thing that has changed the most is that we make things for hundreds of millions of people now.


Filed under:

It is not the heat, it is the humidity.
-- David Letterman (ok not really, but it was a catch phrase for a while)

No matter where you live, people can find a reason to complain about the weather (or is it weather forecasting?).  Seattle is no different and while we call it the "Emerald City" most probably think that was a marketing ploy not unlike that of the Greenland Chamber of Commerce (ok some people call it the Rainy City--just no one who lives here).  A senior group program manager extended an offer to a college graduate last week and she said she has spent a lot of time on the issue of weather.  So what is the deal with the weather in Seattle?

I mostly grew up in Orlando, Florida.  It is weird growing up in a vacation destination people associate with warm weather and spring break.  Until I was 10 we lived in New York and would visit my grandparents in Florida ("del Boca Vista" for sure) and I remember frolicking in the swimming pool in December. Once we lived in Florida I quickly realized just how crazy it is to swim in the winter in Florida--after all it is like 70 degrees outside, brrrr...  Climate is a pretty relative thing.

Seattle is a temperate zone.  It is really middle of the range.  A lot of Seattle's weather is caused by the fact that it is sandwiched between two mountain ranges (the Olympics to the west and the Cascades, foothills of the Rockies, to the east).  This sort of has the effect of keeping the hot side hot and the cool side cool, so to speak.  While you might think of Seattle as being on the "coast" it is actually a couple of hundred miles to the real Pacific ocean and to get there you have to cross a real live rain forest (one with bugs the size of kittens and leaves the size of small car).   

This middle of the road weather is great.  You never really need gloves and a fleece pullover is de rigueur for about 9 months of the year.  When you're not wearing urban hiking boots (of course you never know when a mountain will spring up) you're wearing sandals (ok not me).  There are people who wear shorts literally the entire year (our VP of HR is famous for that).  Basically Seattle is a place where it just never gets too cold or too hot.  Maybe a few times a year it is what you would think of as winter on the east coast, and rarely does it get to what you might consider hot by southern standards, and it never gets humid and it rarely snows (in Seattle proper).  Most developers can wear their favorite thinkgeek t-shirts year round (and by the way, contrary to rumors I do own a "No I won't fix your computer" t-shirt).

Statistics are of course the best way to show this.  The following table (from NOAA) shows some weather stats from a number of selected cities around the US (btw, I formatted this with new features of Excel "12" that show off how easy it is to create visualizations of information):

table comparing weather in various US cities

As I mentioned, Seattle is in the middle of two mountain ranges.  This makes the climate for Seattle unique relative to traveling 100 miles east or west.  If you go west, you hit the rain forest and those mountains.  If you go east, you hit the truly alpine region in the Rockies. So that means you can travel and find radically different weather.  As I write this there is an expectation of about a foot of snow in the Cascades, which means great skiing!

As you can see, Seattle really is right in the middle based on all the metrics.  For temperature you can see how moderate Seattle is right in the middle of the pack, and the standard deviation is quite low relative to most others.  This means for the most part the weather folks can get it right in Seattle.

You can see it doesn't really snow in Seattle.  In fact I was surprised to see that historical average since it has been years since I recall snow on the ground in Seattle.  If you want snow what we like to do is keep it out by the mountains for skiing! 

Rain. Now that's an interesting one.  Most people are quite surprised to learn that it doesn't rain all that much in Seattle especially compared to the precipitation of nearly every city on the east coast.  Seattle rarely gets "rain" but rather we have sort a mist or drizzle.  This is actually really great since you never overuse your windshield wipers and you never need an umbrella.  In fact when I first moved out here and walked outside in the rain with a coworker from Portland, I popped open an umbrella and got a look of "what the heck is that contraption".  That was the last time I carried one of those around.  You just don't need it.  Plus with all that Polartec and all those REI Gore-Tex anoraks we're well protected.  Having gone to college in Ithaca, NY and grad school in the Pioneer Valley in Massachusetts I can safely attest to the fact that having no melting snow and having no driving downpours is definitely a big positive.

Of course what you will see is that Seattle has the most days of "precipitation".  These are those misty days.  I guess weather people call those precipitation, technically.  It is definitely true that the sun does not shine a lot and the sky is not blue during the winter months.  But then again if you head to the mountains you will be in blue sky skiing territory in short order (a couple of hours drive).  Scientists debate whether this type of weather really has a profound effect on people and whether than is biological or psychological.  I certainly don't know.  It is the weather and I can say that for me personally the predictability and "middle of the road" of the winter compared to other places is really a benefit.  You know what clothes to wear.  You know the roads won't get closed.  You know you don't have to slog through mud.  It is really just fine. 

A lot of people do use the winter to take vacations in places like Hawaii (I visit my family in Miami, but believe me I don't go swimming in December anymore).    That's why I included Hawaii.  That is probably the favorite destination for vacations and lots of direct flights and tour packages make that easy.  Of course just as many people head north to the great ski resorts of the world like Whistler and get that same "recharge". 

If you keep comparing different cities some things might jump out.  Like why don't we move Microsoft to Hawaii?  How about Las Vegas (brrr...memories of freezing at COMDEX)?  Probably not Chicago. Of course San Francisco is well known for having moderate yet wildly unpredictable weather--"the coldest winter I ever spent was a summer in San Francisco" the saying goes (Mark Twain did not really say that)--and the summers are known to be fog-filled (taking the SFO-SEA shuttle is an adventure for sure!).   

Geographically and thus in terms of weather, Seattle is one of the most unique locations in the continental US.  Seattle itself is moderate.  But the state of Washington has alpine regions, rain forests, plains, and quite a lot of farmland as well (all those apples, Walla Walla onions). Seattle is also located along the same latitude as the wine regions in France and turns out to be a source of some great wines as a result (Columbia Valley wines).  Seattle also has a huge glacier lake that is an awesome place for boating activities.  If you like fishing, all sorts of salmon and other wild fishing sources are nearby.  And for those of you that are ocean going, the Puget Sound is a great boat ride.  In terms of outdoor activities, it is fair to say that Seattle is a leader in mountain biking, snow skiing/boarding, hiking, alpine climbing (Mt. Rainer among others), sailing, hydroplane boating (ok, not for everyone), road cycling (there's also a velodrome about 1 mile from Microsoft), camping, rock climbing, and so on.  There's a reason REI started in Seattle!

The most amazing thing about Seattle weather is the summer.  You have 15 hours of daylight.  Clear blue skies.  Nights filled with stars. Clear air.  You open your windows and sleep comfortably. They are amazing.  Every single day.  Any intern who spent the summer here will tell you that you just cannot beat the weather in the summer.  So even if the mist gets you down a little, the summers more than make up for it.

Of course in those winter months there is plenty to do at night.  Seattle is pretty famous for having a pretty cool music scene and there are tons of clubs downtown (where many recent graduates live).  Seattle also has world class symphony performances.  We have a very active theater community with many Microsoft employees participating in original Seattle-based productions.  We have ballet and dance.  The Space Needle.  Well...come out here and see for yourself.

The weather is something everyone everywhere has an opinion on for sure.  I believe if you're thinking of moving to Seattle you should not use the weather as a reason to pass by the opportunity--actually I would say use the weather as reason to take us up on our offer.


PS: Here in the USA it is Thanksgiving -- have a happy break from school and I'll be back in December! 

Filed under:

Just thought I'd let folks know that Office "12" Beta 1 went live today.  We're pretty excited about the product and getting it into customer hands.

Way to go team!

Filed under:

So how much and how hard do you have to work at Microsoft to be successful? I was asked this question by a graduating student who has an offer from Microsoft to be a software design engineer. Actually the question was "do I have to work 100 hours a week to be successful?"

I went back and forth in my head how to answer this one. Well on the one hand, I should probably say that if you come to Microsoft you will have a balanced life where you can work, have hobbies, have friends, and all will be great. On the other hand, I keep reading articles about how at "Web 2.0" companies you get hired from college and live in your office--you don't even need to leave to eat since they bring gourmet food to your office. So I certainly would want everyone to think that Microsoft has a competitive offering and that if you join here you can live in your office and work 16 hours a day (or night). But I would not want folks to think we're inhuman.

I'm not really sure what the best way to answer this is, so let me just tell it like I see it.

The truth is there are two "cycles" of workload that you go through at Microsoft. The first is the cycle that starts as a college new hire and evolves as you gain experience. The second is the project cycle you are on and how that has an ebb and flow.

When you first join Microsoft from college you are very much on a "college clock". That generally means you arrive with that blurred view of "work" and "social life" because in college things are all basically one long experience, punctuated by exams and the summer. You probably want to sleep late and work late. You probably move out here and don't bring a built-in social network like the one you developed at school. And you probably are really anxious to start your job. All of these lead to a pretty intense start to your working life. You are probably going to work as much at Microsoft as you did in the combination of attending classes, studying, and doing project work. At Cornell I took about 18 credits a semester, which translates into roughly 18 class hours per week and generally the guideline was that every hour in the class was 2 hours of preparation or work over the course of the semester. So that means just over 50 hours per week. That pretty much is what I would say is average for a new hire. Is that a lot? Not enough?

Well when you're new at something you always put in that extra effort and pay very close attention to all the details. Some things are way harder when they are new (like how much time it took to write a 5 page paper as a freshman compared to a 20 page paper as a senior). Coding on commercial software is no different. It takes a lot of effort up front to contribute effectively and efficiently. And when you're new you will put in extraordinary efforts to get those first pages of code done well--you will write and rewrite them and test them repeatedly. Believe me it is a big deal writing code and checking it in for a few hundred million people to use! And since at Microsoft you are on real products the day you show up, this will likely be a pretty all-consuming learning process.

In other words, no matter how many hours you are officially supposed to work when you are new you will put in a lot more to get those projects done. That is ok. No, that is expected because you are going through the learning phase. Your learning is not happening on a practice field but is happing in the big show. So the extra hours and effort are worth it to you and the team.

And of course as a college hire you are joining Microsoft with a large number of other college hires (we will hire more people from college this year than any other year, and more than any other computer software company I'm pretty sure). In fact, there is a good chance some of your classmates will also be joining Microsoft. So in many ways your college experience will get translated immediately to Redmond (or Mountain View, or any of the other locations mentioned in other postings). Every "class" of Microsoft has different things that become popular and even within the class you get the same sort of extra-curriculars that you had in college. Some folks go to dinner and movies with their team, others go with their classmates. It is just like in college where some people ended up being friends with their house/roommates and others found people through organizations (at Microsoft we have all the same sorts of clubs you have in college--I spoke at CHIME last week, which is Chinese Employees at Microsoft, for example).

Microsoft will feel a lot like college in terms of the hours you put in and the environment you work in. It will be fun. It will mean late nights. It will mean "hanging out". All of those same things. That was my experience and when I look around I see the same thing happening now.

The only thing I would say is that anyone who tells you how cool it is to pull all-nighters on commercial software or anyone who says "I live at the office" and means it, is really someone I would not want checking code into my project. To be blunt, there is no way you can do quality work if you do not give your brain a break. Since the 1940's people have been studying the quality of work people are capable of without the proper sleep, change in environment, and exercise. There are reasons why even back during Apollo moon missions they forced the astronauts to sleep and not run on adrenaline. So working at Microsoft does not push the limits like this--it is not good for you, not good for business, and not good for the customers paying you for your software. If a company is driving you to work crazy hours like this, either because you want to or they want you to, it is just uncool.

There is an "arc" to this and as you get older two things happen. First, you get better and what you do. So you really can get the same amount of work done in less time, and you do it better. Just like how you got better at problem sets through college. And second, you do start to develop a "work-life" balance. For some people this happens in 3 years and for others it happens in 5 or 10. It all depends on you and your own skill/career arc. You are not slowing down. You are not doing less. You are becoming better at your chosen profession. You are moving from an apprentice to a skilled practitioner. Your individual contribution should be increasing each year as you get promoted and gain deeper and broader knowledge. But you also might be developing a relationship with a significant other. You might want to start a family. You might be contributing significantly to the community. You might actually be taking your vacation and going somewhere other than visiting your parents.

Microsoft is a place where as you increase your skills and advance your career you also simultaneously develop a more balanced approach to life. You have to. Because we want you to have a long and balanced career at Microsoft we do expect your career arc to allow you to attain more balance as you gain experience.

The project cycle represents ebb and flow of work that overlays your own career arc. This workload is well understood and repeats itself each project, but even here we are careful about what is good business and common sense.

The role each of development, testing, and program management plays in the project cycle is matched by level of work "intensity" over the course of the cycle. Early in a project cycle is when program management is writing specifications and planning the release. Testing and development are reviewing specification and planning their next steps. Development is not actively writing code and so their intensity is relatively lower. And testing is likely very focused on planning for the end game. As we progress to the coding portion of a project, development really ramps up their efforts and the intensity increases. Developments intensity also increases as the schedule gets closer and closer to the "end". This is because developers own their own schedules and sign up to get their work done based on their own estimates. So as you can imagine this gets pretty intense. But you are on record to deliver about 35 hours of coding per week (depending on how your group accounts for the schedule) so any "overtime" you put in is really your own. Of course developers also love to go above and beyond the call of duty so it is likely that cool features get done in addition to the committed ones. As development nears the end of coding, testing really ramps up. This is where we are now in Office "12" and in fact this morning we had a test manager meeting going over the work needed to get to our second beta (our first beta is about to hit the streets).

As an aside, it is really the case that you own your own schedule.  This does not mean that you work in isolation for as long as you want--your work interacts with other's work and other's depend on you.  It does mean that you have to take the desired outcome and scale it appropriately to fit within a normal schedule.  Of course you don't really get trained in this in college so that is the role of your lead in terms of mentoring you and helping you to estimate and gauge the work ahead of you.  Over time you become expert at this and then soon enough you are managing and mentoring new people yourself.

A lot of companies think that it is cool to buy dinner all the time and do whatever it takes to keep you at your desk to work more during these "crunch times". We actually don't generally do this for Office (though some teams occasionally do). Over the years we've found this is not a good practice for the team overall because it encourages a style of work that does not yield good software. But trying to keep people chained to their offices, in the name of encouraging team work and dedication, does not help. I remember back in 1990 working on the first C++ compiler and we were doing the dinner thing for the team and I remember noticing that a lot of folks would just end up eating dinner at work then going to dinner later in the evening--that does not get better code, though it does yield bigger waistlines. I admit then when people tell me about other companies that buy you dinner and change your oil in an effort to keep you focused on work, I do worry about your health and if you really are able to write quality code. The best example of this is just how you can stare at a bug for 8 hours and make no progress, but if you leave work, clear your brain, and maybe do something nutty (like ride a bike, play racketball, or play poker) you probably will find you can fix that bug with a whole fresh perspective. I think that is an important part of every work day.

Therefore the work week has different levels of intensity as you move through the product cycles. There is a flow to this just like you have a flow to a semester (introduction stuff, problem sets, mid-term, project, final). But for a Microsoft project there are numerous highs and lows that map to both the discipline you work in and the phase of the project.

I think it is super [sic] important that throughout the project cycle you pace yourself--like any endeavor you can only run so hard for so long. What we do is hard, unpredictable, and important for a lot of people. It is also incredibly fun. What you find on our development teams is that most people would be sitting in front of computers, even if they didn't get paid. Computers are also our hobbies. Most of us run elaborate home networks, love to help our friends and family with their machines and networks, and many of us help local community organizations with their PCs. But it is also important to balance this with the need of your brain for down time and the need for you to gain a perspective on your work and what you do.

Finally, the core question is not just do you need to work 100 hours a week, but "do I need to work 100 hours a week to get ahead". The answer to that is definitely no. You need to get a lot done and you need to do it efficiently. We want you to be a heroic developer in the sense that you get more high quality work done in a shorter time than others, but not in the sense that you can work 100 hours straight to produce 50 hours of work without sleeping, eating, or leaving your office. Microsoft went through the phase of growing up where we thought the best programmers were those who survived on Starbucks and gummy bears--we actually studied bugs counts and defect rates and found that the people that wrote the most code, also had the most incomplete code and the most bugs/line. We want you to be great programmers who write high quality code that works right the first time and for a long time. That takes far more skill and talent than you can make up for by sitting at your desk for heroic hours. Developing your skills, making sure your code is complete, bug-free, highly performant, scalable, highly secure is the way to get ahead. Maybe your manager works a lot (I do) or maybe your manager is very efficient, but the hours you work is not a measure of your ability to succeed and certainly not something you get evaluated on. You get promoted because your work excels relative to your peer group--because you get done what you say your going to get done; it works super well; and you got done the right amount of work relative to your peers.

Working at Microsoft is hard. We have a lot of people counting on what we deliver. You will put in a lot of hard hours. But if you are managing your work effectively then you will have a rewarding career and a rewarding balance between life and work.


I've been asked quite a bit by people interviewing at Microsoft about "software release".  This post will talk about our strategy around product releases for Office products, since we have been pretty consistent over the years and this represents a balance between some competing interests.

The topic comes up because there has been a lot of web discussion and press about products at Microsoft that have taken a long time between major releases. This post is about the way we structure releases of Office.  In the big picture, one of the things that is a hardcore Microsoft "value" is that we learn from our past experiences and work hard not to repeat things in the future.  An article on this can be found in the WSJ which talks about some of the introspection we have done and more importantly some of the mid-course changes we have made within some of the teams at Microsoft. 

If you work on Office, you are using software that people use everyday to do work that is really important to them--lots of money, important decisions, and grades rely on Office working well.  There is clearly a lot going on in the industry and a lot of "2.0" discussions, and Office plays a big role in bringing those to the broad base of customers in their productivity tools.  It is also the case that we have to make sure that Office works extremely well--once a customer makes a bet on Office we owe them a very strong level of commitment and service.  That is decidedly different than many of the new products and services that are out there.  If you lose work in Office or can't get something done quickly in Office, the cost is much higher and your alternatives at the moment fewer than many of the other types of products out there today.  We take this responsibility seriously and it also makes for a unique experience working on our products.  If you've been tracking the Office12 blogs (linked to on this site) you can see the comments from folks that do rely on Office and the emotion around the software.

The first thing to realize is that with products like Office there is a whole product lifecycle to consider.  Often people think of the big bang release and talk about that, but in reality for Office there are five different releases going on all the time:

Office product wave.  Of course the thing that captures the most attention (when done right, the other developments just work and don't cause any stir) is the new release of Office.  Since Office 2000 we have focused on delivering most all of the Office products at the same time--so of course Word, Excel, PowerPoint, Outlook, Access, but also Project, FrontPage, and now Visio, OneNote, InfoPath, as well as all of our server products.  We have found that releasing the products all at once allows us to develop rich scenarios that cross products (such as Project integration with Excel for analysis and SharePoint for the server).  Customers, particularly at the enterprise level, definitely strive for a 1+1=3 solution and see the benefits of a broad set of products designed to work together.  Of course we also work to insure that we deliver the best components as well. 

Immediate updates to software.  These are done on short notice and represent issues with the software that must be addressed "yesterday".  These can be quality issues, potential security issues, or exploited security issues.  These are very small in number (we have had 3 of these in Office 2003 since it released in November 2003). 

Customer driven updates.  For corporate customers, developers, or other software vendors we have in-depth support relationships that offer these parties support professionals to help troubleshoot and diagnose issues they might be having with our products.  These can result in an "escalation" to the product team if the customer or support professional believe that the product is not meeting the needs, not operating as specifying, or is just broken.  We actually see hundreds of escalations in a month.  Most of the time these are properly handled by using an alternate way to accomplish the task or by changing some deployment characteristics.  Other times a product change is warranted.  These changes can be small code changes, significant UI changes, or new features.  Any change we make to the product this way will be made available to 100% of customers around the world so we do make sure that these are in the best interests of the broadest set of customers.  In a given month we might do 100 fixes along these lines--that's over 100 changes to Office every month. 

Broadly available Service Packs.  About every 8-12 months we release a "service pack" for a product.  Along with all the customer driven updates, we also address the crashes and hangs that we see being reported by our "Watson" tools.  We get millions (and millions) of reports of these issues from customers and we constantly look at this data to make sure we understand how Office is functioning in "real world usage".  If we see a spike we jump on that right away and perhaps this might call for a critical update (we did this with Office 2003 early in the product cycle).  This "instrumentation" (which is anonymous, private, and opt-in) has radically redefined the way we can improve the quality of Office.  In the past these issues would linger and we would never know which ones to fix or how to reproduce them.  Since Office XP we have been whittling down these errors in the product and have radically improved the overall robustness of Office based on metrics like "mean time to fail" (tracked with this same mechanism).  So these service packs offer a big improvement to the overall product quality and allow customers to get all the updates we have done during the previous months.  For a given release over the lifetime we will generally do 3 service packs.  Generally speaking it is worth noting that we support a release of Office for 10 years from RTM.  This is a big commitment we make to customers and it means that at any given time we are fully supporting 3 different versions of Office, because customers expect that from us and it is an important part of why they rely on our products.

Continuously improving OfficeOnline.  One element of the Office products is our OfficeOnline web site.  This is not just another product information web site, but an integral part of the product's experience. OfficeOnline does contain pre-sales information, but it also contains a vast amount of content designed to help make using the product better, learning the product easier, and maintaining the product as an admin much more efficient.  You can access OfficeOnline through a browser, but you can also access it by just using File New and using templates, or Insert ClipArt and using web-based clipart, or just by typing a question into the help "box" at the top right of an Office window.  As with other web sites, these queries and usage patterns drive site "programming".  One of the biggest things we do is respond in near real time to the questions and problems customers are having use Office.  This not only causes us to write new articles, tutorials, online courses, etc. but we also look to see how people rated the articles and then go back and fix those.  We are constantly scoring these articles and looking to improve them based on real world feedback and also add new articles based on current problems.  Of course just like your favorite shopping sites, we offer timely templates, clipart, and other content -- at Valentines in the US we have lots of hearts, at Tax time we offer tax spreadsheets, etc.  And by the way, all of this is done globally and in a locale specific way.   

So that is a rough look at the "velocity" of change of the Office products.  For the product that is in market you can think of this graphically as the following shows.  In this picture I've made the length of this the rough average for time between product waves (more on that below):

Is this fast enough?  Or is this too fast? Good question!  The answer really depends on the circumstances and how you measure success. 

Let's take this question to really be one about the major releases.  I've heard a lot of people say that major releases are a thing of the past and that what is "new" today is that software should be released "continuously".  Continuously is a lot of software for people to absorb.  For some things this works well--I love that shopping web sites have all the newest products all the time for example, and of course I love that we are constantly adding new clipart and templates to OfficeOnline.  But for other things even ones that are traditionally continuous, new things all the time can be a chore--for example I love reading The Economist, and it comes with a lot of new stuff all the time and I can't absorb it at the pace they can deliver it.  For engineering and manufacturing products, like cars, what seems to have worked for a long time is a big new product followed by subsequent iterative improvements (Toyota famously squeezed that cycle time down to 3+ years rather than the traditional 5-7 years US companies used, but the concept remained).  Some would say software is different and some might even say that software on a server is even more different.  There is no doubt that technically software is easier to change, but what do customers want, expect, need?  It isn't obvious and like so many things we have talked about the answer is "it depends".

Before we look at the choices, here is the history of Office products since Office 97 (taken from microsoft.com):

For Office, some customers are very conservative, or even extremely conservative.  They say that Office has no big improvements left or that the cost of deploying and updating is high enough that the product should be updated infrequently, perhaps every 6 or 7 years.  I happen to think this is extreme but we do hear this quite a bit (though I would also say these same customers are quick to request their favorite features and say they would like those right away).  Other customers, perhaps the trade press or magazines that write about Office, might like this to be more frequent because they can generate more of their business with a big new product to talk about and they might like something very frequently about every 6 months or so.  I think that the best place is somewhere in the middle of course.  And keep in mind that throughout the talk of the release, we are updating the product as described above--we're not "dark" but always improving things for our customers.  What we have found works for Office is about 24-30 months between releases, or so.  We've done that pretty much for the history of Windows releases.  Sometimes we are a bit shorter, and sometimes a bit longer (the average since Office 97 is 28 months--you can see this on http://support.microsoft.com/gp/lifeselectindex).

Another constituency in this discussion is the marketplace in terms of how and when they can take the time to understand what is in the product, and how they will adapt to using the product. In this case, I would think again about the Economist.  But instead of thinking about the new content, think about what it is like when they change the layout of the magazine.  This is a major deal (like once every 10 years).  But it actually has an impact on you and you need to adjust.  Imagine if this happened every 6 months!  That would be more than you could absorb and they would spend a lot of pages explaining the change and you'd probably get frustrated.  I'm sure you have experienced web sites like this--you feel like your hand knows where to click and then after a few months things move around.  So even if you have a web-service based product you need to consider that people need to adjust and learn and once you have a lot of customers/users you can't change things with a very high velocity or you might alienate people.  The changes probably are better being bunched up and delivering as a "theme" around a set of changes.  This is how the magazine views a new layout and how a car company views a new model.  It turns out this is great for the people that market a product as well--having a small, but frequent, set of changes is a rather significant marketing challenge.  But having a broad set of changes with a theme allows the marketing people to more effectively communicate the product.  Trying to raise awareness of a single new feature can also come across as artificial--if you're trying to read your mail do you really want banner ads for new features to manage your email?  While the context is right, it seems a bit distracting.  We tried that in Word 6.0 with the "tip of the day" :-)

Office has an extra challenge in that the set of features have to apply to a lot of different types of customers--end users, IT pros, developers, business people, and of course all the industry folks like the press, analysts, etc.  (many of whom are also end-users).  This means that you have to consider in each release how to offer those customers features they might want.  It means for example that each release of Office has features for a broad set of constituencies.  There aren't a lot of other types of products that have to meet this test--it comes from the breadth of the customer base of the product I think.  It means that it might not be a good plan to offer just a few targeted features for developers, because you won't get any end-user demand.  Or even though a few end-user features might make for a good article in a PC magazine, you won't get a lot of support from the IT Pros that have to deploy and support the product. 

One of the biggest challenges in product design is what to do when you have a "hit" feature that everyone wants, or a feature you think will be so hot that everyone will want it.  Most of the time you figure this out only after you are done developing it and get feedback.  I have a first generation Toyota Prius and as soon as I sat in it the first time I knew that the gear shifter was a design mess.  When the next model came out they changed that and boy did I wish I could just take that gear shifter and move it to my car--but no such luck I had to get a new car (I didn't.  Software is a lot like that -- you see a new release and you just want one thing and wish you could get that on your machine without paying for a new product or "upgrading" (like when PhotoShop finally added RAW support and I didn't need all the other stuff in CS).  The challenge we face with Office is that nearly every feature is used by the whole universe of people, and so by definition there exists a set of people who would want that one single new feature and nothing else (see Jensen's blog on the new UI for frequency of command comments).  More than anything, I hear this from individuals talking about specific features they would like.  Even more interesting is trying to think if we could somehow communicate and market a release based on some of these "nuggets" because more often than not this would be really hard.  Sometimes you get amazing nuggets like red squiggles for spelling in Word, or AutoCorrect teh->the.  But those are the big home runs of features in their area and don't happen all that much, and of course when we were doing them it was not always universally agreed that they would be such a hit (AutoCorrect in particular).  It is important to separate the ability to release things and the market desire for those things.  Of course we release hundreds of changes as described above, but trying to communicate these is a huge challenge because they are not part of a larger whole and are about "customer service".

Professor Iansiti at Harvard once told me that he thinks of "innovation" as really an equation: innovation = invention + impact.  In other words, it isn't enough to just invent something cool, but you have to have an impact as well.  A big part of having an impact is getting the word out on what you do and making sure people ultimately use and benefit from the work.  The timing of a release has a lot to do with the impact.  Too fast, and you pass people by or frustrate them in their ability to absorb the change.  Too slow and you miss the opportunity or circumstances change and your invention is no longer relevant or inventive.  It is a fine balance.  Often only hindsight is 20/20.

Finally I would also say that as a new member of our team, the ability to participate in all of these offers you a chance to really experience the breadth of software engineering.  You definitely hit the ground running and you'll want to contribute soon.  But you also have the time to learn and the time to gain experience in our industry--you won't have to release your first code as a critical update (that takes a lot of experience) but at the same time you probably will end up waiting less than a year before your first projects see release, and less if you count pre-releases.

This is where we are today.  Things change a lot over time and nothing about what I said above is written in stone.  We build our products for customers and we listen carefully.  If there is a sea change in how customers want their software delivered or what time frame we should deliver software then we will of course change--without customers liking what we're doing we're definitely way off course.


The past couple of days have been busy with a round of presentations and discussions at MIT, Sloan business school, and Harvard College. I know folks are always super busy so I appreciate the time everyone took out of their busy schedules to meet on campus. I always find the opportunity to meet and talk with students incredibly energizing and fun. Thank you!

First stop was a roundtable with about a dozen second year Sloan students, including a number of former Microsoft interns (shout out!). We had an ad hoc class complete with name cards and cold calling. It was great fun. Of course the questions were incredibly insightful and fun to discuss. We talked about subjects ranging from career progression at Microsoft, marketing and selling Microsoft Office, developing products at Microsoft scale, and a good discussion on the Microsoft work environment. I also had a chance to talk about why I still love working at Microsoft which is always easy and great to do. We had a very interesting discussion around offering segmented or lower-tech versions of technology products and the pros/cons of doing that.

After that we walked across campus and to the engineering side of the place and met in 34/101. Here I had a chance to present to a very lively audience on the topic of developing Microsoft Office and what it is like for making design choices for 400,000,000 people. This was great fun. The questions were non-stop and amazing. I showed some of the design and research tools we use in developing Office and showed a movie of some advanced techniques for listening to customers :-) And yes, one person even asked (after about 60 minutes of fast paced discussion of the detailed research and development) if we would be "releasing the work under open-source". I admit this was tough to answer--I kept thinking to myself who would pay for my hotel room that night if we didn't get to sell anything. Of course it is all sincere and quite appropriate for the audience. I was especially impressed with everyone's knowledge of calculus as I showed the new equation editing features in Word and made a non-sense example of an integral to the limit of a square root or something--only at MIT kids only at MIT! A few folks blogged their experience and so I thought I'd include those links here:

Tonight at Harvard I had a chance to present in the very fancy Maxwell Dworkin building and for the first time present in the fancy new lecture hall. It was cool! The group was great and it was fun for me because there are a lot of hardcore Macintosh users so we talked a bit about how the Mac and Windows products evolved. Just a reminder to get in touch with Larry if you're interested in summer internships!

I also had a chance to meet 1:1 with some students, which is always a great opportunity for me. I met with a former intern who talked all about his experience in data mining on the MSN team and his high school math teacher who happened to be a pretty well-known former Microsoft employee (who invented program management!). I also met with a student who was interested in program management and product planning, but was a little concerned over not having a technical background. I explained that many folks who are passionate about technology but self-taught work at Microsoft in these roles and so I'd strongly encourage applying--after all the roles of planning and program management are about applying technology to solve problems and that means we need people with all sorts of backgrounds who can bridge the technology and customer "gaps" and deliver innovative solutions. I pointed out that one of the leads on the new user interface in Office "12" is a musician and actually performs locally in Seattle in his "spare" time.

Oh, and of course I had a chance to visit our Beverly, MA office and spend the day with Groove. They are making a ton of excellent progress on their release. More news on that soon! But we're hiring from college out at here as well, so of the Boston area is where you want to live we have openings and are very committed to the new england region (as I mentioned in a previous post).

Thanks again to everyone!


Filed under:

I will be visiting both Harvard and MIT this coming week.  I look forward to meeting any students with a passion for software interested in working at Microsoft full time.

  • MIT Wednesday Oct 19 @ Building 34, Room 101, Reception at 4:45pm, presentation at 5:00
  • Harvard Thursday Oct 20 @ Maxwell Dworkin G115, Reception at 6:15 pm, presentation at 6:30

Building Microsoft Office or what it is like to order pizza for 400,000,000 people

In this highly interactive talk you will see what it is like to design the next generation Microsoft Office and what it is like to design and build the interface that will be used by hundreds of millions of people.  You will learn how a small team designed and developed a new metaphor for computer-human-interaction that improves upon the Xerox PARC developed metaphor of drop down menus and the decades old metaphor of toolbars.  You will get a sneak preview of the new Office “12” product.  There will be plenty of time to ask questions and learn about Microsoft and the different opportunities for you.  No questions are off limits and all are welcome!


Filed under:
More Posts Next page »