What Makes Software Good?
Is good software that which fills a purpose with a minimum of fuss? Is it the elegant algorithm that solves a difficult problem or simplifies a complex process? Is it the stunningly beautiful user interface that gives us pause? What about the embodiment of the pure intent of its creator(s)?
I would argue that for software to be "good" it must both meet the practical objectives for which it was created, as well as the aesthetic aspirations of its creators and users. If software is a bridge between our current and desired realities, it should be both a sound and beautiful one.
To create good software then, the builders must understand three things: 1) their craft, 2) their intended audience's needs, and 3) the pre-existing set of software modes and metaphors that end users will understand and appreciate.
For example, when building a web-based application today a developer needs to create HTML, CSS, JavaScript on the front-end; C# or Java or PHP (etc.) to encapsulate process logic in the middle-tier; and relational or object database technology on the back-end. These are all skills that can be learned in a variety of ways – they are necessary but not sufficient – they must be combined with a clear understanding of the purpose at hand; I.e. what the end-user wishes the software to accomplish for them. But even this is not sufficient! The craft and understanding will not allow the developer to create good software unless the mode (e.g. desktop, mobile, web) and metaphors for end-user interaction (e.g. spreadsheet, graphical, social activity stream, first-person-shooter, etc.) tie together the requirements and the end-users' previous experience in a pleasing way.
Good software, then, is that which brings together mastery of craft, full understanding of the problem domain, and a deep empathy with those who will experience it.
Well put, Mark.