Jasper Alblas
Jasper Alblas
Mastering Data & Cybersec
Part 1: Foundations · Article 1.2 of 6
Every expert in data engineering started in the same place: confused by the terminology, overwhelmed by the tooling, and unsure where to begin. Star schemas, ETL pipelines, data lakes, OLAP cubes — the jargon piles up fast.
This series cuts through it. But before we write a single line of code, build a single pipeline, or open a single tool, we need to build a shared mental model of how the data world actually works. That mental model is what everything else in this series will plug into.
By the end of this article, you’ll understand how data flows through an organization from creation to insight, why data is stored differently depending on how it’s used, what the difference is between structured and unstructured data, and which roles are responsible for what. These aren’t just background facts — they’re the foundation that makes every technical concept you’ll learn later click faster.
Let’s build it from the ground up.
In the context of data engineering, data is any recorded information that can be stored, moved, or processed by a computer system. That’s a broad definition — intentionally so. It covers everything from a row in a customer database, to a PDF invoice, to a video file, to a single IoT temperature reading sent from a factory sensor every 200 milliseconds.
The reason the definition is broad is that data engineers work with all of it. The discipline isn’t limited to neat spreadsheets and tidy tables. It includes messy, inconsistent, high-volume information arriving from dozens of sources simultaneously — and the job is to make all of it usable.
Every piece of data in an organization goes through a lifecycle. Understanding this lifecycle is the single most important mental model in data engineering, because every tool, pattern, and concept you’ll learn maps onto one of its stages.
[Generation] → [Ingestion] → [Storage] → [Processing]
↓
[Consumption] ← [Serving] ← [Modeling] ← [Transformation]Generation is where data originates. A customer completes a purchase (transactional data). A web server logs a page request (event data). A machine on a factory floor records a temperature reading (sensor data). At this stage, data exists but isn’t yet useful to anyone outside the system that created it.
Ingestion is the act of pulling that data out of its source system and bringing it into the data platform. This might happen in batches (every hour, pull all new orders) or in real time (stream every event as it happens). We’ll cover both patterns in depth later in the series.
Storage is where the ingested data lives. This could be a data lake (raw files in cloud storage), a staging database, a data warehouse, or all three depending on the architecture. The choice of storage system depends heavily on how the data will be used next.
Processing and Transformation is where raw data gets cleaned, validated, reshaped, and enriched. This is where most of a data engineer’s work lives. A raw order record might have inconsistent date formats, missing values, and a customer ID that needs to be joined to a customers table before it’s actually useful.
Modeling is the step that gives data a structure optimized for answering business questions. This is where dimensional modeling, star schemas, and fact and dimension tables come in — concepts we’ll explore in detail in Phase 3.
Serving is making the modeled data available to the people and systems that need it — a BI dashboard, a data analyst’s SQL query, a machine learning model’s training job, or an application API.
Consumption is the end of the journey: a business decision gets made, a report gets read, a recommendation gets served. This is what the entire infrastructure exists to enable.
Data engineers own most of the middle of this lifecycle — ingestion through serving. The work is infrastructure-oriented, not insight-oriented. That distinction matters.
One of the most important distinctions in the entire data world — and one that trips up beginners constantly — is the difference between OLTP and OLAP systems.
OLTP (Online Transaction Processing) describes systems built for running a business in real time. When you place an order on an e-commerce site, that order gets written to an OLTP database. When a bank processes a payment, that’s OLTP. These systems are optimized for reading and writing individual rows quickly, handling many concurrent users, and ensuring data integrity (nobody’s bank balance goes negative because two transactions processed simultaneously).
Examples: PostgreSQL, MySQL, Oracle, SQL Server running your application’s backend.
OLAP (Online Analytical Processing) describes systems built for analyzing data across large volumes. When a finance team runs a report on monthly revenue across all product categories, that’s OLAP. When a data scientist queries two years of customer behavior to build a churn model, that’s OLAP. These systems are optimized for reading large amounts of data quickly, performing aggregations across millions of rows, and supporting complex analytical queries.
Examples: Snowflake, Google BigQuery, Amazon Redshift, DuckDB.
The key insight is this: you cannot use one system effectively for both purposes. An OLTP database is a terrible place to run analytical queries — it wasn’t built for it, and doing so will slow down the live application. An OLAP warehouse is a terrible place to process live transactions — it doesn’t have the transactional guarantees needed.
This is precisely why data engineering exists. The job is to move data from where it’s generated (OLTP systems) to where it can be analyzed (OLAP systems) — reliably, consistently, and on schedule.
Not all data looks the same, and how it’s structured determines how it can be stored, processed, and queried.
Structured data has a well-defined schema — rows and columns, with each column having a fixed data type. A database table of customer orders is structured data. It fits neatly into a spreadsheet or a relational database, and you can query it directly with SQL.
Semi-structured data has some organization but doesn’t fit into a strict tabular schema. JSON and XML are the most common examples. A JSON API response might have nested objects, arrays within arrays, and optional fields that appear in some records but not others. It has structure, but it’s flexible structure.
json
{
"order_id": "ORD-001",
"customer": { "id": "CUST-42", "name": "Alice" },
"items": [
{ "sku": "A100", "qty": 2, "price": 29.99 },
{ "sku": "B200", "qty": 1, "price": 49.99 }
]
}Unstructured data has no predefined schema at all. Images, videos, audio files, PDFs, and free-text documents are all unstructured. You can’t query an image with SQL. Processing unstructured data typically requires specialized tools — computer vision models, natural language processing, or document extraction pipelines.
In practice, data engineers work with all three types, often in the same pipeline. An API might return semi-structured JSON that gets parsed, flattened into structured rows, and loaded into a warehouse — all as part of a single ingestion job.
Alongside the type of data, you need to understand the two fundamental modes of moving it.
Batch processing means data is collected over a period of time and then processed all at once. Every night at midnight, pull all orders from the last 24 hours and load them into the warehouse. This is simple, reliable, and suitable for the vast majority of business analytics needs. Most data pipelines you’ll build early in your career are batch pipelines.
Real-time (streaming) processing means data is processed as it arrives, with very low latency. Fraud detection systems, live dashboards, and recommendation engines often require streaming. Tools like Apache Kafka, Apache Flink, and Spark Streaming are built for this.
The important thing to understand as a beginner: streaming is not inherently better than batch — it’s more complex and more expensive. The right choice depends on how quickly the business actually needs the data. Most analytics needs are satisfied with data that’s 1–24 hours old. We’ll cover this decision in depth in Phase 7, after you’ve built solid batch fundamentals.
One of the most common sources of confusion for beginners is understanding where data engineering sits relative to other data roles. Here’s a clear breakdown:
Data Engineer — Builds and maintains the infrastructure: pipelines, storage systems, data models, and the tooling that makes data available to everyone else. Primary tools: Python, SQL, Airflow, dbt, Spark, cloud platforms.
Analytics Engineer — A newer, hybrid role sitting between data engineering and analytics. Focuses on transforming and modeling data inside the warehouse using dbt, building the clean data models that analysts query directly. Primary tools: dbt, SQL, git.
Data Analyst — Answers business questions using existing data. Writes SQL queries, builds dashboards, and communicates insights to stakeholders. Primary tools: SQL, Power BI, Tableau, Excel.
BI Developer — Specializes in building and maintaining business intelligence infrastructure: data models in BI tools, reports, dashboards, and semantic layers. Primary tools: Power BI, Tableau, DAX, LookML.
Data Scientist — Builds statistical models and machine learning systems to extract predictive or prescriptive insights. Primary tools: Python, R, ML frameworks, Jupyter.
Data Architect — Designs the overall data platform strategy: which systems to use, how they connect, how data flows at an organizational level. Usually a senior role that emerges from data engineering or solutions architecture.
Think of it as layers. Data engineers lay the pipes. Analytics engineers shape what flows through them. Analysts and BI developers use what comes out. Data scientists build specialized vehicles that run on the same roads. Data architects design the city.
Most beginner data engineering content skips directly to Python and SQL — which is useful, but it means learners often write code without understanding the system it fits into. They build pipelines without knowing what kind of storage system the pipeline feeds. They model data without knowing whether the downstream consumer is an analyst running ad hoc SQL or a BI tool with specific requirements.
Understanding the landscape first means every technical choice you make later has context. When we get to Part 2 and start building Python ETL scripts, you’ll know why we’re writing to staging files rather than directly to the warehouse. When we get to Part 3 and design dimensional models, you’ll understand why we’re separating facts from dimensions and not just dumping everything into one table.
This is the mental model everything else plugs into. Keep coming back to the data lifecycle diagram. Ask yourself, for every tool and technique we cover: which stage of the lifecycle does this live in? Who uses what it produces?
All the concepts above will eventually translate into real, runnable code. Here’s a tiny preview — don’t worry about understanding every line yet. This is just to show you what “working with data in Python” actually looks like.
Throughout this series we’ll build a single project called ShopFlow Analytics — a fictitious e-commerce company selling consumer goods online. You’ll start with raw CSV files of orders, customers, and products, and by the end you’ll have a fully orchestrated, cloud-deployed data platform feeding a Power BI executive dashboard. Every part adds a new layer to the same codebase, so by Part 13 you have one complete, impressive GitHub repo to show employers.
Here’s the simplest possible preview of what that looks like — reading ShopFlow’s raw orders file in Python and filtering to completed orders. This is the earliest form of the Extract → Transform → Load pattern you’ll build properly in Part 2:
python
import csv
# EXTRACT — read raw ShopFlow orders from a CSV file
with open("orders.csv") as f:
orders = list(csv.DictReader(f))
print(f"Total orders loaded: {len(orders)}")
# TRANSFORM — keep only completed orders
completed = [o for o in orders if o["status"] == "completed"]
print(f"Completed: {len(completed)} | Skipped: {len(orders) - len(completed)}")
# LOAD — in production this writes to a database or Parquet file
for order in completed:
print(f" Order {order['order_id']} — £{float(order['total_amount']):.2f}")If you have Python installed, create a small CSV with a few fake rows and run this now. The moment code does something with real data, the abstract concepts above suddenly feel very concrete.
This series follows a deliberate progression from mental model to production-ready skills:
Each article comes with working code, real examples, and a concrete action item to practice before the next one.
Draw the data lifecycle from memory: Generation → Ingestion → Storage → Processing → Transformation → Modeling → Serving → Consumption. Then, for a product or app you use every day — Netflix, Spotify, your bank — walk through each stage and ask: where does the data originate? How does it get into the warehouse? What transformation might make it useful for their recommendation system?
You won’t know the real answers, but the exercise builds the habit of thinking in systems — which is the core skill of a data engineer.
Do I need a computer science degree to become a data engineer? No. Demonstrable skills, project experience, and a structured learning path matter more to most employers than a specific degree. This series is designed to be self-contained.
What’s the difference between a data engineer and a software engineer? Significant overlap in tools (Python, Git, testing, systems thinking) but different domain focus. Data engineers specialize in data infrastructure — pipelines, storage, modeling — rather than user-facing applications. Many data engineers come from software engineering backgrounds.
Should I learn Python or SQL first? SQL first, or in parallel with Python. SQL is used in every part of data engineering and is the language of the warehouse. Python is essential for pipeline logic. In practice, you’ll use both every day. We’ll cover both starting in Part 2 and Part 3.
How long does it take to become job-ready as a data engineer? With consistent study and hands-on project work, most people with basic programming familiarity can reach entry-level capability in 6–12 months. This series is structured to get you there systematically.
Is data engineering a stable career with AI becoming more prevalent? More stable than most. AI models require clean, reliable data pipelines to train and operate. Every AI initiative a company runs increases demand for data engineers, not decreases it. Data engineering roles have seen strong growth, with global workforce figures exceeding 150,000 employees and the industry posting substantial year-over-year growth. The judgment, architecture, and governance work that data engineers do is precisely what AI tools cannot replace.
Next up → 1.3: Who Does What? Roles & Teams in Data — a deeper look at every data role, how teams are structured, and how to pick the right path for you.