Time to Vanquish the Mythical Man Month
blog.assembla.com
blog.assembla.com
Also, the truth of the majority of most FOSS projects is that the lion's share of the work is done by a minority of the contributors.
Extremely true--and I'd go further on this and say that the lion's share of the work is often done in the minority of the time spent by those minority of contributors. That is, some of the most useful improvements are also the ones that take a surprisingly small amount of time to implement; the bottleneck for many of the most useful changes is not coding time, but good ideas to implement. There's always a bunch of hard, complex projects that are lying around, but what is always in short supply are the easy, simple projects whose hardest part is coming up with the idea/algorithm/concept for it in the first place.
Of course, the other bottleneck for "short and simple" changes is convincing a developer to do it... or even convincing oneself to do it.
Definitely - which makes the need for a large team even more dubious. What you want is not a team of 100, it's a team of 5 brilliant programmers. Of course, finding 5 brilliant programmers and getting them to work on your enterprise project is easier said than done. However, I'd wager it'll be easier to do once you have the budget of a 100-people team to share amongst 5, and once it's a team of 5 instead of a team of 100. I don't know any brilliant programmer who wants to work in an enterprise team of 100.
So this was a good experiment to test the posted article's thesis; lots of good processes, Open-Source-like development style, giant team.
I wouldn't call the result a trainwreck, exactly, but neither do I ever want to experience that again.
It got to the point where some were openly calling for half the team to be fired; not due to incompetence but because we were digging ourselves deeper into refactoring debt every day. The ratio of "code written to work around misdesigns" versus "code that achieves something" approached 1:1, at least in my experience. At least two different frameworks sprouted up among the developers to work around each others' bugs.
From this point of view, you can see that open source projects have a huge scaling advantage because all code is shared. If someone is waiting for a component, and they are frustrated enough, and talented enough, they can just fix the problem. The code is all shared, anybody can build and fix any component, and the responsibility for critical components can move around. The answer to the dependency problem is less hierarchy, and fewer official tool builders, not more.
But this can't be right, because even closed-source commercial projects are "open-source" from the perspective of the developers themselves.
That's one of the differences between OSS and proprietary software; OSS fails when nobody cares enough about it to continue developing it; proprietary software fails when nobody cares enough about it to use it.
Does anyone here actually believe that to be true?
So yeah, a factor of five for a typical programmer sounds about right to me. Truly great hackers might get closer (because they aren't as limited by tool overhead), but a typical IT wonk would be utterly lost in that environment and do much worse.
Here's the paper:
http://www.spinellis.gr/pubs/conf/2008-ICSE-4kernel/html/Spi...
And some additional commentary:
http://www.spinellis.gr/sw/4kernel/
Anyway, while I've never seen the Windows source code, I have looked at FreeBSD, Linux and Solaris, and all are pretty good. I think FreeBSD may be the cleanest (partly because it tries to be fewer things to fewer people than Linux), but probably not technically the most interesting. And, of course, I've only taken a few quick trips through FreeBSD and Solaris, and I've actually written driver code for Linux. Doing real work in a codebase always makes the warts more apparent.
Most (successful) open source projects can be added to easily. That is, they are modular, with a basic core architecture, so a contributor can discover then understand then modify the part they need to - and those projects that aren't modular will be replaced by those that are.
There is an assumption here that the concept of the project is understood well enough for a workable architecture to be known - without this, it's harder to add contributors, because they must first grasp the project as a whole.