skip to content

When a product runs in split-screen beside another app, which single-window assumptions break, and how would you test them?

level: seniorimportance: nice to knowfreq 22%

answer

  1. Two apps share one display
  2. The window is not the screen
  3. Size can change while running
  4. Visible does not mean focused
  5. Resize mid-flow with unsaved work

basics

~20 s

Split-screen halves the available width and can resize the app while it runs, so layouts assuming a fixed full-screen size, permanent focus, or exclusive use of hardware break. Test at the narrow size and while the divider is dragged.

solid answer

~50 s

Single-window code quietly assumes three things: that the window is as wide as the screen, that its size is settled for the life of the screen, and that the app is the only one on display. Split-screen breaks all three — the window can be a third of the width, the user drags the divider and resizes it continuously, and another app may hold the input focus, the camera or the audio output while yours stays fully visible. So the case runs the flow at the narrowest supported fraction, resizes **mid-flow** and asserts the unsaved state survived exactly as it must under a rotation, and checks that controls squeezed out of the narrow layout are still reachable rather than clipped. It also checks the visible-but-unfocused state: an app on screen must not assume the user is typing into it.

code

pseudocode · 23 lines
pseudocode
open screen "compose"
type into field "subject" the value "quarter plan"
attach item "notes"

enter split_screen with fraction = 0.5
wait until screen "compose" reports ready
assert value of field "subject" == "quarter plan"
assert attachment list contains "notes"

# the window keeps shrinking under a screen that is already live
for fraction in [0.4, 0.33]:
    resize window to fraction
    wait until screen "compose" reports ready
    assert control "send" is reachable and enabled
    assert label "subject" is not drawn truncated
    assert value of field "subject" == "quarter plan"

give_focus_to other_window
assert screen "compose" is visible
assert screen "compose" does not claim input focus

leave split_screen
assert value of field "subject" == "quarter plan"

go deeper

for a junior

Know the basic fact: in split-screen the app gets part of the display rather than all of it, and that part can change size while the app runs. Be ready to say what that does to a layout designed around one fixed width.

for a middle

Explain which assumptions break — fixed width, exclusive input focus, exclusive use of shared hardware, room for a fixed header and footer — and why a case has to perform a resize rather than merely starting at a narrow size.

for a senior

Show judgment about where the axis pays: which flows earn it, how you separate a narrow-width defect from a split-screen-only one, and what you assert instead of comparing images of a layout that is meant to differ.

for a principal

Own the scope call. Supporting this arrangement is a product commitment with a recurring test cost, so argue for supporting it deliberately on chosen surfaces, or for declaring it unsupported and verifying that the declaration actually holds everywhere.

## What split-screen actually changes Split-screen — the arrangement where two applications occupy one display at the same time — changes three things at once for the application under test, and each one breaks a different assumption that a single-window layout made without ever writing it down. - **The window is no longer the screen.** Your application may be given a third of the width, or a short strip of the height, while the rest belongs to something else. - **The size is no longer fixed for the life of the screen.** The user drags the divider, and the window shrinks and grows underneath a screen that is already built and in use. - **Your application is no longer alone.** Another app may hold the input focus, the camera, the microphone or the audio output while yours is fully visible. ## The assumptions a single-window layout quietly made | Assumption | What split-screen does to it | What the case checks | |---|---|---| | The window width equals the screen width | The window may be a third of it | The flow completes at the narrowest supported fraction | | The size is fixed once the screen is built | The user resizes it while the screen lives | Unsaved input and selection survive a live resize | | Visible means focused | Visible and unfocused is a normal state | The app does not claim focus it was never given | | Sole use of camera, microphone or audio | Another app can take the resource | The degraded path shows, and use resumes when it returns | | There is room for a fixed header and footer | Available height shrinks sharply | Primary controls stay reachable rather than clipped | | The on-screen keyboard covers a known share | The proportions are different | The focused field stays visible while typing | Read that table as the case list. Every row is a behaviour rather than a look, which is what keeps this axis from collapsing into image comparison. ## Designing the case 1. Start full-screen and drive the flow to a state with **unsaved work** on screen. 2. Enter split-screen at the widest supported fraction, wait for a readiness signal, and assert the in-progress state survived — this is the same restore path a rotation exercises, reached through a different door. 3. Shrink towards the narrowest supported fraction in two or three steps, waiting each time, and assert that the primary control is reachable and that no label is drawn cut off. 4. Hand the focus to the other application and take it back, then assert your app neither acted on input it never received nor lost what was on screen. 5. Leave split-screen and confirm the flow still completes and submits the right values. ## Visible but not focused This is the state with no equivalent in a single-window run, and it is where the subtle defects live. A visible-but-unfocused app should keep drawing, keep its data, and keep any timer the user can see. What it must not do is behave as though the user is looking at it and typing into it: pop a transient message that will be missed, start an attention-grabbing animation, count the time as engaged usage, or assume the on-screen keyboard belongs to it. The opposite error is just as real — code that pauses everything the instant focus is lost will freeze the video a user deliberately put beside their notes. ## Telling a split-screen defect from a narrow-width one Most of what a first split-screen run surfaces is not split-screen-specific at all; it is a layout nobody ever tried at that width. There is a cheap discriminator: reproduce the same width full-screen on a smaller form factor. If the layout breaks there too, it is a width defect, and it belongs in the narrow-geometry case where it runs cheaper and reads clearer. What is genuinely specific to this arrangement is behavioural: - a size that changes while the screen is live, rather than being settled when it was built; - another application holding the input focus or a shared hardware resource; - transitions that arrive while your app is still fully visible rather than hidden. ## Is the axis worth carrying? Supporting split-screen is a product commitment with a recurring test cost, so it deserves to be decided rather than drifted into. It pays where two apps side by side is a real user story — reference material beside a form, a conversation beside a document, a video beside notes — and on any flow that holds unsaved work or a fixed-height header and footer. Elsewhere, one smoke-level check per screen family is enough. The opposite choice is equally legitimate: declare the arrangement unsupported, and then test that declaration, because it is usually made per screen, one screen opting back in is the classic miss, and larger form factors may resize the window regardless of what the product asked for.

  • How do you tell a genuine split-screen defect from what is really a narrow-width layout defect?
    Reproduce the same width full-screen on a smaller form factor. If the layout breaks there too it is a width defect, and it belongs in the narrow-geometry case where it runs cheaper and reads clearer. What is genuinely split-screen-only is behavioural: a size that changes while the screen is live, another app holding focus or a shared hardware resource, and transitions that arrive while your app is still fully visible.
  • A product declares it does not support split-screen. What is left to test?
    That the declaration holds. It is usually made per screen, so one screen opting back in is the classic miss, and larger form factors may resize the window regardless. Check that the app either fills its window properly or shows a deliberate message rather than drawing a broken half-width layout, and that nothing crashes when a user tries it anyway.
  • Which assertion would you avoid entirely on this axis, and why?
    A whole-screen image comparison. Every supported fraction produces a legitimately different arrangement, so an image check either needs a stored copy per fraction — which then flags every intentional layout change — or it is run so loosely that it catches nothing. Assert reachability, content and truncation instead: those are the behaviours the axis exists to protect.

It is the difference between a private office and half a shared desk: the work still fits, but only if you never assumed the whole desk was yours or that nobody would move the divider.

saying these in an interview costs you the question

  • Assumes the window is always the full screen width
  • Treats a resize as a fresh launch of the flow
  • Checks the narrow layout but never resizes mid-flow
  • Assumes a visible app also holds the input focus
  • Screenshots the split layout instead of asserting reachability
  • Applies the split-screen axis to every case in the suite