Grokking Staff Engineer Interview
Vote

0% completed

​

From a Vague Ask to a Problem Statement

What a Problem Statement Is

Symptoms and Causes

Questions to Ask the Requester

The First Draft

The Agreed Version

Who Must Agree, and Why

When a Short Statement Is Enough

Using This in an Interview

Key Takeaways

Practice Questions

"Scheduled jobs keep failing. Fix it."

The VP of Engineering at the marketplace sent that message to the director of the platform group after a quarterly review, and the director passed it to the platform Staff engineer. It contains four words of complaint and two words of instruction. It names no job, no team, no number, and no date.

A request of this kind is normal at Staff level. The people who see a problem first are often far from its cause, and they describe what they experienced rather than what is wrong. Before anyone designs anything, someone has to turn the complaint into a statement that several teams can read, check, and accept. This lesson answers how that statement is built, and how to tell a finished statement from a first draft.

What a Problem Statement Is

A problem statement is a short written description of a problem that says who is affected, how often, what it costs today, what success means in numbers, which constraints apply, and who must agree. It does not describe the solution. Its purpose is to let people who disagree about the solution first agree on the problem.

The difference from an ordinary requirement is the audience. A requirement is usually written for one team that will build something. A Staff-level problem statement is written for several groups at once: the person who asked, the teams who own the affected systems, and the teams who will pay for the change. Each group reads it to answer one question: "Is this the problem I think we have?"

Symptoms and Causes

A symptom is what someone observes; a cause is the mechanism that produces it. The VP observed a symptom: scheduled jobs failing. The word "failing" covers several different events, and the first task is to list them.

The Staff engineer read the six incident reports from the last quarter and sorted them by what actually happened:

Incident typeCountSchedulerMechanism
Job ran twice2A (payments team)Retried after a timeout while the first run was still working
Job ran twice2B (data team)Retried after a timeout while the first run was still working
Job did not run2C (platform group)A run failed or timed out, and C never retries

The table shows something the VP's sentence hides. The six incidents come from two opposite failures. Schedulers A and B retry too eagerly, so a slow job runs twice. Scheduler C never retries, so a job whose run fails is not run again, and in one case nobody noticed for three days.

The opposite failures matter for the design. The obvious fix for double runs is to turn retries off, but that would turn A and B into copies of C and produce missed runs instead. The obvious fix for missed runs is to turn retries on, which would produce double runs on C. No single scheduler setting removes both failures. The cause is a missing piece of information about the jobs: the scheduler cannot know whether a given job is safe to run twice, because nobody has told it.

One complaint traced to six incidents, two opposite failures, and one missing rule.
One complaint traced to six incidents, two opposite failures, and one missing rule.

Notice that the VP's single word "failing" divides into two failures with opposite fixes. Both lead back to the same missing piece of information: whether each job is safe to run twice.

Questions to Ask the Requester

The requester knows what they saw and why it mattered; the Staff engineer needs both before writing anything. In a conversation of about 20 minutes, the VP answered most of what the incident reports could not. The Staff engineer asked five questions:

  • "Which failures did you hear about?" The VP had heard about two: the seller fee job that charged 1,900 sellers twice, and a nightly report that was missing for three days.
  • "What happened as a result?" Refunds, support tickets from sellers, and a finance team that no longer trusted the nightly numbers.
  • "What would tell you this is fixed?" The VP's answer was "a quarter with no seller-facing incident from a scheduled job," which is stricter than an internal count and worth recording.
  • "Is there a date this matters by?" Finance planned to add a second monthly billing job in two quarters, and wanted it to run on something reliable.
  • "Who else should I talk to?" The VP named the finance lead and the payments team's engineering manager.

The questions ask about effects, not solutions. If the Staff engineer had asked "Should we build one scheduler?", the VP might have said yes. The work would then have started from a solution that nobody had tested against the problem.

Advanced System Design Fundamentals teaches a related skill for a stated design question in its lesson The First Ten Minutes. The work here starts one step earlier, before anyone has stated a design question at all.

The First Draft

The Staff engineer's first draft, written after reading the incident reports and before talking to anyone, was one sentence:

Replace the three job schedulers with one reliable scheduler.

It is a reasonable instinct and a weak problem statement, for four reasons:

  • It names a solution. One scheduler may well be the answer, but the statement removes the chance to compare it with cheaper options, such as fixing retries in each scheduler separately.
  • "Reliable" is not measurable. Nobody can check it, so nobody can say when the work is finished.
  • It names nobody who is affected. The 26 owning teams and the sellers do not appear.
  • It hides the cost to others. Replacing schedulers A and B means the payments team and the data team give up systems they own, and the statement does not say so.

The Agreed Version

A problem statement is finished when every group that must agree has read it and accepted it, not when its author is satisfied. The agreed version took two weeks and three rounds of comments. It is longer than the draft, and every added line answers one of the four weaknesses above.

Problem. Scheduled jobs at the marketplace run on three schedulers owned by three teams: A (payments, 18,000 jobs a day), B (data, 16,000), and C (platform, 8,000). Together they serve 26 owning teams. Last quarter, 4 jobs ran twice because A and B retried them after a timeout, and 2 jobs did not run because C does not retry. One double run charged 1,900 sellers twice.

Cause. No scheduler knows whether a job is safe to run twice, and no team owns the retry behavior across all three.

Cost today. About 24 engineer-days a quarter in incident response, plus refunds and seller support.

Success. At most 1 incident a quarter from jobs that run twice or not at all, and none that affects sellers, for two quarters in a row. Every missed run is detected within 15 minutes. Every job declares whether it is safe to retry.

Constraints. The monthly seller fee job must not miss a run. Each owning team spends about 5 engineer-days or less on average. Finance's new billing job must have a reliable home in two quarters.

Must agree. The VP of Engineering, the payments and data team managers, the director of the platform group, and the finance lead.

The success line uses three measures because each one checks something different. The incident count checks the result. The 15-minute detection target catches missed runs that would otherwise wait days to be found. The declaration requirement checks that the cause has been removed rather than hidden.

The first draft and the agreed problem statement, compared line by line.
The first draft and the agreed problem statement, compared line by line.

Notice that the agreed version still does not say "build one scheduler." It leaves the solution open, so a cheaper option could still win if the numbers supported it.

Who Must Agree, and Why

Agreement is part of the problem statement because the people who must change their systems are not the people who asked for the change. The VP asked, but the payments team and the data team would give up their schedulers, and the platform group would take on more on-call work. A statement that only the VP accepts will meet objections from the other groups as soon as the design appears.

Each group needed a different line before it agreed:

  • The payments team manager wanted the monthly seller fee job named as a constraint, because that job moves money.
  • The data team manager wanted the effort per owning team stated, because the data team would have to change its own jobs as well as give up scheduler B.
  • The director of the platform group wanted the cause to say "no team owns the retry behavior," because ownership was the change being asked of the platform group.
  • The finance lead added the date for the new billing job.

None of these changes altered the problem. Each one made a group's concern visible in writing, so that the later design would be checked against it. The lesson Building Agreement Across Teams covers how to reach agreement among many teams; here the point is that agreement starts with the problem, before the design.

When a Short Statement Is Enough

Not every request needs two weeks and five groups. If one team owns the affected system, the cause is already known, and the fix is cheap to reverse, a two-line note in the team's tracker is enough. The full statement is worth its cost when the problem crosses teams, when the requester and the owners are different people, or when the work will take more than a quarter. The scheduler problem met all three conditions.

Using This in an Interview

In a Staff system design round, the question is often as vague as the VP's message. Spend the first minutes turning it into a problem statement out loud: who is affected, what the failures are, what they cost, and what success means in numbers. Then say who would need to agree in a real company. A short answer sounds like this:

"Before I design anything, I want to separate the failures. Some jobs run twice and some do not run, and those have opposite fixes. I would aim for at most one incident a quarter, detect any missed run within 15 minutes, and require every job to declare whether it is safe to retry."

Expect two follow-up questions:

  • "Why not just turn off retries?" Explain that it would turn double runs into missed runs, and that the scheduler needs each job to declare whether a retry is safe.
  • "How would you know the problem is solved?" Give the three measures and the period over which you would check them.

Key Takeaways

  • A problem statement says who is affected, how often, the current cost, success in numbers, the constraints, and who must agree. It does not name the solution.
  • Separate symptoms from causes. One complaint can contain opposite failures that need opposite fixes.
  • Ask the requester about effects and about what "fixed" would mean, not about solutions.
  • A first draft that names a solution or uses an unmeasurable word such as "reliable" is not finished.
  • The statement is finished when every group that must change something has accepted it.

With the problem agreed, the next decision is what the work will deliberately not do. Those decisions are the subject of Choosing What to Leave Out, which shows how to write them so that they stay decided.

Practice Questions

1. The VP's message says jobs keep "failing." Why is it important to sort the incidents before proposing anything?

<details><summary>Show answer</summary>

Because "failing" covered two opposite failures. Four jobs ran twice because of retries, and two jobs did not run because there was no retry. A fix designed for one kind, such as turning retries off, would increase the other kind.

</details>

2. What is wrong with the problem statement "Replace the three job schedulers with one reliable scheduler"?

<details><summary>Show answer</summary>

It names a solution and uses a goal nobody can measure. It also leaves out who is affected and hides the cost to the payments and data teams, who would give up their schedulers. A useful statement describes the problem and defines success in numbers.

</details>

3. The success line has three measures. Why is the incident count alone not enough?

<details><summary>Show answer</summary>

Because a low count can come from luck or from failures nobody has found yet. The 15-minute detection target makes sure missed runs are found quickly, and the requirement that every job declares whether it is safe to retry checks that the cause itself has been removed.

</details>

4. A single team owns a service whose nightly job sometimes fails, and the fix is a small change the team can reverse in a day. Does this need a full problem statement with a list of people who must agree?

<details><summary>Show answer</summary>

No. One team owns the system, the cause is known, and the change is cheap to reverse. A short note in the team's tracker is enough. The full statement is worth its cost when a problem crosses teams, when the requester and the owners differ, or when the work runs longer than a quarter.

</details>

Reading Progress

0%


Vote for new content

On This Page

What a Problem Statement Is

Symptoms and Causes

Questions to Ask the Requester

The First Draft

The Agreed Version

Who Must Agree, and Why

When a Short Statement Is Enough

Using This in an Interview

Key Takeaways

Practice Questions