Why Projects Fail

David Vaughan drvaughan55 at mac.com
Sun Mar 24 18:47:13 EST 2002

On Monday, March 25, 2002, at 04:21 , Rob Cozens wrote:
> A couple of personal observations you are welcome to comment on:
> 1.  The advent of larger & cheaper mass storage & RAM, plus faster CPUs 
> have shifted the primary programming emphasis from compactness & 
> efficiency to readability & maintainability.  If programmers (moi 
> included) put as much effort into writing & documenting maintainable 
> code as we put into finding the way to implement an algorithm in the 
> fewest (or logically most efficient) statements, we would be taking a 
> step toward eliminating the kinds of failures you are investigating.
Very true and, I think, exactly what has been happening progressively 
over many years. I use the comparison between C (C++) and Java as the 
paradigm of this change. Java when it emerged was promoted as write-once 
run-anywhere and as providing a "secure" (not dangerous) scripting 
language for web browsers and the like. However, I believe the prime 
reason for its adoption in the enterprise is precisely its lack of 
handles and pointers which leads, I think directly, to a an increase of 
2-3 times in programmer productivity compared with C++ (See 
Capers-Jones). The improvement happens in large part because writing and 
especially debugging is faster when you are not having to use debuggers 
with breakpoints and variable inspection to discover that the handle you 
thought you had is actually something else. At run time an erroneous 
reference is usually pretty tragic in its consequences and customers 
rapidly lose patience with this sort of thing.

I am familiar with a very large manufacturing plant which in the 80s 
wrote a beautiful messaging product to support distributed process 
control in the plant. Now, they are paying licence fees to IBM for 
MQSeries and a significant reason for that is that they found their 
home-grown application, while perfectly efficient and reliable as it 
stood, was no longer maintainable for minor tweaks to to transfer to new 
platforms - tricky code and lack of documentation to follow the strands 
of spaghetti.
> 2.  IMFO, one of the aspects contributing to the difficulties 
> associated with pointers and handles is the syntactically cryptic 
> method by which they have been implemented in C and other languages. I
Not sure. You might be right. I thought using Variable 
@{handle_to_}Variable @@{pointer_to_}Variable had its own merit as a 
> 3.  For moi personally, the goal is to enable direct system calls from 
> Xtalk.
Can we do this by any other means? You are familiar with CompileIt!. 
There, although we could return handles to the HyperTalk script, we 
normally used them in the compiled code and CompileIt! provided the 
toolbox data structures or handled the translation from HyperTalk 
variables to code variables you could stuff in to the structures. This 
is my preferred approach. Not to make system calls an immediate part of 
xTalk but to provide an add-on, a portal if you like, through which the 
system calls became accessible. We could quote Dante (or was it Milton) 
above in the documentation: "Abandon hope all ye who enter here ( except 
flash programmers)" :-)

> 4.  But pointers & handles were probably part of the code that put 
> mankind on the moon and guided spacecraft out of our solar system.
I am told by a former colleague who worked on such stuff that they also 
used co-operative multi-tasking because it is more compact, efficient 
and faster than pre-emptive scheduling and thus ideal for 
RAM-constrained well-defined systems...... _provided_ that every 
programmer is aware of and allows for other tasks running on the same 
system. Throw co-operative multi-tasking into the real world where 
everyone necessarily writes for themselves and runtime priorities may 
vary and a pre-emptive approach walks all over it. An example that what 
works for a small team and specific task may be quite different from 
what works for a general population.

> 5.  I have worked primarily independently or with one assistant; so I 
> can only project the dynamics of large group programming projects.  I 
> suspect some of the problems you've investigated may stem from there.
I commented in the previous post on productivity of small teams. Each 
programmer is an individual creative entity so on large projects you 
need protection against the fact that creator A neither knows nor 
probably cares enough what creator B is doing. Hence the importance of 
well defined interfaces, hiding of data and methods and so on, and even 
the need to protect against coding errors by someone whose heart is 
currently down the beach rather than in their software product.

> Rob Cozens
> CCW, Serendipity Software Company
> http://www.oenolog.com/who.htm
> "And I, which was two fooles, do so grow three;
> Who are a little wise, the best fooles bee."
> from "The Triple Foole" by John Donne (1572-1631)
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/use-revolution

More information about the use-livecode mailing list