Anonymized enterprise case study

Snowflake event-driven architecture for trusted reporting.

Teams no longer agreed on the numbers in their reports. Eunimo rebuilt the data platform on Snowflake to handle source changes as they arrive. Shared rules and data checks let teams catch faults early and trace each number back to its source.

Data arrived from many systems on many schedules, pipelines had multiplied faster than ownership, and schema changes broke reports without warning. When two teams pulled the same metric and got two answers, the cost was not just rework, it was lost confidence in every number the business reported.

Source changes flow through Kafka into Snowflake. Tested transformations turn those records into reporting data, while quality checks flag problems before analytics consumes them. Lineage records where a metric came from and which processing steps produced it.

Follow the data. Check it before reporting.

The main path moves source changes into reporting data. Quality checks and lineage run alongside it: they explain whether a number is ready to use and where it came from.

Read from source to report. Quality checks can prevent data from reaching reporting; lineage records the dependencies along the path.

Quality checks inspect freshness, schema, and integrity. Lineage connects reported metrics to transformations and source records.

Illustrative quality check: For a report that requires an order identifier, a missing identifier would fail the relevant check and flag the affected data for review. This explains the pattern; it is not a claim about a particular client field or measured test result.

  • Reporting path: Source changes: Application events and database changes → Kafka: Event transport and replay → Snowflake: Raw records via Snowpipe Streaming → Tested transforms: dbt models and quality checks → Reports: Shared metric definitions
  • Source changes: Change data capture (CDC) records database changes alongside events published by applications. Application events, CDC
  • Event transport: Kafka carries events with schema contracts and a path for rejected records and replay. Kafka, Schema contracts, Replay
  • Raw records: Snowpipe Streaming loads records into Snowflake with timestamps and source positions preserved. Snowflake, Snowpipe Streaming
  • Tested reporting data: dbt, a data transformation tool, applies versioned logic and tests before data serves reports. dbt models, Quality checks
  • Metrics and lineage: Shared metric definitions and dependency records help explain how a reported number was produced. Metric definitions, Lineage, Analytics
  • What happens when data fails a check? A schema change or incomplete load can produce plausible but incorrect reports. Check freshness, load shape, and integrity at ingestion, transformation, and the reporting gate. A failed check needs an owner and a recovery decision before affected data is treated as report-ready. The technical flow retains rejected-record and replay paths.
  • Can failed events be processed again? Recovery needs a known starting point and the context that produced a failed load. Keep source positions, schema versions, and ingestion timestamps with raw records; retain a replay path through the transport layer. Operators can locate the affected input. Replay still needs duplicate-handling rules and verification of downstream transformations.
  • Where did this reported number come from? A metric is difficult to trust if its source and transformation logic are unclear. Publish lineage from pipeline metadata and dbt artifacts, alongside shared metric definitions. Trace a report through its transformations to the raw records and source events. A changed definition can be reviewed against its downstream dependencies.

Why the business stopped trusting the numbers.

The platform was rebuilt around a single principle: data should move as events, transform through tested logic, and prove its quality before anyone reports on it. Snowflake became the governed core with lineage making the flow observable.

  • Trust: One agreed definition of every metric. Metric logic moved into version-controlled transformations with tests, so the same number means the same thing in every report.
  • Reliability: Catch breakage before reports do. A data quality framework checks freshness, volume, schema, and integrity on every load, so failures surface as alerts, not as a confused stakeholder.
  • Observability: See where data comes from and where it goes. End to end lineage made dependencies visible, so a change upstream no longer breaks an unknown report downstream.
  • Move data as events so the platform reacts in near real time instead of waiting on batch windows.
  • Validate every load against freshness, volume, schema, and integrity checks.
  • Hold metric definitions in code so teams stop disagreeing on the numbers.
  • Trace any report back to its sources through lineage.

An event-driven flow from source systems to trusted analytics.

Source changes flow through Kafka into Snowflake. Tested transformations turn those records into reporting data, while quality checks flag problems before analytics consumes them. Lineage records where a metric came from and which processing steps produced it.

  • Event movement: Streaming and ingestion land data into Snowflake on an observable cadence.
  • Tested trust: Version-controlled transformations and governed metric definitions.
  • Quality and lineage: Validation on every load and end to end dependency tracking.
  • Movement: Data flows as events, not as fragile overnight jobs. A streaming layer captures change from source systems with back-pressure controls. Kafka topics are consumed through Snowpipe Streaming into immutable raw tables with offsets and schema versions preserved. Event-driven workflows trigger downstream processing as data arrives.
  • Trust: Correctness is enforced, not hoped for. Tested transformations build staging and mart layers with version-controlled logic. Governed metric definitions give one source of truth for the numbers. Quality checks gate source freshness, raw loads, staging conformance, mart integrity, and the serving edge before analytics consumption.
  • Visibility: The flow can be inspected end to end. Lineage is published from pipeline metadata and dbt artifacts, tracing each dashboard metric back to the source events and raw records that produced it. Freshness and failure alerts surface issues before they reach reports. A governed analytics layer serves business insights from trusted data.

Built to be trusted, observed, and evolved.

The way data moves is part of the architecture, not bolted on. A reusable quality framework, version-controlled transformations, lineage, and clear ownership let the team extend pipelines while keeping the numbers dependable.

  • Trace the data, then rebuild it: We started by mapping how data actually moved and where trust broke, so the rebuild targeted the real failure points.
  • Quality as a framework, not a script: Checks were built as a reusable framework applied across pipelines, so new data sources inherit the same guarantees.
  • Transformations in code: All transformation and metric logic lives in version control with tests, so changes are reviewable and reversible.

The business could trust its numbers again.

The result was more than new pipelines. Governed metrics, tested transformations, quality gates, and lineage gave the business dependable reporting and the team a platform they could keep changing safely.

  • Reporting the business trusts: Governed metrics and tested transformations mean teams stop arguing about the numbers.
  • Failures caught early: Quality checks turn silent breakage into actionable alerts before reports go wrong.
  • A platform that keeps changing: Lineage and tests let the team evolve pipelines without breaking what depends on them.
  • Reporting freshness you can inspect: Changes enter through a streaming path, with timestamps that make freshness observable. End-to-end reporting latency depends on transformation and quality checks; no measured latency is published here.

Trusted numbers. Observable pipelines. A data platform built to keep changing.

The trade-off stayed explicit: event-driven data adds moving parts, so the platform had to earn it back. Here, tested transformations, quality gates, and lineage turned fragmented pipelines into analytics the business could trust.