Software design is the process of envisioning and defining software solutions to one or more sets of problems.