I recently stumbled upon this description by Uncle Bob Martin of "poorly designed software" (from the book Agile Software Development, Principles, Patterns, and Practices), that describes a poorly designed software as a software:
I was wondering based on this "poorly design" definition how a "well designed piece of software" definition would look like, starting from the poor design symptoms and working backward. I thought of something like:
Some of these characteristics of well designed software are somehow overlapping each other, others are apparently contradicting each other and hence difficult to satisfy both at the same time (eg. easy to change and hard to break at the same time).
No doubt that is incredibly hard (or even impossible) to get all of this right, requiring to think both from an aesthetic and from a functional perspective.. but exactly because it is hard, refining the design of the code in this direction is an interesting challenge!
My final consideration is that if I have to work only in one direction, touching simultaneously most of the points listed above, the direction is undoubtedly "Simplicity". Which, as Leonardo da Vinci once said, is nothing else than the ultimate sophistication.