Decomposition is one of the elementary problem-solving techniques. An algorithm may be broken into parts, expressing only high level details. Then, each part may be refined into smaller parts, expressing finer details or each part may be abstracted as a function.