Design patterns
Design patterns are general reusable solutions to common problems in software design. They are not finished designs that can be transformed directly into code, but rather templates for how to solve a generalized problem in a way that can be used in many different situations.