Many engineering leaders struggle with fragmented data sources and manual reporting. Understanding how to build data pipelines that are resilient and observable is the difference between a high-performing data team and one that spends all day fixing broken SQL scripts. When we work with mid-market companies, the primary bottleneck is almost always a lack of automated flow between their core business systems and their decision-making tools.
A data pipeline is a series of automated processes that extract data from a source, transform it into a usable format, and load it into a destination for analysis. In our experience, the most successful pipelines follow the ELT (Extract, Load, Transform) pattern rather than the traditional ETL (Extract, Transform, Load) approach. This shift allows teams to move faster and maintain better data lineage within a centralized cloud warehouse.
Why you need to know how to build data pipelines
Building a manual report once is easy, but maintaining it as your company grows is impossible. If your team is still exporting CSVs from a CRM and manually cleaning them in Excel, you are accumulating technical debt. Automation is the only way to ensure that the data used by your marketing, sales, and finance teams is consistent and accurate.
We often see companies reach a breaking point around 50 employees where the "spreadsheet method" fails. At this stage, leadership starts asking questions that require joined data from multiple systems. For example, calculating the true Customer Acquisition Cost (CAC) requires data from your advertising platforms, your CRM, and your finance system. Without an automated pipeline, this calculation takes days of manual work and is prone to human error.
If you are evaluating your current infrastructure, our AI Stack Audit provides a scored assessment to help you identify where your data flow is currently breaking down.
| Feature | Traditional ETL | Modern ELT |
|---|---|---|
| Processing Site | External processing server | Target data warehouse |
| Data Flexibility | Only transformed data is stored | Raw and transformed data are stored |
| Development Speed | Slow (requires custom code) | Fast (uses SQL and dbt) |
| Maintenance | High (fragile transformations) | Low (version-controlled SQL) |
| Scalability | Limited by the ETL server | Limited only by the cloud warehouse |
A comprehensive data pipeline architecture guide
A modern data pipeline is not a single script. It is a modular system built from several distinct layers. We recommend building this architecture using a "Best-of-Breed" approach, where you select the best tool for each specific layer rather than trying to find a single platform that does everything poorly.
1. The Extraction Layer
The first step is moving data from your SaaS tools and production databases into your warehouse. We suggest using managed connectors like Fivetran or Airbyte. These tools handle the complex logic of API rate limits, schema changes, and incremental loading. When we deploy these for clients, it saves hundreds of engineering hours that would otherwise be spent maintaining custom Python scripts.
2. The Storage Layer (The Warehouse)
The warehouse is the "source of truth" for your organization. For most growing companies, Google BigQuery or Snowflake are the clear winners. These platforms separate compute from storage, meaning you only pay for what you use. They allow you to store raw data in its native format, including JSON, which is critical for modern application data.
3. The Transformation Layer
This is where the raw data becomes business logic. We use dbt (data build tool) for this layer. dbt allows your data analysts to write transformations in SQL while following software engineering best practices like version control, testing, and documentation. You can read more about how we use these tools in our Data Engineering Foundation guide.
4. The Orchestration Layer
Orchestration ensures that the extraction runs before the transformation and that any downstream dependencies are met. Tools like Dagster, Airflow, or even dbt Cloud's built-in scheduler handle this sequencing. If a step fails, the orchestrator sends an alert so your team can fix the issue before the CEO looks at a broken dashboard on Monday morning.
Building data pipelines from scratch using ELT
When building data pipelines from scratch, the most important rule is to keep the "Extract and Load" phase as simple as possible. Do not try to clean the data before it reaches the warehouse. Your goal should be to create a "mirror" of your source system inside your BigQuery or Snowflake environment.
Step 1: Define your sources and sinks
Identify exactly which systems you need to pull data from. Common sources include:
- CRM (HubSpot, Salesforce)
- Payment Processors (Stripe)
- Ad Platforms (Google Ads, Meta)
- Production Databases (PostgreSQL, MongoDB)
The "sink" or destination is your warehouse. Ensure your warehouse service account has the necessary permissions to create new schemas and tables.
Step 2: Set up the ingestion tool
Configure your ingestion tool (like Fivetran) to pull the tables you need. We recommend starting with a small subset of tables to prove the concept. For a CRM, you might start with just the Deals, Companies, and Contacts tables.
Step 3: Initialize dbt for transformations
Once the raw data is in your warehouse, initialize a dbt project. Create a sources.yml file to document where the raw data came from. Then, create "staging" models that do basic cleanup: renaming columns, casting data types, and deduplicating records.
Example staging model in SQL:
-- models/staging/stg_stripe_invoices.sql
select
id as invoice_id,
customer as customer_id,
amount / 100 as amount_usd, -- converting cents to dollars
status,
created as created_at
from {{ source('stripe', 'invoices') }}
where _fivetran_deleted = falseStep 4: Build the "Core" layer
The core layer is where you join disparate data sets. For example, you might join your Stripe invoices with your HubSpot deals to see which marketing campaigns are driving the highest actual revenue. These models should be "materialized" as tables or incremental models in your warehouse to ensure fast query performance for your BI tools.
Ready to fix your data foundation?
Book a free diagnostic call and find out where your stack stands.
Book a CallEnsuring data quality and observability
A pipeline that runs but produces wrong numbers is worse than no pipeline at all. Trust is the most expensive asset a data team has. Once leadership loses trust in a dashboard, it takes months of perfect performance to win it back.
We implement three levels of checks to maintain quality:
- Schema Checks: Ensuring that a column that should be a number hasn't suddenly started receiving strings from the API.
- Uniqueness Tests: Verifying that primary keys (like
order_idoruser_id) are actually unique. - Business Logic Tests: Checking for "sanity." For example, an order should never have a negative total value, and a customer should not have a "closed_won" date that occurs before their "created" date.
In our experience, using dbt's built-in testing suite is the most effective way to handle this. You can define these tests in a simple YAML file:
models:
- name: stg_stripe_invoices
columns:
- name: invoice_id
tests:
- unique
- not_null
- name: amount_usd
tests:
- accepted_values:
values: [0]
quote: false
operator: ">="Infrastructure as code for pipelines
One of the biggest mistakes we see is teams configuring their entire data stack via a web UI. This makes it impossible to track changes or recover from a disaster. Instead, we advocate for using Terraform to manage your data infrastructure.
With Terraform, your BigQuery datasets, Snowflake roles, and even your Fivetran connectors are defined in code. This allows you to peer-review infrastructure changes just like you review application code. It also allows you to spin up identical "Dev" and "Prod" environments, which is essential for testing new pipeline features without breaking the executive dashboard.
If you want to see how we apply these principles, our Learn AI Bootcamp covers the intersection of modern data engineering and production AI deployment.
Scaling your data pipeline for the future
As your data volume grows, your pipelines will need to evolve. What works for 10,000 rows of data will likely fail at 100 million rows. To prepare for this, focus on incremental loading. Instead of refreshing the entire dataset every night, your pipeline should only process the records that have changed since the last run.
Most cloud warehouses handle the scaling of compute automatically, but you must write your SQL to be efficient. Avoid "Select *" statements and use partitioning and clustering on large tables. For example, partitioning a table by created_at date allows the warehouse to skip 99% of the data when you only need to look at the last 30 days.
We have helped many clients move from brittle, manual processes to high-performance automated systems. By following a structured ELT approach and investing in observability early, you build a foundation that can support not just reporting, but advanced AI and machine learning initiatives.
Frequently Asked Questions About Data Pipelines
How long does it take to build a basic data pipeline?
For a standard SaaS stack (like HubSpot, Stripe, and Google Ads), we can typically set up a production-ready ELT pipeline in about two weeks. This includes the extraction layer, the warehouse setup, and basic dbt transformations. Complex custom integrations or legacy on-premise databases may take longer.
What is the difference between ETL and ELT?
ETL (Extract, Transform, Load) transforms data before it reaches the warehouse, often using an external server. ELT (Extract, Load, Transform) loads raw data directly into the warehouse and uses the warehouse's own power to transform it. ELT is the modern standard because it is more flexible and preserves raw data for future use.
Do I need a full-time data engineer to build these pipelines?
Not necessarily. For many startups and mid-market companies, a fractional consultant or a well-trained analytics engineer can set up the foundation. Once the architecture is in place, it requires much less maintenance than legacy systems. Many of our clients use our implementation retainers to manage these systems without making a $150K+ per year hire.
Which warehouse should I choose: BigQuery or Snowflake?
Both are excellent choices. We generally recommend BigQuery for teams already using Google Cloud Platform (GCP) or those who want a "serverless" experience with no management overhead. Snowflake is often better for teams that need multi-cloud support or highly complex data sharing capabilities. Both integrate perfectly with the tools mentioned in this guide.
How do I monitor if my data pipeline fails?
We recommend using a combination of Slack alerts and an observability tool. Most orchestrators like dbt Cloud or Airflow can send a notification to a specific Slack channel the moment a job fails. This allows your team to respond proactively before the data consumers notice an issue.
Ready to build a better data foundation?
If your team is ready to move beyond manual reporting and build a scalable data stack, we are here to help. Our team specializes in deploying dbt, Terraform, and BigQuery for companies that need reliable data to drive their growth.
Whether you need a full build-out or an AI Stack Audit to find the gaps in your current setup, we can help you get to production faster.
Book a free consultation with our team to discuss your data architecture and start building pipelines that actually work.