Glen Alleman from the
Herding Cats
blog offers
this
post on the subject. I want to agree with him.
I merely need to remind him that there is one key difference
in the two industries:
Estimation -
my experience with software development, and construction projects
(church, home) though small, informs me of a key difference.
In construction projects,
Once the required work is known,
it can be estimated with some reasonable accuracy, because the vast
majority of construction tasks have been done exactly the same way by
the people who are doing them. The tool set doesn't change
every 2-5 years. Carpenters still use nails to fasten wood
together. Wood still has the same physical properties that it
did in 1965. In software, there is a programming language
every 6 weeks, and every 10-20 years the nature of raw
materials change - assembler to procedural to functional to
4gl to object oriented, etc. The new raw materials and tools
require estimation to be redone from scratch. The other
factor in estimation is the difference in productivity
between master, journeyman, and apprentice
practitioners. In construction the difference between
resources can be a factor of 2 or 3, but years of stable estimates for
building 40 linear feet of stud wall, provide a rational basis for
scheduling. In the software industry, only the practitioner
who is doing the work can estimate his or her rate of completion, and
the difference between practitioners can be a factor of 10 or 20.
When I hear that project management is different between construction
and software development, this is the only difference that
I think is real. For me, it is the reason that short
iterations are important, so that I can measure the output of each
practitioner against their estimates. That way I can predict
velocity or rate of completion. In software development, that
is the only way that I have found that works to manage the
schedule, because
estimates are highly individualized.
In construction, the schedule challenges revolve around different sets
of constraints: availability of resources, availability of raw
materials, weather, and unanticipated work. Software
projects, thankfully, avoid the complexity of weather.