Mobile system design · 17 min
Mobile system design interview: how the round is scored
How a mobile system design round runs, the seven things a senior answer covers, a worked offline sync example, and how Senior and Staff are scored.
Senior and Staff loops · 15 min read
How I decide Staff vs Senior in a mobile system design loop: the questions I ask, what each level answers, the follow-ups, and how down-levelling happens.
This page is for Senior mobile engineers interviewing for a Staff role, and for Seniors who want to know where the bar sits before they try. It is the rubric I use when I decide between Staff and Senior after a Staff mobile system design interview: the questions I ask, what a strong Senior says, what a Staff candidate says, the follow-up that separates them, and how a candidate who did well still ends up levelled at Senior.
Most of this is not about the diagram. A Staff candidate and a strong Senior often draw the same boxes. What differs is what they ask before drawing, what they refuse to build, and who they think owns the thing after launch.
The question I am answering for a Senior candidate is: can this person lead the execution of a hard problem very well?
The question for Staff is different: can this person improve how the organisation solves hard problems? I am not looking for a very good Senior. I am checking whether I could hand this person an important, ambiguous problem that spans several teams, with no obvious solution and no limits defined for them, and get back a good technical direction, alignment between the people involved, and a better outcome for the organisation.
There is no universal definition of Staff. Companies shape the role differently: some want a tech lead, some an architect, some a solver for the hardest problems, some a right hand to an engineering leader. The common thread is impact beyond your own work, and usually beyond one team.
Here is the difference on one prompt: “Migrate from system A to system B with no downtime.”
The Staff bar sits on top of the Senior one, not instead of it. A Staff candidate who skips the fundamentals does not get credit for strategy. The Senior baseline in a mobile round is the device: a local source of truth, writes that survive the process being killed, a sync design with a conflict rule, background limits stated correctly, and a way to know it works in production. The mobile system design interview guide lists the seven areas I expect.
If those are shaky, the round becomes a Senior round and stays one. If they are solid by minute twenty, I start pushing on the things below.
In a Staff system design round I am watching eleven things at once:
The last five separate Staff from Senior more than anything else. Ideally a Staff candidate brings up migration, ownership, organisational impact, cost and exit without being asked.
These are prompts and follow-ups I use for the Staff decision. For each one: what is scored, what a strong Senior says, what the Staff signal is, and the follow-up.
What is scored: whether you look at the organisation before you look at the code.
Strong Senior answer: extract a shared SDK. Common protocols, token storage, refresh, tests, and a gradual migration of each app onto it. That is a good answer and I would hire the person who gives it, at Senior.
Staff signal: first find out why they diverged. If some differences are deliberate, a shared SDK turns legitimate variation into a rigid abstraction that three teams now have to fight. So: identify the owners in the three teams, in security and in backend auth. Define the contract you want to standardise. Separate policy from mechanism. Maybe start with shared observability and contract tests, which cost little and tell you where the real differences are. If centralising is worth it, then the SDK needs a clear owner, a compatibility policy, and a rollout that does not block three teams at the same time.
That answer covers the system, the organisation and the lifecycle. That combination is the Staff signal.
The follow-up: “Who owns the SDK in two years?” If there is no name or team in the answer, the design is not finished.
This is my favourite follow-up, and I ask it after any design choice.
What is scored: whether trade-offs are ranked or recited.
Strong Senior answer: “Option A is faster to build, option B scales better.”
Staff answer: “For the next eighteen months our bottleneck is the delivery time of four teams, not throughput. I accept A’s limit because it keeps the option to migrate later, and reversing it is cheap.” A Staff candidate can say what we optimise, what we sacrifice, why, for how long, and what would change the decision. That last part is the one most answers leave out, and it is what makes a decision record useful after you leave the room: without a condition for revisiting it, the next engineer sees a choice with no reason and reverses it.
The trap: answering “nothing”. Every design makes something worse. Not knowing what is the finding.
What is scored: how you handle ambiguity, in both directions.
What I want to hear: questions. What does “bad” mean? Who experiences it? What changed? Is it reliability, latency, correctness, or perceived performance? What is the business consequence? What evidence exists? Which decisions are blocked by it? Over what time horizon?
The second half, which counts as much: converging. After a few questions I need to hear something like “based on what we know, I frame it as X, assuming A and B. If either assumption is wrong, I revisit.” A candidate who keeps asking questions for twenty minutes has shown me the other failure. A Senior asks for clarity. A Staff candidate creates it.
What is scored: deciding with incomplete information.
The two weak extremes: paralysis (“we need to collect more data” when the decision is tomorrow), and cowboy architecture (“Kafka, it scales”).
The mature answer: “Two of these three are reversible after launch. One is not: the consistency model. I validate that one before we commit, I document the assumptions for the other two, and we proceed.” A Staff candidate can say “we do not know X, and we do not need X for this decision”, and also “I cannot take this decision responsibly without Y”.
What is scored: leadership without authority.
Insufficient: “I would talk to their manager.”
Staff answer: first check whether they really must do it. If our dependency forces work on them with no benefit to them, maybe our design is the problem. If the need is legitimate, lower their cost: write the RFC, propose the implementation, contribute the code. Only when there is a real priority conflict do you escalate, and you escalate to the place where the two priorities can be compared.
The strongest version makes the case in terms Team B already measures. “Old app versions will fail to parse this” sounds like a favour for mobile. Put it as their risk instead: the parse failure happens on phones, so their canary metrics stay green, the automatic rollback never triggers, and their on-call is the one paged for a breakage their own graphs do not show. Now they have a reason to want the fix.
What is scored: whether you own mistakes and change the system that produced them.
Insufficient: “We chose Realm, and later switched to Core Data.” That is a fact, not a lesson.
Staff answer, in shape: “I pushed that decision. I optimised for our team’s velocity and missed that the platform team would standardise persistence six months later. Technically it was fine. Organisationally we ended up with two standards. The signal I missed was that three other teams had the same problem at the same time. What we changed afterwards was the process for cross-cutting decisions.” The structure is: my mental model was wrong, and here is how I changed the system that produced the mistake.
What is scored: influence, and whether you can tell a technical objection from another kind.
Red flags: “I proved I was right.” “My manager backed me.”
Strong answer, in shape: “I thought the disagreement was about the technology. After two conversations I understood that Team B was worried about ownership and on-call. I changed the design so they kept ownership, and the objection disappeared.” An objection is not always a technical objection. Staff candidates find out which kind it is.
This is the best single behavioural question I know for Staff. I follow it with: how did you notice? Why did others not see it? How did you demonstrate it? What alternatives did you consider? Who had to be convinced? What did it cost the organisation? What did you do personally, and what did others do? What was the result? What would you do differently?
A real Staff engineer can spend thirty minutes on this without generalities. When the story evaporates at the second “how?”, that is the answer.
An interviewer says something like this in the middle of your design.
What is scored: how fast you update your model.
A candidate who says “you are right, that invalidates my assumption about ordering” and rebuilds the sync design around it can score better than one who had a better first design and spends fifteen minutes proving me wrong. Updating your model quickly matters more than looking infallible.
Recovery line when you have already started defending: “Let me stop defending that. If writes can arrive out of order, my ordering assumption is gone, so the server has to own sequencing. Here is what that changes.”
A Staff candidate spends process in proportion to how hard a decision is to undo. This is roughly my ladder, from easiest to reverse to hardest:
| Decision | How reversible |
|---|---|
| An internal framework choice | Fairly reversible |
| A public API | Harder |
| A persistent schema on the device | Hard |
| A protocol used by forty teams | Very hard |
| A migration strategy | Sometimes extremely hard |
| Organisational ownership | Surprisingly hard |
The Staff version of a rollout sounds like “try it on five percent of traffic and roll back if the metric moves” for the cheap end, and “slow down here, ten teams will build on this contract” for the expensive end. A candidate who runs every decision through the same process, heavy or light, is not reading the ladder.
These come up often in Staff loops. None of them is wrong. They are just not evidence of Staff.
This is the scorecard I think with. It is conceptual, not a form.
| Dimension | Strong Senior | Staff |
|---|---|---|
| Technical depth | Very strong | Very strong in the areas that matter |
| Problem framing | Solves the problem | Redefines it correctly |
| Scope | Component or team | Several teams, a domain, the organisation |
| Trade-offs | Identifies them | Prioritises and decides |
| Ambiguity | Asks for clarity | Creates clarity |
| Influence | Leads the team | Aligns people without authority |
| Architecture | Designs | Sets direction and evolution |
| Execution | Ships the project | Builds the mechanism through which many ship |
| Organisational awareness | Good | Very strong |
| Leverage | Own output plus the team’s | Multiplies other people’s output |
| Decision making | Correct | Correct under uncertainty |
| Failure handling | Repairs | Changes the system that produced the failure |
| Long-term thinking | Maintainability | Strategy, migration and ownership |
| Business understanding | Knows the requirements | Connects technology to outcome |
The final decision is not an average. Coding 10, algorithms 10, design mechanics 9, influence 4, judgement 4, scope 4 is “Strong Senior, not Staff”. The near-gating dimensions are technical judgement, scope, ambiguity, influence, leverage and decision quality. Missing two or three of those is not compensated by an excellent coding round.
A typical debrief for that profile reads like this: best coding of the quarter; excellent fundamentals; every project confined to their own team; defended the design instead of exploring my concern; no example of influencing a team they did not own; a strong execution leader with no organisation-level technical leadership. Verdict: Hire at Senior or Senior plus, not Staff.
If after the interview the main thing I can say is “technically excellent”, there is no Staff evidence yet. When I start arguing for a Staff hire, the sentence sounds more like: I would trust this person with a messy, politically difficult, technically ambiguous problem involving four teams, to find what matters, make the trade-offs explicit, align the right people, decide, and leave the organisation stronger.
Behavioural evidence for Staff is a repeated pattern, not one great story: ambiguity, framing, alignment, decision, execution, adaptation, measurable impact. If every project you can describe was “my manager gave me requirements and I executed them very well”, you are probably a very good Senior today, and the preparation is to find or create the other kind of work, not to rehearse harder.
For the design round itself:
What I do not require at Staff: being the fastest coder, knowing every algorithm or every API, being an expert in every layer, being a manager, charisma, talking constantly, or leading dozens of people. Staff engineers still write code.
The shortest version I have: a Senior is someone I can trust with a difficult project. A Staff engineer is someone I can trust with the judgement for a difficult area of the organisation.

Mobile system design · 17 min
How a mobile system design round runs, the seven things a senior answer covers, a worked offline sync example, and how Senior and Staff are scored.

Mobile system design · 14 min
How to design offline-first sync in a mobile system design interview: local source of truth, the outbox, conflict rules, clocks and migration on device.

Mobile system design · 15 min
What an iOS design round adds: background limits, background URLSession, storage, image pipelines and push, with a worked photo feed design.