Software Engineering at Microsoft
an_mo writes "A link to a google cached document is floating around some mailing lists containing some info about microsoft software engineering. In particular the document contains juicy bits about the development of a large project like NT/2K. Some examples: Team size went from 200 (NT3.1) to 1400 (Win2k). Complete build of win2k time is 8hrs on 4way PIII and requires 50GB of hard drive space. Written/email permission required for checkins by the build team." The HTML version on Usenix's site is much nicer than Google's auto-translated version.
Surely a quick goat killing is required at least before check-in
So for something like Windows 2000 is that a long time?
Show-Stopper!: The Breakneck Race to Create Windows Nt and the Next Generation at Microsoft by G. Pascal Zachary
very funny about the head guy throwing chairs out of windows ( the phyical ones ironic really )
and the black team....
read it and Mythical Man-Month, and then you might have a small background
regards
john jones
Of course, knowing MS, they would do it in the middle of the day.
Shutting down free speech with violence isn't fighting fascism. It IS fascism!
not really I suspect that they have a few tricks up their sleaves
what would really be fun would be to know what version of the compiler they are useing
win2k it was Visual C 6 I wonder if they changed for XP
regards
john jones
Geez, I run at 1600 by 1200 and I still had to scroll every 10 lines or so. I got people yelling at me down on the street because I read slow.
This reminds me of an old article with the name of this subject that came out around the mid-90's about Microsoft's sync-and-stabilize methodology. Really not a lot new here, save the amount of time they required to build their OS.
Rule #1 -- Politics always trumps technology.
Only the NT build lab needs to rebuild everything. Individual developers only need to built their feature's DLL and EXE files.
cpeterso
show stopper from
when has been recomending books on the subject a troll (and it was done by someone with unlimted
Imagine how hard it must be to co-ordinate a project that big without "management". I think Linux could gain by creating a kind of unofficial management structure to better co-ordinate some of the projects.
Saying Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.
I'm a linux user, but most MS people I know hail win2k as the best microsoft OS ever. So this presentation seems to be kind of strange, pointing out things (increased build time, developers/testers) that illogically seem to create a better OS.
it may have taken 8 hours, because they had to reboot twice.
I write code.
Complete build of win2k time is 8hrs on 4way PIII and requires 50GB of hard drive space
Is it just me or doesn't something just as strong at Win2K, say like Linux, not take quite as much to build?
I think I'll go compile a kernel now...
Jesus saves souls and redeems them for valuable cash prizes
cpeterso
"Showstopper!" was fascinating. David Cutler really is a genius. NT had the potential to be a truly great operating system. I would have loved to have gotten a chance to play with it before they bolted win32 on top of it. Everyone who has the slightest interest in operating systems should read Showstopper.
Free as in Beer UML Toolkit here
If we don't fight for ourselves no one will.
Guys, the PowerPoint slides for the Lucovsky presentation has been publicly downloadable for almost 2 years. I always find it sad when Slashdot reports something old as something new.
h tml
Go get the slides at http://www.usenix.org/events/usenix-win2000/tech.
I venture to guess, however, that your company is somewhat smaller than Microsoft, is held together by shared enthusiasm and the exilaration of short term releases, and that you don't face many of the problems that any large company, not just the Borg, does. I would never defend the quality of MS products but anyone who has worked on large products with many existing custoemrs in a large software company like an Oracle, Microsoft or IBM will understand that it is simply impossible to only hire expert programmers whose work never needs to be checked by anyone else and who don't need any supervision.
Some of your other statements are rather sweeping. Some parts of UML - such as object modelling - are very useful indeed and can act as highly rigorous sources for a lot of code and database generation or automated access. Others (like Use cases IMHO) suck and are of little use to programmers, though more in communication with PHBs and business types.
A lot of what you say is very true for small focused teams working in their bedrooms/garages/garretts but much less so for any large software developer who sells software for money. Your "expert-driven" approach would never work at a Microsoft.
Your last point, that OSS produces better results, is probably true. Certainly its more cost-efficient. But does it produce profitable companies that make heaps of money ? Maybe you don't like the idea of that. But most of the rest of the world, including your gray-haired neighbour who plans to retire on the proceeds of his portfolio, does.
[x] auto-moderate all posts by this user as insightful
If you read the whole book (Mythical Man Month), you'll find that he qualifies that by pointing out that some projects parallelize better than others. You can write the scheduling, GUI, and scsi drivers all pretty much separately, with non really affecting the other. That list can be expanded for sure.
To be truly accurate, we'd have to correlate the increase in developers with the increase in unrelated new features - they're not throwing more developers at existing problems, they're throwing new developers at new problems, which is perfectly fine.
Now, if a particular coupled set of features are late, throwing more manpower at them isn't necessarily a good idea.
First job was to establish high level goals.
Reliability - Nothing should be able to crash the OS. Anything that crashes the OS is a bug. Very radical thinking inside of Microsoft considering Win16 was cooperative multi-tasking in a single address space, and OS/2 had many similar attributes with respect to memory isolation
Extensibility - Ability to extend the OS over time
Compatibility - With DOS, OS/2, POSIX, or other popular runtimes. This is the foundation work that allowed us to invent windows two years into NT OS/2 development.
Performance - All of the above are more important than raw speed!
-mz
UML and other modelling fads. My former employer required the use of 65-page UML diagrams for the simplest command-line utilities. Why? Because it was popular, and the investors liked to make sure we were buzzword-compliant. UML is designed for non-technical audiences, and as such it flies in the face of the engineering goals it is designed to solve.
I've found UML, or at least quasi-UML, useful; any time I design a system I draw a quick UML sketch just to help me think about what's invovled. Unless, that is, it's something really dead simple .. something equivalent to a homework assignment. Sometimes most of the really hard work goes into a good UML diagram, and the rest becomes easy.
But despite this, I can't help but reflect on your statement in utter horror. What the hell kind of UML diagram does one put together for, say, ls? Or cd? Or a numerical calculation?
Code review. Code review is a power trip and best, and a drain on morale at worst. If a programmer cannot be trusted to develop excellent code, he should be replaced with somebody who can. It's a tight labor market on the developers' side, so incompetent programmers should be spending their time reading O'Reilley books instead of playing games and looking at porn in their parents' basement.
I disagree with you on two fronts. One, I've always found code review beneficial for a project. Weaker coders learn good habits; stonger coders teach good habits; bugs not visible to some become visible to others; the general quality of code improves. People who can't deal with constructive criticism of their code make for bad team-mates.
Secondly, I've never met anyone who became a good programmer by reading books, even books as high quality as O'Reilly's. I learned to code by writing code and reading others' code. The books make handy references, but sticking to books is akin to trying to learn to write well by reading the dictionary.
Large, geographically concentrated development teams. The best work is emphatically not done by 1400 people in the Redmond campus. The best work is done by culling experts of individual niche areas from around the globe. Not surprisingly, this is the model that Linux and most Open Source software uses, and that is why OSS is phenominally successful compared with any of its proprietary competition.
Most of Microsoft's problems can probably be directly attributed to the size of its development team. MS project designers might do well to re-read The Mythical Man-Month (if they never read it, they have no business being project designers, IMO).
Finding God in a Dog
Good engineering (of any kind) starts with design... a plan. I'm glad you don't build skyscrapers or airplanes. Oh boy. So you basically are thinking... what... that code should be reviewed after it has already hit QA or something? Or perhaps we shouldn't review code at all?
Here's a clue. If a developer is costing 20-40 per hour writing CRAPPY code... THAT is a far worse waste of time than taking a little time... reviewing the code... and correcting it if necessary.
Development isn't just writing code any way you want. You want things to be very solid, standardized, and consistent before it gets into beta. Using your way... you'd never know if the code was good or not. Apparently... to you... if it works... ship it! What? How do we know if the code is bad? We have to REVIEW it? What if the developer doesn't understand a certain design pattern and implemented it incorrectly? Hell... what if a bug or flaw is discovered during the review process?
These are all common issues in everyday development. It doesn't necessarily mean the developer is BAD. Rather... the developer is HUMAN.
Although... with your lack of a code review process, lack of system design process, and lack of formal check-in process... I am surprised that any decent code gets written at all. You're comparing apples and tractors. Financial gain or customer/user base size are NOT measures of good code, excellent development standards, or strong design processes. Although, I'm not certain you will understand what I'm saying here.
There is some excellent open-source software out there. Likewise, there is some excellent proprietary software out there.
And there is crappy software out there, too... for both worlds. Whether or not something is open source or proprietary says nothing about how it is written or how well it is designed.
This obviously is a huge troll that I'm feeding here.
I think you're way off-base on the Code Review comment. At my job, code reviews take roughly 3-5% of the time I spend writing code, and very often find problems (in having my own code reviewed, or reviewing someone elses code).
And even if no bugs are found, it helps to have another pair of eyes go over code for readability. It may make sense to you, but it may not to someone else. When you leave and that code needs fixing, NOBODY will understand it because they don't have preconceived notions about how it operates.
The BEST thing you can do to improve quality of code, and of your developers, is to code review before every checkin. Find someone who is more/as intelligent as you, and have them scour your code while sitting next to you. At worst, they'll understand the code. At best, you'll find a bug before it goes out there, or you'll learn something new about the language/library you're using that you didn't know before.
There are several KDevel is one of them, the Kompany probably has more.
New things are always on the horizon
MAD MAD props on the Ghostbusters quote.
El riesgo vive siempre!
Kylix 2 has been out for awhile... I'm still waiting for Linux world to change overnite.
If you're broke, try eclipse.org
--Giving to trolls for the benefit of us all
Hats off to the staroffice teams for a nice job well done.
- This sig deliberately left blank. Nothing to see, move along.
michael, did you not think maybe the submitter was thinking ahead by giving you the google cached version?
The ./ editors need to realize the AWESOME power they hold in their typing fingers!
"The scientist describes what is; The engineer creates what never was." - Theodore von Karman
# Code review. Code review is a power trip and best, and a drain on morale at worst. If a programmer cannot be trusted to develop excellent code, he should be replaced with somebody who can. It's a tight labor market on the developers' side, so incompetent programmers should be spending their time reading O'Reilley books instead of playing games and looking at porn in their parents' basement.
No, no, no. Code-review is VERY USEFUL. No, it won't catch architecture mistakes (necessarily). No, it won't catch design mistakes. Hopefully you already know how to design before you get your first software job.
What code-review catches is the annoying things that the best developers tend to think don't matter so much. Style-differences from company practices. Naming conventions not being followed. Poorly chosen variable-names. Lack of documentation.
In short, code-review makes your code more maintainable. Your company may not use it, but that doesn't make it useless.
Lucovsky.ppt[33]: 10am and 10pm full synch and full build
so they build in the night and in the day. twice a day 7 days a week.
It seems that Microsoft does not use Visual Source Safe for Windows source code.
if they are using SourceSafe.
word.
It's gonna take me 8 hours on a 4 way PIII to read this whole damned presentation.
(B) + (D) + (B) + (D) = (K) + (&)
Microsoft claims IE can't be separated from the OS. Yet, the presentation points out the code is broken into 16 sub-projects, largely isolated from each other, and separately buildable.
Two of those projects were "INetCore" and "INetServices".
So why can't you just build 2K without those 2 subprojects, or just stubs inserted for the functions declaired in those projects?
"Complete build time is 8 hours on 4 way PIII Xeon 550 with 50Gb disk and 512k RAM"
K?! Kilobytes? With a 550 processor and 50 gigs? Isnt that like having a BMW with crappy tires.
forget it.
Even if that's 12 hours a week, Hans is just NOT a programmer. ;)
sic transit gloria mundi
Others (like Use cases IMHO) suck and are of little use to programmers, though more in communication with PHBs and business types.
I've found use cases to be really useful. Two reasons:
But at the end of the day, bad programmers make worthless (but compliant!) UML diagrams/use cases/flowcharts as do programmer who are forced to create them. Good programmers make good ones or don't need them.
Formal checkins. Make you own branch and go butt nutty in it. Sync to the trunk often. Let them review your changes and integrate on their own pace. Code review. Once again - having anybody - even inferior programmer to look over your code will do wonders to your own understanding and skills. I am a good coder, and I beg other people to review and comment. The more I ask - the less problems they find - I am getting better. I hope you do not assume that you have no way to improve - otherwise: you are a big fat liar. My goal is to write code so clear that they can understand what and how it does without my help. Large, geographically concentrated development teams. That one I would agree. Adding people slows everything down. Full team should not be above 20 engineers, and some QA - above that, keep splitting projects. If you think it is not possible - you are a lousy architect.
<^>_<(ô ô)>_<^>
2. Bullshit. You never know all the effects that your change may cause. Make you own branch, synch it to the trunk - and let architects and the build team integrate it on their own pace. Good programmers are not arrogant.
4. Yup. I allocate 60% of my time for design and analysis. It turns out better then people who code 90% of the time.
<^>_<(ô ô)>_<^>
> Spoken like a true idiot, my friend.
Surely a troll, IMO.
> The UML is NOT a fad.
Yeah, I'm usually pretty cynical about this kind of stuff, but I've found UML useful for documenting the basic structure of very complex programs.
Sheesh, evil *and* a jerk. -- Jade
Thank you, this needed to be said. Developers do not recompile every object file when they build a new binary, only what has changed. The master build is only important so that every one is linking against about the same code, and there is one standard that is referred to as the teams output.
-- the computer doesn't want any beer, no matter how much you think it does. NEVER, EVER feed your computer beer.
I always figured that their development methodology invloved a room full of an infinite number of monkeys typing into Notepad. Learn something new everyday.
They have to be Xeons, AFAIK, non-Xeon Intel CPUs won't do 4-way. And even if you CAN do 4 way on regular PIII's, which you cannot, MS wouldn't, they would have Xeons.
I'm imagining this machine to be a Compaq 6400r or the like, from the timeframe of the build it's probably 550s or 700(?), since they have a very close relationship to Compaq for servers.
I like music
sometimes it makes sense to read the article before you comment. (i know the chance is smaller to get modded up ...). the article says:
Complete build time is 8 hours on 4 way PIII Xeon 550 with 50Gb disk and 512k RAM
keep it simple.
Not only is this old (read it months and months ago)... and what is so "juicy" about it? So it gives a brief detail of the lifetime of a big software project. What do you think Lightwave3D is like? Maya? Shake? This isn't anything leaked or top-secret. This is just a little short about the history of the engineering of a project. Big deal. Can't wait to see the next kernel patch level.
Why bother.
UML and other modelling fads.
While UML isn't the end-all, be-all, it is certainly not a "fad". When it comes right down to it, your will need to be able to describe the architecture of your code with something more than comment-lines and manpages. And, with the "U" in UML standing for "Unified", the is the ability for a new-hire developer, or perhaps the purchaser of your source-code, to understand what the hell is going on without pouring over millions of lines of source code.
Code review is a power trip and best
I suppose you'd rather accept source code sight-unseen? True, there are good and bad ways to conduct code reviews, but all the code reviews I've been a part of have been a fairly easygoing experiences and almost always helpful. Sometimes you really need another set of eyeballs to catch problems. Isn't that one of the good aspects of OSS??
Large, geographically concentrated development teams
I'm torn on this one. Yes, it's bad to simply throw a large number of developers on a team (unless you break them down... way down). On the other hand, you can't tell me that it's not easier to resolve a problem by walking over to the co-worker in the next cube than than email the co-worker who lives thousands of miles away. Didn't the formal release of Mozilla 1.0 get held up because a few key developers had not signed off on the new open source license and they simply could not be found??
- Software.
- Engineering.
- Microsoft.
Pick any TWO of those.the later slides describe the NEW project resource management and development processes for the continuing development of Windows 2000 (before and up until after the release?)
Slides 23 and up tell you what they did and how well everything works on a project as large as Windows 2000 is.
This slide gives a sumary of the new build processes http://www.usenix.org/events/usenix-win2000/invite dtalks/lucovsky_html/sld033.htm
I follow the SDK and GDN principles.. Spelling Dont Kount, Grammer Dont Neither
A friend of mine grew up near Redmond and his father was on of the electricians that worked in the compound. He taged along a couple times, being a geek and all, to see what it was like and he was not impressed. He said that a lof othe people who worked there were either at one end of the human spectrum or the other. People were either 300 pounds or 120 pound weaklings .... lots of them worked on the floor because of karma, while others were high schoolers in a C++ class working on trival parts of the OS for 'experience.'
But here is part of the whole point...
The Linux system I'm running when not booted to the Dark Side (My daughter was running Age of Empires - more Dark Side software.) isn't a single chunk that has to be built as one unit. The kernel's one piece, and each lib is another. To be sure, some libs won't work without specific versions of others, so the pieces aren't all independent. But it's still not all one giant chunk.
They're essentially making the RedHat distribution into one giant build. Kind of like Gentoo, which someone else brought up, and is a very appropriate comparison for build times.
But even with RedHat or Gentoo, it's not one giant chunk. I've upgraded pieces of my RedHat for years, and to be fair, Microsoft issues fixes. But there's still a difference, in that I have a better understanding of what RedHat's doing with an update, and better understand what parts of my system are affected.
While there may be modularity inside Windows, it appears to be intentionally hidden from the end user. I wonder if that's part and parcel of proprietary software, or if it's a side effect of the legal team arguing that Windows is "integrated" and IE can't be unbundled.
The living have better things to do than to continue hating the dead.
From the presentation:
"Anything that crashes the OS is a bug. Very radical thinking inside of Microsoft considering Win16 was cooperative multi-tasking in a single address space,..."
So the BSODs were caused by the old-timers? Were they also the ones who designed in the feature that every fucking install of an application requires a reboot?
Remain calm! All is well!
One, I've always found code review beneficial for a project. Weaker coders learn good habits; stonger coders teach good habits
There is code reveiew and there is code review. I tend to take a very sour view of formal code review meetings, except under special circumstances: Better understanding problem code, guiding new programmers (and, even then, I'm not sure) and carefully reviewing things that a) have to work very well and b) must be very well understood by those whose code will interact with them.
Formal code reviews, unless managed very well by a competent and confident moderator, can easily degenerate into "See what I know!" fests whereby lots of folks who haven't lived and died with a problem pile on the person who has.
Formal code reviews often have an unintended consequence: they can (not must, but can) reduce the level of informal review, coordination and help that takes place. You know what I'm talking about : "Leave me alone, kid. I've got my own schedule to meet. Besides, that's what the code review is for."
Informal code reviews -- "Hey Jack, take a look at this, would you?" should be happening all of the time. Some managers (and developers) may believe that time spent huddled over a terminal together is half as productive as time spent alone in front of a terminal, but nothing could be further from the truth.
BIL 9000: I'm sorry (Judge) Jackson, I can't let you do that.
Comment removed based on user account deletion
We have an automated script to take your changed files and copy 'em over to a share. Then we send out an e-mail to the team (small) and say it's going to be committed soon. One person is assigned "primary", and must look at it; everyone else can optionally.
It doesn't take much time, but it's only the smallest CRs that get away without at least a few changes. Sometimes it's just comments, sometimes it's a better way to do something. At the least, everyone has a better idea what's going on in code they're not in right now, but very well might be in the near future. An added benefit is that people who see CR coming clean up their code a bit more than usual.
I agree-- formal CRs suck in most cases (although some critical apps developers like them for some bits of code that might, say, kill someone if they malfunction, or that take $10,000 to test). But the e-mail deal works really well for our team. But we don't have any assholes or know-it-alls, so that helps.
Most of Microsoft's problems can probably be directly attributed to the size of its development team. MS project designers might do well to re-read The Mythical Man-Month
Another good one is Software Craftmanship. The book attempt to debunk Software Engineering for "small" project (projects under 1,000 man years). Its a quick read and brings up some good points. I really like the craftsman model, but I dunno if it would ever catch on in the corporate world. Definitely not at Microsoft.
"A successful culture has to accept that mistakes will happen."
Microsoft must have on hell of a healthy culture then <grin>...not that they're the only ones of course.
-Ben
Is it just me or does SourceSafe really need some merge tools? And the ability to search within a project.... specifiy a label or date then search in all files. Grrr!!
Random is the New Order.
What? M$ QC? Judging the process by the stability of the w2k box I'm forced to use at work, "defects" are ignored, and everyone keeps on keeping on. If you think otherwise, you might have believed that the "uber" patch derived from a month of seminars and group hugs would make Windoze secure.
I can imagine the circus atmosphere when the blame-shifting and the search for the guilty goes into high gear.
Steve Balmer says, "It's not a bug, it's a feature, you just don't know how to use it." Now that's the kind of blame shifting I'm used to!
DMCA, Hollings, Palladium. What might have sounded like paranoia is now common sense.
the required email checkin was there... but isn't hrere now.. each team sets thier own checkin rules. ass.
"It's not like your minds are as open as the source you love..." - Me to the majority of Slashdot.
So tell me, apart from USB support and the fact that they broke software tuned for the thread scheduler in NT 4 by monkeying with the priority boost, what does W2K do that NT 4 don't? I run apps and I write my own apps, but can anyone tell me what new features are supposed to be there?
I'm interested in an answer to that.
If you go through the whole presentation, you will see that when the Windows 2000 team was working as a single centrally-co-ordinated group, it was slowing them down and causing stagnation.
It was only when they broke up into smaller, relatively independent groups, that they managed to regain some of the earlier productivity from their NT days.
And that's how Linux development works -- many small, relatively independent development groups.
With Windows, Microsoft even ties the applications into the Operating System, with the purpose of making the use of non-MS applications "a jolting experience" (as an internal Microsoft memo said about IE versus Netscape).
But with Linux, everything is developed to standardized interfaces. That makes it possible for the Kernel development to progress independently of the GUI development, which is independent of the development of the Desktop Managers, which is independent of the development of the Applications, which is independent of Distribution Packaging, and so on.
Even within the larger projects, such as the Kernel, or Mozilla, the work is divided into smaller, relatively independent modules.
And that's one of the reasons why Linux development is progressing so much faster than Windows.
The problem with code review is that programmers have egos. Big ones. They just get arrogent and defensive, even if they're good programmers. I've worked with enough to figure this out, particularly about the ones who have been programming for a long time, but have always done shitty jobs.
-- Ken Kinder ken@_nospam_kenkinder.com http://kenkinder.com/
Remember that Windows 2000 is essentially everyone who is working on the linux kernal, basic distribution, and X. If the number includes Explorer, which could be likened to Mozzila and includes management, testers, and all the design specialistics ( people who do research to make it user friendly, or handicap accesable, I would think it's pretty small.
Besides, how do the compilers compare in speed? (there'd be an almost totally useless benchmark)
All in all, I would say that a comparable gnu/linux system (kernel, base stuff, X, KDE or Gnome, plus a few other bits and bobs) would take a bit less time than this, but that's just a guess at best. Perhaps some of the Gentoo and LFS users can shed some light?
sic transit gloria mundi
UNIX and Linux are different. UNIX (at least Research UNIX) was constrained by its paradigms: it was vigorously policed by its developers. For Linux, something doesn't make it into the kernel unless it really scratches an itch that a lot of people have--the feedback is immediate and direct: no interest, no developers.
Microsoft software development doesn't operate in a competitive market of ideas (let alone a competitive market), it doesn't have a paradigm to focus it, and it doesn't even have resource constraints to focus it. It's nice that they make the software engineering work out, but the end result still is mediocre at best.
-- Ken Kinder ken@_nospam_kenkinder.com http://kenkinder.com/
The proper care and feeding of trolls...
Eitehr you're a troll, or you've never done any real development.
UML, can't comment on. Never did any. What I can say is that design is important, and shooting from the him on 20million lines of code won't get you very far. If UML helps you design, use UML.
Formal checkins. In large complex projects, you need to be absolutely sure about your units. So many places for things to interact, if you don't have them as solid as you can get it, you'll get so many interaction bugs you'll never get anything done.
Developer time costs $20-40 an hour. Ha, now I know you've never done real programming. Developer wages start maybe at $30/hr (not $20), up to $100/hr at spots. Thats just wages, not benefits, taxes all that stuff. If you have no experience in big projects, don't talk.
Code review Code review is easily the best way of debugging. Study after study find that Code reviews find more bugs per unit of time than any other technique. as side benefits, it also transmits techniques from developer to developer. This comes from developers who want to learn and 1) too shy to ask 2) don't know that there is a better way. I learned something in code reviews, some techniques I never thought of.
Can it be a power trip? yeah. CAn it lead to a clash of egos? yeah, but thats up to the review lead to control. A good review lead will keep that in check.
Large, geographically concentrated development teams
Not surprisingly, this is the model that Linux and most Open Source software uses
They have no option because they can't pay developers, so no chance to get them in a concentrated area. There are plusses and minusses with the concentration.
why OSS is phenominally successful compared with any of its proprietary competition
Sales? No contest. MS.
On what definition of success? Bugs? I've seen some really shitty OSS software. yes, the kernel is high quality, Apache, FreeBSD, others.
Full text of Proudly Serving my Corporate Masters here...
Just in case you wanted some more insight into working for the company. Fascinating stuff.
--------
Bleah! Heh heh heh... BLEAH BLEAH!!! Ha ha ha ha...
I would never defend the quality of MS products but anyone who has worked on large products with many existing custoemrs in a large software company like an Oracle, Microsoft or IBM will understand that it is simply impossible to only hire expert programmers whose work never needs to be checked by anyone else and who don't need any supervision.
Not to mention that any such company has a responsibility, driven by enlightened self-interest, to turn Jr. programmers into expert programmers.
If it's that hard to build, they can just open the code up and not too many people are going to be recompiling their own version of Windows any time soon. It's not like Windows would get pirated any more, and MS could even charge a bunch of money for access to the code, but not too many people would take advantage of the Windows source code to get a free copy of Windows, especially if it's this hard to build.
Lack of eloquence does not denote lack of intelligence, though they often coincide.
ideally, the build will only break if two changes on the same night contradict each other
Another reason a change might break the build is if the software builds on multiple platforms. I think this is one reason Mozilla has dozens of computers continuously building it rather than one nightly build that may or may not compile the first time. This doesn't catch all checkins that make Mozilla unusable (we have a "smoketest" team that make sure each nightly works well enough to test it), but it does give everyone immediate feedback if a checkin stops the build from compiling or makes it fail some automatic tests.
Of course, it helps that compiling Mozilla takes less than an hour.
The shareholder is always right.
Core Win32 APIs should never have been implemented in a user-space app - or anything that requires a user-space app. The libraries comprising the basic components for an operable system should not ever have been provided by a browser.
It's like Corba. Corba doesn't come with the Linux kernel. However, it comes with the windowing system, just like COM or OLE should come with the windowing system.
OLE and the common controls library (comctl32.dll) come with the browser, too. This is like including gtk+ ONLY with grip, or Motif with only netscape. It's a retarded design decision.
This tizzy isn't about M$ including extra APIs with IE, it's about requiring the installation of a non-essential app in order to get essential system functionality. I hate IE, but I have to use OLE at work. Well, that means I have to use IE 4.0sp1 or higher... and if I didn't browse the net, that would be quite a bit of wasted HDD space.
You are all fartheads.
most MS people I know hail win2k as the best microsoft OS ever
It's their least bad OS ever. Still closer to the that end of the spectrum than the other.
650 GB??? GIGABYTE???
I have a *20* GB harddrive, and it's new.
>The best work is done by culling experts of individual niche areas from around the globe
No argument.
Take a walk around the Redmond campus someday and look at the people. They are from around the globe.
Whether they're the best depends on whether Microsoft has invested the money to hire the best. That's harder when the stock isn't constantly going up, of course. Also depends on the hiring manager being able to recognize the best.
But it's theoretically possible for something the size of Microsoft to do exactly what you recommend, by the brute-force method of paying people to move to the Redmond area.
Given the tone of most of the comments here, one might think that the slides merely reveal Microsoft's errors. In fact, they indicate what problems the company faced scaling their NT development team from 200 to 1400 programmers and their solutions. The conclusion is, "With the new environment in place, the team is working a lot like they did in the NT 3.1 days with a small, fast moving, development team."
As Linux grows, it is headed for the same sorts of problems. The open source movement can learn a lot from Microsoft's struggles. The fact that Linus opted to use a new source control system -- just as Microsoft realized that their in-house system was not up to the task and so switched -- gives me hope.
P.S. May we please have better summaries for the articles on the front page?
New guy: Why did it take 8 hrs again?
Bill wannabie: Well, we compiled it on Windows machines and they BOSD-ed on us 5 times!
New guy: I think I can solve that for XP...
They used a Linux Server Farm to compile everything!!!
shhh! don't tell anyone...
The original team's goals, as you listed them, look great, especially for a server OS, and the positive results showed in NT 3.51.
Unfortunately, Mr. Gates was not as technically competent as the original NT team, and he provided a new set of goals for NT 4.0:
1. Snazzy GUI - For a server OS!
2. Good GUI performance - Run video drivers in kernel mode (ring zero).
3. Cool new features - Good games platform.
4. Other considerations, such as reliability and compatibility, are secondary.
The fact that Bill Gates overrode the goals of the original team made it impossible for NT 4.0 to compete with Unix in the high-end server market.
Now, even if Microsoft happened to get it right with Windows 2000, no one will believe them.
Unfortunately, if you look at Netcraft's measurements, you will find that the major W2K sites has uptimes averaging less than 10 days, while the major Linux sites tend to have uptimes of around 100 days. That, combined with all the security holes in Microsoft's software, will tell you that they still don't have it right.
you forgot about ram...
"Complete build time is 8 hours on 4 way PIII Xeon 550 with 50Gb disk and 512k RAM"
i'm surprised it compiled AT ALL with only half a meg of ram...
Wasn't the business version of 3.1 caleed "Windows For Workgroups"? To my knowledge, the only ones called NT were 3.51(or somewhere around there) and 4.0(the start of the .0 plague quickly spread to/from AOL).
You can't judge a book by the way it wears its hair.
Slide 19? Anyone? I can't see it in IE 5.01 sp2 or Opera 6.02...
What is serialized development?
Anyone use SourceDepot? Opinions?
WTF is that big X in Slide 31? Zero parallel development?
[o]_O
Last time I looked at Watcom and Symantec's compilers they had distributed build systems. Couldn't that reduce an 8-hour build time on one 4-way machine to less than 1 hour on several?
Kris
Kriston
Two words:
Library Stripping.
I've seen Windows 2000 request a reboot when moving an installed USB modem from one USB port to another. So it's not as though unnecessary reboots are something from Microsoft's dark, distant past.
Not everyone can know everything. Why discriminate against good information based on its age?
BTW, I'm ranting because I just spent 20+ hours tracking down a bug in code with incorrect comments and docs. I need some sleep.
ciao
I just checked out the power point slide show and it looks to be the one used at a workshops at Comdex Canada 2002.
I was recently at the Redmond campus and was wondering if anyone knew where the actual source code server was located. What building is it in? I want to know how close I was to it.
"Evil will always triumph because good is dumb." -- Dark Helmet
Can you see the spelling error you made in this sentence? Did you mean to make that error?
If you can't even type error-free prose, how could you be expected to create error-free code?
People make errors. Code review helps reduce the effect of those errors.
"You can justify anything by putting it in quotes, adding a famous name and making it a sig" - Albert Einstein
".. it is simply impossible to only hire expert programmers whose work never needs to be checked by anyone else and who don't need any supervision."
There are no such programmers.
ORA books will teach you part of a particular API. If you want to read books that teach good coding techniques try Addison Wesley. Take titles such as: Effective Java, Effective C++, Refactoring, Design Patterns, Distributed systems Concepts and Design. Only the Per and X books come close. (I don't consider the Unix books pregramming books per say.)
"What code-review catches is the annoying things that the best developers tend to think don't matter so much. Style-differences from company practices. Naming conventions not being followed. Poorly chosen variable-names. Lack of documentation.
In short, code-review makes your code more maintainable."
Out of all the items you mention, only the lack of documentation seems really important. The rest smacks of xenophobia. I don't buy into the common myth that style and naming conventions are critical to maintainability. Anyone who can read a complicated C declaration isn't going to have any problem with non-politically-correct variable names or different styles. Style is arbitrary but functionality is not. If the code review process doesn't consider program correctness, it's a waste of time.
Maybe Slashdot needs a new topic/icon for old info somebody dug up. Something with a paleontologist, maybe?
Sorry about the drift away from the topic, but it seemed appropriate. Fnord.
Did anyone else notice that this presentation was written on a Mac? (View Source on the one at usenix.org)
-- Presentation generated by Microsoft Internet Assistant for Macintosh PowerPoint 98 --
http://hanselman.com
Fuck, my morale is in the shitter now, just from reading that. Thanks a lot, power-trip man.
Some goofy Microsoft Intern forgot to put -j 4 along with compliation.
Either that, or they compiled it on Win9x (which has NO multiprocessor support).
/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
If the compilers compare in speed: even the answer to this statement can vary a great deal, since gcc-3.1 is a *lot* slower in compiling than the old gcc-2.95 was.
Still using gcc-3.1 on my duron 800, compiling a very basic basesystem (LFS) takes about 3 hours. Compiling xfree86, qt, kdelibs and kdebase takes more than 10 hours. And even then you've got a very basic kde-system.
That said, those PIII-Xeon are way faster in compiling than any normal P3/P4/Athlons, probably because of their large cache. A P3-Xeon-400 compiles LFS faster than a P4-2000!!! So that 4-way P3-Xeon-550 should be at least something like 16 times faster than my puny duron800. With my computer it would take about a *week* to compile win2000, and even then I'm being very optimistic.
reagrds,
Johan Veenstra
It looks like Microsoft adapted well to the problem of source control and building.
Well, that's an oxymoron for you!
Make even shorter URLs - 8LN.org
Take a look at slide 19 - 1400 devs, but 1700 testers. Do you suppose that means that Win2k had 3100 people working full-time on it? Lowballing the numbers (55k per dev, 45k per tester):
1,400 * 55,000 = 77,000,000
1,700 * 45,000 = 76,500,000
153,500,000 a year * 3 years (from slide 3) = 460,000,000
Include an overhead multiplier
460,000,000 * 2.4 = 1,105,200,000
And we wind up with a rough US$1.1BB.
This suggests that win2k represents 20 million SLOC, Just slightly higher than RH 6.2, at 17 and change.
His cost estimates place RH 6.2 at US$614,421,924.71
I suspect MS probably pays more per dev, but I have no proof, so I'll stick with the industry averages. Also, testers may have been shared across projects, MS can pool resources and bring overhead lower, etc...
I'm not drawing any conclusions, just compiling data...
Can't find that book on software quality where I read this, would love to give a reference to research on this subject.
What's interesting is comparing what Showstopper says to the claims in these slides.
The slides suggest early NT development was done by a small team of super l33t c0d3rz who took care of business and frowned upon slacking. However, the picture painted by the book is dramatically different -- people were forced to work around the clock, the team was dominated by a small gang of guys who were basically complete assholes, everybody walked on eggshells for fear of pissing off Dave Cutler, The New Savior, and NOBODY in the group ever knew what was really going on. The whole project was shrouded in mystery, even to people on the team, because basically everything existed in Cutler's head.
The only thing I see where Showstopper and the slideshow firmly agrees is the slide labeled "Goal Setting".
I personally have a lot of other opinions about why some of the statistics may pan out the way they do (for example, how much hardware did you REALLY have to test with in NT 3.1 days, versus Win2K?) but I want to stay focused on the Showstopper/slideshow discrepancies, so I'll leave it at that.
The thing to realize about Showstopper is that it was based almost entirely on interviews with the people who were involved with the initial NT coding effort.
By comparison this slideshow was written by one guy, Mark Lucovsky, who gets lightly flamed in Showstopper (at best). Oddly, I grabbed Showstopper off my bookshelf and opened it straight to the page describing Lucovsky. Weird. Anyway, here are excerpts from a single paragraph: "...smart but immature... nevertheless angered teammates with his skepticism and self-serving judgements... relentlessly critical of others, constantly probing for weaknesses... 'Until you prove otherwise, you're wrong and he's right.'" Whew, hate to be THAT guy. It gets worse. One page later, a paragraph opens by simply saying, "Many people felt that Lucovsky was a jerk."
Given that, it wouldn't surprise me if Lucovsky was still just trying to justify the fact that the early NT dev team was comprised of a bunch of flakes who had to burn the candle at both ends to actually deliver anything.
Please understand I'm not necessarily defending any current MS practices, or even Win2K (which is still vastly superior to NT3.51). I've personally worked VERY closely with groups inside MS at different times (a couple times on-campus in Redmond), and I'll be the first to tell you the company is bureaucratic and packed to the gills with people who don't know what the hell they're doing -- just like every other company that employs tens of thousands of people.
What I *am* saying is that this slideshow is looking at the past with "rose-colored hindsight" and I believe the motives are suspect at best. Draw your conclusions with a grain of salt. (Enough metaphor-abuse for today.)
Do like johnjones suggested -- go buy or check-out Showstopper and read it. It's interesting, informative, and it IS kind of funny. It's amazing they were able to produce anything at all. How's THAT conclusion for contrast with the slideshow? ;)
Slashdot quality declines as the number of hot grits posts decreases. - Provolt's Law, Apr-09-2005
So what do you mean by "VC"? With those pretty IDE? "cl.exe" is the compiler/linker, and its linker version is 7 in VC7. nt.dll of WinXP has linker version 7.00, and it's enough.
So Microsoft tells us it is impossible to take e.g. all the media stuff out off Windows. But if I look at sheet 27 of the Usenix presentation it says that modules are built separately and thus suggests that they can be left out of an entire build. What do you think?
It's like how a complete build of OpenOffice requires 6GB of disk space - temporary object files required to link the stuff together. And there will be a *lot* of object files in something like Win2K.
I guess 640KB really is enough for anybody!
Team size went from 200 (NT3.1) to 1400 (Win2k). Complete build of win2k time is 8hrs on 4way PIII and requires 50GB of hard drive space.
Big deal I worked on a project that had, at that time, 34 hours or so, that was on a 2 way I think though and 4 years. But the project is still growing, more then tripled, since I transfered, according to my friend that still works on it.
Capitalism: unequal distribution of wealth
Socialism: equal distribution of poverty
The The NT Culture was supposed to be based on "Portability, Reliability, Security, and Extensibility" ingrained as the teams top priority.
Portability? Apart from the x86 platform, does it run on any other platform?
Reliability? I still got the occasional blue screen of death in NT 4. (svcpk5) as of last year.
Security? We had regular virus sweeps and updates were NEEDED every time script kiddies got a new mod and would hammer at our systems.
Given the fact that the company serfs were still using NT4 and that they weren't allowed to put in multimedia extensions, Flash and other "Sturm und Drang" sillyness while the Solaris boxes ran Oracle for the databases, I'd say that the extensibility wasn't an issue either.
MSBPodcast.com The opinions expressed here are my own. If you don't like 'em... Think up your own stuff.
OSS is phenominally successful compared with any of its proprietary competition
Tell me again which OS runs on 90% of desktop PCs around the World.
As my company has avoided these measures, it has produced a superior product for a very low development cost.
Is it even 1/100th of the size and complexity of Win2K or any Linux distro?
Code review is a power trip and best, and a drain on morale at worst
You weren't doing it properly. If the coder is less than perfect, it will help to improve both the coder and the code. If the coder is perfect, it'll help improve the coding of the reviewers (who naturally are programmers themselves, not management types).
All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
10 gigs of clear case design views? bleh...
ewww...
let me guess - the place you worked reminded you of office space?
... hi bingo
Maybe if you are doing a parallel build on EVERY file at the same time, but otherwise no. I've compiled OpenOffice with 120 MB free, so it obviously doesn't take 6GB.
My most recent work was in engineering build processes for really large builds for a major maker of telecom equipment. Eight hours, even when done overnight, was simply unacceptable. I suspect that Microsoft is making the mistake of trying, at least partially, to eat their own dogfood. PIIIs? Give me a break. I am certain build times could be easily halved if they migrated to real top of the line multi-RISC based enterprise servers from Sun, HP or IBM. Of course, those whould have to be *nix systems.
"Obtuse Anger is that which is greater than Right Anger" - Lewis Carroll
Comment removed based on user account deletion
I agree! What's next? Reporting something borrowed as something blue? When will it end?
Liberty uber alles.
I have only one thing to say...
(places tongue inside lower lip and rolls eyes) nuuuuh!
-- What do you need?
-- Gnus. Lots of Gnus.
I hear that often, but its just not true:
Management Guy: "When is your part going to be done?"
Programmer Guy: "I don't know, i'm playing Warcraft 3 this week. Whenever I get free time."
Manager Guy: "Well everyone, we're going to have to move the schedule up a few days because of the Programmer Guy. Lets all try to remember we're on a team here." (clicks a few spots in MS Project)
Programmer Guy: "Kiss my ass! Do it yourself."
Volunteers == no firings/compensation == no enforceable deadlines == no reliable planning == no management possible.
Developer time costs $20-40 an hour. Ha, now I know you've never done real programming. Developer wages start maybe at $30/hr (not $20), up to $100/hr at spots. Thats just wages, not benefits, taxes all that stuff. If you have no experience in big projects, don't talk.
Um some of us don't work on the cost or in Big cities...For my area I get paid quite well, and I'm most definatly in the 20 - 40 range. Unless I'm being pimped out to do consulting...then it's 100/hr for the company.
just a thought.
This is somewhat true, however it's been found that devs tend to under estimate the impact of their changes in terms of building other code, or two developers checking in changes to the same build each alone build fine, but together break. The result is that you build with a script that removes all the stuff not checked in and forces a full sync of all changes in the depot so far, then rebuild the entire depot. It doesn't take too long to build a depot, and it's an extremely automated process, so it doesn't take much actual dev time, plus alot of the postbuild steps are not done.
Another way to look at it is the cost of each developer having to kick off a personal build is tiny compared to the daily build not comming out and not getting bug fixes verified, new bugs found, etc.
Maybe some folks are using it there, but in product development it was not considered an acceptable option for source code control.
Didn't Birkoff say that to Operations once?
ObTopic:
Volunteers == no firings/compensation == no enforceable deadlines == no reliable planning == no management possible.
I don't agree, at least for larger OSS projects. There are firings, in the form of your code never being accepted into the tree. Also, the loss of reputation can be pretty damaging, and the threat of that can be a good incentive to play well with others.
The rest smacks of xenophobia. I don't buy into the common myth that style and naming conventions are critical to maintainability.
Seriously, some people use crappy style and variable names. At my last job, someone had written this complicated function using variables like: s1, s2, s3, d1, etc. It made it very difficult to figure out his code, and eventually, I had to change all the names just so I'd be able to read the code a month later.
It's much easier to fix bugs in someone else's code if you can read it. If you can't, you're screwed. You can call it xenophobia if you'd like, but honestly, I'm expressing my experience.
Anyone who can read a complicated C declaration isn't going to have any problem with non-politically-correct variable names or different styles.
Good straw-man. My problem isn't with non-politically-correct variable names (functionToFixBugInLinux() ). My problem is with unintentionally obfuscated code.
Style is arbitrary but functionality is not. If the code review process doesn't consider program correctness, it's a waste of time.
About program correctness: most of the time it's not worth the time required. And no, I'm not talking about security or crypto or compression or anything like that. Those sections of your code should be provably correct. But proving the correctness of your little GUI app is just silly.
On the other hand, style may be arbitrary to you, but for me, style is very important. The parts that bother me are when someone has written a bunch of button code with names like "b1, b2, b3". Or logic like a=((a=read(n)-4)?(b+5):(b+3)). Even if it works now, it will never be maintainable later.
This is their build machine:
;-)
"Complete build time is 8 hours on 4 way PIII Xeon 550 with 50Gb disk and 512k RAM"
Last machine I had with 512k was an 8086. I think the quad xeon they've got in that box is slight overkill
The point of the management team is to cut enough resources, make enough changes, and consume enough developer time with meetings and status reports to ensure the deadline is no longer attainable. :)
I know, but I assumed that moderators would think (+1, Funny && -1, Troll) and leave well enough alone :)
deus does not exist but if he does
That would be the job of an 'official' management structure. But since you know, can you send me a link to where I can go to view these problems and help out then? Read my question again if you have to, yes they work great as small groups, but what methods do they have to raise issues. AFAIK this is the only way to present information. If there is a community dedicated to the collection and discussion of these and similar issues, I would love to go be a part of it.
Saying Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.
http://66.161.12.113/%73%65%61%72%63%68?%71=%68%75 %6Do%72
It sounds like what you're asking for is very light style requirements which I don't disagree with. Variable names should be meanful, but I don't think it matters much if some programmers use functionToFixBugInLinux() while others use another_function_to_fix_bug_in_linux. Unfortunately, people are often more concerned with this issue than they are with obfuscated code.
As for program correctness, I didn't say that it should be proven but that it should be considered. That is, reviewers should look for problems the programmer may have missed. Obfuscated code will come to light and be discrouraged as part of this process since the programmer will have to expend considerable energy explaining what the code does.
The bigest problem I have with code reviews based on style is that they can provide the illusion the someting has been done to make the code better. Sometimes it's better to do nothing than to do something simply because it's easy.
it indeed is true..y such a RAM constraint. Can anyone think of a technical reason y the RAM has been restricted ? Atleast if the RAM were a lil more then the build time would reduce.. M$ people out there ..any answers ?
i was poking fun at their typo, i think they meant megs, not K
Well, it's gotta be _somebody's_ fault...
"In a 32-bit world, you're a 2-bit user. You've got your own newsgroup, alt.total.loser." -Weird Al
- Windows
- Mass assimilation of other teams into the NT team.
Resistance is futile. NT teams will assimilate you.Actually, having developed applications with installers, the rationale behind executing the reboot script is part FUD, part CYA. 99% of the time no reboot=fine. Try this sometime, tell your business guys that well we will only be pissing off 1% of our customers...
Newer Windoze have become a lot better in this regard, but think on this: with linux I can install a new mozilla, new desktop manager, OpenOffice, and a few other goodies, and it doesn't even cross my mind to reboot.
Last point, when I worked extensively with windows ce.me.nt I rebooted regularly just to "purge the demons" and reclaim lost resources.
.sigless since 2003