To me, great software is beautiful software.
Obviously, the primary concern is that the software works properly, that it does what it is supposed to. But if that is all, the software will never be great.
Here are my conditions that great software must meet, from most important to least important. But they all matter!
-
The user experience. Does the software let the user reach their goals quickly and efficiently? User satisfaction rather than ease of use. Great software is not necessarily simple, but it does get out of the way.
-
How it looks. The visual kind of beauty. Software that has a great graphical design. We all like something pretty to look at. Then again, the visual design should not draw all the attention to itself and take away from the usability of the app.
-
How well it runs. Does the program efficiently use resources such as memory, network and CPU speed? Too obvious to mention: it should not crash.
-
The architecture. How the code is divided up into modules and how these modules communicate. This includes the design of the data model: does its structure suit the problem domain or is it just a steaming heap of bits?
-
The algorithms that are used inside of the modules. Are they elegant solutions or quick hacks?
-
The formatting of the source code. Source that looks ugly is hard to read and understand, and as a result has bugs. Software needs to have aesthetic appeal, all the way down to this level.
These last three criteria are under the hood; end users are never confronted with the algorithms or source code. Do they still matter? Yes! You don't put a shitty engine in a Ferrari. Only with great programming and design can the end product be truly great.