That is, divide the overall system into ten or more smaller parts that, we hope, can each be viewed as a coherent subsystem or component.
If we do this properly, we will then have reduced the overall problem by a factor of ten or more. Doing this properly, however, is a challenging task, and it is called design.
A good software design transforms an often ill-defined requirement into a precise and implementable design specification. For any but simplest program, it is nearly impossible to produce a high-quality implementation from a poor-quality design. Design quality has two parts: the quality of the design concept and the quality of the design representation. Although you might view representation as the less important of the two, in many ways it is more important.
Designs that are badly represented will almost always be poorly implemented, almost regardless of the quality of the design concept. A poor representation can also make the deign so hard to understand that you won’t recognize its conceptual problems until you implement it or even later.