F10 · Foundation Session 10
A screen for the floor
The operator surface is where the plant's data is born. If it is slow, small or loses an entry when the wi-fi drops, the data is wrong before anyone sees it. This element builds the operator screen for one real task, to the rules the floor needs.
8 min5 chapters≈ 1¾ hours3 hands-on exercises12-question assessment · 80% passes
By the end of this chapter you can
- Say why the operator surface decides the quality of all the data above it.
- Describe how this element is scored.
- Know the task you will build: the first-off check on Line 3.
Where data is born
Every chart the manager reads and every decision the supervisor makes starts with an operator entering something: a measurement, a reason for a stop, a tick on a checklist. On paper, a smudged number is caught later, if at all. On a screen, a mis-tap is caught never, unless the screen was designed so the mis-tap cannot happen.
Session 10 starts Unit 3, the three surfaces. The operator surface comes first because it feeds the other two. The supervisor review and the manager view (Session 11) can only be as good as what the operator surface records.
The task you will build
Acme's press shop in Cleveland (an illustrative plant used throughout the course) checks the first bracket off Line 3 after every die change. Today it is a paper sheet on a clipboard: part number, three measurements, pass or fail, initials. You will build the screen that replaces it: scan the press, see the part and its limits, enter three numbers with a keypad, submit. It must work with gloves, at arm's length, and in the dead spot behind Press 04 where the wi-fi drops.
How it is scored
The element is complete when you have opened every chapter and taken the assessment, and passed at 80% or more. You can retake the assessment.
Knowledge check
Why is the operator surface built before the supervisor and manager surfaces?
Chapter 1 · Gloves, thumbs and one task
Touch first
A finger is not a mouse pointer, a gloved finger even less so. Size and space every target for the hand that will use it, and give each screen one job.
30 min44 px minimum64 px for gloves1 task per screen
By the end of this chapter you can
- Size and space tap targets for bare and gloved hands, and say where each number comes from.
- Use Fitts's law to explain why small, distant targets cause mis-taps.
- Lay out an operator screen with one task, the right keypad, and nothing that needs a hover.
Why 44 pixels
Apple's design guidance gives 44 by 44 points as the minimum size for a control people tap [1]. Android's accessibility guidance asks for 48 by 48 density-independent pixels [2]. The web's accessibility standard, WCAG 2.2, sets 24 by 24 CSS pixels as the minimum at level AA and 44 by 44 at the stricter level AAA [3] [4]. On a phone, 44 CSS pixels is about 7 millimetres. A bare adult fingertip is wider than that, so even 44 is a minimum, not a target [5].
Gloves change the numbers. Many work gloves do not register on a capacitive touchscreen at all; touchscreen-compatible gloves do, but they make the contact patch bigger and less precise. The course rule: 44 px minimum everywhere, 64 px for the main actions on any screen used with gloves, and at least 8 px of empty space between targets so a wide contact does not hit two at once. Test with the gloves your operators actually wear.
Fitts's law
In 1954 Paul Fitts showed that the time to hit a target grows with the distance to it and shrinks with its width, following a logarithm of their ratio [6]. The modern form used in interface design is the index of difficulty, log2(D ÷ W + 1), measured in bits. Each extra bit adds roughly the same time. Halve a target's width and you add about a bit; and with time pressure, people trade speed for accuracy, so the miss rate climbs.
| Target width | Index of difficulty at 300 px reach | What it is |
|---|---|---|
| 16 px | log2(300 ÷ 16 + 1) = 4.30 bits | A desktop icon or a text link |
| 44 px | log2(300 ÷ 44 + 1) = 2.97 bits | The minimum for touch |
| 64 px | log2(300 ÷ 64 + 1) = 2.51 bits | A gloved main action |
| Full width (328 px on a 360 px phone) | log2(300 ÷ 328 + 1) = 0.94 bits | The Submit button: nearly impossible to miss |
Two design rules follow. Make the action people take most often the biggest target on the screen. And put it where the thumb already is: at the bottom, full width, on a phone or a tablet held in one hand.
One task per screen
An operator mid-shift gets interrupted. A screen with one job, named in plain words at the top, can be picked up again in a second. A screen with six tabs and a sidebar cannot. The operator surface is not a smaller copy of the manager view; it is a different tool.
| Do | Do not | Why |
|---|---|---|
| Show line, machine, shift and who is signed in at the top | Hide context in a menu | A shared tablet must never record under the wrong person or press |
| Pick the machine by scanning its QR label | Make the operator choose from a list of 40 presses | A scan cannot pick the wrong row |
Use inputmode="decimal" for measurements | Show a full keyboard for a number | The number keypad has big keys and no letters to hit by mistake [7] |
| Show the limits beside each field | Make the operator remember the tolerance | The decision is on the screen, not in someone's head |
| Let the server decide pass or fail from the limits | Trust a pass or fail sent from the browser | Anyone can change what a browser sends; the rule lives on the server |
| Use text and shape as well as colour for status | Rely on red and green alone | About 1 in 12 men has a colour vision deficiency [8] |
| Make every action a visible button | Hide actions behind hover or long-press | There is no hover on a touchscreen |
| Keep fields at 16 px or larger | Use 13 px inputs | iPhones zoom the page into any smaller field, and the layout jumps |
<label for="flange">Flange height (mm) <small>limits 24.80 to 25.20</small></label>
<input id="flange" name="flange_mm" inputmode="decimal" autocomplete="off" required
style="font-size: 20px; min-height: 64px; width: 100%">
<button type="submit" style="min-height: 64px; width: 100%">Submit check</button>Knowledge check
A screen is used by operators wearing touchscreen gloves. What size should its main action be under the course rule?
Knowledge check
According to Fitts's law, which change makes a target easiest to hit quickly?
Knowledge check
Why does the server, not the browser, decide whether a first-off check passes?
You need: Your platform on a phone or tablet; the work gloves your operators wear; Chrome on a laptop
Measure your operator screen against the rules in this chapter, with real gloves.
Outcome: A measured list of targets, a glove mis-tap count, and the fixes to make.
References
- Apple Human Interface Guidelines: Accessibility. https://developer.apple.com/design/human-interface-guidelines/accessibility
- Android Developers: Make apps more accessible. https://developer.android.com/guide/topics/ui/accessibility/apps
- W3C: Understanding WCAG 2.2 Success Criterion 2.5.8 Target Size (Minimum). https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html
- W3C: Understanding WCAG 2.2 Success Criterion 2.5.5 Target Size (Enhanced). https://www.w3.org/WAI/WCAG22/Understanding/target-size-enhanced.html
- Nielsen Norman Group: Touch targets on touchscreens. https://www.nngroup.com/articles/touch-target-size/
- Fitts, P. M. (1954). The information capacity of the human motor system in controlling the amplitude of movement. Journal of Experimental Psychology 47(6), 381–391. https://doi.org/10.1037/h0055392
- MDN Web Docs: inputmode. https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inputmode
- National Eye Institute: Color blindness. https://www.nei.nih.gov/learn-about-eye-health/eye-conditions-and-diseases/color-blindness
Chapter 2 · Size, contrast and calm
Readable at arm's length
An operator reads the screen from where they stand, not from where a designer sits. Size text for the distance, keep contrast high, and save colour for what is abnormal.
22 min≈ 4.5 mm letters at 0.7 m4.5:1 contrast minimumGrey until abnormal
By the end of this chapter you can
- Work out how tall text must be for a given viewing distance.
- Check contrast against the WCAG ratios, and know when to go beyond them.
- Apply the high-performance HMI idea: a calm screen where only the abnormal stands out.
Size for the distance
How readable a letter is depends on the angle it fills at the eye, not on its size in pixels. Human factors standards for workstations express character height as a visual angle, with roughly 16 minutes of arc as a minimum and 20 to 22 minutes preferred for comfortable reading [1]. A minute of arc is one sixtieth of a degree.
At 22 minutes of arc the height you need is about the distance divided by 156. That gives the numbers below, for capital letters. Lower-case letters are smaller than capitals, so this is the floor for anything an operator must read, not a target for headings.
| Where the screen is | Distance | Capital height (22′) | In practice |
|---|---|---|---|
| Phone in the hand | 0.35 m | 2.2 mm | 16–17 px body text on most phones |
| Tablet at arm's length on a stand | 0.7 m | 4.5 mm | Body text about 22–24 px; key numbers 40 px or more |
| Screen on a machine guard | 1.5 m | 9.6 mm | Only the status and one or two numbers |
| Screen across the aisle | 3 m | 19 mm | A status board, not a form |
Contrast
WCAG 2.2 requires a contrast ratio of at least 4.5 to 1 between normal text and its background, and 3 to 1 for large text [2]. The enhanced level asks for 7 to 1 [3]. On the floor, glare, dust on the screen and safety glasses all lower the contrast the eye actually receives, so aim for the enhanced level on the operator surface. Thin grey text on white is the most common failure; it looks elegant in an office and disappears under a skylight.
Calm until abnormal
Control-room practice learned this the hard way. Screens covered in bright colours and moving graphics make it harder, not easier, to spot the one value that matters. The ISA-101 standard for HMI design and the high-performance HMI practice behind it recommend muted, mostly grey screens where colour is reserved for abnormal conditions, so that colour always means something [4] [5]. The same holds for a first-off check: the screen is quiet while values are inside the limits, and a value outside them is the only thing in colour, with a word that says what is wrong.
| Element | Normal | Abnormal |
|---|---|---|
| A measurement inside limits | Dark text on a light grey panel | – |
| A measurement outside limits | – | Amber panel, bold value and the words 'Above limit 25.20' |
| The check result | 'Pass' in plain text | 'Fail: flange height' with an icon, never colour alone |
| Sync status | 'All sent' in small grey text | '3 waiting to send' in amber, larger |
Knowledge check
A tablet is mounted 0.7 m from where the operator stands. Using the 22-minute rule, about how tall must a capital letter be?
Knowledge check
On a high-performance operator screen, when is bright colour used?
Knowledge check
Text passes WCAG's 4.5:1 contrast in the office. Why aim higher on the floor?
You need: The tablet or phone that will be used; a ruler; the place it will be mounted
Check that the operator screen is readable where it will actually be used.
Outcome: Measured letter heights against the distance rule, and a screen that names abnormal values in words.
References
- Human Factors and Ergonomics Society: ANSI/HFES 100-2007, Human Factors Engineering of Computer Workstations. https://www.hfes.org/
- W3C: Understanding WCAG 2.2 Success Criterion 1.4.3 Contrast (Minimum). https://www.w3.org/WAI/WCAG22/Understanding/contrast-minimum.html
- W3C: Understanding WCAG 2.2 Success Criterion 1.4.6 Contrast (Enhanced). https://www.w3.org/WAI/WCAG22/Understanding/contrast-enhanced.html
- ISA: ISA101, Human-Machine Interfaces standards committee. https://www.isa.org/standards-and-publications/isa-standards/isa-standards-committees/isa101
- Abnormal Situation Management (ASM) Consortium: effective operator display design guidelines. https://www.asmconsortium.net/
Chapter 3 · No lost entries
Working when the network drops
Every plant has a dead spot. An operator who loses an entry once will go back to paper. Save every entry on the device first, give it an id made there, and let the server accept it exactly once.
32 min1 outbox1 id per entry0 lost or doubled records
By the end of this chapter you can
- Explain the outbox pattern on the device and why it uses an id made on the device.
- Make the server accept a retried entry exactly once.
- Show the operator what is waiting to send, and handle a refusal without losing the entry.
- Test the screen offline with Chrome DevTools and Playwright.
What goes wrong without it
A plain web form sends the entry when the operator taps Submit. If the network is down, the browser shows an error and the entry is gone, or the operator taps again and again. Worse is the half-failure: the entry reaches the server, but the reply is lost in a dead spot, so the tablet thinks it failed and sends it again. Now the check is recorded twice, and the first-pass yield is wrong.
The outbox pattern
The fix is the same pattern the platform uses for email and texts (write first, then send), applied on the device:
- When the operator taps Submit, the screen creates an id for the entry on the device, with
crypto.randomUUID()[1], and saves the entry with its id in an outbox in the browser's IndexedDB storage, which survives a reload or a closed tab [2]. - The screen confirms at once: Saved on this tablet. The operator moves on.
- A small sender loop tries to post each outbox entry to the server. When the server replies saved, the entry is removed from the outbox.
- If the post fails because of the network, the entry stays and the loop tries again later, waiting a little longer each time (backoff).
- The server inserts the entry using the id as the primary key and ignores a second insert with the same id. A retry can never create a second row.
-- The server side: the id comes from the tablet; a second arrival with the same id changes nothing.
insert into first_off_checks (id, line, press, part, hole_mm, flange_mm, burr_ok, entered_by, entered_at)
values ($1, $2, $3, $4, $5, $6, $7, auth.uid(), $8)
on conflict (id) do nothing;Postgres's on conflict do nothing clause makes the insert safe to repeat [3]. Payment providers use the same idea, called an idempotency key, so that a retried payment is never charged twice [4]. The server still checks everything else as usual: the operator is signed in, the matrix lets their role write first-off checks, and the values are in range. A retried entry that is refused is refused every time.
Tell the operator the truth
The browser's navigator.onLine says only whether the device has a network connection, not whether the server can be reached [5]. So do not show 'online' from it. Show what matters: how many entries are waiting in the outbox. All sent in small grey text when it is empty; 3 waiting to send in amber when it is not.
A refusal is different from a network failure. If the server says the value is out of range or the operator's role cannot write this record, retrying will not help. Keep the entry, show it to the operator with the server's reason in plain words, and let them fix or discard it. Nothing in the outbox is ever deleted silently.
Load the screen with no network
An outbox does not help if the screen itself cannot load. A service worker is a small script the browser runs alongside the page; it can keep a copy of the screen's files and serve them when the network is down [6]. Cache the operator screen's code and the reference data it needs (the parts and their limits for this line), and refresh them when the network is back. Keep it small: the operator surface needs one or two screens offline, not the whole platform.
Test it offline
| Where | How | What to check |
|---|---|---|
| Chrome on a laptop | DevTools (F12), Network panel, change the throttling menu from No throttling to Offline [7] | Submit three checks; the pill shows 3 waiting; switch back; it shows All sent; the database has three rows |
| Playwright, in CI | context.setOffline(true), submit, then context.setOffline(false) [8] | The same, as an automated test that runs on every pull request |
| On the floor | Walk to the dead spot with the real tablet | The entry is kept and sent when you walk back |
test("a first-off check entered offline is sent once when the network returns", async ({ page, context }) => {
await page.goto("/operator/first-off?press=L3-P02");
await context.setOffline(true);
await page.getByLabel("Flange height (mm)").fill("25.02");
// ... fill the other fields ...
await page.getByRole("button", { name: "Submit check" }).click();
await expect(page.getByText("1 waiting to send")).toBeVisible();
await context.setOffline(false);
await expect(page.getByText("All sent")).toBeVisible();
expect(await countRows("first_off_checks", { press: "L3-P02" })).toBe(1); // exactly one, never two
});Knowledge check
The server saved an entry but the reply was lost, so the tablet sends it again. What stops a second record?
Knowledge check
The server refuses an outbox entry because the value is out of range. What should the screen do?
Knowledge check
Why not show 'Online' from navigator.onLine?
You need: Your AI coding agent; Chrome; the real tablet
Have your agent add the outbox to your operator screen, prove it with a test, then prove it on the floor.
Outcome: An operator screen that keeps every entry through a network drop and records it exactly once, proved by a test and on the floor.
References
- MDN Web Docs: Crypto.randomUUID(). https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID
- MDN Web Docs: IndexedDB API. https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
- PostgreSQL documentation: INSERT (ON CONFLICT clause). https://www.postgresql.org/docs/current/sql-insert.html
- Stripe Docs: Idempotent requests. https://docs.stripe.com/api/idempotent_requests
- MDN Web Docs: Navigator.onLine. https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine
- MDN Web Docs: Service Worker API. https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API
- Chrome for Developers: Network features reference (DevTools). https://developer.chrome.com/docs/devtools/network/reference
- Playwright: BrowserContext.setOffline. https://playwright.dev/docs/api/class-browsercontext#browser-context-set-offline
Chapter 4 · 12 questions · 80% passes
Final assessment
Twelve questions across the element. Score 80% (10 of 12) to pass. Your LMS records your score and each answer; you can review the chapters and try again.
15 min12 questions≈ 15 minutesRetake allowed
Your result
CivOps AI Academy
The Operator Surface: Touch First, Readable, and Working Offline
Element F10 complete · Learner
Your LMS records this completion. For the CivOps Foundation certificate, finish the Foundation Course at https://civops.io/learn.