Skip to content
Back to work
Case study

Analytics that ships the day it is spec'd

Replaced a bespoke ETL stack with a typed, schema-driven pipeline so a new metric goes from request to production dashboard in an afternoon.

Meridian Analytics2023Illustrative
  • Analytics
  • Schema-driven
  • TypeScript
  • CDK
By the numbers
6 wks → 1 day
New metric lead time
−74%
Pipeline LOC
100%
Schema coverage
how it's built
Analytics pipelineserverless · analytics
Source eventsAPI / Firehose
Raw lakeS3
TransformLambda · typed
Analytics storeS3 + Athena
Dashboardsscheduled
Speed
A new metric goes from request to a production dashboard in about a day — down from six weeks.
Schema-driven
Pipelines are generated from typed definitions; no bespoke ETL per metric.
Cost
Serverless — pay per event and per query, nothing idle.
Coverage
100% schema coverage, validated in CI.
Delivery & environmentsCI/CD
Sourceauthor metric (typed schema)
CIlint · typecheck · validate schema
BuildCDK synth · generate pipeline
DeployCDK deploy
devstagingprod

A new metric is authored as a typed schema definition and committed; CI validates it and generates the transform pipeline, which deploys through dev → staging → prod. Publishing a metric is a pull request, not a ticket — which is how a six-week turnaround became about a day.

01The problem

Every new chart at Meridian was a small project: a data engineer hand-wrote extraction, a backend engineer reshaped it, a frontend engineer rebuilt the types, and the three drifted apart the moment anything changed. A simple new metric took six weeks, and breakages were found in production by customers.

02The approach

We made the schema the program. Each metric is declared once as a typed definition; from that single source we generate the ingestion contract, the storage projection, the API types, and the client-side hooks. A change to a definition fails the build everywhere it is now inconsistent — so drift is caught at compile time, not by a customer. The runtime is a thin serverless pipeline on EventBridge and DynamoDB, deployed as a single CDK app per environment.

03The outcome

A new metric is now an afternoon: declare it, open a pull request, and the pipeline, storage, and dashboard follow from the type. The hand-written pipeline code shrank by nearly three-quarters, schema coverage is total, and the recurring class of production type-mismatch bugs simply stopped happening.

05Start a project

Let’s write the next system into being

Tell us what you’re building. We’ll reply within two business days with a frank read on scope, shape, and whether we’re the right studio for it.