b r a y d e n . o r g / Software

/ WebHome / ProcessPages / NotInventedHere

This Web


WebHome  
Topic List  
Web Statistics 

All Webs


Books
Main
Random
Software
TWiki  

brayden.org


Home
Monthly Digest
Today's Links
Resumé
Reading List
Books RSS
Random RSS
Software RSS

Other


Joanne's Blog
Dale's Blog

Bloglines
currently-reading
Jetable email
TextDrive
Progressive Magazine
out campaign

Not Invented Here (NIH) Syndrome

For years I've heard (and made) disparaging comments about people who would rather write something from scratch rather than re-use code that has already been written. Reusing previous work really sounds like a good thing : why re-invent something if you don't need to?

But time and again when I've followed this advice I've wound up reusing crappy software that probably shouldn't have been used in the first place. It is astonishing to me how poorly most software is partitioned and packaged. To 'reuse' most software you need to first rip it apart and remove all the application-specific crud that permeates the software. By the time you've done that you're usually left with 2 or 3 miserable little functions whose source code probably ought to be put on a TWiki page somewhere for future reference.

Or, if the software really was written in a way suitable for reuse it often depends on external libraries that are either huge, slow, expensive, non-portable, or all of the above. By the time you get past these hurdles you've spent a lot of time, with a result that is usually not as good as you would get if you simply implemented the desired functionality 'from scratch'.

No - I'm not saying I want to write my own compiler every time I start a project. There are good basic software tools generally available. There are even some decent libraries. I'm talking about the extra, usually problem-domain-specific software that most organizations build over time. The problem I see is that such software is seldom written with reusability in mind; or if the developer does have reusability in mind, he often has not a clue about what makes software reusable or not. Or if he does have a clue, his manager will provide no support whatever for taking the extra steps needed to truly modularize the software so as to improve its reusability.

Even in the domain of general-purpose tools you need to pretty careful. For example, if you select a commercial class library or a CORBA ORB, that selection will force you to code in a way that makes the selection very hard to undo. From long bitter experience I've concluded that you should never use a commercial toolkit and never use any toolkit that does not come with source code. If you don't have the source then you're dependent on someone else to fix the bugs that must be fixed before your software will work reliably. That is an impossible situation to be in. The commercial vendors of software will almost never fix bugs in an existing release without also introducing incompatible 'enhancements' that force you to modify (and therefore re-test and re-validate) large parts of your code.

So I guess in the end I would suggest the following:

  1. Really look at the source code for anything you might reuse
  2. Writing code from scratch is not the worst choice you can make
  3. You are responsible for the software you deliver, so you better have, and understand, all the source code that is needed to support that software

-- DaleBrayden - 23 Jul 2002

 
 
Current Rev: r1.1 - 03 Dec 2005 - 15:57 GMT - DaleBrayden, Revision History:Diffs | r1.1
© 2003-2006 by the contributing authors.