Design patterns are patterns which are applied in the design of software and/or infrastructure systems, aiming to optimize the systems' functional (operations and application or infrastructure features and services) and non-functional characteristics (e.g. performance, reliability, redundancy, security). Design patterns can be divided in the following major categories:
- Software design patterns. This category includes devops design patterns. More details can be found in the first ever written book on the subject "Elements of Reusable Object-Oriented Software"
- Infrastructure design patterns. This category includes both on-premise as well as cloud (multi-cloud and hybrid-cloud) design patterns. Examples of cloud design patterns for Microsoft Azure can be found at https://learn.microsoft.com/en-us/azure/architecture/patterns/.
- Machine Learning design patterns. This category includes MLOps design patterns. More details can be found in the excellent book by Sara Robinson "Machine Learning Design Patterns"
One common ML design pattern is the transform-design pattern. The transform-design ML design pattern separates inputs from features, encapsulates the processing steps of ML pipelines and represents steps within an ML pipeline with a Directed Acyclic Graph (DAG). The transform-design pattern does not seek to isolate individual steps of ML pipelines, as this would create entanglement and dependency issues. A discussion on the most common ML design patterns can be found at https://neptune.ai/blog/ml-pipeline-architecture-design-patterns.