Design Patterns
Named, reusable solutions to recurring design problems.
Backend Engineer
Junior
Write correct code, ship small changes safely, ask good questions.
- Cargo Cult ProgrammingCopying code or rituals without understanding why they work.
- Spaghetti CodeTangled control flow that's impossible to follow.
- MiddlewareA pipeline of functions wrapped around request handling.
Mid-level
Own a feature end to end without hand-holding.
Core: start here
- Dependency InjectionPassing dependencies in instead of creating them inside.
25 more mid-level concepts
- Active RecordObjects that know how to save themselves to the database.
- AdapterWrapping an interface to make it match another.
- Design PatternA named, reusable solution to a recurring design problem.
- Finite State MachineA model with a fixed set of states and allowed transitions, e.g. an order going from paid to shipped.
- Inversion of ControlA framework calls your code rather than your code calling it.
- Iterator PatternTraversing a collection without exposing its internals.
- Null ObjectA do-nothing object used instead of null checks.
- Template MethodA base algorithm whose steps subclasses fill in.
- Anti-PatternA common solution that looks right but causes problems.
- BuilderConstructing complex objects step by step.
- Chain of ResponsibilityPassing a request along handlers until one deals with it; how middleware works.
- CommandTurning a request into an object you can queue, log or undo.
- CompositeTreating individual objects and groups of them uniformly, as a tree.
- DecoratorAdding behavior to an object by wrapping it.
- FacadeA simple interface over a complex subsystem.
- Factory MethodLetting subclasses or functions decide which class to instantiate.
- Gang of FourThe 1994 book that catalogued 23 classic patterns.
- ObserverNotifying subscribers when something changes.
- ProxyA stand-in that controls access to another object.
- Repository PatternA collection-like interface over data storage.
- SingletonEnsuring a class has exactly one instance; often an anti-pattern.
- StateChanging an object's behavior when its internal state changes.
- StrategySwapping algorithms behind a common interface.
- Transaction ScriptOrganizing business logic as one procedure per request.
- Publish-SubscribeSenders publish to topics; receivers subscribe without knowing each other.
Senior
Own a system, its failure modes, and its trade-offs.
- Domain ModelOrganizing business logic as objects that hold both data and behavior.
- BridgeSeparating an abstraction from its implementation so both can vary.
- Data MapperA separate layer moving data between objects and the database.
- FlyweightSharing common state among many small objects to save memory.
- MediatorCentralizing communication between objects.
- Service LocatorA registry for looking up dependencies, often seen as an anti-pattern.
- Abstract FactoryCreating families of related objects without naming concrete classes.
- Identity MapEnsuring each database row is loaded into only one object per session.
- MementoCapturing state so it can be restored later, as in undo.
- Patterns of Enterprise Application ArchitectureFowler's catalog: transaction script, domain model, data mapper and more.
- PrototypeCreating objects by cloning an existing one.
- VisitorAdding operations to a structure without changing its classes.
- Type ObjectDefining "kinds" of things as data instead of subclasses.
- Unit of WorkTracking changes and committing them in one transaction.
Principal
Set technical direction for the organization.
- Blackboard PatternIndependent components cooperating through a shared knowledge store.
Data Engineer
Junior
Build and fix pipelines from clear specs; write correct SQL.
- Cargo Cult ProgrammingCopying code or rituals without understanding why they work.
- Spaghetti CodeTangled control flow that's impossible to follow.
Mid-level
Own pipelines and models end to end, including their quality.
- Dependency InjectionPassing dependencies in instead of creating them inside.
- Design PatternA named, reusable solution to a recurring design problem.
- Finite State MachineA model with a fixed set of states and allowed transitions, e.g. an order going from paid to shipped.
- Anti-PatternA common solution that looks right but causes problems.
- Factory MethodLetting subclasses or functions decide which class to instantiate.
- SingletonEnsuring a class has exactly one instance; often an anti-pattern.
- StrategySwapping algorithms behind a common interface.
Frontend Engineer
Junior
Build UI that works, ship small changes safely, ask good questions.
- Cargo Cult ProgrammingCopying code or rituals without understanding why they work.
- Spaghetti CodeTangled control flow that's impossible to follow.
Mid-level
Own a feature end to end without hand-holding.
- MiddlewareA pipeline of functions wrapped around request handling.
- AdapterWrapping an interface to make it match another.
- Dependency InjectionPassing dependencies in instead of creating them inside.
- Design PatternA named, reusable solution to a recurring design problem.
- Finite State MachineA model with a fixed set of states and allowed transitions, e.g. an order going from paid to shipped.
- Inversion of ControlA framework calls your code rather than your code calling it.
- Iterator PatternTraversing a collection without exposing its internals.
- Null ObjectA do-nothing object used instead of null checks.
- Template MethodA base algorithm whose steps subclasses fill in.
- Anti-PatternA common solution that looks right but causes problems.
- BuilderConstructing complex objects step by step.
- Chain of ResponsibilityPassing a request along handlers until one deals with it; how middleware works.
- CommandTurning a request into an object you can queue, log or undo.
- CompositeTreating individual objects and groups of them uniformly, as a tree.
- DecoratorAdding behavior to an object by wrapping it.
- FacadeA simple interface over a complex subsystem.
- Factory MethodLetting subclasses or functions decide which class to instantiate.
- Gang of FourThe 1994 book that catalogued 23 classic patterns.
- ObserverNotifying subscribers when something changes.
- ProxyA stand-in that controls access to another object.
- SingletonEnsuring a class has exactly one instance; often an anti-pattern.
- StateChanging an object's behavior when its internal state changes.
- StrategySwapping algorithms behind a common interface.
- Publish-SubscribeSenders publish to topics; receivers subscribe without knowing each other.
Senior
Own an app's architecture, performance, and failure modes.
- BridgeSeparating an abstraction from its implementation so both can vary.
- FlyweightSharing common state among many small objects to save memory.
- MediatorCentralizing communication between objects.
- Service LocatorA registry for looking up dependencies, often seen as an anti-pattern.
- Abstract FactoryCreating families of related objects without naming concrete classes.
- MementoCapturing state so it can be restored later, as in undo.
- PrototypeCreating objects by cloning an existing one.
- VisitorAdding operations to a structure without changing its classes.
- Type ObjectDefining "kinds" of things as data instead of subclasses.