Live coding · 14 min
Mobile live coding interview: what to say while you type
How a mobile live coding round is scored, a 45-minute plan, what to say at each stage, a worked Swift example, and how to recover when you stall.
Live coding · 10 min read
How a pair programming interview differs from live coding, what the interviewer scores when they type with you, and how to take and give the keyboard.
This guide is for mobile engineers with a round called “pairing session” or “pair programming interview” on the schedule. It explains how the round differs from ordinary live coding, what the interviewer is scoring while they type next to you, the moments that come up in pairing rounds with the response that scores, a worked exchange, and how the round looks on iOS and Android setups.
I have run pair programming rounds as an interviewer, and I have paired with engineers as a mentor. The two feel similar from the inside, and they are judged very differently. That difference is most of what this page is about.
In a live coding round the interviewer mostly watches. In a pairing round they work with you: they suggest, they ask you to try something, they take the keyboard, they hand it back. The problem is usually practical, often a feature on starter code, sometimes a bug in existing code.
| Live coding | Pair programming | |
|---|---|---|
| The interviewer | Watches, asks, gives hints when you stall | Suggests, types, disagrees, hands over the keyboard |
| The problem | Often from a blank file | Often starter code or an existing project |
| What you are narrating | Your decisions | Your decisions, and your response to theirs |
| The failure that ends it | Silence | Folding to every suggestion, or fighting every one |
The narration habits from the mobile live coding guide still apply. What is added is a second person whose ideas you have to weigh in real time.
When I run a pairing round, the notes I need at the end are about working with this person, not only about the code:
What it is: often a test of whether you will defend a choice you made on purpose.
Response that scores: “That is a fair option. I chose Y because of this reason. X would win if this condition changed. Do you want me to switch, or is Y fine for now?” Name your reason, name what would make theirs better, and hand the decision back.
The trap: “Sure, let’s do X” when you had a reason for Y and did not say it.
What it is: sometimes there is, sometimes it is a check that you read your own code.
Response that scores: read the line out loud with a concrete input before agreeing or disagreeing. “If the list is empty, this index is out of range. You are right.” Or: “With an empty list the guard returns first, so I think this is safe. Let me run it to be sure.”
The trap: agreeing immediately without checking, or defending without checking. Both skip the step being scored.
When the trace shows they are right, say so and move straight to the fix: “Yes, a thrown error leaves the screen empty. I skipped that path to get the flow working. The view model should publish an error state and the screen should render it; I will do that right after this step.” Three things in one reply: the gap, the fix, and where it sits in your order of work. What costs you is the half defence that starts with “well, I was going to”.
Response that scores: give a one-sentence status before you let go: “The fetch works and returns decoded models; the list is not wired yet.” Then watch and narrate as the navigator: “That will run on the main actor, which is fine for this size.”
The trap: going silent while they type. The round did not pause.
Response that scores: say what changed while they drove before you continue. “You added the error state here, so I will render it in the view.” Integrate their work; do not rewrite it without saying so.
Response that scores: a real answer about dependency judgement: what the library would save, what it would cost in the review, and what you would do in production versus in a 45-minute round. Both answers are defensible. Not having thought about it is not.
Response that scores: cut scope out loud. “I will stop the pagination here and make sure the first page and the error state work, then describe how the next page would load.” Knowing what to drop is scored.
Response that scores: keep working and keep narrating at the level of intent. Silence from the interviewer is not a signal that you are wrong. It may be a check on whether you need them to keep moving.
The collaborative defence has three moves, and it works for every kind of suggestion:
The shape is acknowledgement, tension, reasoning, weight. It lets you hold a position without sounding defensive, and it leaves room to change your mind in the next sentence.
Sometimes you will think the interviewer’s idea is worse, and you should say so. Phrases that work:
The move from a competent answer to a senior one is from “my reason is good” to “my reason is good, and I can see why yours differs”. The move to Staff is from defending to exploring: “help me understand whether I am right.” Candidates who change their minds in real time for a good reason pass. Candidates who dig in by reflex do not.
A pairing round on an iOS starter project. The candidate has extracted networking into a service behind a protocol.
Interviewer: “Why not call
URLSessiondirectly from the view model? It is less code.”Candidate: “It is less code. The protocol is one more type to read. What it buys is that I can test the view model with a stub that returns after a delay, which is how I would test that a stale search result never lands. For this size of feature I think that is worth one type. If this screen were never going to be tested, I would agree with you.”
Interviewer: “Fine. There is a bug in your cancellation, though.”
Candidate: “Let me trace it. Query ‘sw’, then ‘swift’ before the first returns. The first task is cancelled here, and here it checks cancellation after the await, so it never publishes. I think it is safe. Can I run the test to confirm?”
Interviewer: “Go ahead.”
The first answer held the position with a reason and named the condition under which the interviewer would be right. The second checked instead of agreeing. Neither answer is about Swift. Both are exactly what the round is scoring.
Whichever setup you get, say it out loud at the start: what you will run, where, and what you will do if the tooling gets in the way. It costs ten seconds and removes a whole class of awkward pauses.
Whichever you pick, answer out loud and time yourself. Saying the answer is the part a page cannot do for you, and it is the part the round scores.

Live coding · 14 min
How a mobile live coding round is scored, a 45-minute plan, what to say at each stage, a worked Swift example, and how to recover when you stall.

iOS · 12 min
What an iOS coding interview asks: the practical tasks that recur, the algorithm round in Swift, and what is graded beyond whether it compiles.

iOS · 11 min
What an iOS technical interview loop contains, what each round scores, and where strong Swift candidates still lose it.