Designing well means designing something that does the job as simply as possible and is also easily used by its intended users. Good design also means:
Affordability and maintainability usually go together, and both are often related to simplicity and pragmatism. A good design will do as much of the job as it is sensible to do, as simply as possible, for as long as possible.
In the physical world there’s usually a trade off between high quality of materials (and consequently a long life) and cost. Choosing how well to build something is a matter of cash flow, the pattern of expected return on investment, required lifespan and available resources to invest.
For most people who need to go from A to B, this is a better choice…
And something like this…
is easier to maintain than this…
In the abstract world of software design, maintainability also requires that know-how persists in your supplier or your workforce. Bear that in mind. Sometimes all the money in the world won’t buy the knowledge that the original designer had.
Flexibility is a more difficult concept. Good design will enable adaptation as requirements change. But anticipating the future, which flexibility requires, is always tricky.
Suppose you are designing an invoicing system and it must be completely flexible, then you must choose a word processing tool such as Word (not in fact a ‘system’ at all), though this comes at the cost of there being no constraints and controls on what a user might do.
Flexibility is expensive. I am a designer of a software package for Professional Services Management and Expense Management (see systems@work). This software must work for many kinds of companies so I must design it to be flexible. This costs a lot more overall than it would if I were designing just for one organisation, even if I designed a certain level of flexibility for that organisation. But even so, our software will sometimes hit a brick wall of impossible requirements and we can’t always do everything that a client might want. Sometimes, if this is a showstopper, we lose the deal.
Judging just how much flexibility is needed in good design is an art. It comes with experience, but you must take account of this. Not to do so can mean enormous expense when requirements unavoidably change.
Finally, elegance. This is an insubstantial concept, and perhaps, if all other principles are adhered to, elegance simply emerges. The most efficient, pragmatic, simple, maintainable, affordable and flexible design may also turn out to be the most elegant. But, for sure, elegance involves art. It is a matter of aesthetics and it is as difficult to prescribe as it is to write music as well as Mozart did.