It is a process of problem solving and planning for a software solution. After the purpose and specifications of software are determined, software will design or employ designers to develop a plan for a solution. It includes low-level component and algorithm implementation issues as well as the architectural view.