First described by Christopher Alexander in Pattern Language: Towns, Buildings, Construction. In 1994, Erich Gamma, John Visslides, Ralph Johnson, and Richard Helm got the idea from Christopher to apply the patterns in programming. They published a book "Design Patterns: Elements of Reusable Object-Oriented Software" which had 23 features.