Capstone: Mock Loop & Self-Exam
Run the full loop against yourself before the real thing
Timed SQL + stats screen
After this you can simulate the 60-minute technical screen under pressure.
You don't find out whether your SQL holds up under a clock by reading query patterns. You find out by setting a 60-minute timer, opening a blank editor and talking through every metric definition as you type it. This section is that drill, built on the exact data shape Cursor's screen would hand you: a raw interaction events table.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
Each capstone section is a timed mock of one real stage - step through to see what it tests and how to prep.
The DS technical screen is data-shaped, not algorithmic. Assume one fat events table - one row per user↔AI interaction - with columns you'll reference all hour: event_id, user_id, request_id, model, client_version, event_type, latency_ms, status, ts. Set the timer before you read the prompts.
- request_id
- Logical attempt id; one prompt can emit many event rows under the same request_id.
- event_type
- prompt | retrieval | tool_call | edit_apply | success | error | timeout.
- latency_ms
- End-to-end completion latency for the interaction; heavy right tail.
- status
- ok | error | timeout - raw, before you collapse retries.
- model / client_version
- Your two main segmentation keys; never report a global number without them.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
Three tasks plus the sanity gates that turn correct-by-luck into correct-by-rigor.
Task 1 - p95/p99 latency by model and client versionthe warm-up; do not average
The trap is reaching for AVG(latency_ms). Latency is heavy-tailed, so the mean is dragged by the tail and hides the slow experiences that actually frustrate users. Report percentiles, segmented.
SELECT model, client_version, COUNT(*) AS n, PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY latency_ms) AS p50_ms, PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY latency_ms) AS p95_ms, PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY latency_ms) AS p99_ms FROM interaction_events WHERE event_type = 'success' -- only completed interactions have a real latency AND latency_ms IS NOT NULL AND ts >= NOW() - INTERVAL '7 days' GROUP BY model, client_version HAVING COUNT(*) >= 200 -- suppress percentiles on thin segments ORDER BY p99_ms DESC;
“I'm filtering to successful interactions because a timed-out request has no meaningful completion latency and I'm using PERCENTILE_CONT instead of an average because latency is heavy-tailed. I added a HAVING floor so a segment with twelve rows doesn't post a noisy p99 next to one with twelve thousand.”
Task 2 - the prompt→success funnel with drop-off
Build the stage funnel prompt → retrieval → tool_call → edit_apply → success and show where attempts die. Anchor every stage to request_id so you're counting logical attempts, not raw rows.
WITH per_request AS (
SELECT
request_id,
MAX(event_type = 'prompt') AS hit_prompt,
MAX(event_type = 'retrieval') AS hit_retrieval,
MAX(event_type = 'tool_call') AS hit_tool,
MAX(event_type = 'edit_apply') AS hit_edit,
MAX(event_type = 'success') AS hit_success
FROM interaction_events
GROUP BY request_id
)
SELECT
COUNT(*) FILTER (WHERE hit_prompt) AS s1_prompt,
COUNT(*) FILTER (WHERE hit_retrieval) AS s2_retrieval,
COUNT(*) FILTER (WHERE hit_tool) AS s3_tool_call,
COUNT(*) FILTER (WHERE hit_edit) AS s4_edit_apply,
COUNT(*) FILTER (WHERE hit_success) AS s5_success,
ROUND(100.0 * COUNT(*) FILTER (WHERE hit_success)
/ NULLIF(COUNT(*) FILTER (WHERE hit_prompt), 0), 1) AS overall_pct
FROM per_request;An agent can loop: retrieve, call a tool, retrieve again. If you count raw rows you'll show more tool_calls than prompts and the funnel inverts. Collapsing to distinct request_ids per stage fixes that. Say the assumption out loud: are stages monotonic or can a request reach success without an edit_apply? If you don't know, state how you'd check rather than assume.
Task 3 - dedup retries into logical attempts before a failure rate
A flaky network produces three rows for one user intent: two timeouts then an ok. Counting raw rows reports a 67% failure rate for something the user experienced as a success. Roll up to the logical attempt first.
- 1Define the logical attempt. Group retries under one key -
request_idor a window ofuser_id+ same prompt within N seconds if no request_id exists. - 2Collapse status with a precedence rule. A logical attempt succeeds if any of its tries succeeded; it fails only if every try failed. Decide and state the rule.
- 3Compute the rate on attempts, not rows. Failure rate = failed logical attempts / total logical attempts.
- 4Sanity-check the denominator. Confirm attempt count is below row count by roughly your retry rate; if they're equal, your dedup didn't fire.
WITH attempt AS (
SELECT
request_id,
BOOL_OR(status = 'ok') AS any_ok,
COUNT(*) AS tries
FROM interaction_events
WHERE event_type IN ('success', 'error', 'timeout')
GROUP BY request_id
)
SELECT
COUNT(*) AS logical_attempts,
COUNT(*) FILTER (WHERE NOT any_ok) AS failed_attempts,
ROUND(100.0 * COUNT(*) FILTER (WHERE NOT any_ok)
/ COUNT(*), 2) AS failure_rate_pct,
ROUND(AVG(tries), 2) AS avg_tries
FROM attempt;Narrate two sanity checks per query without being asked: one on the denominator (does N look right for the window) and one on a known-good slice (does the newest client_version show fewer timeouts than last month). The screener is grading whether you trust-but-verify your own numbers. Silent correctness reads as luck; narrated correctness reads as rigor.
Self-score the run
- Axis
- Correctness
- Weak (1-2)
- Averaged latency; counted raw rows as failures.
- Strong (4-5)
- Percentiles, attempt-level dedup, correct denominators.
- Axis
- Rigor
- Weak (1-2)
- Returned a number with no checks.
- Strong (4-5)
- Stated assumptions; ran a denominator and a known-slice check.
- Axis
- Communication
- Weak (1-2)
- Typed in silence.
- Strong (4-5)
- Narrated each metric definition and why before running it.
- Axis
- Speed
- Weak (1-2)
- Stuck on syntax; ran out of clock.
- Strong (4-5)
- Reached three working answers inside the hour with time to sanity-check.
| Axis | Weak (1-2) | Strong (4-5) |
|---|---|---|
| Correctness | Averaged latency; counted raw rows as failures. | Percentiles, attempt-level dedup, correct denominators. |
| Rigor | Returned a number with no checks. | Stated assumptions; ran a denominator and a known-slice check. |
| Communication | Typed in silence. | Narrated each metric definition and why before running it. |
| Speed | Stuck on syntax; ran out of clock. | Reached three working answers inside the hour with time to sanity-check. |
Anything you score 3 or below is a rep to repeat before the real screen.
Takeaway. Under the clock, report percentiles not averages, build the funnel on distinct request_ids, dedup retries into logical attempts before any failure rate and narrate two sanity checks per query.
Self-check
QYour raw events table shows a 9% timeout rate. After grouping by request_id and treating an attempt as successful if any try succeeded, it drops to 3%. Which number do you report as the reliability metric and why?
Metric-design case
After this you can deliver a north-star + guardrail set for the agent harness.
“Define how we measure agent reliability for Cursor.” That's the prompt. It's deliberately open and the round grades whether you can turn an abstract word - reliability - into something a team could query tomorrow and gate a release on.
Run a fixed structure so the ambiguity doesn't sink you. State what you're measuring and for whom, propose the metric tree, then describe how it lives in the org. Reserve the last third for operationalization, because that's where this round separates a definition from a slide.
- 1Scope it (60s). “Reliability” for the agent harness means: does an agent run complete, correctly and fast enough that the user keeps going? Name what you're not measuring (model quality of the underlying LLM is a separate pillar).
- 2Pick the north-star. One metric that captures the experience and moves with real wins. Then the guardrails that must not degrade while you chase it and the counter-metrics that catch you gaming it.
- 3Make each metric queryable-tomorrow. Give the formula, the unit (logical attempt), the window and the exact event fields.
- 4Operationalize it. Dashboard, alert, release gate and the ritual that forces a decision.
The metric tree, made concrete
- Role
- North-star
- Metric
- Agent Success Rate
- Definition (queryable-tomorrow)
- Logical attempts that reach event_type='success' / total logical attempts, per request_id, 7-day trailing, segmented by model + client_version.
- Event fields
- request_id, event_type, status, model, client_version, ts
- Role
- Guardrail
- Metric
- p95 completion latency
- Definition (queryable-tomorrow)
- PERCENTILE_CONT(0.95) of latency_ms on successful attempts; must not regress > X% week-over-week.
- Event fields
- latency_ms, event_type, ts
- Role
- Guardrail
- Metric
- Tool-call reliability
- Definition (queryable-tomorrow)
- tool_call events returning ok / total tool_call events; agent loops die here silently when this slips.
- Event fields
- event_type, status, request_id
- Role
- Counter-metric
- Metric
- Avg tries per attempt
- Definition (queryable-tomorrow)
- AVG(tries) per request_id; rises when success is bought with aggressive retrying - catches a gamed success rate.
- Event fields
- request_id, event_type
- Role
- Counter-metric
- Metric
- Trivial-success share
- Definition (queryable-tomorrow)
- Share of successes on no-op / one-line edits; guards against inflating success by counting cheap interactions.
- Event fields
- edit size, event_type
| Role | Metric | Definition (queryable-tomorrow) | Event fields |
|---|---|---|---|
| North-star | Agent Success Rate | Logical attempts that reach event_type='success' / total logical attempts, per request_id, 7-day trailing, segmented by model + client_version. | request_id, event_type, status, model, client_version, ts |
| Guardrail | p95 completion latency | PERCENTILE_CONT(0.95) of latency_ms on successful attempts; must not regress > X% week-over-week. | latency_ms, event_type, ts |
| Guardrail | Tool-call reliability | tool_call events returning ok / total tool_call events; agent loops die here silently when this slips. | event_type, status, request_id |
| Counter-metric | Avg tries per attempt | AVG(tries) per request_id; rises when success is bought with aggressive retrying - catches a gamed success rate. | request_id, event_type |
| Counter-metric | Trivial-success share | Share of successes on no-op / one-line edits; guards against inflating success by counting cheap interactions. | edit size, event_type |
Every row names its fields so the panel can see you could write the query in the room.
Confront the three things that make this hard
The same prompt can succeed or fail across runs; a single trace proves nothing.
Measure rates over many attempts and treat a regression as a shift in the rate distribution, not one bad run.
Latency is right-skewed; the mean hides the slow experiences that drive frustration.
Define guardrails on p95/p99 and watch the tail separately from the median.
A flat success rate can hide a 20-point drop in one region or client_version (Simpson's paradox).
Every headline metric ships pre-segmented by model, client_version and region.
Operationalize it - the part most candidates skip
- Dashboard
- Success rate + the two guardrails, segmented, with week-over-week deltas - the page an on-call engineer opens first.
- Alert
- Change-point on success rate per segment, tuned so the false-positive cost (alert fatigue) is weighed against a missed regression.
- Release gate
- A canary check that blocks a rollout if the new client_version's success rate or p95 regresses beyond threshold on the canary slice.
- Ritual
- A weekly reliability review where a red metric must produce an owner and an action, not a nod - that's what 'operationalize' means.
Trap 1, the vanity dashboard: you defined a metric but can't name a decision it would change. Trap 2, the unqueryable metric: 'measure agent quality' with no formula, unit or fields - untestable. Trap 3, ignoring the data's nature: averaging heavy-tailed latency, reading a global rate without segmenting or trusting a single non-deterministic run. If your answer trips any of the three, it isn't done.
Volunteer the way your own north-star could be gamed before they ask. “Success rate goes up if the harness retries harder, so I pair it with avg-tries-per-attempt as a counter-metric.” Naming the failure mode of your own metric is the clearest signal that you've operationalized one in production, not just defined one on a whiteboard.
Takeaway. Deliver a north-star (agent success rate), guardrails (p95 latency, tool-call reliability) and counter-metrics (avg tries, trivial-success share) - each queryable-tomorrow with named fields - then operationalize via dashboard, alert, gate and a ritual that forces a decision.
Self-check
Experimentation grilling
After this you can defend a design and a causal claim live.
This round is adversarial by design. You'll propose an A/B, then the interviewer changes the rules - “you can't randomize this one” - and probes every assumption. The grade is method-fit and intellectual honesty, not whether you've memorized a test.
Part 1 - design the A/B for a retrieval changesay all six pieces before they ask
- 1Unit. Randomize at the user level, not the request level - requests within a user are correlated and request-level assignment leaks the treatment across a session.
- 2Primary metric + guardrails. Primary: agent success rate. Guardrails: p95 latency and cost per attempt, so a retrieval win that doubles latency or spend doesn't ship.
- 3MDE and sample size. Decide the smallest success-rate lift worth shipping (say +1pp), then size for it given baseline rate and variance - not the other way around.
- 4Duration. Run at least one full weekly cycle to cover weekday/weekend mix and long enough to clear novelty.
- 5Sanity checks. Pre-registered: sample-ratio check, metric of a known A/A invariant and a guardrail tripwire.
- 6Analysis plan. Fixed in advance - one primary metric, one look (or a sequential procedure) and the decision rule written down before data lands.
Power is set before the test: pick the minimum detectable effect that would change the ship decision, then compute the N and duration that can detect it. Candidates who run until p < 0.05 appears are peeking and on heavy-tailed reliability metrics the variance is large enough that an underpowered test will mostly produce noise dressed as signal.
Part 2 - “we can't randomize this model swap”
A model rollout often can't be A/B'd: it ships to everyone on a date or routing constraints prevent clean assignment. Now you need a quasi-experiment and the move is matching the method to the structure of the data you actually have.
- Method
- Diff-in-diff
- Use when
- A comparison group never got the swap (e.g., one region or client held back).
- Key assumption to falsify
- Parallel trends pre-swap - plot the two groups before the change and show they moved together.
- Method
- Synthetic control
- Use when
- No single clean control, but many candidate segments to weight into one.
- Key assumption to falsify
- The synthetic tracks the treated unit well in the pre-period; check fit on held-out pre-weeks.
- Method
- Regression discontinuity
- Use when
- Assignment hinges on a threshold (rollout to client_version ≥ X).
- Key assumption to falsify
- No other change happens at the same cutoff; units can't manipulate which side they're on.
- Method
- Interrupted time series
- Use when
- Everyone switched at once, with a clean before/after on a stable series.
- Key assumption to falsify
- No co-occurring deploy or seasonality at the breakpoint; model the counterfactual trend.
| Method | Use when | Key assumption to falsify |
|---|---|---|
| Diff-in-diff | A comparison group never got the swap (e.g., one region or client held back). | Parallel trends pre-swap - plot the two groups before the change and show they moved together. |
| Synthetic control | No single clean control, but many candidate segments to weight into one. | The synthetic tracks the treated unit well in the pre-period; check fit on held-out pre-weeks. |
| Regression discontinuity | Assignment hinges on a threshold (rollout to client_version ≥ X). | No other change happens at the same cutoff; units can't manipulate which side they're on. |
| Interrupted time series | Everyone switched at once, with a clean before/after on a stable series. | No co-occurring deploy or seasonality at the breakpoint; model the counterfactual trend. |
Pick by what natural control the rollout left you, then name the assumption you'd test before trusting the estimate.
“We held the swap back from one region for a week, so I'd reach for diff-in-diff. The whole thing rests on parallel pre-trends, so before I quote an effect I'd plot both regions for the eight weeks before the swap. If they weren't already moving together, diff-in-diff is the wrong tool and I'd switch to a synthetic control weighted on the pre-period.”
Part 3 - the curveballs they'll throw
Assignment isn't 50/50 when it should be - a chi-square flags it.
It signals a bucketing or logging bug; don't analyze the test, fix the pipeline first.
Repeatedly checking and stopping at the first significant look inflates false positives.
Fix the N in advance or use a sequential test (e.g. always-valid p-values) built for continuous monitoring.
Users react to change itself; early lift fades or early dip recovers.
Run past the novelty window and inspect the effect's time path, not just the pooled average.
Latency's tail makes the mean estimate noisy and underpowers the test.
Use percentile metrics, winsorize or cap and apply CUPED to cut variance with pre-period covariates.
When you state a causal claim, attach how you'd break it in the same breath. “This assumes parallel trends; I'd falsify it by checking the pre-period and if it fails I'd abandon diff-in-diff.” Volunteering the falsification test is the truth-seeking signal Cursor screens for. A confident estimate with no stated assumption reads as someone who hasn't run these in anger.
Takeaway. Design the A/B around six pieces (unit, primary+guardrails, MDE, duration, sanity checks, fixed analysis plan); when randomization is impossible, match the quasi-experimental method to the rollout's structure and name the assumption you'd falsify first.
Self-check
QYou're running an A/B on a retrieval change and you check the dashboard daily. On day 3 the success-rate lift hits p = 0.04. The interviewer asks if you'd call it. What do you say?
Regression-diagnosis take-home
After this you can produce a presentable end-to-end analysis.
The take-home is the round where craft shows. The brief: “p99 completion latency jumped after release N - find the cause.” You get a synthetic dataset and 4 to 8 hours. What's graded isn't just whether you find it, but whether your write-up reads like something an engineering lead could act on in five minutes.
Diagnose like an incident, not a data dump. Localize, rule out confounds, quantify the blast radiusHow much breaks if a change goes wrong; the scope of potential damage., then lead the write-up with the decision. Most candidates invert that order and bury the recommendation under their EDA.
The diagnosis sequence
- 1Confirm the jump is real. Plot p99 by day around release N. Is it a step change at the release boundary or drift that started earlier? A change-point on the series beats eyeballing.
- 2Segment to localize. Cut p99 by model, region and client_version. A global jump that's actually one region or one model narrows the cause fast - and watch for Simpson's paradox in the pooled view.
- 3Rule out confounds. Did traffic mix shift? A heavier prompt type or a big new cohort can move p99 without any code regression. Hold mix constant and re-check.
- 4Quantify the blast radiusHow much breaks if a change goes wrong; the scope of potential damage.. How many users, which segments, how much extra latency - translate the stat into impact an eng lead feels.
- 5Recommend. Roll back, fix forward or investigate further - and say which, with the evidence that decides it.
The fastest wrong path is forming a cause hypothesis from the global trend and then hunting for support. Segment first. If the p99 jump is entirely in client_version = 2.14 on one region, you've cut the search space by 90% before writing a single sentence of narrative and you've protected yourself from a Simpson's-paradox story where the aggregate moved but no segment did.
Structure the write-up - decision first, evidence in the appendix
Top of page: the cause, the blast radiusHow much breaks if a change goes wrong; the scope of potential damage. in one number and the recommendation.
Example: “p99 rose 2.1s for the ~8% of users on client 2.14 in eu-west; recommend rollback. Evidence below.”
Segmented charts and the confound checks you ran, in the appendix.
Close with limitations and next steps and keep the analysis reproducible (query + notebook).
Reviewers are senior and time-boxed. If page one is a histogram of latency and the recommendation is on page nine, you've demonstrated you can analyze but not communicate to a decision-maker - which is half the job here. The recommendation, the blast radiusHow much breaks if a change goes wrong; the scope of potential damage. and the confidence go in the first three sentences. Everything that justifies them goes underneath.
Self-score with a hiring-bar rubric
- Axis
- Clarity
- Below bar
- Decision buried; reader hunts for the point.
- At hiring bar
- Cause, blast radiusHow much breaks if a change goes wrong; the scope of potential damage., recommendation in the first three sentences.
- Axis
- Correctness
- Below bar
- Blamed the global trend; missed a confound.
- At hiring bar
- Localized to a segment, ruled out traffic-mix, change-point confirmed.
- Axis
- Pragmatism
- Below bar
- Explored everything; recommended nothing.
- At hiring bar
- Made a call (roll back / fix forward) with the evidence that decided it.
- Axis
- Communication
- Below bar
- Notebook dump, not reproducible.
- At hiring bar
- Tight write-up, reproducible query/notebook, limitations stated.
| Axis | Below bar | At hiring bar |
|---|---|---|
| Clarity | Decision buried; reader hunts for the point. | Cause, blast radiusHow much breaks if a change goes wrong; the scope of potential damage., recommendation in the first three sentences. |
| Correctness | Blamed the global trend; missed a confound. | Localized to a segment, ruled out traffic-mix, change-point confirmed. |
| Pragmatism | Explored everything; recommended nothing. | Made a call (roll back / fix forward) with the evidence that decided it. |
| Communication | Notebook dump, not reproducible. | Tight write-up, reproducible query/notebook, limitations stated. |
Score the version you'd submit today, not the one you imagine after another pass.
Takeaway. Diagnose like an incident - confirm the change-point, segment to localize, rule out traffic-mix confounds, quantify blast radiusHow much breaks if a change goes wrong; the scope of potential damage. - then write decision-first with evidence in the appendix and limitations stated.
Self-check
QYour global p99 jumped after release N. You segment by client_version and no single version shows a jump, yet the aggregate clearly rose. What's the most likely explanation and your next move?
Product round + final synthesis
After this you can rehearse the decisive round and assemble your narrative.
The product/craft round is the one Cursor uses to detect superficial usage and for this role it's where reliability instinct meets real product sense. You can't fake it from the docs. You earn it by running Cursor and a rival agent hard, then forming a sharp opinion about where each one breaks.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
The signals every round re-scores - rank them and prep your evidence for the heaviest first.
Record a 5-minute reliability critique, Cursor vs. one competitor
Pick one competing agent you've actually used. Record yourself, on a clock, comparing where reliability holds and where it cracks. Ground every claim in a moment you lived, not a feature list.
- 1Name the failure you hit. “On a large multi-file refactor, the agent loop stalled mid-tool-call and I had to restart.” Specific, reproducible, dated.
- 2Compare honestly. Where the competitor is more reliable, say so. Pretending Cursor wins everywhere reads as a pitch, not a critique.
- 3Tie each critique to a metric. Don't just complain - name the metric you'd ship to catch it.
- 4Land an opinion. Which reliability problem would you attack first if you had the seat and why that one.
- Critique you observed
- Agent loop stalls on long tool-call chains.
- Metric you'd ship to catch it
- Tool-call reliability by chain depth; alert when deep-chain success rate diverges from shallow.
- Critique you observed
- Edits silently fail to apply on big diffs.
- Metric you'd ship to catch it
- edit_apply success rate segmented by diff size; trivial-vs-large split.
- Critique you observed
- Tail latency spikes on certain models.
- Metric you'd ship to catch it
- p99 latency by model x client_version, with a change-point alert per segment.
- Critique you observed
- Retries mask failures the user still feels.
- Metric you'd ship to catch it
- Avg tries per attempt as a counter-metric beside success rate.
| Critique you observed | Metric you'd ship to catch it |
|---|---|
| Agent loop stalls on long tool-call chains. | Tool-call reliability by chain depth; alert when deep-chain success rate diverges from shallow. |
| Edits silently fail to apply on big diffs. | edit_apply success rate segmented by diff size; trivial-vs-large split. |
| Tail latency spikes on certain models. | p99 latency by model x client_version, with a change-point alert per segment. |
| Retries mask failures the user still feels. | Avg tries per attempt as a counter-metric beside success rate. |
Every opinion ends in a query you could write - that's the DS version of product taste.
The strongest version of this round sounds like a colleague who already works there. Reference the unit (user↔AI interaction), the pillar (performance & reliability, not growth) and a specific reliability seam you found. Conceding where a competitor is more reliable buys enormous credibility, because it proves you're evaluating the product, not auditioning loyalty.
Deliver your 90-second “why this pillar, why me”
- Why reliability over growth: you're drawn to making a non-deterministic product trustworthy at billions of interactions, where defining 'good' is itself unsolved.
- Your proof: a time you operationalized a north-star - a metric that caused a rollback, a launch hold or a reprioritized fix, not just a dashboard you built.
- Why you, specifically: the blend of experimentation/causal rigor with builder instinct and that you work across the stack instead of living in a notebook.
- Why now: an early seat means you write the playbook and you want that ambiguity rather than inheriting someone else's metrics.
“I want this pillar because measuring reliability for a non-deterministic agent at billions of interactions is genuinely unsolved - there's no playbook to inherit. Last year I operationalized a latency north-star that got a launch held twice; I care more about the decision a metric forces than the chart it makes. And I don't hand off at the notebook - I instrumented the events and shipped the dashboard myself.”
Run the readiness checklist across all six modules
- Stage / domain
- SQL + stats screen
- Anchor self-test
- Compute segmented p95/p99 and a retry-deduped failure rate, narrated, under an hour?
- Rating 1-5
- ___
- Stage / domain
- Metric design
- Anchor self-test
- North-star + guardrails + counter-metrics, all queryable-tomorrow with named fields?
- Rating 1-5
- ___
- Stage / domain
- Experimentation
- Anchor self-test
- Six-piece A/B and the right quasi-experiment with its falsifiable assumption?
- Rating 1-5
- ___
- Stage / domain
- Causal inference
- Anchor self-test
- Match diff-in-diff / synthetic control / RD / IV to the rollout structure cold?
- Rating 1-5
- ___
- Stage / domain
- Regression diagnosis
- Anchor self-test
- Localize, rule out mix-shift, quantify blast radiusHow much breaks if a change goes wrong; the scope of potential damage., write decision-first?
- Rating 1-5
- ___
- Stage / domain
- Product + reliability craft
- Anchor self-test
- A grounded Cursor-vs-rival critique tied to metrics you'd ship?
- Rating 1-5
- ___
| Stage / domain | Anchor self-test | Rating 1-5 |
|---|---|---|
| SQL + stats screen | Compute segmented p95/p99 and a retry-deduped failure rate, narrated, under an hour? | ___ |
| Metric design | North-star + guardrails + counter-metrics, all queryable-tomorrow with named fields? | ___ |
| Experimentation | Six-piece A/B and the right quasi-experiment with its falsifiable assumption? | ___ |
| Causal inference | Match diff-in-diff / synthetic control / RD / IV to the rollout structure cold? | ___ |
| Regression diagnosis | Localize, rule out mix-shift, quantify blast radiusHow much breaks if a change goes wrong; the scope of potential damage., write decision-first? | ___ |
| Product + reliability craft | A grounded Cursor-vs-rival critique tied to metrics you'd ship? | ___ |
Anything 3 or below is a loop-ending gap; those are your last reps before scheduling.
For each domain topic, explain it to someone non-technical in two minutes without jargon: what a p99 is and why you don't average latency; why you can't randomize a model swap and what you do instead; why a rising success rate can still be bad. If you can teach it plainly, you own it. If you reach for jargon to cover a gap, that's the topic to revisit.
Takeaway. Record a grounded Cursor-vs-rival reliability critique with a metric per complaint, deliver a 90-second why-this-pillar story anchored on a north-star you operationalized, then run the six-module readiness checklist and the can-you-teach-it gate.
Self-check
QIn the product round, you genuinely think a competitor's agent handles long tool-call chains more reliably than Cursor today. Do you say so and how do you frame it?