← Intuit Interview Insights

Intuit·Data Scientist·Onsite - System Design / Architecture·Senior

Senior
May 2026

Summary

Brutal system design round at Intuit for a data scientist role. The whole thing was a deep dive into building a production-grade churn metrics pipeline, and it went way more into engineering territory than I expected for a DS position.

Questions Asked (4)

Q1

Walk through the full DAG you'd build to go from raw streaming subscription events to curated metric snapshots, including how you'd handle partitioning, clustering, and key design.

System DesignData Modeling
Author's notes

I started with the obvious layers (raw ingest, staging, curated, metrics) and that part felt fine.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the business metrics and data volume, then outline a layered DAG from ingestion to curated snapshots. Emphasize how partitioning and clustering choices align with query patterns and cost efficiency.

Pro tip: Mention that you'd validate the DAG with data quality checks and monitor for late-arriving events, showing you think about production reliability, not just the happy path.

1. Clarify Requirements and Data Characteristics

Ask about metric definitions, update frequency, data volume, and latency requirements to scope the DAG appropriately.

2. Design Ingestion and Raw Layer

Outline how raw streaming events are ingested (e.g., Kafka to S3) and stored in a raw zone, partitioned by event date for efficient replay and backfill.

3. Build Transformation Layers

Describe cleaning, enrichment, and aggregation steps (e.g., sessionization, metric computation) in intermediate layers, using partitioning by date and clustering by key dimensions like user_id or subscription_id.

4. Create Curated Metric Snapshots

Explain how final snapshots are generated, partitioned by snapshot date and clustered by metric dimensions, optimized for BI queries and dashboards.

5. Address Orchestration and Quality

Discuss orchestration (e.g., Airflow), data quality checks, and handling of late data to ensure reliability and freshness.

Key Points to Mention

  • Partitioning strategy: by event date for raw data, by snapshot date for curated tables to enable partition pruning.
  • Clustering keys: choose high-cardinality columns used in filters (e.g., user_id, subscription_id) to improve query performance.
  • File formats: use columnar formats like Parquet or ORC with compression for cost-effective storage and fast reads.
  • Incremental processing: design idempotent, incremental jobs to handle daily loads and backfills efficiently.
  • Data quality and monitoring: implement checks for completeness, freshness, and schema drift, with alerts.
  • Late-arriving data: use watermarks or reprocessing windows to update snapshots without full recomputation.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q2

Write SQL for a merge/upsert that builds a monthly snapshot table from event-level changes, correctly handling late-arriving cancellations and reactivations without double-applying on reruns.

Data ModelingTechnical Trade-offs
Author's notes

This is where the interview got uncomfortable.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the grain and business rules: what defines a monthly snapshot, how cancellations and reactivations are represented, and what 'correct' means for late-arriving events. Then propose a MERGE-based upsert that recomputes the affected monthly partitions from the full event history, making the operation idempotent so reruns don't double-apply changes.

Pro tip: Emphasize idempotency and partition-level recomputation rather than incremental row-by-row updates—this shows you understand production data pipelines and avoids the classic double-apply bug on reruns.

1. Clarify requirements and data model

Ask about the snapshot grain (e.g., customer-month), the event schema (event_type, event_timestamp, effective_date), and how late-arriving events should be handled. Confirm whether the target is a full monthly snapshot or a slowly changing dimension.

2. Define the canonical state logic

Describe how to derive the latest state per entity per month from the event stream, using window functions (ROW_NUMBER or LAST_VALUE) ordered by event timestamp and a tie-breaker. Explain how cancellations and reactivations are sequenced to get the correct end-of-month status.

3. Design the idempotent MERGE

Propose a MERGE statement that matches on the snapshot key (entity_id, month) and updates when the recomputed state differs, inserts new rows, and optionally deletes stale rows. Stress that the source is a full recomputation of affected months, not just the new events.

4. Handle late-arriving data and reruns

Explain how to identify affected months from late events (e.g., min event date per batch) and recompute only those partitions. Use a MERGE with a deterministic source query so rerunning the same batch produces the same result.

5. Validate and discuss trade-offs

Mention validation checks (row counts, state distribution, reconciliation with source) and trade-offs between full refresh, partition recompute, and incremental merge in terms of cost, latency, and complexity.

Key Points to Mention

  • Idempotency: rerunning the same batch must not change the target; use MERGE with a deterministic source.
  • Late-arriving events: recompute affected monthly partitions from full history rather than applying deltas.
  • Event sequencing: use window functions with event_timestamp and a tie-breaker to determine final state per month.
  • Cancellations and reactivations: model as state transitions; ensure the last event in the month wins.
  • Partition pruning: only recompute months touched by the incoming batch to control cost.
  • Trade-offs: full refresh vs. incremental merge vs. partition-level recompute in terms of performance and correctness.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q3

How would you design a strategy to recompute only the affected months when late data arrives, and how would you validate the recomputation using invariants?

System DesignRoot Cause Analysis
Author's notes

Talked through watermarks and tracking the earliest affected partition per late-arriving batch.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by explaining how to identify affected months using data lineage and event timestamps, then describe a targeted recomputation process that updates only those months. Finally, outline validation using invariants such as totals, uniqueness, and referential integrity to ensure correctness.

Pro tip: Emphasize the importance of idempotency and versioning in recomputation to avoid data corruption and enable rollback. Also, mention that you would automate invariant checks as part of the pipeline to catch issues early.

1. Identify Affected Months

Use data lineage and event timestamps to determine which months are impacted by the late data. Consider the event time and processing time to define the affected window.

2. Design Recomputation Strategy

Plan to recompute only the affected months by reprocessing the relevant data partitions. Ensure the process is idempotent and can handle multiple late arrivals.

3. Implement Recomputation

Execute the recomputation using a batch or streaming job that overwrites the affected months' data. Use versioning to track changes and enable rollback if needed.

4. Validate with Invariants

Define and check invariants such as total counts, sums, uniqueness, and referential integrity to ensure the recomputed data is correct. Compare with pre-recomputation values where applicable.

5. Monitor and Automate

Set up monitoring and alerts for invariant violations, and automate the recomputation and validation process to handle future late data efficiently.

Key Points to Mention

  • Data lineage and impact analysis to identify affected months
  • Idempotent recomputation to avoid double-counting
  • Partitioning and incremental processing for efficiency
  • Invariants: totals, uniqueness, referential integrity, and business rules
  • Versioning and rollback mechanisms for data safety
  • Automation and monitoring for ongoing data quality

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q4

How would you version metric definitions so that historical reports stay interpretable when the definition of a metric like net revenue retention changes over time?

Data ModelingProduct Analytics & Metrics
Author's notes

Went with versioned views in a semantic layer, each view tagged with an effective date range.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by acknowledging that metric definitions evolve and that versioning is essential for interpretability. Propose a versioned metric registry with immutable definitions, effective dates, and clear documentation of changes. Emphasize that historical reports should reference the version active at the time of data generation, and that any restatement should be explicit and traceable.

Pro tip: Tie the versioning strategy to business impact: explain how you'd communicate definition changes to stakeholders and provide impact analysis, ensuring trust in historical trends.

1. Establish a versioned metric registry

Create a central repository where each metric definition is stored with a unique version ID, effective start and end dates, and a changelog. This ensures every definition is immutable and auditable.

2. Tag data and reports with metric version

When computing metrics, record the version used in the data pipeline and in report metadata. Historical reports should automatically display the version active at the time of their creation.

3. Handle definition changes with effective dating

When a metric definition changes, create a new version with a future effective date. Avoid retroactively altering past versions unless a restatement is explicitly approved and documented.

4. Provide transparency and impact analysis

Document why the definition changed, quantify the impact on historical trends, and communicate this to stakeholders. Offer tools to compare metrics across versions.

5. Enable restatement when necessary

If a restatement is required (e.g., for compliance), create a new version that applies to historical periods, but clearly mark it as a restatement and preserve the original for audit.

Key Points to Mention

  • Immutable metric definitions with version IDs and effective dates
  • Metadata tagging in data pipelines and reports to track metric versions
  • Clear documentation of changes and rationale
  • Stakeholder communication and impact analysis
  • Audit trail for compliance and reproducibility
  • Tools for comparing metrics across versions

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.