A curated catalog of software design patterns.

Clean, reusable, and interactive solutions to commonly occurring architectural problems.

Agentic AI

Reason and Act (ReAct)

Integrates reasoning (thought generation) and execution (action execution) in an alternating loop.

Agentic AI

Reflection (Self-Correction)

Evaluates intermediate agent outputs and refines them recursively before delivering final results.

Data Science

Lambda Architecture

Combines batch and real-time streaming processing to handle massive datasets with low latency.

Data Science

Data Lakehouse

Unifies the cost-effective storage of data lakes with the ACID transactions and governance of data warehouses.

Language Models

Retrieval-Augmented Generation (RAG)

Enhances LLM responses by retrieving relevant information from external databases before generating text.

Language Models

LLM Router

Dynamically routes user queries to different specialized LLMs or static handlers based on complexity, intent, and cost.

Machine Learning

ML Pipeline

Automates the workflow of data ingestion, preprocessing, model training, evaluation, and deployment.

Machine Learning

Feature Store

Centralizes the ingestion, storage, curation, and serving of features for training and real-time inference.

Software Design

Model-View-Controller (MVC)

Divides an application into three interconnected components to separate internal representations of information from the ways information is presented to and accepted from the user.

Software Design

Model-View-ViewModel (MVVM)

Facilitates a separation of development of the graphical user interface from development of the business logic or back-end logic.

Software Design

Microservices

Structures an application as a collection of loosely coupled, independently deployable services.

Software Design

Clean Architecture

Promotes separation of concerns by dividing the software into concentric layers with a strict dependency rule pointing inwards.

Software Design

Domain-Driven Design (DDD)

Focuses on mapping software design to business requirements and modeling the business domain concepts.

Software Design

Onion Architecture

Places the Domain Model at the center and builds layers around it, controlling dependencies strictly from the outside in.

Software Design

Chain of Responsibility

Lets you pass requests along a chain of handlers. Upon receiving a request, each handler decides either to process the request or to pass it to the next handler in the chain.

Software Design

Command

Turns a request into a stand-alone object that contains all information about the request.

Software Design

Iterator

Lets you traverse elements of a collection without exposing its underlying representation.

Software Design

Mediator

Lets you reduce chaotic dependencies between objects. The pattern restricts direct communications between the objects and forces them to collaborate only via a mediator object.

Software Design

Memento

Lets you save and restore the previous state of an object without revealing the details of its implementation.

Software Design

Observer

Lets you define a subscription mechanism to notify multiple objects about any events that happen to the object they're observing.

Software Design

State

Lets an object alter its behavior when its internal state changes. It appears as if the object changed its class.

Software Design

Strategy

Lets you define a family of algorithms, put each of them into a separate class, and make their objects interchangeable.

Software Design

Template Method

Defines the skeleton of an algorithm in the superclass but lets subclasses override specific steps of the algorithm without changing its structure.

Software Design

Visitor

Lets you separate algorithms from the objects on which they operate.

Software Design

Singleton

Ensures a class has only one instance and provides a global point of access to it.

Software Design

Factory Method

Provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created.

Software Design

Abstract Factory

Lets you produce families of related objects without specifying their concrete classes.

Software Design

Builder

Lets you construct complex objects step-by-step.

Software Design

Prototype

Lets you copy existing objects without making your code dependent on their classes.

Software Design

Adapter

Allows objects with incompatible interfaces to collaborate.

Software Design

Bridge

Splits a large class or a set of closely related classes into two separate hierarchies—abstraction and implementation—which can be developed independently of each other.

Software Design

Composite

Lets you compose objects into tree structures and then work with these structures as if they were individual objects.

Software Design

Decorator

Lets you attach new behaviors to objects by placing these objects inside special wrapper objects that contain the behaviors.

Software Design

Facade

Provides a simplified interface to a library, a framework, or any other complex set of classes.

Software Design

Flyweight

Lets you fit more objects into the available amount of RAM by sharing common parts of state between multiple objects instead of keeping all of the data in each object.

Software Design

Proxy

Lets you provide a substitute or placeholder for another object. A proxy controls access to the original object, allowing you to perform something either before or after the request reaches the original object.