How do you manage event schema evolution without breaking reports?

Contract-change discipline across ingestion, warehouse, and BI.
Backward-compatible serialization, nullable new fields, raw versus modeled layers, versioned schemas, and consumer alerts.
What's really being asked
This question probes whether you see schema evolution as a distributed systems contract problem rather than a simple database migration. The interviewer cares if you understand that an analytics pipeline has multiple consumers including stream processors, batch ETL, data scientists, and BI tools, each with different tolerance for change. They want to know if you can prevent downstream breakage while enabling new analytics.
The full answer
First, enforce backward-compatible serialization using Avro, Protobuf, or JSON Schema with default values so old readers can deserialize new events without failing. Second, add the new attribution_source field as nullable or with a sensible default, never as a required field on existing events, which prevents pipeline crashes during the transition. Third, separate raw ingestion from modeled consumption by landing events in a raw or bronze layer that accepts schema drift, then propagating the new field through curated silver and gold tables only after validation so historical reports remain stable. Fourth, use a schema registry to version the event contract, enforce compatibility rules, and give downstream teams a changelog. Fifth, communicate the change before deployment and run a shadow or dual-write period to measure impact on dashboards and ML features.
The mistakes people make
A major red flag is suggesting an ALTER TABLE DROP COLUMN or making the new field non-nullable on the raw event store, which immediately breaks old readers. Another is proposing to rewrite or delete historical data so every past signup row matches the new schema, destroying the immutable event log. Saying you will just backfill everything over a weekend without a compatibility plan also signals inexperience with production analytics uptime.
What usually comes next
The interviewer may ask how you would handle a type change on an existing field, such as changing a timestamp from epoch seconds to an ISO string, or how you would manage a breaking change when a partner removes a field you depend on. They might also probe cost by asking how to reprocess six months of Parquet in S3 without doubling your compute bill, or how you enforce schema contracts in a loosely governed microservices environment.
A concrete example
Suppose your signup events land in S3 as Parquet via Kinesis Firehose. You register version 1 of the schema in the Glue Schema Registry with backward compatibility enforced. You update the producer to emit version 2 that includes attribution_source as an optional string with a default of null. Firehose continues writing Parquet without errors because the new field is optional. In Spark, the raw table picks up the new column automatically. Your dbt model for signups selects all historical columns plus the new attribution_source, coalescing nulls to unknown for reporting. BI dashboards using the modeled table see no interruption, while analysts can immediately query the new field. After a week of validation, you mark version 2 as the default and deprecate version 1.
Interview question
You must add a new attribution field to existing signup events consumed by BI tools and ML pipelines. Which strategy best prevents downstream breakage?
- a.Alter the raw event table to drop deprecated columns, add the new field as non-nullable, and rebuild the gold table from scratch
- b.Register a backward-compatible schema version with the new field as nullable, land events in a raw layer that tolerates drift, then propagate to modeled tables after validationCorrect
- c.Rewrite all historical Parquet files to include the new field with default values, then update the producer to emit the new schema version
- d.Add the field as required in the schema registry, backfill the raw table over a weekend, and notify dashboard owners after deployment
Why? this is the answer
Option B follows backward-compatible serialization, protects the immutable raw layer, and validates changes before they reach BI. Option C is tempting because rewriting history feels clean, but it destroys the immutable event log and incurs heavy reprocessing costs, while C and D immediately break old readers.
Just read this? Test yourself on what you have been reading.
Read the original → branchboston.com
- #analytics
- #schema-evolution
- #data-engineering
- #data-warehouse
- #event-streaming
You just looked this up. Could you explain it out loud?
That is the part interviews actually test. Tezvyn takes questions like this one and gives you what the interviewer is really checking, the answer that lands, and the mistake that ends the conversation, in the four minutes before your next meeting.
The iPhone app is on the way
We are building it. Until it lands, nothing here is held back from you: every interview card, your saved cards, streaks and the job board all work in Safari, plus hundreds of free practice quizzes of thirty questions each. Sign in and it all carries over to the app the day it arrives.
Want it as an icon? Tap Share at the bottom of Safari, then Add to Home Screen. It opens full screen and the cards you have read stay available offline.
We are hiring for this. Open roles that interview on analytics — each one lists the topics its interview covers.
See open roles