01 / Data engineering
Data Engineering Services & Consulting
Data engineering is the practice of moving data from source systems into models a business can rely on. Quorlytic builds ingestion, transformation and delivery pipelines with tested quality gates, documented lineage and a named owner for each data product, so a reported number can be traced back to its source.
By QuorlyticUpdated
Connect fragmented sources to dependable data products. Quorlytic scopes ingestion, transformation and delivery around the decisions your teams need to make—and the reliability those decisions require.
Sources
- Applications
- Databases
- APIs
- Events
Ingestion
- Batch · CDCState, on a schedule
- StreamingEvents, continuously
- OrchestrationDependencies, retries, backfill
- TransformationTested, version-controlled logic
Warehouse / lakehouse
- Rawreplayable
- Curateddeclared grain
- Servingsemantic layer
- Analytics
- ML
- AI
Across every layer — quality tests · lineage · a named owner
The business problem
Start here when reporting depends on manual exports, a failed job is discovered by a business user, or each team has a different version of the same data. The first task is to agree what must arrive, when it must arrive and who owns its correctness.
What we build
Separate raw ingestion from validated transformations and business-facing models. Preserve enough source history to replay safely. Handle schema changes, duplicate events, late arrivals and partial failures deliberately. A pipeline that runs once is not yet a production data product.
The outcome
Source inventory and data contracts
When this is the right engagement
Symptoms that bring teams here.
These are the operational symptoms that usually precede a data engineering engagement. They are specific on purpose: if none of them describe your estate, this is probably not the service you need.
A failed job is discovered by a business user
There is no monitoring between the pipeline and the people who depend on it, and no named responder.
Reporting still depends on a manual export
A person is part of the pipeline. The number is only as timely and as correct as their week.
Two teams report different figures for the same measure
Transformation logic has been re-implemented per consumer instead of modelled once.
A backfill is a project rather than a rerun
Loads are not idempotent, so replaying history risks duplicating or losing it.
Schema changes at source break things downstream, silently
There is no contract between producer and consumer, so a rename lands as a null column.
Nobody can say where a number came from
Lineage is undocumented, so a disputed figure cannot be traced and therefore cannot be defended.
Capability model
The capability model.
Data engineering is six connected responsibilities, not one. Select a stage to see what it is for, what usually goes wrong in it, and what it produces.
01 — Ingest
Move data out of operational systems without changing its meaning, and without putting load on systems that have a day job.
What it produces
Raw, replayable source data with its arrival time preserved.
What usually goes wrong
- Source systems that cannot tolerate extraction during business hours
- Updates and deletes that a full reload would silently lose
- APIs with rate limits, pagination and no reliable change marker
- Late-arriving and out-of-order records
Technologies in this stage
- Change data capture
- Batch extracts
- Kafka
- Cloud object storage
02 — Orchestrate
Declare what depends on what, so a run can be scheduled, retried, backfilled and explained by someone other than its author.
What it produces
A dependency graph with retry, backfill and alert routing defined per pipeline.
What usually goes wrong
- Dependencies implied by start times rather than declared
- Retries that re-run side effects
- Backfills that cannot be observed while they run
- Alerts with no route to an accountable person
Technologies in this stage
- Airflow
- dbt
- Platform-native schedulers
- CI/CD
03 — Transform
Turn raw source structures into validated, business-meaningful tables, with the logic in one governed place.
What it produces
Versioned, tested transformations with a documented layer boundary.
What usually goes wrong
- Transformation logic duplicated per consumer
- Silent type coercion and precision loss
- No separation between raw, validated and business-facing layers
- Changes shipped without a test
Technologies in this stage
- dbt
- Spark
- SQL
- Python
04 — Model
Represent the business — its entities, grain, history and relationships — so a question can be answered without re-deriving it.
What it produces
Curated models with a declared grain, key strategy and history policy.
What usually goes wrong
- Grain left implicit, so aggregates double-count
- Slowly changing attributes overwritten in place
- Surrogate keys invented per pipeline
- Models shaped by the source system rather than the decision
Technologies in this stage
- Dimensional modelling
- Medallion layers
- Snowflake
- Databricks
05 — Serve
Deliver the model to whatever consumes it — BI, applications, machine learning — under the access rules the data requires.
What it produces
A stable, access-controlled interface each consumer can depend on.
What usually goes wrong
- Concurrency contention between reporting and engineering workloads
- Row-level access reimplemented per tool
- Extracts that become an uncontrolled second copy
- Consumers coupled to physical table names
Technologies in this stage
- Semantic layers
- Warehouse views
- APIs
- Feature stores
06 — Observe
Know that the data is correct and current before the business does, and be able to prove it afterwards.
What it produces
Monitored freshness and quality with an owner, an alert route and a runbook.
What usually goes wrong
- Freshness measured by job success rather than by data arrival
- Quality checks that log rather than block
- No quarantine, so invalid records are dropped silently
- Lineage that exists in someone's memory
Technologies in this stage
- Quality tests
- Freshness monitors
- Lineage capture
- Runbooks
Illustrative reference architecture
Reference architecture
A typical shape for a governed analytical platform. It is drawn to show where decisions live, not to prescribe a stack — batch and streaming paths coexist because most estates need both.
Operational sources
Systems that run the business and were not designed to be queried.
- Databases
- ERP
- CRM
- Events
- APIs
Ingestion
Batch and change data capture for state, streaming for events.
- CDC
- Batch extract
- Stream ingest
Raw landing
Source-faithful and replayable. Nothing is interpreted yet.
- Object storage
- Landing tables
- Arrival timestamps
Transformation
Validated, tested, version-controlled logic in one place.
- dbt
- Spark
- SQL
Curated models
Business entities at a declared grain, with history policy.
- Dimensions
- Facts
- Data products
Serving
The interface each consumer depends on.
- Semantic layer
- BI
- ML features
- Applications
Across every layer
- Data contracts
- Quality gates
- Lineage
- Access control
- Cost visibility
The approach
- 01
When pipelines become a business bottleneck
Start here when reporting depends on manual exports, a failed job is discovered by a business user, or each team has a different version of the same data. The first task is to agree what must arrive, when it must arrive and who owns its correctness.
In healthcare data estates, the source contract also needs to preserve the purpose and permissions attached to each feed, rather than leaving that context to a downstream dashboard.
- Batch and change-data-capture ingestion from databases, ERP, CRM and APIs
- Warehouse and lakehouse models with clear source-to-metric lineage
- Streaming only where the decision needs lower latency
- 02
Design for change, replay and recovery
Separate raw ingestion from validated transformations and business-facing models. Preserve enough source history to replay safely. Handle schema changes, duplicate events, late arrivals and partial failures deliberately. A pipeline that runs once is not yet a production data product.
- 03
Quality is an acceptance criterion
Agree completeness, uniqueness, freshness and reconciliation checks with the data owner. Quarantine invalid records instead of silently discarding them. Test backfills and recovery, version transformations and connect alerts to a runbook with an accountable responder.
- 04
Choose a stack for the workload
Snowflake, Databricks or BigQuery may provide the storage and compute layer. dbt, Airflow, Spark and Kafka solve different transformation, orchestration and processing needs. We evaluate existing skills, data volume, latency, cloud constraints and operating cost before adding another platform.
- 05
Choose explicitly between ETL, ELT and streaming
ETL transforms data before it lands, ELT loads first and transforms inside the platform, and streaming processes events as they arrive. The choice follows the platform’s capability and the decision’s freshness requirement, not a preference. Loading first is only cheaper when the warehouse can absorb the transformation cost and the model stays governed.
- Transformation placed where the platform and team can operate it
- Change data capture used where source updates must not be missed
- Idempotent, replayable loads designed before the first production run
- 06
Orchestration earns its place
A scheduler that runs jobs on a timetable is not an orchestrator. Dependencies, backfills, retries, alerting and data contracts decide whether a pipeline can be operated by someone other than its author. Agree where dependencies are declared, how a failed run is replayed and who is woken when it fails.
- Dependencies declared, not implied by a start time
- Backfills repeatable and observable
- Alert routing and ownership named per pipeline
- 07
Warehouse or lakehouse follows the consumer
A warehouse suits governed, concurrent, well-modelled analytical queries. A lakehouse suits large volumes, semi-structured data and machine-learning workloads that need the same files. Many estates run both with an explicit boundary. Open table formats reduce lock-in but add compaction, retention and small-file work that someone must own.
- Query concurrency and consumer mix decided first
- File layout, compaction and retention planned
- Cost of the storage layer made observable
Delivery model
How the work is sequenced.
Four phases. Each one ends in an artifact you keep whether or not the next phase happens.
| Phase | Activities | Decisions made here | What you keep |
|---|---|---|---|
| AssessEstablish what exists and what must be true. |
|
| Source inventory and draft data contracts |
| ArchitectDecide the shape before writing the pipeline. |
|
| Target architecture and data contract set |
| BuildImplement in slices that reach a consumer. |
|
| Versioned pipelines with tests and deployment configuration |
| OperateHand over something that can be run without you. |
|
| Monitoring, lineage and operational runbooks |
Technology fit
What each technology is here to do.
Technologies are listed by the role they play in this service. Selection follows the workload, the existing estate and the team that will operate it — not the other way round.
Movement
- Change data capture
- Kafka
- Batch extraction
- Cloud object storage
Getting data out of operational systems without disturbing them, and without losing updates or deletes.
Transformation logic
- dbt
- Spark
- SQL
- Python
Where business logic lives. The choice is mostly about who will maintain it and where the compute is cheapest to run.
Platform
- Snowflake
- Databricks
- BigQuery
Storage, compute and governance. Concurrency profile and consumer mix decide this more than feature lists.
Platform detailOrchestration
- Airflow
- dbt
- CI/CD
Dependencies, retries, backfills and deployment. This is what makes a pipeline operable by a second person.
Operations
- Quality tests
- Freshness monitors
- Lineage
- Alerting
The difference between a pipeline that runs and a data product that can be trusted and defended.
Technology marks belong to their respective owners. No partnership, certification or endorsement is implied.
Engineering concerns
What has to be answered before it is trusted.
The engineering concerns a data platform has to answer before it can carry a business decision.
- Lineage
- Every published figure should be traceable to the source records and the transformation version that produced it.
- Quality
- Completeness, uniqueness, freshness and reconciliation agreed with the data owner and enforced as acceptance criteria, not logged as warnings.
- Access
- Row and column level rules defined once at the serving layer, tested with the identities real consumers hold.
- Reliability
- Idempotent loads, tested backfills, and a recovery path that has been rehearsed rather than documented.
- Deployment control
- Transformations versioned and released like application code, with an environment to break before production.
- Cost visibility
- Compute attributed to the workload that caused it, so an expensive pipeline is a visible engineering decision.
Where it applies
Related work, and why it is related.
Where this service is usually the first engagement, and what it connects to.
- Customer 360Identity resolution and history depend on ingestion that preserves change, so this solution is built on a data engineering foundation.
- Retail and ecommerceTransactions, inventory and clickstream arrive at different rates; the platform has to reconcile them before anyone can trust a margin figure.
- ManufacturingSensor and MES data arrive high-volume and out of order, which makes ingestion design the deciding factor.
- Data modernizationWhen the constraint is the current platform rather than the pipelines on it, modernization is the right starting point.
- Real-time streamingWhen a decision loses value at batch latency, the streaming capability handles the event-time and delivery-semantics work that batch design does not.
Define what a replay must preserve.
A pipeline can report a successful retry while silently duplicating a business event. In this hypothetical change-data-capture contract, an orders feed updates a curated reporting table. Acceptance concerns the final business state and the recovery boundary, alongside the transport's delivery behavior.
Scope and assumptions: This is a proposed test contract, not an implemented connector or a promise of exactly-once delivery. Source logs, retention, connector versions, transaction boundaries and destination write behavior must be checked before selecting a recovery mechanism.
| Dimension | Contract decision | Failure test and acceptance evidence |
|---|---|---|
| Initial snapshot boundary | Define how the initial copy and subsequent changes meet. Preserve the source position and ordering information needed to identify overlap or a gap. | Introduce a source change around the handoff boundary. Compare the expected final record with the destination and retain the snapshot identifier and connector position. |
| Write before checkpoint | Specify what happens if the destination write succeeds but the consumer position is not recorded. A repeated event needs an explicit destination rule. | Interrupt an approved test at that boundary, replay the input and compare business keys, versions and aggregates. A second successful job status alone does not demonstrate an idempotent result. |
| Out-of-order update | Define how the destination decides which change is newer for a business key. Do not treat arrival time as a universal ordering guarantee. | Deliver an older update after a newer one in the test fixture. Check the retained business state and record how ties or missing ordering fields are handled. |
| Delete and re-create | Agree how source deletions affect the curated record and how a later re-created identity is distinguished. Preserve audit requirements separately from current-state reporting. | Test update, delete and re-create sequences, including replay. Check that a deleted record is not accidentally restored by an old event. |
| Invalid schema or payload | Choose when to stop, quarantine or continue; name who can release held data. Define what a checkpoint means when some records remain unresolved. | Inject an incompatible or malformed test event. Verify the alert, retained evidence, consumer freshness signal and approved recovery path without silently discarding the event. |
At narrow widths, scroll the worksheet to read every column. With the table focused, use the arrow keys to scroll.
Worked decision: if replay leaves the right order record but increments a downstream sales total twice, the proposed contract has failed. Evaluate the record write and aggregate update together, or rebuild the aggregate from an accepted state. The correct recovery design depends on the real destination; transport-level deduplication alone is not proof of end-to-end correctness.
- Keep fixtures, expected state, actual state, checkpoint positions and operator decisions together. Define acceptable freshness and reconciliation rules with the consumer owner before testing.
- Kafka's documentation distinguishes Kafka transaction guarantees from writes to external systems, where the destination must cooperate. Apply that boundary explicitly when evaluating a connector's delivery claim.
Carry the accepted contract, alerts and unresolved exceptions into the managed data operating handoff so that the recovery owner inherits more than a successful deployment log.
Official references for this example:
Questions
Questions worth asking.
Do we need real-time streaming?
Only if the business decision loses value at batch latency. Streaming introduces replay, ordering and operational complexity. Start with a freshness target and compare the simplest architectures that can meet it.
Can you build on our existing platform?
An assessment starts with your current sources, models and cloud environment. Retain infrastructure that meets the requirements; replace a component only when its limitations justify the migration effort.
What is needed to scope the work?
An initial source list, approximate volumes, required refresh times, current failure modes and a business owner for the output. Sensitive records and credentials are not needed in the first conversation.
Should we transform data before or after loading it?
It depends on the target platform, the transformation complexity and who operates it. Loading raw data first keeps lineage intact and makes replay easier, but pushes cost into the warehouse. Transforming before loading keeps model logic closer to the source but multiplies the systems that must be maintained. Decide with the platform and the team, and document the boundary.
Can we hire dedicated data engineers from Quorlytic?
Yes, as a dedicated senior team rather than individual contractors: a lead engineer accountable for the outcome, with engineers who work inside your cloud accounts and repositories, to your roadmap. The team shape, the notice period and what counts as done for each piece of work are agreed before it starts. If you only need extra hands without that accountability, a staffing firm is usually the better fit.
How much does data engineering consulting cost?
It depends on the number and condition of your sources, the freshness each decision needs, the target platform, how much business logic is undocumented, and whether we also operate the platform afterwards. A defined build or migration is priced as a fixed-scope project after a short assessment, so the cost is agreed against a written scope rather than open-ended hours; ongoing roadmap work is priced as a monthly team. Tell us the sources and the decision the data supports, and we will give you a range for your case.
Next step
Discuss your data architecture.
Bring a source list and a freshness requirement. That is enough to scope the first conversation.
