How Microsoft Develops Its Software
crem_d_genes writes "David Gristwood has a post on his blog that notes '21 Rules of Thumb - How Microsoft Develops Its Software', on which he will elaborate at TechEd in Amsterdam next week. It was derived from interviews with Jim Mccarthy, also of Microsoft. Gristwood: 'As someone who has been involved with software development for over two decades, the whole area of how you actually bring together a team and get them to successfully deliver a project on time, is one worthy of a lot of attention, if only because it is so hard to do. Even before I joined Microsoft, ten years ago, I was interested in this topic, having been involved myself in a couple of projects that, I shall politely say, were somewhat less than successful.' Tips include such features as 'Don't know what you don't know.'; 'Beware the guy in a room.'; 'Never trade a bad date for an equally bad date.'; and 'Enrapture the customers.'"
I posted the following on this guy's blog comment form, and I thought some folks here might agree with it... Yay/nay?
A worthwhile and insightful read (and it's about to get slashdotted). You use the phrase "great software" frequently. I post this sincerely and do not mean to troll. Since you are a MS PM and/or dev, there seems to be three possibilities:
(1) MS consistently makes "great software" and you are, therefore, content to be a MS employee.
(2) MS does not make consistently "great software" and you are, therefore, either unhappy at MS or long to be project group that makes "great software".
(3) You and other people (myself included) have dissimilar meanings of "great software".
In short, I believe possibility (3) is the case.
G-Force music visualization
So true. And "in a public place" is definitely an important part of that - when a build fails, everyone should be able to see the compilation error.
The Army reading list
If that's the case, just wait until someone comes along and open them. Microsoft will be the single biggest software corpora... err wait a second.
In all seriousness though, they are actually starting to open their eyes now and realizing that security is going to play a huge role in their continued success to develop software. I think they will still continue to be on top so long as they can evolve. So far they are beginning to... Let's look.. First was a more secure approach to computing, now they are starting to get more serious about searching techniques...
Hmmm.
I find point 12, "Portability is for canoes" either self-serving to Microsoft interests or an interesting insight into their thinking process.
I fight this idea all the time in terms of supporting more than just IE on a web site's design ("it has 95% market share, etc"). I've seen it in the past on supporting Macintosh platforms, and now I observe it in the industry as a whole in driver support, applications, games, etc., when it comes to Linux.
Maybe I'm taking it too far. Portability can be hard to manage and achieve, but somehow I think if this was coming from the purveyor of a non-dominant OS platform player it would sound a little different.
Overall, I liked the article. Nice to see some more analysis of success factors in project management.
I do most of my good dev alone in a room. I even make deadlines! I used to work for someone who used to work at JPL in the 1970s managing software development. One developer would ride his Harley Davidson wearing a cape and goggles and lock himself in a room with the necessary hardware and ask that Twinkies and Coke be left outside the door. They didn't see him for a week, but the code was good. It was for the Voyager program, so we know it was good.
There's a difference between not trusting an ex-frat boy alone in a room and a responsible software developer in a room. Treating everyone on a team the same just breeds discontent. If people work well alone and can be trusted to do so, don't make them waste their time in meetings.
I'm in the hole of the broadband donut.
6. Beware of a guy in a room.
Linux was written BY the guy in the room.
That's the whole difference in a nutshell.
Check out my sysadmin blog!
I would have to agree with you on this. In my experience, portability takes more time but (generally) ensures quality. What breaks on Linux might not break on Windows, exposing a potental problem. I find more bugs in my code by porting than with any other bug-hunting technique. Many are minor and often don't even affect the user in that exact revision of the app. BUT, it's these little things that cause major problems down the road when I modify or change certain features.
For a commercial example, look at Quake 3, I think Carmack's portability (Win32, Linux, MacOS Classic [and later, Mac OS X]) helped a great deal. Q3A was fairly lightweight for its abilities and ran decent on just about any platform with a decent graphics card. (Now we're getting into hardware details, but I digress)
12. Portability is for canoes.
And system software.
Portable free software is in the process of dismantling his company. You would think he would acknowledge that.
an ill wind that blows no good
Who would be there competitors though?
OS Market: Mac OS, GNU/Linux crowd, BSDs and proprietary Unixes.
In that market no one believes that MS is the best and most stable game in town, just the easiest for the average PC using peon to use, but some studies indicate that Apple's UI is actually more intuitive; but with the hardware so expensive most folks just buy the cheapy PC.
Productivity Market: Appleworks, OpenOffice/StarOffice, others?
Well AppleWorks doesn't come close to resembling a real productivity sweet having used it myself and getting horrible headaches. OpenOffice is getting close to being as good as MS Office but there is a familiarity issue that stands in its way more than anything else, so I guess MS could be considered 'better' depending on how we define it.
Server Accessories (Exchange, IIS, SQL): Apache, MySQL/PostgreSQL/DB
Exchange is kind of nice and I am not aware of any really strong competitors to this but I am sure they are out there. Apache simply creams IIS on every point as a web server except maybe for lack of a GUI; but IIS is no where near as flexible, not even version 6. MS SQL is well featured but for thousands of dollars it should be. MySQL and the other OSS dbs out there are just as full feautered and cost a WHOLE lot less.
I work with MS boxes at work, use nothing but macs and home and have a couple of BSD and LInux dedicated boxes and have to say that although MS software is as pervasive as STDs are becoming, it is nowhere near the optimal platform for much of anything except solitaire, but I prefer chess on my mac as it demands a bit more thought. But then again I do not comprise the segment that would be considered an 'average PC user.'
Even if I knew that tomorrow the world would go to pieces, I would still plant my apple tree. -Martin Luther
Yeah, it's a good model. Unfortunately it doesn't really work for commercial products.
Imagine if a new versions of MS Office came out at the same rate as the Linux kernel - almost no one would have enough cash to keep up. It's also one of the reasons FS/OSS software evolves so quickly, the cash problem doesn't exist (free beer) and bandwidth is cheap.
Assuming that these rules describe how Microsoft design their software, then I have to say there's nothing wrong with them. For example, the one platform issue - Microsoft has an opportunity to design for one platform, they know they can get away with it, and that's how they do. So the rule works for them.
However, whether these rules are applicable for others is another question whatsoever. Microsoft's goal is to monopolize the market and get insane profits, and well, not give a shit about anything else. So if you look at these rules from that viewpoint, they make perfect sense - but not much else. That's why I think the author should make it more clearer that these rules apply only for a company that has a market share comparable to Microsoft and has the same goals.
So, in conclusion, these rules are mostly useless for anybody but Microsoft.
Funny, I've always heard it as Cost-Schedule-Performance. It is another manifestation of the fundamental difference in thinking by microsoft that features should replace performance, or are synonymous with it.
I do security
Microsoft has consistently impugned that non-commercial software quality can't possibly match the quality of commercial software because of the financial incentives and resources of the commercial software model.
So, according to Microsoft, there's no point to comparing their code against free/OS, because it couldn't be of better quality, right? So, for the sake of fairness, let's compare MS against their corporate peers:
They're still at the bottom of the software quality barrel.
For a commercial software vendor, their code quality comes in dead last. If we included free/OS, then they could use some of those abandoned projects to at least improve their credibility...
The society for a thought-free internet welcomes you.
since it's a difficult job, at best, to get a group of developers to deliver anything.
Yeah, just look at all those Open Source and GPL'd projects out there that dont deliver anything.
No, I am not a programmer nor a manager of a programming department but software is 100% identical to any service or product out there...
1 - if the employees you have working on it are happy, the product will be better.
2 - if a programmer can bring up ANY issue with the product with the management and management will actually pay attention to the issues, the product will be better.
3 - Stupid rules cause product problems. Customers need to be able to communicate with the people that actually know something about the product, tech support weenies that read from scripts are worthless. allow the programmers to COMMUNICATE with users and hire a knowlegable team to parse and filter user communications to the programmers.
Microsoft misses on all of those points.
I know 5 microsoft programmers and 10 ex programmers.. none of them are/were happy there because of the office politics bullcrap and the piss-poor attitude of management that is controlled by the marketing department.
Microsoft could steamroller EVERYTHING if the management pulled their heads out of their asses and paid attention. they have a HUGE talent pool and can attract ANY programmer they want with huge salaries that noone else can even think of touching. but they refused to pay attention to the FSF movement even back in billy's pimple days when he was banging out BASIC, open Source and Free software was commonplace. Bill filled a nitche that Open source could not at that point.... well we have cought up and now have more programmers than microsoft can ever afford to hire. Microsoft continues the "mine! mine! go away!" attitude while windows could have been the absolute pinnacle of operating systems if they realized that Open source will overtake them and they had better use Open source to their advantage.
People don't hack on the GNU tools or the Linux kernel because they hate microsoft and Bill Gates, they hack on the various open source projects because it's something they use and they want to make it better or fit something they want to do.
Microsoft wont let anyone do this, so they continue to diminish while GNU, BSD, Linux, etc... continue to increase and expand.
It's not the programmers fault, not one bit.
every fault with microsoft software is the management's fault.... Same with any software program you can buy, download or plug-in. the programmer is simply doing his/her job and hopefully loving what they are doing. Management makes the mistakes of ignoring X, thinking Y is not an issue or shipping it anyways even though it's not even complete.
So basically my tips to EVERYONE... is to look at MANAGMENT first for problems as they are usually the cause. I dont care if you have 6000 managers or you are the only manager and coder... MANAGEMENT is where companies and products fail.
no if's and's or butts.
There's so much bullshit in this article, you won't believe. I don't know who this guy is, but any MS developer worth his salary would laugh him out of his office over that "Don't go dark" thing. That's the only way to get anything done at MSFT. If you participate in all the meetings that are scheduled for you and get "buyoffs" from everyone you will NEVER get anything done. So it goes like this, you participate in the meetings at first (to make you look good when review time comes) and then you go PITCH BLACK, not just dark and deliver the code. It's always easier to get forgiveness than to get permission.
First of all, the question itself is ridiculous. I can quite genuinely say that Windows XP has never crashed for me or been broken into. However, Linux has frozen up on me several times, and it has had kernel exploits in the past. But that doesn't make Linux less secure or less stable.
I use win2k at work for cross compiling embedded code. It blue screens about 2 times a month on average. Otoh, my linux box has never crashed. Ive had X lockup a few times, but its a simple matter of killing and restarting X. I never had a linux system become completely unusable yet, and Ive never seen a kernel panic even with kernels Ive been myself. (may be doing some loadable object driver devel in the near future- so I may get the chance to soon)
Maybe your experience is different, but in general Ive noticed that is a good idea to reboot windows boxes every now and then, because they work best after a fresh reboot.
A linux box seems to run best after its been up for a few months. (I have a rh9 desktop thats never gone down except for a kernel upgrade and one sustained power outage.)
"Don't know what you don't know" -- David Gristwood
I don't know about you, but to me, if you say "Don't know what you don't know", it sounds like you mean "Be blissfully unaware of the things which you do not know".
Whereas what he means is apparantly that you should know very clearly which things are unknowns. Not that you should be unaware of them. To me, the proper way to express that concept in English is "Know what you don't know". And I'm pretty sure I've heard people say that exact thing before in other contexts.
Maybe this is where all the problems come from in Microsoft software. The top guys are all saying fervently "Don't know what you don't know!" and the developers are all thinking that means they are supposed to stick their heads in the sand and ignore the completely undeveloped specification, ignore bugs that haven't been found, and proceed full speed ahead with coding.
At least that's what I would think if my boss was always prancing around saying "Don't know what you don't know".
Actually it was an oversight that I left it out. I haven't used WP in years but many of the professors around my work use it because it handles Turabian formatting much better than anything else. And the other list of applicated further illustrates the point I wanted to make, MS is not the best player in the game and really the only thin that keeps them where they are is general ignorance and monopolistic market dominance.
Even if I knew that tomorrow the world would go to pieces, I would still plant my apple tree. -Martin Luther
Visual C++, which is not a poorly-regarded Microsoft product
Says who? When I lasted used it, it was a typical Microsoft compiler product - a huge system, with very big manuals, and a phenomenal number of options, memory models, segment types, and strange keywords starting with double underlines. It was a monster. I dumped it.
To actually get things done, I used Turbo Pascal for Windows, and then Delphi.
Portability is for canoes
I thought most of the rules were applicable for the general development community, but this one stuck out like a sore thumb. It sounds too political to be a general development guideline. We all know that the express desire of Microsoft is to tie everything into Windows in order to maximise the usage of their platform. But this often directly contradicts the goals of an application development group.
The reality is that there are many platforms out there, and great software runs wherever the user needs it. This means that multiple platforms are often needed to meet the needs of the user. Some people might argue about the limited functionality of HTML based apps, but in many cases the ubiquity of browser software easily overcomes the limitations of the platform.
All the evidence is that Microsoft have skilled developers who know how to build high-quality software. They have known how to build solid code for a good decade now. Yet they still don't actually build high-quality software. Why not?
Similarly, all the evidence is that Microsoft have a massive well-funded research department filled with smart and inventive people. Yet I can't think of a single innovation Microsoft has actually rolled out in shipping product, that hadn't been done before by someone else, and usually done better.
To me, the question of why Microsoft is institutionally unable to harness its clueful employees is much more interesting than what those clueful employees have to say. It must be pretty frustrating for the smart engineers at Microsoft, in fact, seeing their work ignored or screwed up. Still, I guess the piles of cash make up for it.
GCHQ Quantum Insert installed. If only our tongues were made of glass, how much more careful we would be when we speak
I wish I had chimed in earlier. I'm an aspiring mathematician, not an engineer but I don't have an issue with the term 'zero-defect'. Engineering is all about tolerances and software engineering is no different. The highly mathematical nature of programming (as opposed to development) tends to obscure this fact. When an engineer designs a bridge they're not concerned about perfection, only how it will perform under a constrained set of conditions. For example, consider the math: the sets of memory locations and registers are finite and therefore pointer arithmetic (the operation of succession) is not closed hence buffer overflows are always theoretically possible on the hardware level. Some languages (C) unfortunately encourage us to forget this, and others (Java, and the .NETs) try to help out by at least simulating an environment in which we have infinite sets of memory (or in purer mathematical terms, pointer arithmetic is closed). The point is, as long as you're coding to the bare metal (and at some point you must) you'll always have the chance of at least this kind of 'defect'. At some point you need to be pragmatic (somewhat antithetical to pure mathematics) and decide when it is good enough: i.e. how many possible inputs should you test and how much peer review do you need? I personally would prefer to see software constructed in the same way as a mathematical proof (especially the peer review part which is a good argument for open source) but I also recognize that this is not compatible with all business models.
...every piece of software has bugs and issues, regardless of the language you use to describe them...
True, there are bugs and issues which dont' bother me as long they are not security flaws.
And as story of qmail shows you can write a software without security flaws - in its seven years of existence, Qmail has never had a security flaw!
This is definition of GREAT SOFTWARE to me.
-- All Gods were immortal.
-- S. Lem
But is there anyone who would actually listen to development advice from Microsoft?
Seriously they are infamous for turning out the worst software ever produced, they fail on every major checkpoint.
Simplified interface, fail, menus are cluttered and unintuitive.
Security, fail, their record speaks for itself
Stability, again fail, again their record speaks for itself.
Performance, fail. MOST competing products run faster than the Microsoft equivalent not one or two, not somebody beats them, almost everybody beats them on almost every piece of software.
They may finish a project which is more than some can say, but that is about all they have going for them and it's arguable if they've ever TRULY finished a project.