← Nextdoor Interview Insights

Nextdoor·Software Engineer·Onsite - System Design / Architecture·Senior

SeniorPrefer not to say
May 2026

Summary

Data engineering interview at Nextdoor centered entirely on one massive analytical modeling question. It was a multi-part beast covering table design, ETL strategy, retention, rollups, and timezone handling. Felt more like a take-home that got crammed into a live session.

Questions Asked (5)

Q1

Design the derived table schema that powers a fast daily KPI dashboard for a large photo-sharing app. Cover grain, keys, what gets precomputed versus computed at query time, and how you'd handle partitioning, clustering, and incremental loads.

Data ModelingSystem DesignTechnical Trade-offs
Author's notes

This is where I spent most of my energy and still felt like I was only halfway there.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the dashboard's requirements—what KPIs, refresh cadence, and query patterns—then propose a daily aggregated fact table at the grain of (date, dimension keys) with precomputed metrics. Explain how you'd partition by date, cluster by common filters, and incrementally load only new or changed data to keep the dashboard fast and cost-efficient.

Pro tip: Mention that you'd validate the design by writing example queries and checking that they hit the precomputed aggregates without scanning raw data—this shows you think about real-world performance, not just schema aesthetics.

1. Clarify requirements and grain

Ask about the KPIs, update frequency, and typical query filters (e.g., date range, user segment). Define the grain as one row per day per relevant dimension combination (e.g., date, country, platform).

2. Design schema and keys

Choose a composite primary key of date + dimension IDs to ensure uniqueness. Include precomputed metrics like daily active users, photos uploaded, and engagement rates, and decide which dimensions to include based on query patterns.

3. Decide precomputed vs. query-time

Precompute heavy aggregations (e.g., distinct counts, sums) that are expensive over raw data. Leave flexible metrics (e.g., ratios, percentiles) for query time if they can be derived from precomputed components or if the dashboard allows approximate results.

4. Plan partitioning, clustering, and incremental loads

Partition by date to enable partition pruning and easy backfills. Cluster by high-cardinality dimensions used in filters (e.g., user_id, country). For incremental loads, process only new partitions and handle late-arriving data with a lookback window or merge logic.

5. Address trade-offs and validation

Discuss trade-offs: precomputing more reduces query latency but increases storage and ETL complexity. Validate by running representative queries and checking they use the aggregates efficiently.

Key Points to Mention

  • Grain definition: daily aggregation per dimension combination to balance flexibility and performance.
  • Partitioning by date for efficient pruning and backfills; clustering by common filter columns like country or platform.
  • Incremental loading strategy: process only new partitions, handle late data with a lookback window or idempotent merges.
  • Precompute expensive metrics (e.g., distinct counts, sums) and compute cheap ratios at query time.
  • Use of surrogate keys or natural keys for dimensions, and ensuring the primary key enforces uniqueness.
  • Trade-offs between precomputation and query-time computation in terms of latency, storage, and ETL complexity.

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

Q2

Walk through the daily ETL process to populate these KPI tables from the raw source tables. High-level steps are fine, SQL or pseudocode is acceptable.

Data ModelingTechnical Trade-offs
Author's notes

Went with pseudocode.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the scope and assumptions (e.g., batch vs. streaming, data volume, freshness requirements) before diving into the pipeline. Then walk through the ETL stages—extract, transform, load—focusing on how raw source tables are incrementally processed into KPI tables, and highlight trade-offs like full refresh vs. incremental, idempotency, and data quality checks.

Pro tip: Emphasize incremental processing and idempotency—interviewers at Nextdoor care about scalability and reliability. Mention how you'd handle late-arriving data and backfills without disrupting daily runs.

1. Clarify requirements and assumptions

Ask about data volume, update frequency, SLA for KPI freshness, and whether the pipeline is batch or streaming. State your assumptions clearly to frame the rest of the answer.

2. Extract from raw sources

Describe how you'd pull data from raw source tables—e.g., using incremental extracts based on a high-watermark (last updated timestamp) or change data capture (CDC). Mention handling late-arriving data and deduplication.

3. Transform and aggregate

Outline the transformation logic: joins, filters, aggregations, and business logic to compute KPIs. Use SQL or pseudocode to illustrate key steps, and discuss how you'd handle slowly changing dimensions or complex metrics.

4. Load into KPI tables

Explain how you'd load the transformed data into KPI tables—e.g., using upserts (MERGE) or partition overwrites. Emphasize idempotency and how you'd handle failures and retries.

5. Orchestrate, monitor, and validate

Describe the orchestration (e.g., Airflow DAG) with dependencies, scheduling, and alerting. Include data quality checks (e.g., row counts, null checks) and how you'd backfill or reprocess data when needed.

Key Points to Mention

  • Incremental processing with high-watermark or CDC to avoid full table scans
  • Idempotency and exactly-once semantics to ensure reliable reruns
  • Handling late-arriving data and backfills without disrupting daily runs
  • Data quality checks and monitoring (e.g., anomaly detection, alerting)
  • Trade-offs between full refresh and incremental (cost, latency, complexity)
  • Partitioning and clustering for performance in KPI tables

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

Q3

How would you add week-1 retention to this dashboard? For each signup cohort date, what fraction of users are active exactly one week later? What table changes are needed and how do you compute it efficiently?

Data ModelingProduct Analytics & Metrics
Author's notes

Retention questions always feel cleaner than they are in practice.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Clarify the definition of 'active' and 'exactly one week later' (e.g., day 7 after signup), then outline the data model changes needed to support cohort-based retention analysis. Describe an efficient computation method, such as using a self-join or window functions, and discuss how to integrate it into the dashboard.

Pro tip: Mention that retention is typically calculated on a daily basis, but for week-1 retention, you need to align cohorts by signup date and check activity on the exact day 7. Also, consider using a pre-aggregated table to avoid expensive joins on large datasets.

1. Define the metric and requirements

Clarify what 'active' means (e.g., any event, specific action) and confirm that 'exactly one week later' means day 7 after signup. Determine the granularity (daily cohorts) and the time window for analysis.

2. Assess current data model

Review existing tables for user signups and activity events. Identify if you have a signup date per user and an activity log with timestamps. Determine if a new table or view is needed to efficiently compute retention.

3. Design table changes

Propose adding a signup cohort date column to the user table if not present, or create a new table that maps user_id to signup_date. For activity, ensure events are partitioned by date for efficient querying. Consider a materialized view or summary table for retention metrics.

4. Compute retention efficiently

Use a SQL query that joins signups with activity on user_id and date difference = 7 days. Alternatively, use window functions to identify active users on day 7. For large datasets, pre-aggregate daily active users per cohort to avoid repeated joins.

5. Integrate into dashboard

Add the retention metric to the dashboard, ensuring it updates regularly. Discuss how to handle time zones, late-arriving data, and backfilling. Consider visualizing retention as a line chart over cohort dates.

Key Points to Mention

  • Definition of 'active' and 'exactly one week later' (day 7 after signup)
  • Data model changes: signup cohort date, activity table partitioning, summary tables
  • Efficient computation: self-join on user_id and date difference, window functions, pre-aggregation
  • Handling time zones and late-arriving data
  • Dashboard integration: refresh frequency, visualization, backfilling
  • Scalability considerations for large datasets

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

Q4

The dashboard needs to support weekly rollups instead of daily. What changes in the table design and computation, particularly around non-additive metrics, partial weeks, and how 'change vs 7 days ago' translates to a weekly grain?

Data ModelingTechnical Trade-offsProduct Analytics & Metrics
Author's notes

Tripped up on the non-additive metrics immediately.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the requirements: which metrics are additive vs. non-additive, how partial weeks should be handled, and what 'change vs 7 days ago' means at a weekly grain. Then propose a table design that stores both daily and weekly aggregates, with careful handling of non-additive metrics and partial weeks. Finally, explain the computation logic for weekly rollups and the translation of the comparison metric.

Pro tip: Always discuss the trade-offs between pre-aggregating weekly data for performance and maintaining daily data for flexibility, and suggest a hybrid approach that balances both. Also, consider timezone and week-start conventions, as they can significantly impact weekly rollups.

1. Clarify requirements and definitions

Ask questions to understand which metrics are additive vs. non-additive, how partial weeks should be treated (e.g., exclude or include with caveats), and what 'change vs 7 days ago' means at a weekly grain (e.g., week-over-week change).

2. Design table schema for weekly rollups

Propose a schema that includes a weekly aggregate table with dimensions like week_start_date, and columns for additive metrics (sums) and non-additive metrics (e.g., distinct counts, averages, ratios) stored as pre-computed values or with sufficient granularity to recompute.

3. Handle non-additive metrics

Explain that non-additive metrics like distinct users or averages cannot be summed from daily values; instead, they require either storing daily granularity for recomputation or using approximate algorithms (e.g., HyperLogLog for distinct counts) and storing intermediate states.

4. Address partial weeks

Discuss strategies for partial weeks: either exclude incomplete weeks from weekly rollups, include them with a flag, or compute them on-the-fly from daily data. Highlight the impact on trend analysis and comparisons.

5. Translate 'change vs 7 days ago' to weekly grain

Interpret 'change vs 7 days ago' as week-over-week change (current week vs. previous week). Explain that this requires comparing the current week's aggregate to the previous week's aggregate, and discuss how to handle partial weeks in this comparison.

Key Points to Mention

  • Additive vs. non-additive metrics: sums can be rolled up, but distinct counts, averages, and ratios cannot be simply summed.
  • Pre-aggregation strategies: materialized weekly tables vs. on-the-fly computation from daily data, and trade-offs in performance and flexibility.
  • Partial weeks: how to handle incomplete weeks (e.g., exclude, flag, or compute from daily) and their impact on comparisons.
  • Week-over-week change: redefining 'change vs 7 days ago' as comparing current week to previous week, and ensuring consistent week boundaries.
  • Time zone and week start conventions: ensuring consistency across the pipeline and with business definitions.
  • Approximate algorithms for non-additive metrics: using HyperLogLog for distinct counts or storing sketches to enable rollups.

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

Q5

A New York office wants the same metrics reported in Eastern time instead of Pacific. What needs to change across timestamp handling, ETL windows, backfills, and how do you support both timezones without double-counting events at day boundaries?

Data ModelingSystem DesignTechnical Trade-offs
Author's notes

Storing everything in UTC in the raw tables is the obvious starting point and I led with that.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying that timestamps should be stored in UTC and timezone conversion should happen at query/reporting time, not during ingestion. Then walk through each area—timestamp handling, ETL windows, backfills, and dual-timezone support—focusing on how to avoid double-counting at day boundaries by using half-open intervals and event-level deduplication. Emphasize that supporting both timezones requires parameterizing the reporting layer rather than duplicating data.

Pro tip: Propose a 'timezone-aware reporting layer' where the timezone is a parameter, and demonstrate how to handle DST transitions and partial-day backfills without reprocessing entire datasets. This shows you understand both the technical and operational trade-offs.

1. Clarify requirements and constraints

Ask whether the New York office needs both timezones simultaneously or just a switch, and whether historical data must be restated. Confirm that events are timestamped in UTC or can be converted.

2. Standardize timestamp storage and conversion

Ensure all timestamps are stored in UTC with timezone metadata. Perform timezone conversion at query time using a reporting parameter, not during ETL, to avoid data duplication.

3. Adjust ETL windows and backfills

Redefine ETL windows to align with the target timezone's day boundaries (e.g., midnight ET). For backfills, reprocess only affected partitions using half-open intervals [start, end) to prevent double-counting.

4. Support dual timezones without double-counting

Implement a parameterized reporting layer that accepts a timezone argument. Use event-level deduplication (e.g., by event ID) and ensure day boundaries are handled with exclusive end times.

5. Validate and monitor

Compare metrics across timezones for consistency, and set up alerts for anomalies at day boundaries or during DST transitions. Document the approach for future timezone additions.

Key Points to Mention

  • Store timestamps in UTC and convert to local timezone only at query/reporting time.
  • Use half-open intervals [start, end) for day boundaries to avoid double-counting events exactly at midnight.
  • Parameterize the reporting layer with a timezone argument instead of creating separate pipelines.
  • For backfills, reprocess only the affected time partitions and use idempotent writes.
  • Handle DST transitions carefully—days may be 23 or 25 hours long.
  • Consider using a calendar table or timezone conversion functions in SQL (e.g., AT TIME ZONE).

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