From what i have read and practiced over time in my career I would agree that the following are what makes good/quality software:
1. Functionality: Software is not good if it does not meet the intent or stated needs. complexity aside, if you are building a software to send/receive messages for instance. it should be able to do so accordingly without hassles. if software does over or under on what it is intended to do, then that software is considered poor software/product.
2. Reliability: Software should be able to provide failure free service. message software should be reliable as such that it can send and receive messages as it is designed. that it should be something you can count on for its functionality anytime any day. I build software while visualizing it as a living thing in mind that can perform or execute its functions diligently without fault. so I take reliability feature of my software very important. just to digress a bit, facebook lovers so believe or count on facebook platform that it provides avenue to socialize any time any day as such they visit the platform hoping it will not fail them or deviate from that intended purpose.
3.Usability: This is user experience part. A good software should be understood at glance probably without manual. it should be a self explanatory designed that it can be learned and used in no time. this is where consistency comes in… you should designed a software to follow convention over personal configuration. for instance it is a usual norms to see menu sidebar at the left and user profile at upper right top for every admin web platform. just imagine, this was put at the bottom of the page.
4. Efficiency: This is performance part of software. as functional as the software could be, if scaling or performance tend to be problem, then the software may consider not good. while software does what is intended to do, it should also be smart about it… by considering scaling and speed.
5. Maintainability: In software principle after testing, maintenance is the next and also is the last. like they say, the last shall be the first. if software is designed, well tested, packaged and deployed to user environment… I bet with you if not maintained afterwards, it may consider useless, abandoned over time. Just it is said, love comes after marriage not before… so its software usages, real bugs, real functionality comes after deployment… this is where maintenance comes, more reason a good software should be designed to be adaptable to correctness and improvement in mind.
6. Portability: A good software should be portable so much so that it can be plugged into another software without issues. Laravel framework was built on symfony framwork, Spring was built by collection of few JSRs etc. a good software should be built in such way that another software can be built on it… also if is well built, it can also be adopted into another environment without problem.
In my opinion, while building software, one should consider the above listings.