Interview guides · Discord
Discord Data Scientist Interview Questions & Guide 2026
Discord data scientist prep: probability, sampling distributions, and stating the assumption behind every test you run.
The 60-second brief
As a Data Scientist at Discord, you occupy a pivotal position at the intersection of product strategy, user growth, and technical innovation. Discord serves over 200 million monthly active users who spend billions of hours connecting, playing games, and building communities. Your primary responsibility is transforming massive, complex, and rich first-party datasets into actionable insights that shape the future of communication, monetization, and social engagement. Whether you are optimizing ad platforms, driving growth experiments, or establishing core business metrics, your work directly informs how millions of people experience digital belonging.
SQL is seldom the hardest round and is often the one that eliminates people. The working bar is usually window functions, correct deduplication, and joins that do not silently fan out rows, rather than obscure syntax.
Focus areas
- Aggregate impression logs without double-counting repeated deliveries
- Judge ranking metrics under position bias and feedback loops
- Trade engagement gains against negative feedback and prevalence
Overview
The scope of this role spans multiple high-impact domains, including monetization systems, go-to-market analytics, core product growth, and strategic research. You will partner closely with product managers, software engineers, and executive leadership to define success criteria, build robust data models, and safeguard user privacy while scaling platform capabilities. Because Discord operates at massive scale with unique community dynamics—such as social graphs, real-time voice channels, and gaming integrations—you must balance rigorous statistical analysis with a deep intuition for human behavior and product-market fit.
Expect an environment that values autonomy, cross-functional collaboration, and intellectual curiosity. The interview process and the daily role both emphasize practical, real-world problem-solving over abstract algorithmic puzzles. You will be expected to take ownership of ambiguous challenges, communicate complex findings clearly to technical and non-technical stakeholders alike, and champion data-driven decision-making across the entire organization.
The Discord interview process
Discord candidates report 3 rounds · ≈ 3-5 weeks. The stages below are what candidates describe, not a published process.
Recruiter Screen
Most candidates lose this call inside the first two minutes, during the walkthrough of their own background. The account runs chronologically, sits at the level of tools and titles, and never arrives at a decision anyone could have disagreed with. Anchor on a problem instead of a timeline: what the team could not answer, what you did about it, what happened next. Ninety seconds is enough, and stopping on time leaves room for the half of the call that belongs to you. What you ask about how work gets prioritised signals your level more reliably than the walkthrough does.
What to demonstrate
- Whether your background summary has a shape (problem, decision, consequence) or is a chronological list of tools and employers
- Whether you can account for gaps, short stints and the reason you are looking, unprompted and without hedging
- The substance of the questions you ask back, which an experienced screener reads as a level signal
How to prepare
- Time your opening walkthrough against a clock. If it runs past two minutes, compress the earliest role into a single clause and spend the recovered time on the most recent one
- Write one honest sentence for every gap or short stint visible on your resume and offer it before being asked about it
- Prepare questions about how work arrives and gets prioritised: who writes the request, how often priorities change, and what happens to an analysis after it is delivered
Technical Screen
This round decides whether someone can hand you a schema and a question and trust the number that comes back. Correctness under a clock is the bar, not clever syntax. The habit that separates strong from weak answers is checking the grain: after every join, know how many rows you expect and whether the count moved. Most wrong answers in this format are not wrong logic, they are a fan-out from a key that turned out not to be unique, or a filter applied before an aggregate when it belonged after. Say what you expect before you run it.
What to demonstrate
- Whether your row counts survive each join, and whether you notice on your own when they do not
- Deliberate handling of rows that fail to match, including whether the question needs an inner join or a left join with the non-matches kept and counted
- Whether NULLs are treated on purpose, given that a NULL compares equal to nothing and that COUNT of a column skips it
- Reaching a defensible answer inside the window instead of a refined one after it
How to prepare
- Take a two-table schema, write a join that fans out on purpose, then fix it by collapsing the many-side to one row per key before joining. Repeat until the fix is reflex rather than recall.
- Write a funnel as one query and print the distinct user count at each stage, then confirm each stage is a subset of the one above it rather than assuming it
- Do a few timed runs in a plain text box with no autocomplete and no formatter, since assessment editors often have neither
Virtual Onsite
Where a loop ends with a senior leader, that conversation is rarely another skills test. The technical signal already exists by then, so the questions tend to open up: what you would look at first, where a metric you have heard about could mislead, what you would push back on. The decision being made is scope, which in practice means level and how much you would be trusted to own unsupervised. Treating it as a formality is the usual mistake. An open question late in the day is still being scored, and a vague answer reads as someone who has not run anything themselves.
What to demonstrate
- Whether your view of the business has anything specific behind it, given that you are working only from what is public and are expected to say so
- Whether the scope of work you describe owning matches the scope of the role, instead of sitting a level below it
- Whether you can disagree with something concrete and stay useful about it, rather than agreeing with everything said in the room
- Whether your questions are ones only this person could answer, as opposed to ones the recruiter already covered
How to prepare
- Build one view you could defend for two minutes using only public information: what the funnel probably looks like, which metric likely drives decisions, and where that metric could mislead. Being wrong for a stated reason survives this round; having no view does not
- Write down the largest piece of work you have owned from question to decision, who else touched it, and what you decided alone, then check that it reads at the level you are interviewing for
- Prepare one thing you would want changed if you joined and phrase it as a question rather than a verdict, so it opens a conversation instead of closing one
Where candidates lose points
Randomising individual members when the treatment travels along the social graph
If treated members post, comment or share more, their followers see the extra content whether or not those followers are treated, so the control group is partly treated and the measured difference understates the true effect. For features that redistribute a fixed amount of attention, the leakage runs the other way and the effect is overstated. The size of the bias scales with how dense the neighbourhood is, so it is largest exactly among the connected members whose behaviour the feature was built for. The fix is randomising clusters of the graph (ego networks or communities found by balanced partitioning), clustering the variance at that unit, and accepting that effective sample size falls by roughly the average cluster size.
Reading engagement rates off impressions the ranker chose to serve
Engagement per impression by content type, author or topic is conditioned on the ranker's selection, and the ranker selected precisely what it predicted would be engaged with. A content type with a high observed engagement rate may simply be one the ranker only shows in easy contexts, and a type with a low rate may be one it shows indiscriminately. The same logic makes rank position a confounder: slot 1 outperforms slot 20 for reasons that have nothing to do with the item. Any counterfactual claim from this data needs either logged, strictly positive propensities and an inverse-propensity or doubly-robust estimator, or a randomised exploration slot. Where log_propensity is NULL because serving was deterministic top-k, no reweighting recovers the answer and an online test is the only option.
Solving silently instead of narrating the reasoning
Say which branch you are taking and why you chose it over the alternative, for example checking the denominator first because it changes what the comparison means. A correct answer that arrives with no visible path scores below a rigorous one that needed a hint.
Accepting a metric definition without asking about the denominator
Pin down the denominator, the eligibility filter and the time window before computing anything: conversion rate per session, per user, per eligible user and per new user are four different numbers with different behaviour. Restate the definition in one sentence and get agreement before you analyse.
Questions & practice
When would you choose a non-parametric test over a traditional t-test in an analysis?
Medium · statistics and probability
Approach
- Quantify uncertainty explicitly rather than reporting a point estimate alone.
- Sanity-check the answer against a simple bound or a simulated case.
- Translate the result into the decision it informs, in one plain sentence.
Follow-up
- How would you explain this result to someone who does not know statistics?
- Which assumption here is most likely to be violated in practice?
How would you design an A/B test for a major recommendation algorithm change on Discord, and how long would you run it?
Medium · machine learning and modelling
Approach
- Pick an evaluation metric that matches the cost of each error type, not a default.
- Check what information would not exist at prediction time, and exclude it.
- Frame the prediction: the label, the moment of prediction, and the action it triggers.
Follow-up
- How would you choose the decision threshold, and who owns that choice?
- Where could label leakage enter this setup?
Cluster bootstrap a ratio metric under graph randomisation
Hard · cluster bootstrap · delta method · interference
units has cluster_id, arm ('control' or 'treatment'), neg_feedback_events (int) and impressions (int), one row per member; members are nested in about 900 ego-network clusters, which were the randomisation unit. The metric is negative feedback per 1,000 impressions, a ratio of sums. Write a cluster bootstrap from scratch: resample clusters with replacement within arm, keeping the number of clusters per arm fixed, recompute each arm's ratio and the relative difference, 2,000 replicates, percentile interval. Also compute a cluster-level delta-method interval and a naive member-level bootstrap. Report all three widths.
Approach
- Collapse to the randomisation unit before resampling anything. Sum neg_feedback_events and impressions to one row per (cluster_id, arm). Resampling has to happen over the units that were independently assigned, and members inside a cluster were not.
- Resample cluster rows with replacement within arm, holding the per-arm cluster count fixed, then recompute R = 1000 * sum(numerator) / sum(denominator) per arm from the resampled clusters. Recomputing the ratio of sums inside each replicate is what propagates the correlation between numerator and denominator; averaging per-cluster ratios instead answers a different question and will not match the point estimate.
- Take the relative lift R_t / R_c minus 1 per replicate and read the 2.5th and 97.5th percentiles off the 2,000 values. Percentile is adequate here; mention BCa as the refinement if the bootstrap distribution is visibly skewed.
- Derive the delta-method interval at the cluster level as the analytic check. With n clusters contributing numerator y_i and denominator x_i, R = ybar / xbar and Var(R) is approximately (1 / (n * xbar^2)) * (var(y) - 2Rcov(y,x) + R^2*var(x)). Arms are independent, so variances add for the difference.
- Run the naive member-level bootstrap only to show what it costs. Resampling members destroys the within-cluster correlation, so its interval is narrower by roughly the square root of the design effect 1 + (m - 1) * ICC, where m is the average cluster size. Quote that number as the price of the design.
- Close with the decision: report the cluster interval, state the number of clusters rather than the number of members as the effective sample size, and say what minimum detectable effect that leaves.
Worked solution (40 min)
- cl = units.groupby(['cluster_id','arm'], as_index=False)[['neg_feedback_events','impressions']].sum(); split into cl_t and cl_c
- ratio = lambda d: 1000 * d.neg_feedback_events.sum() / d.impressions.sum(); point = ratio(cl_t) / ratio(cl_c) - 1
- For b in range(2000): draw idx_t = rng.integers(0, len(cl_t), len(cl_t)) and idx_c likewise, recompute ratio on cl_t.iloc[idx_t] and cl_c.iloc[idx_c], store the relative lift
- ci = np.percentile(reps, [2.5, 97.5])
- Delta method per arm: n, xbar, ybar, then var_R = (var(y) - 2Rcov(y,x) + R2*var(x)) / (n * xbar2); combine arms for the difference and convert to relative scale
- Repeat the bootstrap resampling member rows instead of cluster rows and compare the three interval widths
Expected result: A point estimate of the relative lift with three intervals: cluster bootstrap percentile, cluster delta method, and member-level bootstrap. The first two agree closely; the member-level interval is materially narrower, and the width ratio approximates the square root of the design effect.
Verify it yourself
- The median of the 2,000 bootstrap replicates sits close to the point estimate; a large offset means the ratio is being recomputed wrongly inside the loop.
- Randomly reassign cluster_id to break the clustering, rerun, and confirm the cluster and member intervals then converge, which proves the gap came from within-cluster correlation and not from a coding difference.
- The delta-method and cluster bootstrap half-widths agree within roughly 10 percent at 900 clusters; a large disagreement points at a skewed replicate distribution or a bug in one of the two.
- Every replicate uses exactly the original number of clusters per arm, verified by asserting the resampled index length each time.
Follow-up
- The cluster sizes are extremely uneven, with the largest cluster holding 4 percent of impressions. What does that do to the bootstrap and what would you change?
- Derive the delta-method variance for the relative lift rather than the difference, and say when the two disagree.
- You have 900 clusters and need to detect a 3 percent relative change. Is this test powered, and what would you trade to get there?
What is the average number of weekly server views in 2020?
Medium · sql and data manipulation
Approach
- State the window function and its partition and ordering out loud before writing it.
- Compute rates by summing numerator and denominator separately, never by averaging rates.
- Say which table is the grain you start from, and join outward from it.
Follow-up
- How would you verify this result without re-running the same query?
- What breaks if events arrive late or out of order?
Retrieve the unique words between two messages. msg1 = 'This is the first message', msg2 = 'Hello this is the second message'. Output = ('This', 'first', 'Hello', 'second').
Medium · sql and data manipulation
Approach
- Handle the rows that do not match: a LEFT JOIN with a NULL check is usually the question.
- Compute rates by summing numerator and denominator separately, never by averaging rates.
- Say which table is the grain you start from, and join outward from it.
Follow-up
- How does the query change if the join becomes one-to-many?
- What breaks if events arrive late or out of order?
Count creators reaching fifty distinct viewers in a week
Easy · dedup · reach vs impressions · creator supply
Using fct_feed_impression(event_date, viewer_member_id, content_id, author_member_id) and fct_content_item(content_id, author_member_id, item_kind), count members who published an original item that reached at least 50 distinct viewers during one calendar week. A re-delivery of the same item to the same viewer is a separate impression row. Reach is measured per item, not pooled across an author's items. Return one row per qualifying author with the distinct-viewer count of their best item. Replies, reposts and quotes are excluded.
Approach
- Filter fct_content_item to item_kind = 'original' first. The join then does double duty as a filter and keeps reply and repost deliveries out of the impression scan entirely.
- Aggregate impressions with COUNT(DISTINCT viewer_member_id) per content_id. COUNT(*) answers a different question — deliveries, not people — and the two diverge by however aggressively the ranker re-serves an item.
- Filter the per-item counts at 50, then group up to author_member_id taking MAX of the per-item reach. The definition is one item reaching 50 viewers, not 50 viewers accumulated across several items, and pooling would let three items of 20 viewers qualify a creator who never reached anyone.
- Use fct_feed_impression.author_member_id wherever the author is needed. It is denormalised precisely so reach and concentration queries avoid joining the largest fact in the warehouse; the join to fct_content_item is only for item_kind.
- Filter the week on event_date, which is already viewer-local. Mixing it with a UTC timestamp predicate on served_at_utc would include or drop a sliver of the boundary days depending on the viewer's offset.
Worked solution (15 min)
- CTE orig: SELECT content_id, author_member_id FROM fct_content_item WHERE item_kind = 'original'.
- CTE reach: SELECT i.content_id, i.author_member_id, COUNT(DISTINCT i.viewer_member_id) AS viewers FROM fct_feed_impression i JOIN orig o ON o.content_id = i.content_id WHERE i.event_date BETWEEN the Monday and the Sunday GROUP BY 1, 2.
- Filter reach to viewers >= 50, GROUP BY author_member_id, and select MAX(viewers) as the author's best item.
- Cross-check the delivery multiple: COUNT() over the same impressions divided by SUM(viewers) is the average re-delivery factor, and a value far above 1 tells you how wrong the COUNT() version would have been.
Expected result: One row per author who published at least one original item seen by 50 or more distinct viewers in the week, with that item's distinct-viewer count. The author count is materially smaller than the same threshold applied to COUNT(*) impressions.
Verify it yourself
- For any sampled content_id, COUNT(DISTINCT viewer_member_id) is at most COUNT(*), with equality only when nothing was re-delivered.
- No author whose week contains only item_kind in ('reply', 'repost', 'quote') appears in the result.
- Re-running with the threshold set to 1 returns the count of authors with any original reach that week, which must equal the distinct author_member_id count over the filtered impressions.
Follow-up
- Extend this to retained reaching creators: qualified in week w and again in week w+1, divided by those qualified in week w.
- Why might this count rise in a week when the total number of publishes fell?
- An item was removed by moderation on day 6 of the week. Should the impressions it earned on days 1 through 5 still count toward its reach?
How would you design a metric to evaluate the long-term health and engagement of a newly formed online community?
Medium · product sense and metrics
Approach
- Decompose the metric into the rates that drive it, and say which one you would check first.
- Restate the decision this analysis has to support, and who acts on the answer.
- State what result would change your recommendation, so the answer is falsifiable.
Follow-up
- Which segment would you cut first, and what would that rule out?
- How would you detect that the metric is being gamed rather than genuinely improving?
How do you prioritize multiple competing data requests from product, engineering, and sales teams?
Medium · product sense and metrics
Approach
- Decompose the metric into the rates that drive it, and say which one you would check first.
- Name one primary metric, then the guardrail that stops it being gamed.
- Restate the decision this analysis has to support, and who acts on the answer.
Follow-up
- How would you detect that the metric is being gamed rather than genuinely improving?
- What would you do if the primary metric and the guardrail moved in opposite directions?
What key performance indicators would you track to measure the effectiveness of a brand-new advertising product on the platform?
Medium · product sense and metrics
Approach
- Restate the decision this analysis has to support, and who acts on the answer.
- Fix the population and the time window before naming any metric.
- Decompose the metric into the rates that drive it, and say which one you would check first.
Follow-up
- What would you do if the primary metric and the guardrail moved in opposite directions?
- Which segment would you cut first, and what would that rule out?
How would you measure the success of a newly launched voice channel feature on Discord?
Medium · product sense and metrics
Approach
- Restate the decision this analysis has to support, and who acts on the answer.
- Fix the population and the time window before naming any metric.
- State what result would change your recommendation, so the answer is falsifiable.
Follow-up
- Which segment would you cut first, and what would that rule out?
- How would you detect that the metric is being gamed rather than genuinely improving?
Describe a scenario where an A/B test showed statistically significant positive results, but you would still recommend against launching the feature.
Medium · a/b testing and experimentation
Approach
- Name the guardrails that would stop a launch even on a positive primary result.
- Decide the analysis before seeing data, including how long it runs and when you look.
- Name the randomisation unit first; it decides the variance and what the test can detect.
Follow-up
- What would you conclude if the result is positive but the test is underpowered?
- How would you handle interference between treated and control units?
How do you handle network effects and interference between treatment and control groups in a social platform experimentation framework?
Medium · a/b testing and experimentation
Approach
- State the primary metric and the minimum effect worth shipping, then size the test.
- Name the randomisation unit first; it decides the variance and what the test can detect.
- Say whether units interfere with each other, and switch design if they do.
Follow-up
- What would you do if you could not randomise at all?
- What would you conclude if the result is positive but the test is underpowered?
Define a qualified session you can defend twice
Easy · metric definition · sessionisation · north star
The north-star counts weekly members with at least one qualified session. You own the definition. Today it reads: a session with 30 or more foreground seconds and at least one non-negative engagement or authored item, derived from fct_feed_impression.session_id, fct_feed_impression.dwell_ms, fct_engagement_event.action_type with is_negative_feedback = FALSE, and fct_content_item.created_at_utc. Write the definition precisely, including how a session closes and how undone actions count. Then defend it against two objections: that the 30-second floor excludes a real use, and that the engagement requirement is satisfiable by a mis-tap. Deliverable: the definition plus both rebuttals.
Approach
- Write the session boundary rule explicitly (inactivity gap, foreground only, how a background-to-foreground return is treated), because every rate in the tree is denominated in sessions and an unstated boundary makes the count a function of an SDK timeout nobody reviewed.
- Enumerate the qualifying acts from fct_engagement_event and the authored path from fct_content_item, and rule that an action with undone_at_utc within 60 seconds of occurred_at_utc does not qualify. That closes the mis-tap objection with data already logged rather than a new instrument.
- Answer the exclusion objection with evidence, not judgement: measure what fraction of sessions fall between 10 and 30 foreground seconds and what those members do the following week. Either accept the exclusion citing that number, or add a second qualifying path such as a completed deep-linked read, rather than lowering the floor globally.
- State what the definition deliberately is not: not time spent and not any impression, so a stickier or longer feed cannot move it without a member acting.
- Version the definition and pin it to a UI period, since moving the hide or like control changes the numerator with no change in member behaviour.
Worked solution (20 min)
- Write the close rule: 30 minutes of foreground inactivity closes a session, a new foreground entry opens one, and a session is attributed to the viewer-local date of its first event using dim_member.tz_offset_minutes.
- Write the qualifying-act set: any fct_engagement_event row in the session with is_negative_feedback = FALSE and (undone_at_utc IS NULL OR undone_at_utc > occurred_at_utc + 60 seconds), or any fct_content_item authored by that member inside the session window.
- Run the sensitivity: recompute the weekly qualified-member count at foreground floors of 10, 30 and 60 seconds and record both the level and the week-over-week change under each.
- Write the two rebuttals, one paragraph each, each citing the specific number from step 3 that supports it.
Expected result: A definition of at most six lines that a query can be written from with no follow-up question, plus a three-point sensitivity table showing the weekly member count moving with the floor while the week-over-week change stays materially stable across all three floors.
Verify it yourself
- Every term in the definition maps to a named column; no word like meaningful or engaged survives unmapped.
- The level moves with the floor but the week-over-week delta does not, which is the property that actually matters for a tracking metric.
- A hand-built example of like-then-unlike within 60 seconds fails to qualify its session under your rule.
Follow-up
- A platform team ships background prefetch that keeps the app foregrounded longer. Which part of your definition moves, and should it?
- You are asked to make this comparable across iOS, Android and web. What breaks first, and do you fix the definition or report the platforms separately?
Impressions dropped for three days, engagement events did not
Medium · pipeline failure · referential integrity · rate denominators
Home_feed impressions on one client platform fell 22 percent for three days and then recovered. Engagement per 1,000 impressions on that platform rose 26 percent across the same three days and then returned to baseline. Raw engagement event counts were flat throughout. fct_engagement_event.impression_id is a nullable foreign key into fct_feed_impression, and warehouse foreign keys are declarative rather than enforced. Establish whether ranking improved or impression rows were lost, quantify the loss, and state the precondition your estimate depends on.
Approach
- Run the referential integrity test first, because it is decisive and cheap: count fct_engagement_event rows on those dates with impression_id IS NOT NULL that have no matching row in fct_feed_impression. Under normal operation this is near zero. Under impression loss it jumps, and each orphan is a directly observed missing impression.
- Check the reciprocal arithmetic. If the numerator is intact and the denominator loses a fraction f, the rate rises by 1/(1-f) - 1. An observed 26 percent rise implies f of about 0.206, which is consistent with the observed 22 percent drop within noise. A genuine ranking improvement has no reason to produce that near-exact reciprocal.
- Estimate total loss from the orphans: missing impressions is approximately orphan engagements divided by the baseline engagement-per-impression rate measured among matched rows on healthy days. State the precondition explicitly, that loss is independent of whether the impression was engaged with. If loss were correlated with engagement, this estimator is biased and the orphan count becomes a lower bound only.
- Characterise the loss as random or structured. Compare the distribution of impressions per session on the affected days against baseline: proportional loss shifts the whole distribution, while a failure that truncates a batch produces a distinctive spike of short sessions. Also check rows per hour to find the start and end of the window.
- Rule out a demand explanation. Sessions per member and engagement events per session should be flat if only logging broke. If sessions also fell, part of the impression drop is real and the two effects must be separated before quoting a loss figure.
- Recommend the operational response: mask these three dates in every impression-denominated rate, re-state them only if the upstream can replay, and note that any experiment reading on those dates is compromised for rate metrics but not for member counts.
Follow-up
- How do you decide whether to backfill the partitions or permanently mask the dates, and what does each choice cost downstream?
- An experiment was reading during those three days. Which of its metrics are still usable and which are not?
- What monitor would have caught this within an hour, and what is its false-positive cost?
Suggested practice checklist
Instead of guessing where the week should go, day one measures it under a fixed rubric and allocates the remaining hours in proportion to the gaps. The method is deliberately rigid: the allocation is written down before any studying starts and is not renegotiated when a topic turns out to be unpleasant.
Day 1 — Diagnostic, scored before you study anything
- Sit a 100-minute timed diagnostic in four blocks: 30 minutes of SQL across three prompts, 25 minutes of short-answer statistics, 25 minutes on one modelling or case prompt, and 20 minutes delivering one behavioural story aloud.
- Score each block from 0 to 3 on a fixed rubric where 3 is correct and fluent, 2 is correct but slow or prompted, 1 is partially correct, and 0 is stuck, grading the output rather than how the attempt felt.
- Allocate the hours for days two to five roughly in proportion to 3 minus the score in each block, write the allocation down, and commit to not revising it midweek.
Deliverable: A scored rubric and a fixed hour allocation for the rest of the week.
Day 2 — Largest gap: find the boundary rather than the subject
- Break the weakest area into five named sub-skills (for query work: grain control, window frames, date arithmetic, set logic with NULLs, and reading a query plan) and rate each one, so the rest of the week targets a sub-skill instead of a subject.
- Solve three problems chosen to sit just above where the rating drops off, and for each write the first move you failed to make.
- Re-solve one of them from memory four hours later, on paper, with nothing open.
Deliverable: A five-item sub-skill map with the two blocking sub-skills circled.
Day 3 — Largest gap: drill the blocking sub-skill
- Do eight short repetitions of the same shape rather than eight different problems, so what you practise is the pattern and not the puzzle.
- Write the rule you now hold in one sentence, then test it against a case built to break it: a ranking function over a column with ties, or a two-sample test on observations that are obviously dependent.
- Have someone else read your one-sentence rule and find the precondition you left out.
Deliverable: One rule statement with its preconditions attached and one counterexample that would have caught the incomplete version.
Day 4 — Second gap, plus maintenance on your strongest area
- Run the same sub-skill map and boundary protocol on the second-largest gap, compressed into half the day.
- Spend 25 timed minutes on your strongest area to stop it decaying, choosing the hardest problem you can still finish rather than an easy warm-up.
- Compare how the two areas fail: whether you lose time on recall, on setup, or on arithmetic, because the fix differs for each.
Deliverable: A second sub-skill map plus a one-line diagnosis of how each area fails you.
Day 5 — The gap that is not a skill
- Record yourself answering one technical and one behavioural prompt, then count two things in the playback: how many seconds before your first clarifying question, and how many sentences you started without knowing where they ended.
- Rewrite your three most-used stock phrases into shorter versions, and practise saying "I do not know, here is how I would find out" without softening it into a guess.
- Deliver one answer again with a hard 90-second limit to force structure before detail.
Deliverable: Two recordings with a counted improvement in time-to-first-question.
Day 6 — Retest under day-one conditions
- Sit the same 100-minute diagnostic structure with new prompts of comparable difficulty and score it on the identical rubric.
- Compare block by block, and for any block that did not move, change the method rather than adding hours: a block stuck at 1 usually means the practice was too varied, not too short.
- Write which single block you would still lose the offer on.
Deliverable: A second scored rubric placed next to the first, with one named remaining risk.
Day 7 — Full loop under interview conditions
- Run a 60-minute mock covering the two blocks that moved least, with an interviewer instructed to interrupt and change direction.
- Write your recovery script for the moment you go blank: restate the question, state your assumption, name the first thing you would check.
- Reduce the week to the rule statements you wrote, each with its preconditions attached, then say every one of them out loud without reading it and cut any you cannot state in a single sentence, since a rule you have to reconstruct mid-answer will not survive being interrupted.
Deliverable: A one-page card holding the recovery script and only the rules you could state from memory.
Stories where someone disagreed with you
Have two ready. In one, the data was on your side and you had to move someone who outranked you. In the other, the pushback was correct and you changed position. The second is the harder story and it lands better, because it shows you separate being right from being attached to an answer. Name the person's actual objection.
Describe a project where you faced ambiguous requirements and had to define the path forward independently.
Medium · behavioural and stakeholder questions
Approach
- Close with what you would do differently, concretely.
- Name the disagreement or constraint, and how you resolved it with evidence.
- State the situation in two sentences and spend the rest on your reasoning.
Follow-up
- How did you know the outcome was caused by your change?
- What would you do differently if you ran that project again?
Recommend holding a ranker that lifts engagement and hides
Hard · metric tradeoffs · guardrails · stakeholder pushback
A ranking change finished a four-week cluster-randomised test on the home feed. Impressions per engaged session rose 3.1 percent and authored interactions per weekly active member rose 0.4 percent. Negative feedback per 1,000 impressions rose 6 percent, concentrated in hide and not_interested; unfollow was flat. Creator reach concentration rose 1.4 points. The product owner has already briefed the launch upward. In ten minutes give your recommendation, the exchange rate you are applying between engagement and quality, and the specific result that would change your mind. You may request two extra cuts of the data.
Approach
- Put both movements on the same base before arguing about them. Negative feedback is denominated per impression, and impressions per engaged session rose 3.1 percent, so absolute negative actions per engaged session rose about 9.3 percent (1.06 times 1.031), not 6 percent. Say that number out loud; it is usually the first thing nobody has computed.
- Ask whether the negative feedback rise is broad or concentrated: report distinct actors per 1,000 impressions beside the event rate. A rise driven by more members hiding is a distribution problem that affects the median viewer; a rise driven by the same members hiding more is a targeting problem in a segment that may be separable.
- Connect the 1.4 point concentration move to the supply-side guardrail rather than treating it as a curiosity. Pull retained reaching creators by arm and the median viewer's negative feedback on impressions from sub-threshold creators. Concentration is the plausible mechanism that pays for the engagement, and it is paid in creator churn that a four-week window barely registers.
- Read the effect by week with the burn-in excluded, not pooled. A 0.4 percent authored-interaction effect that is 1.1 percent in week 1 and 0.1 percent by week 4 is novelty decay, not a lift. State whether the ranking model was frozen for the test; if it retrained on experiment data, the arms are not independent and a pooled estimate is not interpretable either way.
- Deliver the recommendation as an exchange rate the owner can argue with: this buys roughly N additional hides per additional authored interaction at current volume. Then name the falsifier, for example the week-4 authored-interaction effect holding above 0.3 percent with flat concentration and the negative feedback rise confined to a removable segment.
Follow-up
- The owner launches anyway. What do you instrument on day one, and what is your stop rule?
- Negative feedback rate depends on how reachable the hide control is. Did the treatment change any surface affordance, and how would you know?
- If concentration rose, does the cluster randomisation still hold? Whose feeds leaked into whose?
Explain a prevalence interval to a non-technical executive
Easy · uncertainty · prevalence · executive communication
A weekly impression-weighted violating-content prevalence estimate came in at 0.42 percent, 95 percent interval 0.28 to 0.61, against 0.51 percent (0.35 to 0.72) the week before. The audit sample is 4,000 served impressions drawn with unequal, recorded selection probabilities across risk strata, labelled by humans against written policy. An executive asks whether the number went down and wants one figure for a board slide. In five minutes: answer the question, say what goes on the slide, and state what you would need to give a sharper answer next quarter.
Approach
- Answer the question in one sentence before explaining anything: the point estimate is lower, the intervals overlap across most of their range, and the week-over-week change is not distinguishable from zero.
- Show why with one arithmetic step rather than vocabulary. At n = 4,000 and p near 0.004 the simple-random-sampling standard error is sqrt(p(1-p)/n), about 0.10 percentage points, so an SRS interval would run roughly plus or minus 0.20 points and a 0.09 point move sits well inside it. Two facts about the reported interval belong in your head rather than on the slide. Its asymmetry comes from the construction, not from the weights: Wilson, Clopper-Pearson and logit intervals are built on a bounded scale, so near p = 0 the upper limit sits further from the point estimate than the lower one. The 1/p_i weights act on width only, through a design effect that multiplies the variance. Here the reported width of 0.33 points implies a standard error near 0.085 (0.33 divided by 3.92), so the design effect is about 0.7, which is what oversampling high-risk strata buys when selection probability correlates with the outcome. Uninformative weights would instead give a design effect of 1 + CV squared of the weights, above 1, and an interval wider than the SRS one rather than narrower.
- Replace the bare point estimate with a number that is stable at board cadence: the trailing four-week pooled estimate, formed by re-summing the weighted numerator and the weighted denominator across weeks. Averaging the four weekly rates gives a different and wrong number when weekly sample sizes differ.
- Price the precision the executive is implicitly asking for. Halving the interval width needs roughly four times the labelled sample, so 16,000 labels a week to go from a half-width near 0.17 points to one near 0.085. The cheaper lever is allocation rather than volume: the design already uses unequal, recorded, strictly positive selection probabilities and is already running a design effect near 0.7, so re-fitting the strata on current classifier scores and moving more of the 4,000 into the strata carrying the violating mass pushes that number down further without a fourfold labelling bill.
- State plainly what this number is not, because the executive will meet substitutes. Report volume and enforcement volume are member and operations behaviours; they can fall while prevalence rises if the ranker gets better at matching violating content to receptive audiences.
Follow-up
- The executive wants a weekly trend line on the slide anyway. What do you draw, and what do you label the band?
- How long would it take to detect a 20 percent reduction in prevalence at the current sample size?
- Why not score every impression with the classifier instead of paying for human labels?