Skip to content

Decision Matrix

Table 1 — Choose a pattern

Read across the row for your most binding constraint. ✅ = strong fit · ⚠️ = possible but not ideal · ❌ = wrong tool.

Characteristic Batch Lakehouse Streaming Lakehouse ELT / Warehouse CDC Pipeline Lambda Arch Federated Query ML Feature Pipeline Graph Processing Workflow Orchestration
Latency: > 15 min acceptable ✅ ⚠️ ✅ ⚠️ ⚠️ ✅ ⚠️ ✅ ✅
Latency: 1–15 min required ⚠️ ✅ ❌ ✅ ✅ ❌ ✅ ❌ ⚠️
Latency: < 1 min required ❌ ✅ ❌ ✅ ⚠️ ❌ ✅ ❌ ❌
Source: files / scheduled DB export ✅ ❌ ✅ ❌ ⚠️ ✅ ⚠️ ✅ ✅
Source: live database WAL ⚠️ ✅ ❌ ✅ ✅ ❌ ✅ ❌ ❌
Source: Kafka / event stream ⚠️ ✅ ❌ ✅ ✅ ❌ ✅ ❌ ❌
Source: data already in warehouse ❌ ❌ ✅ ❌ ❌ ✅ ❌ ❌ ⚠️
Reprocessing: replay log from offset ⚠️ ✅ ❌ ✅ ✅ ❌ ✅ ❌ ❌
Reprocessing: re-extract from source ✅ ❌ ✅ ❌ ✅ ✅ ⚠️ ✅ ✅
Query pattern: SQL aggregations ✅ ✅ ✅ ⚠️ ✅ ✅ ❌ ❌ ❌
Query pattern: graph traversal ❌ ❌ ❌ ❌ ❌ ❌ ❌ ✅ ❌
Query pattern: feature lookup (low-latency) ❌ ❌ ❌ ❌ ❌ ❌ ✅ ❌ ❌
Query pattern: cross-system federation ❌ ❌ ⚠️ ❌ ❌ ✅ ❌ ❌ ❌
Team: SQL-fluent, no distributed compute ❌ ❌ ✅ ❌ ❌ ✅ ❌ ❌ ⚠️
Team: Spark/Scala experience ✅ ✅ ⚠️ ✅ ✅ ⚠️ ✅ ✅ ⚠️
Team: Flink/Java experience ❌ ✅ ❌ ✅ ✅ ❌ ✅ ❌ ❌
Cost sensitivity: minimise always-on ✅ ❌ ✅ ❌ ❌ ⚠️ ⚠️ ✅ ✅
Needs pipeline scheduling / coordination ✅ ⚠️ ✅ ❌ ✅ ✅ ✅ ✅ ✅

Table 2 — Choose a stack variant

Batch Lakehouse

Variant Operational complexity Cloud portability Ecosystem maturity Cost profile Best when
Spark + Iceberg Low High (any engine reads Iceberg) High Low Multi-engine shop, need Trino/Presto reads
Spark + Delta Low Medium (Delta best with Spark/Databricks) High Low Databricks-first, want tighter Spark integration
Spark + Iceberg + Airflow Medium High High Low Need scheduled orchestration with retry/alerting

Streaming Lakehouse

Variant Operational complexity Cloud portability Ecosystem maturity Cost profile Best when
Flink + Iceberg High High High Medium Sub-minute latency, exactly-once required
Spark Structured Streaming + Delta Medium Medium High Medium Team already knows Spark, latency > 30s acceptable

ELT / Warehouse

Variant Operational complexity Cloud portability Ecosystem maturity Cost profile Best when
dbt + Snowflake Low Low (Snowflake-specific) High High Snowflake is already your warehouse
dbt + BigQuery Low Low (GCP-specific) High Medium GCP-first org, BigQuery already in use
dbt + DuckDB + Airflow Medium High Medium Very low Local/dev, cost-sensitive, small-to-medium data

CDC Pipeline

Variant Operational complexity Cloud portability Ecosystem maturity Cost profile Best when
Debezium + Kafka + Flink High High High Medium Need exactly-once, complex stream processing
Debezium + Kafka + Spark Medium High High Medium Team knows Spark, latency > 30s acceptable

Lambda Architecture

Variant Operational complexity Cloud portability Ecosystem maturity Cost profile Best when
Flink (streaming) + Spark (batch) + Iceberg Very High High High High Both exactly-once streaming AND batch correctness required
Spark Streaming + Spark Batch + Delta High Medium High High Single Spark team, Delta as unifying format

Federated Query

Variant Operational complexity Cloud portability Ecosystem maturity Cost profile Best when
Trino + Iceberg + S3 Medium High High Low Iceberg as primary format, need Presto-compatible queries
Presto + Hive metastore Medium High High Low Existing Hive metastore, legacy Hadoop estate

ML Feature Pipeline

Variant Operational complexity Cloud portability Ecosystem maturity Cost profile Best when
Feast + Redis + Spark Medium High High Medium Standard online+offline split, Redis for low-latency serving
Flink + Spark offline High High High High Online features need sub-second freshness
Feast + Spark + Airflow Medium High High Medium Need scheduled feature computation with orchestration

Graph Processing

Variant Operational complexity Cloud portability Ecosystem maturity Cost profile Best when
Spark GraphX Low High Medium Low Batch graph algorithms (PageRank, connected components) on large graphs
Neo4j + Spark Medium Medium High Medium Need Cypher query language, real-time graph traversal

Workflow Orchestration

Variant Operational complexity Cloud portability Ecosystem maturity Cost profile Best when
Airflow High High Very High Low Large org, many integrations, existing Airflow investment
Prefect Low High High Low Python-first team, dynamic task generation, modern UX
Dagster Medium High High Low Asset-centric thinking, strong observability requirements