Hi Frank,
i had similar experiences, when i saw my first c++ program and
could not figure out, what is going on, when the
software crashed after each small change. oo is no guarantee
for good software at all. refactoring is certainly a key
aspect, as well as determining hot-spots and stable elements.
From the software engineering point of view, i would
recommend to have a look at software product lines
http://www.sei.cmu.edu/productlines/index.html
http://www.awprofessional.com/bookstore/product.asp?isbn=0201703327&redir=1
http://www.awprofessional.com/bookstore/product.asp?isbn=0201674947&redir=1
which adresses the problem where a common software core
is tailored for several customers, where fixes and
improvements should propagate to the tailored versions.
The idea of product lines is taken from automobiles
industry, where more or less the same base-line components
are used in various brand names (e.g. VW, Audi, Skoda, Seat)
best regards
-gustaf