Data Engineering Overview

A high-level mental model for how data moves from a source to a reliable consumer.

Data Engineering is the engineering discipline responsible for building systems that collect, store, process, transform, and deliver data.

Its purpose is to create a reliable and manageable path from the point where data is produced to the systems that consume it. That path is the answer to a practical question: what does data engineering do with data between its source and its consumer?

Why Data Engineering exists#

Data can originate in many places:

  • applications and events
  • APIs and databases
  • files such as CSV and JSON
  • cameras and RTSP streams
  • sensors and business systems

Raw data is not automatically useful. It may use different formats, contain duplicates or invalid values, arrive at different frequencies, and live across multiple systems. Data engineering turns those inputs into data that other systems can use with confidence.

The central idea

A useful data system is not simply moving data between databases. It should be reliable, reproducible, observable, and manageable.

Mental model: the data path#

The core flow is:

Text
SourcesIngestionStorageTransformationServingConsumers

Consumers may be analytics, machine learning systems, applications, reports, or APIs. The flow is supported by cross-cutting engineering concerns:

  • Orchestration coordinates when work runs, in what order, and how failures are handled.
  • Data quality checks whether the resulting data is correct and usable.
  • Monitoring makes pipeline behavior and failures visible.

The stages are responsibilities, not necessarily separate products. A small system may implement several stages in one service; a larger system may use different storage and processing technologies for each one.

Core components#

Source#

The source is where data originates. Examples include an API, database, CSV or JSON file, RTSP stream, application event, or sensor.

Ingestion#

Ingestion collects data from a source and delivers it into the data system. It may read files, call an API, consume events, or receive a stream from a camera.

Storage#

Storage persists data so it can be processed and read later. Common choices include PostgreSQL, ClickHouse, object storage, and data warehouses. The choice depends on how the data will be written, queried, retained, and shared.

Transformation#

Transformation turns raw data into usable data. Typical operations include cleaning, normalization, type conversion, joins, filtering, and aggregation.

Orchestration#

Orchestration coordinates execution:

  • when a task runs
  • which tasks run first
  • what dependencies exist
  • how retries and failures are handled

Airflow is one example of an orchestration tool. The underlying responsibility is the same regardless of the tool.

Data Quality#

Data quality is how we verify that data is actually correct. Checks might cover required fields, valid ranges, uniqueness, freshness, or row counts.

A successful run is not enough

A pipeline can finish without an execution error and still produce incorrect, incomplete, duplicated, or stale data. Task status and data quality are different signals.

Serving#

Serving exposes prepared data to its consumers. A serving layer may provide tables for analytics, features for ML systems, data for an application, or responses through an API.

Practical example: order data for reporting#

Consider a system that collects customer orders and prepares them for reports:

Text
Customer AppOrder Events / APIPythonValidation / ProcessingPostgreSQL / ClickhouseTransformationSales Data MartReports / API

Each part has a clear responsibility:

  • Customer App is the source.
  • Order Events / API is the transport and source interface.
  • Python performs ingestion, validation, and processing.
  • PostgreSQL stores the incoming order records.
  • SQL transformations prepare consistent reporting structures.
  • Sales Data Mart is the serving layer for a focused use case.
  • Reports / API are consumers.

Airflow or another orchestrator could coordinate scheduled processing and dependencies between these steps. The exact tools may change, but the flow of responsibilities remains understandable.

Best practices#

  • Keep component responsibilities separate so each stage has a clear purpose.
  • Preserve raw or source data when it is useful for replay, debugging, or audit.
  • Design pipelines so safe reruns are possible after failures.
  • Validate data, not only task execution status.
  • Keep configuration outside application logic.
  • Build observability and useful logging into the system from the start.

Common mistakes#

One large script#

Putting ingestion, processing, storage, and reporting into one large Python script makes failures difficult to isolate and changes risky.

Unclear data layers#

Mixing raw and processed data without clear layers makes it hard to know what a table contains, whether it can be rebuilt, and which data is safe for consumers.

Business logic inside the orchestrator#

The orchestrator should coordinate work. Putting the core data-processing logic directly into orchestration code makes it harder to test and reuse.

Treating task success as data success#

Assuming that “pipeline succeeded” means “data is correct” misses quality, freshness, and completeness problems. Execution monitoring and data validation must work together.

Quick reference#

ComponentResponsibility
SourceProduces data
IngestionCollects and transports data
StoragePersists data
TransformationConverts data into useful structures
OrchestrationCoordinates execution
Data QualityValidates data
ServingExposes prepared data
ConsumerUses the resulting data

Data Engineering builds a reliable and manageable path for data from source to consumer.

See also#

These upcoming Fundamentals articles continue the overview: