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:
- Really look at the source code for anything you might reuse
- Writing code from scratch is not the worst choice you can make
- 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