Service Architecture
Defend an architecture choice (monolith, modular monolith, or microservices) from real requirements, draw service boundaries that will not decay into a distributed monolith, and wire the communication between services so one slow dependency does not take the whole system down.
Monolith vs Modular Monolith vs Microservices
Default to a modular monolith with clean seams, extract services only on a concrete org, cadence, or scaling trigger, and never build a distributed monolith (shared DB or coupled deploys) that has every cost and no benefit.
Service Decomposition & Bounded Contexts (DDD)
Cut along business capabilities and bounded contexts, give every service exclusive ownership of its data (API/event access only, never a shared table), size services to one team each, and extract incrementally with the Strangler Fig and an anti-corruption layer.
Inter-Service Communication
Sync for must-know-now reads (gRPC inside, REST at the edge), async events to decouple and absorb slowness, orchestration for complex flows and choreography for simple ones, sagas with compensations for cross-service consistency, and timeouts plus jittered retries plus circuit breakers plus idempotency to stop cascades.
Containers & Orchestration
Specify a production Kubernetes deployment (workload objects, probes, zero-downtime rollouts), design autoscaling that reacts to the right signal instead of reflexively scaling on CPU, decide when a service mesh earns its cost, and use the 12-factor and cloud-native principles as an explicit lens to make a legacy stateful service safe to run and scale in containers.
Containers & Kubernetes Fundamentals
Build small immutable images, use Deployments for stateless and StatefulSets (or a managed DB) for stateful, set requests/limits and a PodDisruptionBudget, and let readiness probes gate a maxUnavailable: 0 rolling update to stay zero-downtime.
Autoscaling & Elasticity
Pick the scaler to the problem (HPA Pods, cluster autoscaler nodes, KEDA events with scale-to-zero), scale on the signal that reflects user pain (RPS, p99, queue depth) not reflexive CPU, and blunt cold starts with a warm floor and stabilization windows.
Service Mesh (Sidecar vs Sidecarless/Ambient/eBPF)
A mesh moves mTLS, retries/timeouts, traffic shifting, and L7 telemetry out of app code; sidecars cost memory and latency per Pod, ambient/eBPF (Istio Ambient, Cilium) cut that tax and are the 2025 direction, and for a small fleet a mesh is often not worth it.
Cloud-Native & 12-Factor Principles
Config in the environment (one image everywhere), stateless disposable processes (Redis session, S3 files, graceful SIGTERM), backing services attached by URL, and immutable build/release/run separation, all so a process is safe to kill and restart anywhere at any time.
Serverless & Edge
Decide when to hand capacity management to a FaaS platform and when that decision quietly bankrupts you, design an event-driven Lambda pipeline that survives cold starts, concurrency caps, and timeouts, and split a global request path cleanly between V8-isolate edge compute and a heavier origin so users get sub-50ms TTFB without pushing strong-consistency data somewhere it cannot live.
Serverless / FaaS Architecture
FaaS trades capacity management for per-invocation billing and instant scale, which wins for spiky event-driven glue but loses on cold-start latency, hard execution limits, statelessness, and a cost model that inverts against containers under high steady load.
Edge Computing, CDN Compute & WebAssembly
V8 isolates start in under 5ms and WASM sub-ms, so edge compute delivers global sub-50ms TTFB for lightweight request-path work like routing, auth, and personalization, while heavy compute and strong-consistency data stay at the origin because edge runtimes are CPU/memory/API constrained and edge data is eventually consistent by default.
Delivery & FinOps
Stand up an Internal Developer Platform with golden paths and GitOps so a team ships to prod in a day, promote infrastructure across environments with IaC plus progressive delivery that auto-rolls-back a payments deploy on an SLO regression, and treat cloud cost as a first-class design axis by cutting a large bill without hurting reliability using the FinOps Inform/Optimize/Operate loop.
Platform Engineering, IDPs & GitOps
An IDP is a product that gives teams self-service golden paths (scaffold, deploy, observe) and abstraction over raw Kubernetes; GitOps makes Git the declarative source of truth with an Argo CD/Flux reconciler for audit, rollback, and self-healing; guardrails as code (OPA/Kyverno) and supply-chain controls (SBOM, cosign, SLSA) replace gatekeeping; the anti-pattern is a ticket-queue platform team.
IaC, Environments & Progressive Delivery
IaC with remote-state locking and shared modules gives environment parity and kills drift; never make manual console changes; promote the same artifact dev to staging to prod; use canary with automated metric analysis and auto-rollback for a payments service, blue-green when versions cannot coexist; feature flags decouple deploy from release; and use expand/contract so a migration never breaks the version still running during a canary.
Cloud Cost & FinOps
Run FinOps as Inform (tag/allocate) -> Optimize (rightsize to P90/P95, spot for fault-tolerant work, commitments for baseline, scale-to-zero) -> Operate (budgets, anomaly detection); fix opaque Kubernetes cost with OpenCost/Kubecost plus consistent labels and rightsized requests; and do not ignore egress/inter-AZ transfer, storage tiering, warehouse scans, and GPU spend.
Data-Intensive & Analytics
Split OLTP from OLAP and isolate them, place a warehouse, lake, or lakehouse for a given BI and ML workload, wire OLTP changes into analytics with open table formats and log-based CDC instead of fragile dual writes, and choose batch, streaming, or a unified Kappa pipeline that serves both a real-time signal and a nightly report from one event source.
OLTP vs OLAP Fundamentals
OLTP is row-store, normalized, small high-concurrency transactions (Postgres/DynamoDB); OLAP is column-store, denormalized star schema, huge scans with compression and vectorized execution (Snowflake/BigQuery/ClickHouse); never analyze on the OLTP primary because scans destroy transactional latency; move data via ETL, ELT, or CDC trading freshness for simplicity.
Warehouse vs Lake vs Lakehouse
Warehouse is schema-on-write, curated, strong BI/governance, pricey for raw data; lake is schema-on-read, cheap object storage, risks becoming a swamp; lakehouse gets lake economics plus warehouse features via open table formats and a catalog; use the medallion (bronze/silver/gold) pattern for governed refinement; separating storage and compute lets you scale independently and run many engines on one copy.
Open Table Formats & CDC
Table formats (Iceberg/Delta/Hudi/Paimon) add ACID, schema/partition evolution, time travel, and hidden partitioning over Parquet, coordinated by a catalog; pick Iceberg for multi-engine, Hudi for upsert-heavy CDC; use log-based CDC (Debezium on the WAL/binlog) plus a transactional outbox to avoid the dual-write problem; delivery is at-least-once so make consumers idempotent for effective exactly-once.
Batch vs Streaming: Lambda vs Kappa
Batch is high-throughput/high-latency and simple, streaming is low-latency/continuous and correctness-hard; Lambda runs parallel batch and speed layers (accurate but two codebases that drift), Kappa runs one streaming path and replays the retained log to recompute; window by event-time with watermarks to handle late/out-of-order data trading latency for completeness; choose exactly-once where counts must be exact; and Flink-into-Iceberg collapses real-time and reporting into one pipeline.