Hola toni, me parece una reflexión acertada como las que haces habitualmente. El diseño del software (y más ampliamente toda la organización en torno a los grandes desarrollos de software donde intervienen decenas, cientos o miles de programadores en un proyecto, lo que se llama ingeniería del software) es algo todavía muy discutido, aunque hay un cierto grado de consenso sobre que es muy importante la ampliabilidad y la mantenibilidad. En un proyecto con miles de líneas de código en general se prefiere generar unas cuantas líneas más (aunque no sea óptimo) para hacer el código más legible y comprensible, porque a la larga esto tiene una repercusión positiva en el mantenimiento y ampliación. Creo que lo que indicas de compactación de clases y atributos tiene un valor positivo, pero todo hay que verlo en un contexto más amplio donde hay que poner en la balanza ventajas e inconvenientes y dado que no hay soluciones óptimas, elegir la que aporte más ventajas. La compactación es un buen valor para un programador, pero siempre que no vaya en contra de la claridad, la mantenibilidad, la ampliabilidad, etc. Creo que más o menos he dicho lo mismo que tú decías.
Saludos