A software designer or architect may identify a design problem which has been solved by others before. A template or pattern describing a solution to a common problem is known as a design pattern. The reuse of such patterns can speed up the software development process, having been tested and proven in the past.
The difficulty of using the term "design" in relation to software is that in some sense, the source code of a program is the design for the program that it produces. To the extent that this is true, "software design" refers to the design of the design. referred to this layering of semantic levels as the "radical novelty" of computer programming , an Donald Knuth used his experience writing TeX to describe the futility of attempting to design a program prior to implementing it