The breaking down of a complete program into a set of component parts, normally called modules. The decomposition is guided by a set of design principles or criteria that the identified modules should reflect. Since the decomposition determines the coarse structure of the program, the activity is also referred to as high-level or architectural design. See also modular programming, program design.