Stackbook Logo

Pattern Library

Curated architecture patterns with honest trade-offs. Every entry includes when not to use it, failure modes, and cost profile.

Filters

decision-makingestablished · low burden

Architecture Decision Record (ADR)

Capture a significant architectural decision with its context, alternatives considered, and consequences — creating a searchable, reviewable decision history.

Any decision expensive to reverse (data model, protocol, cloud provider, framework)Decisions affecting multiple teams or servicesWhen you'd want to explain 'why' to a new hire in 6 monthsTactical coding decisions (variable names, library versions)Decisions already captured in RFCs or design docs
architecture-descriptionestablished · low burden

API Design Principles

Foundational principles for designing consistent, evolvable, developer-friendly APIs — beyond syntax to architecture.

Any team building APIsMultiple teams, multiple consumersPublic or partner APIsInternal RPC (gRPC better)Throwaway prototypes
architecture-descriptionestablished · low burden

API Design (RESTful)

Design consistent, evolvable, developer-friendly REST APIs using standard conventions.

Any team building REST APIsPublic or partner APIsMultiple consumers (web, mobile, third-party)Internal RPC (gRPC better)GraphQL APIs (different paradigm)
security-complianceestablished · medium burden

API Gateway Authentication Patterns

Centralize authentication at the API Gateway: JWT validation, API keys, OAuth2 introspection, mTLS — patterns for security and performance.

architecture-descriptionestablished · medium burden

API Gateway Patterns

Common patterns for API Gateway usage: BFF, aggregation, protocol translation, security enforcement.

Multiple client types with different needsCross-cutting concerns centralizedProtocol translation requiredSingle client, simple servicesTeam not ready for gateway ownership
architecture-descriptionestablished · medium burden

API Gateway

Single entry point for clients that handles cross-cutting concerns: routing, auth, rate limiting, observability, protocol translation.

Multiple services exposed to external clientsNeed centralized auth, rate limiting, observabilityProtocol translation requiredSingle service (no routing needed)Internal service-to-service (use service mesh)
architecture-descriptionestablished · medium burden

API Versioning

Evolve APIs without breaking existing clients, using explicit versioning strategy.

Public APIs with external consumersMultiple client teams (mobile, web, partners)Long-lived APIs with evolving requirementsInternal APIs with coordinated deploysSingle consumer (version in sync)
decision-makingestablished · low burden

Architecture Decision Records (ADR)

Capture significant architectural decisions with context, alternatives, and consequences — creating searchable, reviewable decision history.

Any team making architectural decisionsTeam growing beyond tribal knowledgeRegulatory/audit requirementsSolo developer (personal notes sufficient)Team with perfect memory and zero turnover
decision-makingestablished · medium burden

Architecture Review Process

Structured architecture review: lightweight, scalable, decision-focused — preventing rubber-stamp approvals and ensuring trade-offs are explicit.

Team > 5 engineersCross-team dependencies increasingArchitecture decisions causing incidentsSmall team (<5), low complexityPre-product (velocity > process)
distribution-communicationestablished · high burden

Async Communication Patterns

Choose the right async communication pattern: fire-and-forget, request-reply, pub/sub, streaming — trade-offs for coupling, latency, and reliability.

Decouple services (deploy independently)Variable workloads (burst absorption)Multiple consumers for same eventSimple request-response (sync HTTP fine)Strong consistency required (distributed tx)
architecture-descriptionestablished · low burden

AWS Step Functions (Serverless Workflows)

Orchestrate serverless workflows as state machines with built-in retries, error handling, parallel execution, and visual debugging — no servers to manage.

Serverless orchestration (Lambda, ECS, API calls)Long-running processes with retries, human approvalVisual debugging and audit trail requiredComplex logic better in code (Temporal better)Sub-second latency (Express: 5min max)
resilienceestablished · low burden

Backpressure

Signal upstream to slow down when downstream cannot keep up, preventing buffer overflow and cascade failure.

Streaming data: logs, metrics, events, file uploadsAsync pipelines with variable throughputReactive systems (Project Reactor, RxJava, Akka Streams)Request-response (synchronous, natural backpressure)Low throughput where buffering is fine
deploymentestablished · medium burden

Blue-Green Deployment

Run two identical environments (blue, green). Switch traffic atomically for zero-downtime deployments with instant rollback.

Zero-downtime requirementInstant rollback criticalInfrastructure supports duplicate envs (K8s namespaces, ASGs)Stateful services without session handlingBreaking schema changes (need expand/contract)
resilienceestablished · medium burden

Bulkhead

Isolate critical resources (threads, connections, memory) so failure in one component doesn't starve others.

Caller has multiple downstreams with different SLAsCritical path must stay responsive during non-critical downstream issuesPrevent noisy neighbor problem in shared infrastructureSingle downstream (circuit breaker sufficient)Very low throughput where isolation overhead exceeds benefit
architecture-descriptionestablished · low burden

C4 Model

A hierarchical notation for describing software architecture at four levels of abstraction, optimising for different audiences and decision contexts.

Any architecture documentation that needs to be maintainedDesign reviews where stakeholders have varied technical depthOnboarding new team members to system structureThrowaway prototypes or spike investigationsInfrastructure-only diagrams (use cloud provider notation)
scalingestablished · low burden

Caching

Store frequently accessed computed or fetched data in fast storage to reduce latency and downstream load.

Hot data: config, reference data, computed aggregatesExpensive computations: recommendations, ML inferenceDownstream protection: reduce DB/third-party loadWrite-heavy, low-read dataStrong consistency required (financial balances)
deploymentestablished · medium burden

Canary Deployment

Gradually shift traffic to new version, monitoring for regressions before full rollout.

Continuous deployment pipelineRisky changes: schema, algorithm, third-party upgradeUser-facing services with measurable metricsInfrastructure changes (no traffic to split)Single-instance services (no parallel versions)
economics-evolutionestablished · medium burden

Capacity Planning

Predict resource needs (CPU, memory, storage, network) for future load, enabling proactive scaling and cost optimization.

Growing systems (user base, data, features)Cost optimization initiativesPreparing for known events (Black Friday, launch)Stable, predictable workloadsServerless (capacity managed by provider)
data-consistencyestablished · high burden

Change Data Capture (CDC)

Capture database changes (insert/update/delete) in real-time and stream them to downstream systems.

Real-time analytics, search indexing, cache invalidationEvent sourcing / CQRS projection updatesAudit logging, complianceLow change volume (polling simpler)Database doesn't support logical replication
architecture-descriptionemerging · high burden

Cell-Based Architecture Patterns

Partition system into independent cells (tenants, regions, shards) so failure in one cell doesn't affect others, enabling safe deployments and blast radius control.

High availability requirements (99.99%+)Regulatory data residencyLarge-scale SaaS (1000+ tenants)Small systems (<10 cells)Strong cross-tenant consistency needed
architecture-descriptionemerging · high burden

Cell-Based Architecture

Partition system into independent cells (tenants, regions, shards) so failure in one cell doesn't affect others.

High availability requirements (99.99%+)Regulatory data residencyLarge-scale SaaS (1000+ tenants)Small systems (<10 cells)Strong cross-tenant consistency needed
reliability-opsemerging · high burden

Chaos Engineering

Proactively inject failures to discover weaknesses before they cause outages, building confidence in system resilience.

High availability targets (99.99%+)Post-incident: prevent recurrenceBefore major launches or migrationsNo observability (blind injection)No rollback/autostop mechanism
resilienceestablished · low burden

Circuit Breaker

Prevent cascading failures by stopping requests to a failing service, giving it time to recover.

Any synchronous remote call (HTTP, gRPC, DB)Downstream services with variable latency or reliabilityWhen caller must remain responsive during downstream outageLocal in-process calls (no network failure mode)Fire-and-forget async operations
scalingestablished · low burden

Consistent Hashing

Distribute keys across nodes with minimal reshuffling when nodes join/leave, using a hash ring with virtual nodes.

Dynamic node membership (add/remove nodes)Distributed cache or shardingMinimal reshuffle on scalingStatic cluster (simple hash % N fine)Small N (<5) where distribution skew matters
architecture-descriptionestablished · medium burden

Consumer-Driven Contracts (CDC)

Ensure provider changes don't break consumers by making consumers define their expectations as executable contracts.

Microservices with independent deploymentsMultiple consumers per providerBreaking changes cause production incidentsMonolith or few services with coordinated deploysPublic APIs with unknown consumers
economics-evolutionemerging · high burden

Cloud Cost Optimization

Continuously reduce cloud spend while maintaining performance and reliability, using unit economics and architectural choices.

Cloud spend > $10k/monthFinance asking for cost accountabilityArchitectural decisions need cost inputPre-revenue (optimize for velocity)Tiny spend (<$1k/month)
architecture-descriptionestablished · high burden

CQRS (Command Query Responsibility Segregation) Patterns

Separate read and write models to optimize each: writes for consistency, reads for query performance and flexibility.

Read/write patterns differ significantlyComplex queries on normalized dataDifferent scaling needs (read replicas vs write primary)Simple CRUD with straightforward queriesStrong consistency required between read/write
architecture-descriptionestablished · high burden

CQRS (Command Query Responsibility Segregation)

Separate read and write models to optimize each for its specific concerns: writes for consistency, reads for query performance.

Read/write patterns differ significantlyComplex queries on normalized dataDifferent scaling needs (read replicas vs write primary)Simple CRUD with straightforward queriesStrong consistency required between read/write
data-stateestablished · medium burden

Data Modeling Patterns

Design scalable, maintainable data models: normalization, denormalization, entity relationships, temporal data, polymorphic associations.

Any system with relational dataSchema evolution without downtimeQuery performance optimizationDocument/NoSQL primary (different patterns)Team not ready for modeling discipline
data-stateestablished · medium burden

Database Indexing Strategy

Design indexes that accelerate queries without killing write performance, using covering indexes, partial indexes, and query-driven design.

Any production database with query performance needsWrite-heavy tables (index carefully)Query patterns changingTiny tables (seq scan faster)Append-only logs (few queries)
data-consistencyestablished · high burden

Database Migration (Expand/Contract)

Evolve database schema without downtime or locking, using backward-compatible multi-phase migrations.

Any schema change on tables with >1M rowsZero-downtime deployments requiredBlue-green or canary deploymentsSmall tables, maintenance window acceptableBreaking changes that can't be phased (rare)
resilienceestablished · medium burden

Dead Letter Queue (DLQ)

Capture messages that fail processing repeatedly for later inspection and replay, preventing pipeline blockage.

Any async message processing systemMessage failures are expected (bad data, transient bugs)Need visibility into failure patternsSynchronous request-response (no queue)Fire-and-forget where loss is acceptable
deploymentestablished · high burden

Deployment Strategies

Choose and implement safe deployment strategies: rolling, blue-green, canary, feature flags — with automated rollback and observability.

Any production deploymentZero-downtime requirementsRisk mitigation for changesDev/test environments (rolling fine)Single-instance services (no HA)
reliability-opsestablished · high burden

Disaster Recovery (DR)

Define and practice recovery from catastrophic failures: region loss, data corruption, ransomware, ensuring RTO/RPO targets are met.

Any production system with availability requirementsRegulatory: DR mandated (finance, healthcare, gov)Customer contracts specify RTO/RPODev/test environmentsSystems where data loss/downtime acceptable
coordinationestablished · low burden

Distributed Lock

Coordinate access to shared resource across distributed processes, ensuring mutual exclusion with fault tolerance.

Singleton task across multiple instancesLeader election for HA servicesCoordination without message brokerHigh-contention hot paths (use partitioning)Long-held locks (minutes+) — prefer leases
observabilityestablished · medium burden

Distributed Tracing

Track request flow across service boundaries to understand latency, errors, and dependencies.

Any distributed system (>3 services)Latency debugging across service boundariesError root cause analysisMonolith or 2-service system (logs sufficient)Ultra-high throughput where sampling loses signal
data-consistencyestablished · high burden

Distributed Transactions Patterns

Coordinate atomic operations across services without distributed locks: 2PC, Saga, Outbox, Eventual Consistency — trade-offs and implementation.

Microservices needing cross-service atomicityLong-running business processesEvent-driven architecturesSimple CRUD (single service)Strong consistency required everywhere (monolith)
architecture-descriptionestablished · high burden

Event-Driven Architecture (EDA)

Decouple services through asynchronous event communication, enabling independent scaling, deployment, and evolution.

Microservices needing loose couplingAudit trail, replay, temporal queriesPolyglot services (different languages)Simple request-response (REST/gRPC fine)Strong consistency required (distributed transactions)
data-consistencyestablished · high burden

Event Sourcing Patterns

Persist state changes as immutable event log, enabling audit trail, temporal queries, replay, and multiple read models.

Audit/regulatory requirements (financial, healthcare, gov)Complex domain with rich business eventsNeed temporal queries (state at date X)Simple CRUD with no audit needsHigh-throughput, low-latency writes (event store adds overhead)
data-consistencyestablished · high burden

Event Sourcing

Persist state changes as an immutable sequence of events, enabling complete audit trail, temporal queries, and rebuild of state.

Audit/regulatory requirements (financial, healthcare, gov)Complex domain with rich business eventsNeed temporal queries (state at date X)Simple CRUD with no audit needsHigh-throughput, low-latency writes (event store adds overhead)
deploymentestablished · medium burden

Feature Flag Best Practices

Operational patterns for feature flags: naming, lifecycle, cleanup, testing, avoiding flag debt.

Continuous deployment with feature flagsTeam has >20 flagsFlag debt causing bugsNo feature flags (simple deploys)Team not ready for hygiene process
deploymentestablished · low burden

Feature Flag (Feature Toggle)

Decouple deployment from release. Enable/disable features at runtime without code deploy.

Continuous deployment (deploy ≠ release)A/B testing, gradual rolloutKill switches for risky dependenciesSimple deployments (no branching needed)Flags that live forever (tech debt)
architecture-descriptionestablished · high burden

GraphQL Best Practices

Design performant, secure, evolvable GraphQL APIs: schema design, N+1 prevention, complexity limiting, caching, versioning.

Multiple clients with diverse data needsRapid frontend iteration (backend stable)Complex relationships (graph-shaped data)Simple CRUD (REST simpler)Public APIs with unknown consumers
architecture-descriptionestablished · high burden

GraphQL Federation

Compose multiple GraphQL services into a single unified graph, enabling independent service ownership with unified client queries.

Multiple teams owning GraphQL servicesClients need cross-domain queriesSchema evolution without coordinationSingle team, single GraphQL serviceSimple REST APIs sufficient
distribution-communicationestablished · medium burden

gRPC Patterns & Best Practices

Design efficient, evolvable gRPC services: unary, streaming, errors, versioning, gateway, testing.

Internal service-to-service (low latency, high throughput)Polyglot microservices (codegen per language)Streaming required (real-time, bulk)Public APIs (REST/GraphQL better)Simple CRUD (REST simpler)
messagingestablished · low burden

Idempotency Key

Make any operation safely retryable by attaching a unique client-generated key that the server uses to detect and ignore duplicates.

Any write operation exposed to retries (payments, orders, reservations)Webhook endpoints receiving at-least-once deliveryAPI endpoints where clients implement retry logicRead-only operations (GET is naturally idempotent)Operations where duplicates are harmless or desired
data-consistencyestablished · low burden

Idempotency Patterns

Make operations safely retryable using idempotency keys, natural idempotency, and idempotent receivers — preventing duplicate side effects.

Any POST/PATCH/DELETE exposed to retriesWebhook endpoints (at-least-once delivery)Payment, order, reservation systemsGET (naturally idempotent)High-throughput internal RPCs (exactly-once infra)
reliability-opsestablished · high burden

Incident Response Process

Structured incident response: detection, response, resolution, postmortem — reducing MTTR and preventing recurrence.

Any production system with on-callTeam experiencing burnout or high MTTRRepeated incidents, no learningPre-production (lightweight process)Single-person team (simplify)
architecture-descriptionestablished · high burden

Kubernetes Patterns

Design reliable, scalable Kubernetes applications: pod design, resource management, deployment strategies, observability, security.

Containerized workloads at scaleTeam ready for operational complexityMulti-cloud / hybrid deployment needsSimple workloads (ECS Fargate, Cloud Run simpler)Team not ready for ops complexity
coordinationestablished · low burden

Leader Election

Ensure exactly one instance performs a task (scheduler, processor, migrator) in a distributed system.

Singleton background tasks (scheduler, migrator, aggregator)Active-passive failover for stateful servicesDistributed cron jobsStateless horizontal scaling (all instances should work)Tasks that can run concurrently (partition instead)
distribution-communicationestablished · medium burden

Load Balancing Algorithms

Choose the right load balancing algorithm: round-robin, least connections, least latency, consistent hashing — trade-offs for latency, distribution, and session affinity.

Any service with multiple instancesHeterogeneous fleet (different instance types)Session affinity needed (legacy apps)Single instanceStateless, homogeneous, low scale (round-robin fine)
resilienceestablished · medium burden

Load Shedding

Under overload, selectively drop low-priority requests to preserve capacity for high-priority work.

Traffic spikes exceed provisioned capacityMulti-tenant: protect paying customersCritical paths must stay available (payments, auth)All requests equally criticalCapacity planning sufficient (rare spikes)
scalingestablished · medium burden

Materialized View

Pre-compute and store query results for fast reads, refreshed periodically or on data change.

Complex aggregations, joins, window functionsDashboard, reporting, user-facing analyticsData freshness: minutes to hours OKReal-time consistency requiredAd-hoc queries (unpredictable patterns)
security-complianceestablished · medium burden

Mutual TLS (mTLS)

Authenticate both client and server in every connection using certificates, enabling zero-trust service-to-service communication.

Service-to-service communication in zero-trustRegulatory: encryption in transit requiredMulti-cluster, hybrid cloudExternal APIs (clients can't do mTLS easily)Legacy services that can't terminate TLS
architecture-descriptionestablished · high burden

Multi-Tenancy Patterns

Share infrastructure across customers while isolating data, compute, and blast radius — patterns from shared DB to dedicated clusters.

SaaS with >10 tenantsRegulatory data isolation (GDPR, HIPAA, FedRAMP)Noisy neighbor risk (variable tenant load)Single-tenant (dedicated deployment)Very few tenants where dedicated is cheaper
observabilityestablished · high burden

Observability Patterns

Build comprehensive observability: three pillars + SLI/SLO, alerting, debugging workflows, cost control.

Any production distributed systemIncident response: MTTR targetsCapacity planning: saturation signalsSimple monolith (logs + basic metrics sufficient)Team not ready for instrumentation investment
observabilityestablished · high burden

Observability (Three Pillars)

Understand system internal state through external outputs: metrics (what), logs (why), traces (where).

Any production distributed systemIncident response: MTTR targetsCapacity planning: saturation signalsSimple monolith (logs + basic metrics sufficient)Team not ready for instrumentation investment
data-consistencyestablished · low burden

Optimistic Locking

Prevent lost updates in concurrent writes without blocking, using version numbers or timestamps to detect conflicts.

Low conflict rate (<1% of writes)Read-heavy workloadsDistributed systems (no distributed lock needed)High conflict rate (pessimistic better)Long transactions (version changes during read)
data-consistencyestablished · medium burden

Transactional Outbox Pattern

Guarantee atomic database update + message publish without distributed transactions, using an outbox table and relay.

Any service that must publish events after DB changesMicroservices needing reliable event-driven communicationWhen 2PC is unavailable or undesirableSingle-service deployments with embedded broker (rare)When eventual consistency of seconds is unacceptable
architecture-descriptionestablished · low burden

Pagination (Cursor vs Offset)

Return large result sets in pages efficiently, avoiding performance cliffs and consistency issues.

Any list endpoint returning >100 itemsConcurrent writes to collectionPerformance matters (mobile, infinite scroll)Small, static datasets (<100 items)Random access required (page 50 directly)
scalingestablished · high burden

Partitioning Strategies (Sharding)

Choose and implement partitioning strategy: hash, range, directory, consistent hashing — trade-offs for distribution, resharding, and query routing.

Data > single node capacity (storage, CPU, connections)Throughput > single node (100k+ QPS)Multi-tenant isolation requiredSingle node sufficient with headroomComplex cross-shard queries (joins, transactions)
scalingestablished · high burden

Partitioning (Sharding)

Distribute data and load across multiple nodes by partitioning on a key, enabling horizontal scale beyond single-node limits.

Data size > single node capacity (TB+)Throughput > single node (100k+ QPS)Multi-tenant isolation requiredData fits on one node with room to growComplex cross-partition queries (joins, transactions)
economics-evolutionemerging · high burden

Platform Engineering

Build an Internal Developer Platform (IDP) that reduces cognitive load for stream-aligned teams through self-service, golden paths, and abstraction — not a ticket queue.

Stream-aligned teams > 5Teams reinventing CI/CD, K8s, observabilityCognitive load complaints from stream teamsSmall org (<5 stream teams)Teams happy with current tooling
resilienceestablished · low burden

Rate Limiting Algorithms

Compare rate limiting algorithms: token bucket, leaky bucket, fixed window, sliding window — trade-offs and use cases.

Any rate limiting implementationChoosing algorithm for new limiterDebugging rate limiter behaviorNo rate limiting neededTeam not implementing limiter
resilienceestablished · low burden

Rate Limiting

Control request rate to protect downstream services, enforce quotas, and prevent abuse.

Public APIs (prevent abuse, enforce tiers)Internal services (protect downstream, fair sharing)Login/auth endpoints (prevent brute force)Internal high-throughput paths where latency budget is microsecondsWhen backpressure via queueing is more appropriate
scalingestablished · medium burden

Read Replica

Scale read throughput by replicating data to follower nodes that serve read queries, while primary handles writes.

Read-heavy workloads (analytics, reporting, user-facing reads)Can tolerate eventual consistency for readsNeed to offload long-running queries from primaryWrite-heavy workloadsStrong consistency required for all reads
data-stateestablished · high burden

Database Replication

Copy data across database nodes for availability, read scaling, and disaster recovery, understanding sync vs async trade-offs.

Any production database needing HARead scaling (async replicas)Geo-distribution (async cross-region)Dev/test (single node fine)Team not ready for failover drills
resilienceestablished · low burden

Retry with Exponential Backoff

Handle transient failures by retrying with increasing delays, avoiding thundering herd and giving downstream time to recover.

Idempotent operations (GET, PUT with idempotency key)Transient failure scenarios: network, throttling, brief unavailabilityCombined with circuit breaker (retry while closed, fail fast when open)Non-idempotent operations without idempotency keyPermanent errors (4xx except 429, invalid input)
reliability-opsestablished · medium burden

Runbook (Operational Playbook)

Documented, step-by-step procedures for common operational tasks and incident response, reducing MTTR and cognitive load during incidents.

Any production serviceOn-call rotation existsIncident MTTR > targetPre-production environmentsFully automated self-healing (no human needed)
data-consistencyestablished · high burden

Saga Pattern

Manage distributed transactions across services without 2PC, using a sequence of local transactions with compensating actions.

Long-running business processes across service boundariesWhen eventual consistency is acceptable (seconds to minutes)When 2PC is unavailable or undesirableShort-lived operations where synchronous ACID worksWhen strong consistency is required (financial ledger)
data-consistencyestablished · high burden

Saga Patterns (Choreography vs Orchestration)

Manage distributed transactions across services without 2PC, using choreography (events) or orchestration (central coordinator) with compensating actions.

Long-running business processes across service boundariesWhen eventual consistency is acceptable (seconds to minutes)When 2PC is unavailable or undesirableShort-lived operations where synchronous ACID worksWhen strong consistency is required (financial ledger)
security-complianceestablished · low burden

Security Headers

Harden HTTP responses with security headers to mitigate XSS, clickjacking, MIME sniffing, and other client-side attacks.

All public-facing web applicationsAPI endpoints serving HTML/JSCompliance: PCI DSS, HIPAA, SOC2Internal APIs (no browser)Legacy apps with inline scripts everywhere (CSP hard)
security-complianceestablished · high burden

Security Patterns

Comprehensive security patterns: authentication, authorization, encryption, secrets, supply chain, runtime — defense in depth.

Any production systemRegulatory requirements (SOC2, PCI, HIPAA, GDPR)Customer trust is business criticalPre-product (security debt acceptable)Team not ready for security investment
architecture-descriptionestablished · medium burden

Serverless Architecture Patterns

Design reliable, cost-effective serverless systems: function design, cold starts, orchestration, observability, cost optimization.

Event-driven, bursty, unpredictable workloadsTeam wants minimal ops overheadPay-per-use aligns with business modelConstant high throughput (EC2/ECS cheaper)Sub-10ms latency requirements
distribution-communicationestablished · medium burden

Service Discovery

Enable services to find each other dynamically in distributed systems, supporting scaling, failures, and deployments.

architecture-descriptionestablished · high burden

Service Mesh

Dedicated infrastructure layer for service-to-service communication: mTLS, traffic management, observability, resilience — without application code changes.

50+ services with complex service-to-service communicationNeed consistent mTLS without app changesPlatform team owns infrastructure, app teams own business logicSmall number of services (<20)Team lacks platform engineering capacity
observabilityestablished · medium burden

SLI / SLO / Error Budgets

Define reliability in business terms: what to measure (SLI), what's acceptable (SLO), and how much unreliability you can spend (error budget).

Any service with reliability requirementsTeams arguing about reliability vs featuresNeed data-driven prioritizationPre-product-market fit (no users to disappoint)Internal tools with no SLA
observabilityestablished · low burden

Structured Logging

Emit logs as structured data (JSON) with consistent fields, enabling querying, alerting, and correlation across services.

All services in distributed systemCentralized log aggregationAlerting on log patterns (error rates, latency)Local development (pretty console output preferred)Extremely high-frequency internal loops (use metrics)
economics-evolutionestablished · high burden

Team Topologies

Design team structures that optimize for flow, autonomy, and cognitive load — applying Team Topologies patterns (stream-aligned, platform, enabling, complicated-subsystem).

Org > 50 engineersCross-team dependencies slowing deliveryPlatform team becoming bottleneckSmall org (<30 engineers)Single product, simple domain
economics-evolutionestablished · medium burden

Technical Debt Management

Systematically identify, prioritize, and pay down technical debt — treating it as a portfolio with interest rates, not a dirty word.

Any team with codebase > 6 months oldVelocity declining, bugs increasingOnboarding new engineers takes monthsPre-product-market fit (velocity > quality)Team not ready for measurement discipline
architecture-descriptionemerging · medium burden

Temporal Workflows (Durable Execution)

Write reliable, long-running business logic as code that survives crashes, retries automatically, and provides full observability — without managing queues, state machines, or timers manually.

Long-running business processes (orders, onboarding, claims)Human-in-the-loop workflows (approvals, reviews)Reliable orchestration of microservicesSimple request-response (overhead not justified)Sub-second latency requirements (workflow overhead)
architecture-descriptionestablished · high burden

Tenant Isolation (Multi-Tenancy)

Share infrastructure across customers while isolating their data, compute, and blast radius.

SaaS with >10 tenantsRegulatory data isolation (GDPR, HIPAA, FedRAMP)Noisy neighbor risk (variable tenant load)Single-tenant (dedicated deployment)Very few tenants where dedicated is cheaper
distribution-communicationestablished · medium burden

Webhook

Enable real-time server-to-server notifications via HTTP callbacks, avoiding polling.

Third-party integrations (Stripe, GitHub, Slack)Cross-organization event notificationConsumer-controlled endpointsHigh-throughput internal services (use message broker)Consumer can't receive HTTP (firewall, no public endpoint)
security-complianceemerging · high burden

Zero Trust Architecture

Never trust, always verify. Authenticate and authorize every request based on identity and context, not network location.

Remote/hybrid workforceMulti-cloud, hybrid infrastructureRegulatory: zero trust mandated (FedRAMP, NIST 800-207)Simple, on-prem only, small attack surfaceLegacy apps that can't do mTLS/OIDC