The issue of quality is key to the success of any software product; and there are essentially two main aspects of quality that can be looked at. The first is external quality, which is the quality that is perceived by the users of the product and is also something everyone can appreciate.
The second, internal quality, is a lot more difficult to get right, however it is arguably as important if not more so than external quality.
The internal quality relates to the quality of the source code, architecture, development processes, etc. which is not seen by the end users of the product, below is a list of what qualities this may include (with quotes!):
Flexibility
“…if you’re afraid to change something it is clearly poorly designed.” – Martin Fowler
Portability – reuse code on different environments and computers
“If a program is properly written, portability comes automatically” – University Professor
Re-usability – easy to extend, high cohesion, low coupling
“… with proper design, the features come cheaply. This approach is arduous, but continues to succeed.” – Dennis Ritchie
Readability – easy to read, clean code
“Programs must be written for people to read, and only incidentally for machines to execute.” – Abelson and Sussman
Testability – unit tests, component tests, acceptance tests
“The principle objective of software testing is to give confidence in the software.” – P D Coward
Understandability – e.g. documented code
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” – Martin Fowler, Refactoring: Improving the Design of Existing Code
Simplicity
“Remember that there is no code faster than no code.” – Taligent’s Guide to Designing Programs
“Everything should be made as simple as possible, but no simpler.” – Albert Einstein
Maintainability
“Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.” – Rick Osborne
The external quality covers aspects such as: correctness, usability, efficiency, reliability (potential likelihood of application failures), integrity, adaptability, accuracy and robustness.
These are all very valuable qualities any software product should try and adhere to, but when it comes to adapting to changes in the software, a good code base with great internal qualities can save a huge amount of resources and time in the long term of a project.
Nicholas
What does all this mean for Aussie nutters?
Yours on a Friday night
Andrew
Nick, would you say you operate on a Utilitarian basis or do you have some other source of ethical guidance? I always think a Kantian approach to coding is best – make sure you can universalise your principles,…. Know what I mean 🙂 xxxw