?> Ok the best place that explians this is "The Mythical Man
?> Month" however Paul Graham has a number of excelent essays on
?> the subject.
Yes, I've read "The Mythical Man-Month." I don't believe it addresses
the issue of programmer skill as definitively as you think it does.
If you have brilliant, productive, self-disciplined programmers, you
can do a great deal with three of them. But in the real world, you
can't guarantee a steady supply of brilliant, productive,
self-disciplined programmers, and you can't even reliably tell whether
a programmer is *truly* briliant, productive, and self-disciplined, or
just good at faking it in the interview, until you hire him and put
him to work. As a result, any approach to software development that
assumes you can start out with brilliant, productive, self-disciplined
programmers is doomed to failure unless it allows for a lot of
replacement and turnover among employees until you manage to assemble
a set of brilliant, productive, self-disciplined programmers.
As a result, development processes and development tools need to work
for mediocre programmers as well as brilliant ones. You'll never get
the same quality of work from a mediocre programmer as you will from a
brilliant one -- that's why one is mediocre and the other is
brilliant. The problem is, if you use tools that require one to be
brilliant or exceptionally self-disciplined to use them to their
utmost -- and freeform languages are *definitely* in that category --
then you set yourself up for disaster if you don't manage to find
brilliant and self-disciplined programmers.
?> If the software project is getting so big that its infeasable
?> to assign a team of 2 to 3 people to it (I think that 5 is a
?> rather large team for a software project) then it should be
?> split up into sections that are large enought for 2-3 people to
?> work on. (And the interfaces between these sections should be
?> precisely defined and supported with test sweets).
Which is a beautiful notion -- but the tasks of partitioning and
defining interfaces are the hard part of the job. Once you've got the
problem nicely broken down, the interfaces between sections of the
problem defined, and the test suites written, the rest of the
programming is pretty trivial. You're solving the problem by assuming
that the hardest part of it will be easy to do up-front, and that just
ain't the way it works out. (Maybe in the universe where you can get
users to completely and accurately specify the program they want....)
Beyond that, in the real world many software projects require more
than 5 people. Your examples of small software projects - Unix and
Perl - are both currently developed by teams of *many* more than five
people. (How many people have contributed patches to the Linux
kernel? How many people are on the core development teams for the
BSDs? How many people are on the p5p mailing list?) And that's
*before* the issue of testers, maintainers, and technical writers gets
raised.
Charlton