Design is choice. Most often, the struggle is not that
there is no way to solve a design problem, but that there are too many ways that
apparently solve the problem. You must know which collection of solutions solves
the problem in a satisfactory manner. The need to choose propagates from the
largest architectural levels down to the smallest unit of code. Furthermore,
choices can be combined, which confers on design an evil
multiplicity.