If you were posed this question, the most probable answer would depend on the receiver of the question.
- “What do you mean by good?” – a process person
- “What do you mean by design” – a designer
- “Depends” – a management person
A compelling attribute of a good design is perhaps simplicity. In that context I feel that we have reached the elusive utopia with regards to a ball pen. Consider a throw-way ball pen. A cap, the actual pen and the shell – can it be simpler than that? Yes, perhaps we can remove the cap. May be not – the ink may dry up and carrying it becomes a problem.
Consider a reusable ball pen. Reynolds is a sterling example of a good design. A cap, the actual pen, the screw-able top and bottom – in all 4 pieces, can it be simpler? Yes if we move the realm of reuse to the onetime. It becomes three. A pencil by contrast one piece and I am sure that would be proposed as a contender. However, to use it we would need a sharpener and that adds to the count.
Ease of use is another attribute of a good design. The example that comes to my mind is an egg timer – more complicated inside but extremely simple to use. Turn it right to indicate 3 minutes and after that wait for the bell to ring. A mobile phone as an egg timer is perhaps more difficult to use. My mobile users would probably like to meet me in a dark alley for saying that, but I will take that chance! In this respect I am yet to find an easy to use umbrella. They are compact but not easy to use. My niece actually hurt herself trying to close one – resulting in some surgical stitches.
Anything multipurpose by definition cannot be an example of good design. This is due to the impossible task of combining many goals into one. If you do succeed, then the result is complicated and I suspect would suffer from some aberration as well. Many users of the Swiss army knife would oppose my statement. The knife is an excellent work of engineering but actually trying to mix a knife, toothpick and a compass…?
Coming to software design – we have read tomes of good software design, perused through pages of advice on good programming styles and countless code beautifiers, yet we are still struggling to manage requirements. Why are some problems hard, I wonder?