Design and evaluate data pipelines, streaming systems, and ETL architecture patterns.
Copy the install command and let the AI configure it · recommended for beginners
Please install the "system-type-data-pipeline" skill from askskill: 1. Download https://raw.githubusercontent.com/microsoft/amplifier-bundle-systems-design/main/skills/system-type-data-pipeline/SKILL.md 2. Save it as ~/.claude/skills/system-type-data-pipeline/SKILL.md 3. Reload skills and tell me it's ready
Design a data pipeline architecture for an e-commerce platform that supports real-time order analytics and daily offline reporting. Compare batch processing, stream processing, and ETL/ELT tradeoffs, and provide recommendations for DAG scheduling, data quality checks, backfill strategy, schema evolution, and failure recovery.
A structured architecture proposal covering technology choices, processing flow, key tradeoffs, and operational strategies.
Review this existing ETL system: daily batch jobs have high latency, task dependencies are complex, and backfills often fail. Identify risks from the perspectives of DAG design, failure modes, data quality, observability, and scalability, and propose improvements.
A diagnostic review with prioritized issues and actionable optimization recommendations.
We are upgrading our event data model by adding fields and changing some types. Create a schema evolution strategy that keeps upstream and downstream systems compatible, and explain versioning, data validation, historical backfill, and exception handling.
A compatibility-first schema evolution plan with implementation steps, risks, and safeguards.
Patterns, failure modes, and anti-patterns for batch and streaming data pipelines.
What it is. Process bounded datasets on a schedule — hourly, daily, or triggered. Read a full partition, transform, write output. The workhorse of data engineering. When to use. Reporting, analytics, ML feature generation, any workload where latency of minutes to hours is acceptable. When the source data naturally arrives in chunks (file drops, database snapshots, daily exports). When transformations are complex aggregations across the full dataset. When to avoid. When business requirements demand sub-minute freshness. When the dataset grows faster than the batch window can process it — you'll never catch up. When downstream consumers need continuous updates, not periodic dumps.
What it is. Process unbounded data continuously as it arrives. Events flow through a topology of operators. State is maintained in-stream. When to use. Real-time fraud detection, live dashboards, operational alerting, CDC-based replication, any use case where "the answer must be current." When events have value that decays with time. When to avoid. When you need complex joins across large historical windows — stream state gets expensive. When your team has no operational experience with Flink/Kafka Streams/Spark Streaming (the failure modes are subtle and unforgiving). When the "real-time" requirement is actually "within an hour" — that's batch.
What it is. Process small batches at very short intervals (seconds to low minutes). Spark Structured Streaming is the canonical example. Gives near-real-time latency with batch-like programming models. When to use. When you need latency better than batch but the team's skill set is batch-oriented. When exactly-once semantics are easier to reason about in batch units. When sub-second latency is not required. When to avoid. When you need true event-at-a-time processing with sub-second latency. When the micro-batch interval masks timing bugs that will surface under load. When the overhead of repeated job initialization dominates actual processing time.
ETL (Extract, Transform, Load). Transform data before loading into the target. Traditional approach. Use when the target system is expensive (data warehouse with per-query pricing), when you need to filter/clean before storage, or when the target can't handle raw data volumes. ELT (Extract, Load, Transform). Load raw data first, transform in the target system. Modern approach enabled by cheap storage and powerful query engines. Use when storage is cheap, when you want to preserve raw data for reprocessing, when transformations evolve frequently, or when the target system (Snowflake, BigQuery, Databricks) has strong compute for transformations. The real tradeoff. ETL reduces storage cost and query scope at the expense of flexibility — you can't transform what you didn't keep. ELT preserves optionality at the expense of storage cost and potential query performance on raw data. Default to ELT unless you have a specific reason not to.
What it is. Run batch and streaming pipelines in parallel. Batch layer provides complete, accurate results; speed layer provides approximate, real-time results. Merge at query time. When to use. Almost never in new systems. Was a necessary compromise before streaming frameworks matured. When to avoid. In most cases. Maintaining two codepaths that must produce consistent results is an operational nightmare. Logic drift between batch and speed layers is the norm, not the exception. Prefer Kappa architecture unless you have a proven need for both.
What it is. Single streaming pipeline handles both real-time and historical reprocessing. Replay the log to reprocess.
…
Design and evaluate core mechanisms, tradeoffs, and failures in distributed systems.
Design offline-first edge systems with sync, conflict handling, and weak-network resilience.
Design and assess enterprise integration patterns, legacy modernization, and orchestration strategies.
Review system designs with a seven-step method to surface risks and improvements.
Evaluate system designs through Unix/Linux principles for simplicity and composability.
Model complex domains and define system boundaries with Domain-Driven Design.
Design and evaluate event-driven, message-based, and asynchronous system architectures.
Design and assess ML training, serving, and experimentation system architectures.
Design or evaluate web services, APIs, scalability, and reliability tradeoffs.
Design and evaluate real-time collaborative systems, sync flows, and failure handling.
Design and evaluate CLI tools and developer SDK architecture and usability.
Design and evaluate decentralized peer-to-peer architectures and core system mechanisms.