Reusable solutions to commonly occurring problems in software architecture that provide templates for designing system structure, component interactions, and overall organization of applications. It is used across a range of industries and technical contexts to improve efficiency and outcomes.