After decomposing a problem into smaller subproblems, the next step is either to refine the subproblem or to abstract the subproblem.
1. Each subproblem can be expanded into more detailed steps. Each step can be further expanded to still finer steps, and so on. This is known as refinement
2. We can also abstract the subproblem. We specify each subproblem by its input property and the input – output relation. While solving the main problem, we only need to know the specification of the subproblems. We do not need to know how the subproblems are solved.