

Roughly 80% of enterprise data projects stall or fail, and the reason is rarely the warehouse or the model at the end. It's the movement in between. Data pipeline development is the work of building that movement, the system that carries data from where it's generated to where it's used and makes it usable on the way.
Most teams treat this layer as an afterthought. They invest in storage and analytics, then wire up whatever moves data between them as quickly as possible. That shortcut holds until a source schema changes, a job fails without warning, or volume outgrows the design, and suddenly the reports leadership relied on all week were wrong.
A well-built pipeline removes that fragility by handling extraction, transformation, and delivery as a designed system rather than a set of scripts stitched together over time.
This guide breaks down how a modern pipeline works, its core components, the data pipeline architecture patterns to choose between, the split between ETL and ELT, the data pipeline tools worth your attention, and the steps to build a data pipeline that holds up in production.
Data pipeline development is the process of designing, building, and maintaining the systems that move data from its sources to its destinations, transforming it along the way so it arrives usable. A source might be a factory's IoT sensors, a retail point-of-sale system, or a SaaS billing tool. The destination is usually a data warehouse, a lake, or a dashboard where someone acts on it.
It helps to be clear on what this isn't. Not a one-off script that pulls data once and calls it done. Not the warehouse itself, and not the BI tool on top. A pipeline is the connective machinery between all of those, moving data through defined stages every time it runs.
The stages are where the work happens. Data gets pulled from each source, cleaned and reshaped to match what the destination expects, then loaded where it needs to go. A pharma company pulling batch records from lab equipment has to standardize timestamps, drop malformed readings, and reconcile IDs before any of it means anything. Skip that middle step and you've just moved garbage faster.
The "development" part matters because pipelines are software, and they rot like software. Sources change, volumes grow, and a feed that ran fine at ten thousand records a day starts timing out at ten million. Teams that treat pipeline work as build-once are the ones who call us to rebuild it. The ones who stay ahead treat pipelines as living systems, with monitoring and an owner, like any production app.
Every downstream decision inherits the quality of the pipeline feeding it. A dashboard is only as current as the job behind it, and a forecast is only as accurate as the data that reached the model. When the pipeline is slow, wrong, or silently broken, nothing built on top of it can be trusted, no matter how good the tool.
Here's where that plays out in practice:
Manufacturing runs on timing. Production, quality, and maintenance data has to reach the floor fast enough to act on. A pipeline lagging by hours means a defect gets caught after a full shift has already run it.
Energy and utilities move enormous volumes of sensor and meter data continuously. The pipeline is what turns that raw stream into something an operator can read before a load imbalance becomes an outage.
Pharma lives and dies on traceability. Batch records, lab results, and compliance data have to move without losing a single reading, because a gap in the chain is a gap an auditor will find.
Retail depends on freshness. Inventory, pricing, and sales data that's a day old leads to overselling stock that isn't there and mispricing what is.
The pattern underneath all four is the same. The pipeline is the difference between data that informs a decision and data that arrives too late to matter. Good data governance sets the rules for what clean data should look like, but the pipeline is what enforces those rules every time it runs.
There's a cost angle too. A pipeline that fails quietly is worse than one that fails loudly, because the bad numbers keep flowing and the wrong decisions keep getting made until someone notices. We've seen a broken feed run for two weeks before anyone caught it. By then the damage was in reports that had already gone to leadership.
Every pipeline, however simple or complex, is built from the same handful of parts. Knowing them makes it easier to see where a pipeline is likely to break and where the real design decisions get made.
Where the data originates. Databases, APIs, event streams, flat files, IoT sensors, SaaS platforms. Most real pipelines pull from several at once, and each source has its own format, schedule, and reliability to account for.
The layer that pulls or receives data from those sources. This is where you decide whether data arrives in scheduled batches or streams in continuously as events happen, a choice that shapes everything downstream.
Where raw data becomes usable. Cleaning, deduplicating, standardizing formats, joining sources, applying business logic. A utility reconciling meter readings from three vendors does most of its real work here.
Where processed data lands. Usually a data warehouse for structured analytics or a data lake for raw and semi-structured data. Some teams run both.
The scheduler and coordinator that decides what runs, in what order, and what happens when a step fails. Without it, a pipeline is just a pile of scripts hoping to run in sequence.
The layer that tells you the pipeline is healthy, or that it isn't. Data quality checks, failure alerts, latency tracking. This is the component teams skip first and regret most.
Data pipeline architecture is the overall design that decides how data flows through your pipeline, how the components connect, and how the system behaves under load and failure. Two pipelines can use the same tools and still perform completely differently based on how they're architected. This section stays at the level of the main patterns and where each fits. The deeper design decisions live in our dedicated guide on data pipeline architecture.
Most pipelines follow one of a few recognizable patterns.
Data is collected over a period and processed in scheduled chunks, hourly, nightly, whatever the business can tolerate. It's the simplest to build and reason about, and for a lot of use cases it's all you need. A retailer refreshing inventory every hour doesn't need anything more complicated. The limit is latency. If a decision can't wait for the next scheduled run, batch is the wrong pattern.
Data is processed continuously as each event arrives, giving you results in near real time. This is what an energy grid or a fraud check needs, where waiting for a batch window means acting too late. It costs more to build and run, and it's harder to debug. We wouldn't reach for it unless the use case genuinely can't tolerate delay.
A hybrid that runs a batch layer and a streaming layer side by side, one for accuracy and one for speed. It handles cases where you need fast approximate results now and correct results later. The trade-off is complexity, because you're maintaining two paths for the same data. Powerful when you need it, overkill when you don't.
A newer pattern that combines the raw storage flexibility of a lake with the structure and query performance of a warehouse in one system, cutting out the need to move data between them. Platforms like Databricks built this into the core of what they offer. It suits teams who want one home for both analytics and machine learning without maintaining separate stacks.
The difference between ETL and ELT comes down to one thing. When does the transformation happen, before the data is loaded or after. ETL transforms data before it lands in storage. ELT loads it raw and transforms it inside the destination. That single reordering changes how the pipeline scales, what it costs, and how flexible it is later.
|
ETL |
ELT | |
|
Order |
Transform, then load |
Load, then transform |
|
Where transformation runs |
Separate processing engine |
Inside the destination warehouse |
|
Best for |
Structured data, strict compliance, on-prem |
Cloud warehouses, large or varied data |
|
Speed of loading |
Slower, transforms up front |
Faster, raw data lands first |
|
Flexibility |
Locked to predefined logic |
Reprocess raw data anytime |
|
Typical use |
Legacy systems, regulated pipelines |
Modern cloud data stacks |
ETL fits when data has to be clean and compliant before it's stored. Pharma is the clearest case. If regulation says only validated, transformed records can land in your system, you transform first, no debate. It also suits on-premise setups where the destination doesn't have the compute to transform at scale, and cases where you're moving structured data with logic that rarely changes.
ELT fits the modern cloud warehouse, where the destination has enough compute to transform data itself. You load everything raw, then shape it as needed, which means you can reprocess the original data whenever your requirements change. A retailer feeding a cloud warehouse like Snowflake gets faster loads and the freedom to rebuild transformations without re-ingesting anything. The catch is storage cost, since you're keeping raw data you may never use.
Batch and real-time describe how often your pipeline moves data, and it's one of the earliest decisions you'll make because it shapes cost, complexity, and tooling all at once. Batch processes data in scheduled groups. Real-time processes each record as it arrives. Most of the choice comes down to how long a decision can wait.
|
Batch |
Real-time | |
|
Processing |
Scheduled groups |
Continuous, per event |
|
Latency |
Minutes to hours |
Seconds or less |
|
Cost |
Lower |
Higher |
|
Complexity |
Simpler to build and debug |
Harder on both |
|
Fits |
Reports, backfills, daily syncs |
Alerts, monitoring, live decisions |
Batch is the workhorse, and it handles more real-world pipelines than people expect. A retailer syncing inventory every hour, a manufacturer rolling up daily production numbers, a finance team closing the books each night. None of that needs per-second freshness, and batch gives you a simpler system that's cheaper to run and far easier to fix when it breaks.
Real-time earns its place when waiting for the next batch window means acting too late. An energy grid watching for load imbalance, a utility flagging a pressure drop, a fraud check that has to clear before a transaction completes. Here the delay itself is the risk, so the added cost and complexity are worth paying.
The mistake we see most often is teams reaching for real-time because it sounds better, then paying to build and maintain a streaming system a nightly batch would have served. Real-time is harder to build, harder to debug, and more expensive to keep running. Unless a decision genuinely can't wait, batch is the safer starting point. You can always add a streaming path later for the specific feeds that need it. The full design detail for streaming lives in our guide on real-time data pipelines.
The tooling landscape is crowded, and most tools overlap enough to make the choice confusing. What follows is grouped by what each category is actually for, so you can see where a tool fits before comparing names. This stays at a working overview. The deeper selection guidance lives in our breakdown of data pipeline tools.
These run inside a cloud provider and handle the infrastructure for you, which suits teams already committed to one cloud and short on engineers to babysit servers.
A serverless ETL service on AWS that handles extraction, transformation, and loading without you managing infrastructure. Best when your stack already lives in AWS. Less appealing if you want to stay cloud-neutral.
Microsoft's managed data integration service, strong at orchestrating pipelines across hybrid on-prem and cloud sources. The natural pick for teams already on Azure and running legacy systems alongside cloud.
A managed service for both batch and stream processing, built on Apache Beam. It shines for streaming workloads on GCP, though it ties you fairly tightly to Google's ecosystem.
These give you the most control and no license cost, in exchange for running and maintaining them yourself. Worth it when you have the engineering depth. A tax when you don't.
The de facto standard for orchestration, scheduling and coordinating pipeline steps as code. It's what most teams reach for to run everything else. It doesn't move or transform data itself, so pair it with the tools that do.
A processing engine for transforming large datasets in memory, fast across both batch and streaming. When volume outgrows what a single machine can handle, Spark is usually the answer. Overkill for small workloads a simple script would clear.
A distributed event streaming platform that acts as the backbone for real-time data movement. It's what carries the continuous flow behind an energy grid or a fraud system. Powerful, but operationally heavy to run well.
A stream-processing engine built for true low-latency, event-by-event workloads. Choose it over Spark when milliseconds matter and micro-batching isn't tight enough. Steeper to learn and operate.
A unified programming model for defining pipelines that run on multiple engines, including Dataflow and Flink. Useful when you want to write pipeline logic once and stay portable across runtimes. Less useful if you've already committed to one engine.
This layer shapes data after it's loaded, which is where ELT pipelines do their real work.
The standard for transforming data inside the warehouse using SQL, with version control and testing built in. If you're running ELT on a modern warehouse, dbt is almost the default. It only transforms, so it needs a loader in front of it.
These are managed connector services that move data from sources into your warehouse with minimal setup, trading control and cost for speed of getting running.
A managed service with prebuilt connectors that sync data into your warehouse automatically. Fastest way to stand up ingestion without engineering. The cost climbs quickly as data volume grows.
An open-source alternative to Fivetran with a large connector library, available self-hosted or managed. Good middle ground when you want prebuilt connectors without full vendor lock-in. Self-hosting means you're back to running infrastructure.
A lightweight, developer-friendly integration service built for simple, fast source-to-warehouse replication. Fits smaller pipelines that just need data moved without much transformation. Thinner on connectors and features than the other two.
Building a pipeline follows a sequence, and skipping ahead is how most of them end up needing a rebuild. The steps below are the order we actually work in, and each one exists to catch a problem before it becomes expensive to fix later.
Start with the decision the data has to support, not the tools. Who consumes the output, how fresh does it need to be, and what does "correct" mean for this data. A pipeline built without answering these gets rebuilt once someone finally asks them. Most of the design falls out of these answers, including whether you need batch or real-time at all.
Inventory every source the pipeline will pull from, and get specific about each one. Format, volume, how often it changes, how reliable it is. A utility pulling from three meter vendors with three different formats has three integration problems, not one. Surprises here are the ones that break timelines.
Now that you know the sources and the freshness requirement, pick the data pipeline architecture and the stack to match. This is where the batch-versus-real-time and ETL-versus-ELT calls get made. Resist the urge to over-tool. Pick the smallest stack that covers what you mapped in the first two steps.
Connect to the sources and get data flowing in, whether on a schedule or as a continuous stream. Build it to handle the source being down, sending duplicates, or changing its schema, because it eventually will. Ingestion that assumes sources behave is ingestion that breaks in week three.
Clean, standardize, join, and apply business logic to turn raw data into something usable. This is where data quality is won or lost, so bake in validation rather than bolting it on later. A data quality framework at this stage catches bad records before they reach anyone who'd act on them.
Land the processed data where it belongs, and wire up the orchestrator to control what runs, in what order, and what happens when a step fails. This is the layer that turns a set of scripts into a system that recovers instead of collapsing when one job errors out.
Instrument the pipeline so you know it's healthy before a stakeholder tells you it isn't. Data quality checks, failure alerts, latency tracking. This is the step teams cut to hit a deadline, and it's the one that decides whether you find out about a failure from a dashboard or from your boss.
The steps get a pipeline built. These are what keep it running once real data and real load hit it. Each one comes from watching pipelines break in the same predictable ways.
Sources go down, send duplicates, and change schemas without warning. A pipeline that assumes clean input works in testing and breaks in production. Build in retries, handle partial failures, and make sure one bad record doesn't take down the whole run. The pipelines that survive are the ones that expect trouble.
Running the same job twice should produce the same result, not double the data. When a job fails halfway and reruns, idempotency is what stops it from creating duplicates or corrupting what's already there. Skip this and every failure becomes a manual cleanup.
Check data as it moves, not after it's landed. Catch nulls, out-of-range values, and broken formats before they reach a dashboard someone trusts. Pairing this with clear data governance rules means the pipeline enforces standards automatically instead of leaving quality to chance.
Pipeline logic is code, so treat it that way. Keep transformations, configs, and schemas in version control. When something breaks, you want to see what changed and roll back, not guess. Pharma and other regulated builds need this for audit trails anyway.
A pipeline you can't see into is one you'll debug blind. Track failures, latency, and data volume, and alert on them before they become someone else's problem. This is the practice teams defer and regret, every time.
Every tool you add is another thing to patch, monitor, and debug. Resist assembling a stack of ten tools when three cover the job. A smaller pipeline is a more reliable pipeline, and it's cheaper to run.
If there's one thing to take from all of this, it's that the pipeline is the part that decides whether everything downstream can be trusted. The warehouse and the dashboards get the attention, but a broken feed underneath them makes both worthless. Get the pipeline right and the rest of your data stack has something solid to stand on.
The decisions that matter most come early. What the data is for, where it comes from, and how fresh it truly needs to be. Answer those honestly and the architecture, the tools, and the batch-versus-real-time call mostly settle themselves. Most of the rebuilds we get pulled into trace back to one of those three questions going unanswered at the start.
If you're planning a build, start there before you look at a single tool. Write down who consumes the output, how current it has to be, and what "correct" means for your data. That one page decides more about the pipeline than any tool comparison will. If the answers point to a build bigger than your team can carry, that's the point where our data engineering services team can map the architecture with you and give you a real scope instead of a guess.
ETL is one type of data pipeline, not a separate thing. A data pipeline is any system that moves data from source to destination, while ETL describes a specific pattern within that, extract then transform then load. ELT is another pattern. So every ETL process is a pipeline, but not every pipeline uses ETL.
A simple batch pipeline from one or two clean sources can be running in a few days, while a production-grade pipeline pulling from many sources with real-time processing and full monitoring takes weeks. The biggest time driver isn't the tooling, it's the number and messiness of your sources. Mapping those upfront is what keeps timelines realistic.
Use batch unless a decision genuinely can't wait for the next scheduled run. Batch is cheaper, simpler to build, and easier to debug, and it covers most reporting, syncing, and analytics needs. Real-time is worth its added cost and complexity only when delay itself is the risk, like grid monitoring or fraud detection.
The most common stack combines an orchestrator like Apache Airflow, a transformation tool like dbt, and either a managed connector service like Fivetran or an open-source engine like Apache Spark for heavier processing. The right mix depends on your cloud, your data volume, and how much engineering you have to run it. A smaller stack is almost always more reliable than a large one.
No, but most pipelines end in one because that's where the data gets used. A pipeline needs a destination, and that can be a warehouse, a data lake, or even another application, depending on what the data feeds. For analytics and reporting, a warehouse or lakehouse is the usual landing point.
You might also like