Process of expressing the algorithm steps of a certain task in more details steps as the modular design by splitting a problem into smaller sub-tasks, which themselves are repeatedly split into even smaller sub-tasks until each is just one element of the final program