Software design is the process in which a software designer develops specifications for software artifacts intended to achieve specific goals utilizing collections of components.