Choose your character

It shows in the top bar and on your profile. Change it any time.

Projects/Wayfriend

From invites to meetups

Wayfriend wants to know whether friends who plan to meet actually spend time together. Clean the raw events, model meetups, measure success and plan the next day of work.

ProjectWayfriend · fictional company3 hr 30 min5 stagesData engineering

One brief, four toolsYour tables pass from Databricks to dbt to SQL, then to Dagster. You finish with a written plan.

The brief

Wayfriend's product lead, Rosa Imani, has a question for the data team: when two friends accept a plan to meet, do they actually end up together? She wants a measure the team can trust and a plan for what to look at next.

You have two weeks of location pings, invites and users, logged in UTC. An accepted invite counts as a meetup when both friends pinged within 50 meters of each other in at least 10 separate minutes during the two hours after the planned start.

The raw data is messy in the ways app data usually is. Some pings were resent with the same id, some have no coordinates, and invite statuses were typed in by three app versions. Location data can show that people were together; it cannot show why.

  • Data window: October 1 to 14, 2026, in UTC.
  • You deliver clean tables, a tested meetup model, three success measures and a plan for tomorrow.
  • Checks cover duplicates, missing coordinates, invites with no pings and the meetup rule.

The project path

Open any available stage
  1. 1
    Databricks40 min

    Clean the raw events

    Load the pings and invites with PySpark. Remove resent pings, drop pings without coordinates and tidy the invite status.

    Reads
    raw_pings · raw_invites
    Produces
    clean_pings · clean_invites

    dbt reads these two tables.

    Open stageOne Course in Databricks or All Access
  2. 2
    dbt50 min

    Build the meetup models

    Model every accepted invite and whether it became a meetup. Test the invite key so a duplicate can never reach the measures.

    Reads
    clean_pings · clean_invites
    Produces
    fct_meetups

    SQL reads this model.

    Open stageOne Course in dbt or All Access
  3. 3
    SQL45 min

    Measure meetup success

    Calculate the meetup rate and the median time to meet, city by city.

    Reads
    fct_meetups · users
    Produces
    meetup_metrics

    Dagster schedules these results.

    Open stageOne Course in SQL or All Access
  4. 4
    Dagster50 min

    Keep the pipeline running

    Partition the meetups by day, schedule the daily run for 03:00 UTC, and remove location pings after 30 days.

    Reads
    fct_meetups · meetup_metrics
    Produces
    daily_meetups

    Your plan uses the daily run.

    Coming soonWorkspace in progress
  5. 5
    Plan25 min

    Write tomorrow's plan

    Explain the result, name a limitation, choose the next investigation and say how you will judge success.

    Reads
    meetup_metrics · daily_meetups
    Produces
    next_day_plan.md

    Optional: present your plan in Interview Hub.

    Open stageAll Access

Each stage includes reference inputs. Starting in the middle or using them doesn't complete the earlier stages.

Project access

Free

$0

Read all briefs and paths. Tool stages and written work are locked.

Keep browsing

One Course

$17.99/month · USD

Practice the stages in your chosen tool. Reference tables let you start at that stage.

Choose a course

All Access

$24.99/month · USD

Every stage in every format, plus optional spoken readouts using plates.

Your Work Gym account

Save your progress and pick up on another device. Your browser's progress comes with you.

We'll email you a link. It works once and expires in 15 minutes.

You can keep practicing without an account.