From this flows follows another fundamental design constraint - the hierarchical structure of our classes. I believe you must provide some structure which programmers, particularly novice student programmers, can use to learn how to program. If there are too many degrees of freedom, you will find your newer employees can't be productive. So we try to get them quickly into a comfort zone. We believe we provide a well-organized and constrained environment in which they can develop code without having to spend too much time evaluating different approaches to a solution.
All solutions become a class or set of classes at some point.
I think the strict class hierarchy, and the uniform structure of our classes, has served us well thus far. I know you tend to favor an alternate viewpoint on this. As you get more involved in the algorithmic issues at hand, it will be interesting to see how your proposed solutions can be incorporated into the system. When push comes to shove, there are no good solutions that satisfy all things we would like to do simultaneously. I don't believe we should let the system grow in an unbounded manner.