The concept of "
good design" of software is too abstract to be actually realized. For companies that ship software and are legally accountable for it, the idea of "good design" translates to "
reasonable design". Let me explain.
** What good characteristics do you wish to have in your software?
General answers that you'd get are:
- simple
- easy-to-use
- robust
- available
- secure
- solves the problem (inherent property, generally assumed)
- economical
- maintainable
- etc., etc., etc..
Given the real life constraints, like go-to-market pressure, revisions, people change, maintainability, it is very difficult (almost impossible) to maximize all the above mentioned properties in finite time. What needs to be done is to strike a balance between all of them, and come up with an optimal solution. For eg., a banking and financial software should be available and secure to the max, but can be okay to be a bit unfriendly, a software game should be user-friendly, but is okay if it is a bit expensive (it is a luxury), and so on.
This optimal balance is what I call a "
reasonable design" choice, where, the software meets the needs of all its stakeholders (designers, developers, marketing folks, end-users, etc.)
Will try to expand this article as time permits.