Contents

Engineering Craft

Design Patterns

Named, reusable solutions to recurring design problems.

Backend Engineer

Junior

Write correct code, ship small changes safely, ask good questions.

Mid-level

Own a feature end to end without hand-holding.

Core: start here

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.

Data Engineer

Junior

Build and fix pipelines from clear specs; write correct SQL.

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.

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.