A general approach for problem solving and algorithmic design is to divide the problem into smaller problems that are easier to solve, and then implement the solution to each of these subproblems. The final solution consists of an assembly of these smaller solutions. The partitioning of a problem into smaller parts is known as decomposition. These small parts are known as modules, which are much easier to develop and manage.