According to Christopher Alexander, the great architectures are not made from rigorous, planned designs. But designs are made of pieces custom fit to each-other and to their environment. All involve recurring themes or patterns. Software patterns include dataflow batch processing, pipes and filters, independent component communication processes, Object Oriented systems, Virtual machines interpreters, and blackboards to name a few. Object Oriented technology was introduced to lessen difficulty of software. To better handle this difficultly, patterns provide the terminology beyond objects and tie them together. Software design patterns can be traced back to the influence of three primary sources. The first is the Design Patterns book by Gamma et al., a book that helped people conceptualizes beyond individual design relationships to grasp important structure of micro-architectures, and to value proven solution strategies over raw innovation. The second was the series of pattern conferences (PLoPs) that provided a forum for pattern enthusiasts to support each other in creating a new body of software literature. Lastly was Christopher Alexander, who directly engaged design in his keynote speech at OOPSLA 1996.

Logo from OOPSLA 1996
An example of design pattern is a multi-tier architecture and more specifically three-tier model. Multi-tier architecture is used to describe a degree of separation attained by one or many software agents between discrete components in order to facilitate processing in some manner. An example of this would be the use of middleware to more efficiently service data requests between a user and a database.

Examples of a multitier architecture
In computing, Three-tier is a client-server architecture in which the user interface, functional process logic ("business rules") and data storage and data access are developed and maintained as independent module s, most often on separate platforms. The term "three-tier" or "three-layer", as well as the concept of multitier architectures, seems to have originated within Rational Software or Microsoft.
Apart from the usual advantages of modular software with well defined interfaces, the three-tier architecture is intended to allow any of the three tiers to be upgraded or replaced independently as requirements or technology change. For example, an upgrade of desktop operating system from Microsoft Windows to Unix would only affect the user interface code.

An example of three-tier architecture