[plt-scheme] Perplexed Programmers

From: Brent Fulgham (bfulg at pacbell.net)
Date: Wed Aug 29 23:21:05 EDT 2007

I find the periodic comparisons of software engineering with  
traditional engineering disciplines to be somewhat humorous.  Having  
started off my working life in a large Architecture and Engineering  
firm involved in building airports, water treatment systems, bridges,  
etc., I think there is a bit of a false mystique that these large  
civil works are somehow safe from the overruns, inefficiencies, waste,  
and incompetence found in software projects.

For example:  When I started working in the mid-1990's, it was still a  
novelty for structural designs to be done in 3D.  Drawings were  
instead 2D artifacts shown in plan and section, with pipe, wiring, and  
lighting handled as separate overlays that had the advantage of being  
easy to hand off to individual contractors (lighting, plumbing, etc.,)  
but made it hard to be sure that there were no conflicts between  
different services.

Despite the review process, there were invariably problems once  
construction started and it was discovered that an 8-inch water pipe  
was expected to occupy the same spot of space as a critical structural  
support.  This would result in "change orders" and other on-the-fly  
design changes.  These types of mistakes are so frequent, that there  
is almost always an engineer on-site during construction so that these  
kinds of decisions can be made as quickly as possible.

The process of building a large civil work is so messy, that at the  
end of construction there is always a final phase where the original  
design documents and plans are revised to reflect the myriad of on-the- 
fly changes that had to be incorporated.  These "as-built" drawings  
are then archived for the inevitable future retrofits that will be  
required once the customer decides to add new features, or change the  
original use.

So, I think it's safe to say that many engineering disciplines suffer  
from some form of 'crisis'.  What the traditional fields do have in  
their favor (in my opinion) are the following:

1.  A strong professional society that (along with the government)  
enforces strict educational criteria and proof of minimal competency  
(through licensing) to ensure the work is performed by suitably  
competent practitioners.
2.  Engineering firms have a strong system of apprenticeship.  The  
licensing system doesn't even let you sit for the exam without having  
achieved a certain number of years of experience (and letters from co- 
workers claiming you meet minimal criteria of competency).
3.  Engineering firms have a strong culture of review, in which senior  
engineers review the designs largely created by teams of lower-level  
engineers.  This has the dual effect of passing experience down, as  
well as avoiding errors.

Software engineering has been a bit like the old West, in which  
practically anyone can claim expertise, and there are really no useful  
metrics to gauge qualifications.  At my company, we regularly get  
resumes from people with no business asking someone to pay them for  
development work, and many others who are incredulous that we would  
fail to extend an offer to them (even though they could not answer the  
simple questions we use for our initial screening).

I should also add that another danger with software is how much damage  
one bad developer can wreak on a project.  Because so much of the work  
is 'invisible' to stakeholders, it is very easy for a brittle and  
unstable architecture to pass initial muster (and even meet the  
surface-level requirements usually understood by stakeholders), but  
that falls apart upon first contact with the 'real world'.  The only  
'silver bullet' I have managed to find for this problem are frequent  
reviews, even more frequent communication, and a strong emphasis on  
hiring (and retaining) the right people.

Just my $0.02...


Posted on the users mailing list.